Guest User

Untitled

a guest
May 15th, 2018
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. '!Manufacture_Form_Permit:
  2.  
  3. '!Manufacture_Form_Permit:
  4.  
  5. 'Option Declare
  6. 'Option Public
  7. Use "RequestNumber"
  8. Use "lsError"
  9. Use "SelectDataFromMarketing"
  10. Use "ManufactureCommon"
  11.  
  12.  
  13. %INCLUDE "x:\proLOG_CheckServer.lss"
  14.  
  15.  
  16.  
  17. Const nline = |
  18. |
  19.  
  20.  
  21.  
  22. 'Dim doc_ku As Notesdocument ' КУ, который соответствует текущему документу ПУ
  23.  
  24.  
  25. 'Dim db_mark As NotesDatabase
  26.  
  27. 'Dim db_start As NotesDatabase
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.  
  71.  
  72.  
  73. Dim doc_cred As NotesDocument
  74. Dim doc_client As Notesdocument ' Клиент
  75. Dim doc_provider As NotesDocument ' Поставщик
  76. Dim view_cred As NotesView
  77. Dim doc_ku As NotesDocument
  78. Dim view_pu As NotesView                        ' разрешенные ПУ по UID КУ
  79. Dim view_partner As NotesView
  80. Dim view_contract As NotesView
  81. Dim view_GK As NotesView
  82. Dim doc_group As NotesDocument
  83. Dim doc_comp As NotesDocument
  84. Dim doc_ex As NotesDocument
  85. Dim view_ex As NotesView
  86. Dim checkok As Integer
  87. Dim check As Variant
  88. Dim msg As String
  89. Dim errmsg As String
  90. Dim con_num As String
  91. Dim RequestCauseMessage$, RequestCauseInput$ ' для причины спец. разрешения
  92. Dim sumGross_pu As Single
  93.  
  94. Sub PermitKU
  95.     If CatchErrors Then On Error Goto catch
  96.     If CheckServer <> 1 Then Exit Sub
  97.    
  98.     Call UIDoc_cur.Save
  99.    
  100.     If InitDbAndViews = 0 Then Exit Sub
  101.    
  102.     ' проверка откуда брать параметры
  103.     Call GetCheck("ControlPermitKU")
  104.    
  105. ' Код экспедитора
  106.     If IsNeedToCheck("ExecutorCode") = 1 Then
  107.         Print "Проверяем код экспедитора"
  108.         If doc_cur.ExecutorCode(0) = "" Then
  109.             Messagebox "Не найден индивидуальный код исполнителя сделки. Обратитесь к администратору."
  110.             Exit Sub
  111.         End If
  112.     End If
  113. ' Реквизиты договора
  114.     Call CheckContract(0)
  115. ' Статус Клиента
  116.     Call CheckStatus(doc_client, 0)
  117. ' Отсрочка платежа
  118.     Call CheckPayDelay("KU", 0)
  119. ' Текущий Кредит и Кредитный лимит
  120.     Call CheckCredit(0)
  121. ' Финансовые реквизиты
  122.     Call CheckFinInfo(doc_client, 0)
  123. ' Тарифное Приложение для Внутренних перевозок
  124.     Call CheckTariffForInner(0)
  125.    
  126. ' Выводим результаты
  127.     If errmsg = "" Then
  128.         ' Разрешаем
  129.         msg = |Сделка разрешена системой | + nline + |Пользователь: | + Session.CommonUserName + nline + "Дата и время: " + Format(Now, "dd.mm.yyyy hh:nn") + nline + msg
  130.        
  131.         ' Выставляем в документе КУ флаг разрешения КУ (IsPermit)
  132.         doc_cur.IsPermit = "1"
  133.         doc_cur.PermitDate = Now
  134.        
  135. '       doc_cur.ContractNumber = con_num
  136.        
  137.         ' Добавляем стоимость КУ < SumGrossBC> к «Локальному» Текущему кредиту в документе Текущего кредита
  138.         doc_cred.LocalCredit = doc_cred.LocalCredit(0) + doc_cur.SumGrossBC(0)
  139.         ' Сохраняем документ Текущего кредита в PostSave формы
  140.        
  141.         ' Нумеруем документ
  142.         doc_cur.RequestNumber = SetNumber(doc_cur)
  143.         ' проверяем нужна ли связь с Запросом
  144.         If doc_cur.UIDRequestMarketing(0) <> "" Then PopulateMarketingDoc
  145.     Else
  146.         ' запрещаем
  147.         msg = |Сделка запрещена системой.| + nline + |Пользователь: | + Session.CommonUserName + nline + "Дата и время: " + Format(Now, "dd.mm.yyyy hh:nn") + nline + errmsg
  148.        
  149.         'Выставляем в документе КУ флаг разрешения КУ (IsPermit)
  150.         doc_cur.IsPermit = "-1"
  151.     End If
  152.    
  153.     'Записываем msg в поле истории разрешения услуги (PermitHistory)
  154.     doc_cur.PermitHistory = msg
  155.    
  156.     'Call doc_cur.Save(True, True)
  157.    
  158.     'Call UIDoc_cur.Refresh
  159.     'Call UIDoc_cur.Reload
  160.     'Messagebox msg, 0, "Разрешение исполнения КУ"
  161.     If doc_cur.IsPermit(0) = "1" Then
  162.         Call doc_cur.Save(True, True)
  163.         UpdateAddOpAndAgentAndOwnKU
  164.         ReopenDocument
  165.     Else
  166.         UIDoc_cur.Refresh
  167.         Messagebox msg, 0, "Продолжить заполнение заявки"
  168.     End If
  169.     Exit Sub   
  170. catch:
  171.     If Err<>0 Then
  172.         doc_cur.IsPermit = "-1"
  173.         ErrorDlg "Продолжить заполнение заявки"
  174.     End If
  175.     Exit Sub
  176. End Sub
  177. Sub PermitKU_Spec
  178.     If CatchErrors Then On Error Goto catch
  179.    
  180.     If CheckServer <> 1 Then Exit Sub
  181.    
  182.     Call UIDoc_cur.Save
  183.    
  184.     If InitDbAndViews = 0 Then Exit Sub
  185.    
  186.     ' проверка откуда брать параметры
  187.     Call GetCheck("ControlPermitKU")
  188.    
  189. ' код экспедитора
  190.     If IsNeedToCheck("ExecutorCode") = 1 Then
  191.         Print "Проверяем код экспедитора"
  192.         If doc_cur.ExecutorCode(0) = "" Then
  193.             Messagebox "Не найден индивидуальный код исполнителя сделки. Обратитесь к администратору."
  194.             Exit Sub
  195.         End If
  196.     End If
  197. ' Реквизиты договора
  198.     Call CheckContract(1)
  199. ' Статус Клиента
  200.     Call CheckStatus(doc_client, 1)
  201. ' Отсрочка платежа  
  202.     Call CheckPayDelay("KU", 1)
  203. ' Текущий Кредит и Кредитный лимит 
  204.     Call CheckCredit(1)
  205. ' Финансовые реквизиты  
  206.     Call CheckFinInfo(doc_client, 1)
  207. ' Тарифное Приложение для Внутренних перевозок
  208.     Call CheckTariffForInner(1)
  209. ' Сроки отсрочки
  210. 'msg = msg & checkPayment  
  211.    
  212. ' Выводим запросы и результаты
  213.     If Messagebox("Вы подали запрос на разрешение исполнения Комплексной услуги при следующих условиях: " & nline & msg & nline & nline & "Продолжить?", 4+32, "Разрешение исполнения КУ") <> 6 Then
  214.         Exit Sub
  215.     End If
  216.    
  217.     If Messagebox("Операцию разрешения исполнения Комплексной услуги будет невозможно отменить. Продолжить?", 4+32, "Разрешение исполнения КУ") <> 6 Then
  218.         Exit Sub
  219.     End If
  220.    
  221.     ' Запрашиваем причину спец. разрешения сделки
  222.     Call InputRequestCauseInput
  223.    
  224.     'Выставляем в документе КУ флаг разрешения КУ (IsPermit)
  225.     doc_cur.IsPermit = "1"
  226.    
  227.    
  228.     If RequestCauseMessage <> "" Then
  229.         msg = |Заявка разрешена пользователем | & Session.CommonUserName & nline & "Дата и время: " & Format(Now, "dd.mm.yyyy hh:nn") & nline & |Причина специального разрешения сделки: | & RequestCauseInput & nline & msg
  230.        
  231.         Call SendToRM(RequestCauseMessage, RequestCauseInput)
  232.     Else
  233.         msg = |Заявка разрешена пользователем | & Session.CommonUserName & nline & "Дата и время: " & Format(Now, "dd.mm.yyyy hh:nn") & nline & msg
  234.     End If
  235.     'Записываем msg в поле истории разрешения услуги (PermitHistory)
  236.     doc_cur.PermitHistory = msg
  237.    
  238.     doc_cur.RequestNumber = SetNumber(doc_cur)
  239.    
  240.     doc_cur.PermitSpec = "1"    ' флаг спец. разрешения
  241.    
  242.     ' проверяем нужна ли связь с Запросом
  243.     If doc_cur.UIDRequestMarketing(0) <> "" Then PopulateMarketingDoc
  244.    
  245.    
  246.     doc_cur.RequestCauseInput = RequestCauseInput
  247.     doc_cur.RequestCauseMessage = RequestCauseMessage
  248.    
  249.     doc_cur.PermitDate = Now
  250.     doc_cur.PermitName = Session.CommonUserName
  251.    
  252.     Call doc_cur.Save(True, True)
  253.    
  254.     'Добавляем стоимость КУ <SumGrossBC> к «Локальному» Текущему кредиту в документе Текущего кредита
  255.     doc_cred.LocalCredit = doc_cred.LocalCredit(0) + doc_cur.SumGrossBC(0)
  256.     Call doc_cred.save(True, False)
  257.    
  258.     If doc_cur.IsPermit(0)="1" Then UpdateAddOpAndAgentAndOwnKU
  259.  
  260.  
  261.     If doc_cur.Executor(0) = session.UserName Then
  262.         Messagebox msg, 0, "Специальное разрешение заявки клиента"
  263.         ReopenDocument
  264.     Else
  265.         Messagebox msg, 0, "Специальное разрешение заявки клиента"
  266.         doc_cur.SaveOptions="0"
  267.         UIDoc_cur.Close True
  268.     End If
  269.    
  270.    
  271.     Exit Sub   
  272. catch:
  273.     If Err<>0 Then
  274.         doc_cur.IsPermit = "-1"
  275.         ErrorDlg "Специальное разрешение заявки клиента"
  276.     End If
  277.    
  278.     Exit Sub
  279. End Sub
  280. Function checkPayment
  281.     If CatchErrors Then On Error Goto catch
  282.    
  283.     Dim tmpVar As Variant
  284.     Dim db_start As New NotesDatabase("", "")
  285.     Dim view As NotesView
  286.    
  287.     checkPayment = ""
  288.     tmpVar = Evaluate({
  289. @if(Extension=""; @Return(""); 1);
  290. REM "Получаем настойку для Отсрочки из Старт базы";
  291. extensionTmp :=@DbLookup("":NoCache; srv:db_start; "CompanyByNameF"; CompanyNameF; "ListOfExtensionFilled");
  292.    
  293. @If(@IsError(extensionTmp); @Return(@Prompt([Ok];"Границы отсрочки: отсрочка не найдена (2)";"Отсрочка \"" + Extension + "\" для " + CompanyName + " не найдена"));@True);
  294.    
  295. ListOfExtension := @Left(extensionTmp; "^");
  296.    
  297. indx := @Member(Extension; ListOfExtension);
  298. @If(indx = 0; @Return(@Prompt([Ok]; "Границы отсрочки: отсрочка не найдена (3)"; "Отсрочка \"" + Extension + "\" для " + CompanyName + " не найдена" )); 1);
  299.    
  300. @If(indx <= @Elements(extensionTmp); @True; @Return(""));
  301.  
  302. processList := @Explode(extensionTmp[indx]; "^");
  303. PUcheck := @Subset(@Subset(processList; 2); -1);
  304.  
  305. Rem "проверяем установлена ли просрочка для Подрядчика";
  306. @if(@Contains(PUcheck; "0"); "1"; @Return(""));
  307.  
  308. processList := @Explode(extensionTmp[indx]; "^");
  309. min_max := @Subset(@Subset(processList; 4); -1);
  310. min_max := min_max + "," + @Subset(@Subset(processList; 5); -1);
  311. min_max}, doc_cur)
  312.    
  313.     If Not Isarray(tmpVar) Then Exit Function
  314.    
  315.     If Not Isnumeric(doc_cur.PaymentDelay(0)) Then
  316.         'Messagebox {Необходимо ввести КОРРЕКТНОЕ значение в поле "Количество дней отсрочки платежа"}, 16, ""
  317.         Exit Function
  318.     End If
  319.    
  320.     If tmpVar(0) = "" Then Exit Function
  321.    
  322.     tmpVar = Split(tmpVar(0), ",")
  323.     If Isnumeric(tmpVar(0)) Then
  324.         If Not doc_cur.PaymentDelay(0) => Cint(tmpVar(0)) Then
  325.             checkPayment = Chr(10) & {"Количество дней отсрочки платежа" выходят за границы установленные для Компании "} & doc_cur.CompanyName(0) & Chr(10) & {"Количество дней отсрочки платежа" должно быть больше } & tmpVar(0) & { дней.}
  326.             Exit Function      
  327.         End If
  328.     End If
  329.    
  330.     If Isnumeric(tmpVar(1)) Then
  331.         If Not doc_cur.PaymentDelay(0) <= Cint(tmpVar(1)) Then
  332.             checkPayment = Chr(10) & {"Количество дней отсрочки платежа" выходят за границы установленные для Компании "} & doc_cur.CompanyName(0) & Chr(10) & {"Количество дней отсрочки платежа" не должно превышать } & tmpVar(1) & { дней.}
  333.             Exit Function
  334.         End If
  335.     End If
  336.    
  337.     checkPayment = ""
  338. catch: rethrow
  339. End Function
  340. Function PopulateMarketingDoc()
  341.     If CatchErrors Then On Error Goto catch
  342.    
  343.     Dim db_mar As NotesDatabase
  344.     Dim mar_doc As NotesDocument
  345.     Dim t As Variant
  346.    
  347.     PopulateMarketingDoc = True
  348.    
  349.     Set db_mar=GetDatabaseE(db_cur.server, ex375 + "\Marketing_G.nsf")
  350.     Set mar_doc = GetDocument(db_mar, "RequestByUIDRequest", doc_cur.UIDRequestMarketing(0))
  351.     assert Not mar_doc Is Nothing, "Запрос клиента не найден: " & doc_cur.UIDRequestMarketing(0)
  352.    
  353.     If mar_doc.LockHolders(0) <> "" Then
  354.         t="Заявка готова к исполнению, но Запрос №" & mar_doc.RequestNumber(0) & _
  355.         " в данный момент редактируется пользователем, и поэтому не будет изменен. Выберите в запросе эту заявку №" _
  356.         & doc_cur.RequestNumber(0) & " вручную."
  357.         Messagebox t, 64, "Отметить запрос клиента"
  358.        
  359.         doc_cur.PermitHistoryPre=doc_cur.PermitHistoryPre(0) & t & Chr(13)
  360.        
  361.         PopulateMarketingDoc = False
  362.     End If
  363.    
  364.     mar_Doc.UIDRequestMnf = doc_cur.UIDRequest(0)
  365.     mar_Doc.RequestMnfNumber = doc_cur.RequestNumber(0)
  366.     mar_Doc.Status8 = "Получена заявка"
  367.     mar_Doc.StatusDate8 = Today        
  368.     t = Evaluate({@If (status9 !=""; "9. "+Status9;
  369.                 status8 !=""; "8. "+Status8;
  370.                 status7 !=""; "7. "+Status7;
  371.                 status6 !=""; "6. "+Status6;
  372.                 status5 !=""; "5. "+Status5;
  373.                 status4 !=""; "4. "+Status4;
  374.                 status3 !=""; "3. "+Status3;
  375.                 status2 !=""; "2. "+Status2; "1. Новый")}, mar_doc)
  376.     mar_doc.State = t(0)
  377.    
  378.     mar_Doc.UIDOrder = doc_cur.UIDRequest(0)
  379.     mar_Doc.OrdersList = doc_cur.RequestNumber(0)
  380.     Call mar_doc.save(True, False)
  381.    
  382. catch:rethrow
  383. End Function
  384. Sub PermitPU
  385.     If CatchErrors Then On Error Goto catch
  386.    
  387.     If CheckServer <> 1 Then Exit Sub
  388.     Print "Begin2" 
  389.    
  390.     UIDoc_cur.EditMode = True
  391.     Call UIDoc_cur.Save
  392.    
  393.     If InitDbAndViews = 0 Then
  394.         Exit Sub
  395.     End If
  396.    
  397.     ' проверка откуда брать параметры
  398.     Call GetCheck("ControlPermitPU")
  399.    
  400. ' Реквизиты договора
  401.     Call CheckContract(0)
  402. ' Сатус Поставщика
  403.     Call CheckStatus(doc_provider, 0)
  404.    
  405.     msg = msg + nline + |Стоимость сделки: | + Cstr(doc_cur.SumNet(0)) + | | + doc_cur.CurrencyNet(0)
  406.     msg = msg + nline + |Стоимость сделки в БВ: | + Format$(doc_cur.SumNetBC(0), "Standard") + | | + doc_cur.CurrencyBC(0)
  407.    
  408. ' Страховка
  409.     Call CheckInsurance(0)
  410. ' Отсрочка платежа
  411.     Call CheckPayDelay("PU", 0)
  412. ' Рентабельность
  413.     Call CheckRent(0)
  414.    
  415. ' Автоматическое увеличение суммы брутто в КУ
  416. 'Krupenin 24/4/07       Call CheckIsMayUpSumGross(0)
  417.    
  418. ' Проверяем, залочена ли КУ
  419. 'Krupenin 24/4/07       If IsLockedKU = 1 Then
  420. 'Krupenin 24/4/07           Exit Sub
  421. 'Krupenin 24/4/07       End If
  422.    
  423. ' Финансовые реквизиты  
  424.     Call CheckFinInfo(doc_provider, 0) 
  425.    
  426.     If errmsg = "" Then
  427.         ' Стоимость груза
  428.         Call CheckGoodCost
  429.         msg = |Сделка разрешена системой | + nline + |Пользователь: | + Session.CommonUserName + nline + "Дата и время: " + Format(Now, "dd.mm.yyyy hh:nn") + nline + msg
  430.        
  431.         'Выставляем в документе ПУ флаг разрешения ПУ (IsPermit)
  432.         doc_cur.IsPermit = "1"
  433.         doc_cur.PermitDate = Now
  434.        
  435. '       doc_cur.ContractNumber = con_num
  436.        
  437.         If doc_cur.Form(0) = "SimpleService" Then
  438.             doc_cur.RequestNumber_S = SetNumber(doc_cur)
  439.         End If
  440.        
  441.         ' Увеличиваем сумму брутто в КУ
  442. 'Krupenin 24/4/07       Call UpSumGross
  443.        
  444.         Call CreateKU ' продолжение сделки
  445.     Else
  446.         ' иначе (errmsg <> “”)
  447.         doc_cur.IsPermit = "-1"
  448.         msg = |Сделка запрещена системой.| + nline + |Пользователь: | + Session.CommonUserName + nline + "Дата и время: " + Format(Now, "dd.mm.yyyy hh:nn") + nline + errmsg
  449.     End If
  450.    
  451.     'Записываем msg в поле истории разрешения услуги (PermitHistory)
  452.     doc_cur.PermitHistory = msg
  453.    
  454.     If doc_cur.IsPermit(0) = "1" Then
  455.         Call doc_cur.Save(True, True)
  456.         UpdateAddOpAndAgentPU
  457.         ReopenDocument
  458.     Else
  459.         UIDoc_cur.Refresh
  460.         Messagebox msg, 0, "Продолжить заполнение заявки"
  461.     End If 
  462.     Exit Sub
  463.    
  464. catch:
  465.     If Err<>0 Then
  466.         doc_cur.IsPermit = "-1"
  467.         ErrorDlg "Разрешение заявки поставщику"
  468.     End If
  469.     Exit Sub
  470. End Sub
  471. Sub PermitPU_Spec
  472.     If CatchErrors Then On Error Goto catch
  473.    
  474.     If CheckServer <> 1 Then Exit Sub
  475.    
  476.     UIDoc_cur.EditMode = True
  477.     Call UIDoc_cur.Save
  478.    
  479.     If InitDbAndViews = 0 Then
  480.         Exit Sub
  481.     End If
  482.    
  483.     ' проверка откуда брать параметры
  484.     Call GetCheck("ControlPermitPU")
  485.    
  486. ' Реквизиты договора
  487.     Call CheckContract(1)
  488. ' Статус Поставщика
  489.     Call CheckStatus(doc_provider, 1)
  490.    
  491.     msg = msg + nline + |Стоимость сделки: | + Cstr(doc_cur.SumNet(0)) + | | + doc_cur.CurrencyNet(0)
  492.     msg = msg + nline + |Стоимость сделки в БВ: | + Format$(doc_cur.SumNetBC(0), "Standard") + | | + doc_cur.CurrencyBC(0)
  493.    
  494. ' Страховка
  495.     Call CheckInsurance(1)
  496. ' Отсрочка платежа
  497.     Call CheckPayDelay("PU", 1)
  498. ' Рентабельность
  499.     Call CheckRent(1)
  500.    
  501. ' Автоматическое увеличение суммы брутто в КУ
  502. 'Krupenin 24/4/07       Call CheckIsMayUpSumGross(1)
  503.    
  504. ' Проверяем, залочена ли КУ
  505.     If IsLockedKU = 1 Then
  506.         Exit Sub
  507.     End If
  508. ' Финансовые реквизиты  
  509.     Call CheckFinInfo(doc_provider, 1) 
  510.    
  511.     If Messagebox("Вы подали запрос на разрешение исполнения Простой услуги при следующих условиях: " & nline & msg & nline & nline & "Продолжить?", 4+32, "Разрешение исполнения ПУ") <> 6 Then
  512.         Exit Sub
  513.     End If
  514.    
  515.     If Messagebox("Операцию разрешения исполнения Простой услуги будет невозможно отменить. Продолжить?", 4+32, "Разрешение исполнения ПУ") <> 6 Then
  516.         Exit Sub
  517.     End If
  518.    
  519. ' Запрашиваем причину спец. разрешения сделки
  520.     Call InputRequestCauseInput
  521.    
  522. ' Стоимость груза
  523.     Call CheckGoodCost
  524. ' Запись флагов
  525.    
  526.     If RequestCauseMessage <> "" Then
  527.         msg = |Заявка разрешена пользователем | & Session.CommonUserName & nline & "Дата и время: " & Format(Now, "dd.mm.yyyy hh:nn") & nline & |Причина специального разрешения сделки: | & RequestCauseInput & nline & msg
  528.         Print "Отправляем причину спец. разрешения сделки"
  529.         Call SendToRM(RequestCauseMessage, RequestCauseInput)
  530.     Else
  531.         msg = |Заявка разрешена пользователем | & Session.CommonUserName & nline & "Дата и время: " & Format(Now, "dd.mm.yyyy hh:nn") & nline & msg
  532.     End If
  533.    
  534.     Print "Записываем флаги"
  535.    
  536.     'Выставляем в документе КУ флаг разрешения КУ (IsPermit)
  537.     doc_cur.IsPermit = "1"
  538.    
  539.     'Записываем msg в поле истории разрешения услуги (PermitHistory)
  540.     doc_cur.PermitHistory = msg
  541.    
  542.     doc_cur.PermitSpec = "1"    ' флаг спец. разрешения
  543.    
  544.     doc_cur.RequestCauseInput = RequestCauseInput
  545.     doc_cur.RequestCauseMessage = RequestCauseMessage
  546.    
  547.     'сохраняем дату разрешения
  548.     doc_cur.PermitDate = Now
  549.     'сохраняем имя разрешившего сделку
  550.     doc_cur.PermitName = Session.CommonUserName
  551.    
  552.     Print "Присваиваем номер"
  553.     If doc_cur.Form(0) = "SimpleService" Or doc_cur.Form(0) = "GoodSbornTransport" Then
  554.         doc_cur.RequestNumber_S = SetNumber(doc_cur)
  555.     End If
  556.    
  557.    
  558.    
  559. '   Call CreateKU ' продолжение сделки
  560.    
  561.     Print "Сохраняем текущий документ"
  562.     Call doc_cur.Save(True, True)
  563.    
  564.     If doc_cur.IsPermit(0)="1" Then UpdateAddOpAndAgentPU
  565.  
  566.     If doc_cur.Executor(0) = session.UserName Then
  567.         Messagebox msg, 0, "Специальное разрешение заявки поставщику"
  568.         ReopenDocument
  569.     Else
  570.         Messagebox msg, 0, "Специальное разрешение заявки поставщику"
  571.         doc_cur.SaveOptions="0"
  572.         UIDoc_cur.Close True
  573.     End If
  574.    
  575.     Exit Sub   
  576. catch:
  577.     If Err<>0 Then
  578.         doc_cur.IsPermit = "-1"
  579.         ErrorDlg "Специальное разрешение заявки поставщику"
  580.     End If
  581.     Exit Sub
  582. End Sub
  583. Function CreateKU As Integer
  584.     ' продолжение сделки из ПУ - создаем КУ в системе "Производство" той Компании, которая является Поставщиком
  585.     If CheckServer <> 1 Then
  586.         Exit Function
  587.     End If
  588.    
  589.     Dim view_client As NotesView
  590.    
  591.     Dim col_chief As NotesDocumentCollection ' выбор руководителя отдела
  592.     Dim doc_chief As NotesDocument ' документ отдела
  593.    
  594.     Dim db_provider As NotesDatabase ' БД Производство, в которой создаем продолжение
  595.     Dim doc_new As NotesDocument ' новый документ КУ
  596.     Dim uidoc_new As NotesUIDocument ' для открытия новой КУ на экран
  597.    
  598.     CreateKU = 0 ' не продолжили
  599.    
  600.     ' проверяем является ли данный поставщик компанией группы
  601.     If doc_cur.PartnerCompanyUID(0) = "" Then
  602.     ' Не является компаний группы - выходим
  603.         Exit Function
  604.     End If
  605.    
  606.     If doc_cur.IsForwarder(0) = "" Then
  607.         ' нет прав на продолжение сделки
  608.         Messagebox "Вы не можете продолжить сделку. Обратитесь к Руководителю отдела экспедирования либо Риск-менеджеру,либо Старшему финансисту"
  609.         Exit Function
  610.     End If
  611.    
  612.     If InitDbAndViews = 0 Then
  613.         Exit Function
  614.     End If
  615.    
  616.     'инициализируем представление (среди Клиентов и Поставщиков) отсортированое по UID компании
  617.     Set view_client = db_mark.GetView("(PartnerByUIDCompany)")
  618.     If view_client Is Nothing Then
  619.         Messagebox "Не найден список для поиска Контрагента по Компании. Обратитесь к разработчикам."
  620.         Exit Function
  621.     End If
  622.    
  623.     ' документ Клиента, которая соответствует текущей Компании
  624.     Set doc_client = view_client.GetDocumentByKey(doc_cur.UIDCompany(0) & "~Client", True)
  625.     If doc_client Is Nothing Then
  626.         Messagebox "Не найден Клиент соответствующий Компании " & doc_cur.CompanyName(0) & ". Обратитесь к администратору."
  627.         Exit Function
  628.     End If
  629.    
  630.     ' документ Поставщика, который выбран в ПУ
  631.     Set doc_provider = view_client.GetDocumentByKey(doc_cur.PartnerCompanyUID(0) & "~Provider")
  632.     If doc_provider Is Nothing Then
  633.         Messagebox "Не найден Поставщик " & doc_cur.PartnerNameR(0) & ". Обратитесь к администратору."
  634.         Exit Function
  635.     End If
  636.    
  637.     ' Запрашиваем подтверждение
  638.     If doc_cur.IsContinued(0) = "1" Then
  639.         If Messagebox( "Новый документ КУ был создан ранее. Продолжить создание нового документа КУ?", 32+4, "Подтверждение") <> 6 Then
  640.             Exit Function
  641.         End If
  642.     Else
  643.         If Messagebox( "Продолжить сделку в системе Производство Компании " & doc_provider.CompanyName(0) & "?", 32+4, "Подтверждение") <> 6 Then
  644.             Exit Function
  645.         End If
  646.     End If
  647.    
  648.     Select Case doc_cur.IsForwarder(0)
  649.     Case "1"
  650.         ' Пользователь является экспедитором в Компании, которой соответствует Поставщик в документе ПУ
  651.         Set db_provider = New NotesDataBase(db_cur.Server, Ex375 + "/" + doc_provider.CompanyNameF(0) + "/Manufacture.nsf")
  652.         If Not db_provider.IsOpen Then
  653.             Messagebox "БД Производство для Компании" & doc_provider.CompanyName(0) & " не найдена или у вас не хватает прав доступа. Обратитесь к администратору."
  654.             Exit Function
  655.         End If
  656.        
  657.         ' Создаем новый КУ со всеми полями
  658.         Set doc_new = db_provider.CreateDocument
  659.         doc_new.Form = "ClientRequest"
  660.         Call NewKU(doc_new, "")
  661.        
  662.         ' открываем созданный документ на экран
  663.         Set uidoc_new = ws.EditDocument(True, doc_new)
  664.         CreateKU = 1 ' сделка продолжена
  665.     Case "2"
  666.         'пользователь не является экспедитором в Компании, которой соответствует Поставщик,
  667.         'но является либо Руководителем отдела экспедирования, либо Риск-менеджером,
  668.         'либо Старшим финансистом в текущей системе Производство
  669.        
  670.         ' выбираем Руководителя отдела экспедирования
  671.         Set col_chief = ws.PickListCollection( 1 , False, db_cur.Server, Ex375 & "/Start.nsf", "ChiefByCompanyUID"_
  672.         , "Выбор руководителя" , "Выберите руководителя отдела, который будет «продолжать» исполнение сделки", _
  673.         doc_cur.PartnerCompanyUID(0))
  674.        
  675.         Set doc_chief = col_chief.GetFirstDocument
  676.        
  677.         If doc_chief Is Nothing Then
  678.             ' не выбрали Руководителя
  679.             Exit Function
  680.         End If
  681.        
  682.         ' Создаем новый КУ со всеми полями
  683.         Set doc_new = db_cur.CreateDocument
  684.         doc_new.Form = "Memo" ' чтобы не отображалось до отпраки ссылки
  685.         Call NewKU(doc_new, doc_chief.DepartmentName(0)) ' передаем название отдела экспедирования для заполнения прав доступа
  686.         doc_new.Executor = doc_chief.ForwarderChief(0)
  687.         doc_new.DepartmentName = doc_chief.DepartmentName(0)
  688.         doc_new.ForwarderChief = doc_chief.ForwarderChief(0)
  689.         doc_new.IsPermit = "-1"
  690.        
  691.         ' отправляем новый документ КУ в Производство Компании, которая соответствует Поставщику
  692.         Call doc_new.Send(False, "Manufacture_" & doc_provider.CompanyNameF(0))
  693.        
  694.         Messagebox "Сделка продолжена."
  695.         CreateKU = 1 ' сделка продолжена
  696.     Case Else
  697.         Exit Function
  698.     End Select
  699.     doc_cur.IsContinued = "1" ' запоминаем флаг о том, что продолжили сделку
  700. catch: rethrow 
  701. End Function
  702. Sub NewKU(doc_new As NotesDocument, deptName$)
  703.     Dim item_s As NotesItem
  704.     Dim item_d As NotesItem
  705.     Dim i%
  706.    
  707.     Dim itemAuth As NotesItem
  708.     Dim itemRead As NotesItem
  709.     Dim itemAuthGroup As NotesItem
  710.    
  711.     doc_new.CompanyNameF = doc_provider.CompanyNameF(0)
  712.    
  713.     ' поля информация о клиенте - из Клиента, который соответствует текущей Компании
  714.     doc_new.UIDPartner = doc_client.UIDPartner(0)
  715.     doc_new.PartnerNameR = doc_client.PartnerNameR(0)
  716.     doc_new.PartnerAddress = doc_client.Country(0) + ", "+doc_client.City(0) + ", " + doc_client.Street(0)
  717.     doc_new.PartnerFax = doc_client.Fax
  718.     doc_new.PartnerCompanyUID = doc_client.CompanyUID(0)
  719.    
  720.     ' заполняем БД начала сделки и номер начала сделки
  721.     doc_new.FirstCompanyNameF = Ucase(doc_ku.CompanyNameF(0))
  722.     doc_new.Num_C123 = Mid(doc_ku.RequestNumber(0), 6, 4)
  723.     doc_new.RequestNumberCust = doc_cur.RequestNumber_S(0)
  724.    
  725.     ' записываем в продолжение сделки UID ПУ, из которого продолжали и идентификатор Компании, из которой продолжали и автора продолжения
  726.     doc_new.UID_StartPU = doc_cur.UIDRequest_S(0)
  727.     doc_new.CompanyNameF_StartPU = doc_cur.CompanyNameF(0)
  728.     doc_new.Author_StartPU = session.CommonUserName
  729.     doc_new.FullOrBrief = doc_cur.FullOrBrief(0)
  730.    
  731.     ' сумма нетто в ПУ становится суммой брутто для нового КУ
  732.     doc_new.SumGross = doc_cur.SumNet(0)
  733.     doc_new.CurrencyGross = doc_cur.CurrencyNet(0)
  734.    
  735.     ' копируем поля на второй - предпоследней закладках
  736.     Call ArrayNames ' инициализируем названия полей
  737.    
  738.     ' погрузка и разгрузка - по 10 групп полей
  739.     Print "Заполняем погрузку и разгрузку..."
  740.     For i = 1 To 10
  741.         Forall iname In LoadUnloadItems
  742.             If i <> 1 Then
  743.                 iname = iname & "_" & i
  744.             End If
  745.             Set item_s = doc_ku.GetFirstItem(iname)
  746.             If Not item_s Is Nothing Then
  747.                 Set item_d = doc_new.CopyItem( item_s, iname )
  748.             End If
  749.         End Forall
  750.     Next
  751.    
  752.     ' уникальные поля
  753.     Print "Заполняем остальные поля..."
  754.     Forall iname In InfoItems
  755.         Set item_s = doc_ku.GetFirstItem(iname)
  756.         If Not item_s Is Nothing Then
  757.             Set item_d = doc_new.CopyItem( item_s, iname )
  758.         End If
  759.     End Forall
  760.    
  761.     ' поля доступа
  762.     Set ItemAuth = New NotesItem( doc_new, "AuthorsList", "[RiskManager]", AUTHORS)
  763.     Call ItemAuth.AppendToTextList("[FinancierChief]")
  764.    
  765.     Set ItemRead = New NotesItem( doc_new, "ReadersList", "[Financier]",READERS)
  766.     Call ItemRead.AppendToTextList("[Marketolog]")
  767.     Call ItemRead.AppendToTextList("[ForwarderChief]")
  768.    
  769.     ' делаем доступным для того руководителя отдела, которому посылают ссылку
  770.     If DeptName <> "" Then
  771.         Set ItemAuthGroup = New NotesItem( doc_new, "GroupAuthorsList", _
  772.         "Exped375_"& doc_provider.CompanyNameF(0) & "_" & DeptName & "_ForwarderChief", AUTHORS)
  773.     End If
  774.    
  775. catch: rethrow 
  776. End Sub
  777.  
  778. Sub SendToRM(RequestCauseMessage$, RequestCauseInput$)
  779.     If CatchErrors Then On Error Goto catch
  780.    
  781.     Dim doc_memo As NotesDocument
  782.     Dim Body As NotesRichTextItem
  783.     Dim nm_cur As New NotesName(session.UserName)
  784.     Dim nm_to As NotesName
  785.     Dim view_company As NotesView
  786.     Dim doc_company As NotesDocument
  787.    
  788.     ' проверяем, если только текущий пользователь является и Старшим Риск-менеджером и Директором,
  789.    
  790.     Set doc_memo = db_cur.CreateDocument
  791.    
  792.     If doc_cur.Form(0) = "ClientRequest" Then
  793.         ' КУ
  794.         doc_memo.Subject = "Специальное разрешение Заявки Клиента  " & doc_cur.PartnerNameR(0)
  795.     Else
  796.         ' ПУ
  797.         doc_memo.Subject = "Специальное разрешение Заявки Поставщику  " & doc_cur.PartnerNameR(0)
  798.     End If
  799.    
  800.     Set Body = New NotesRichTextItem(doc_memo, "Body")
  801.     Call body.AppendText("Пользователь " & session.CommonUserName & " разрешил исполнение Заявки при следующих условиях: " & nline & RequestCauseMessage)
  802.     Call body.AddNewLine(2)
  803.     Call body.AppendText("Причина специального разрешения: " & RequestCauseInput)
  804.     Call body.AddNewLine(2)
  805.     Call body.AppendText("Для открытия разрешенной Заявки используйте ссылку -> ")
  806.     Call body.AppendDocLink(doc_cur, "Ссылка на Заявку")
  807.    
  808. ' отправка Старшему Риск-менеджеру
  809.     If doc_group.RiskManagerGK(0) <> "" Then
  810.         Set nm_to = New NotesName(doc_group.RiskManagerGK(0))
  811.         If Ubound(doc_group.RiskManagerGK) > 0 Or nm_to.Abbreviated <> nm_cur.Abbreviated Then
  812.             ' отправляем не себе, либо не только себе
  813.             Call doc_memo.Send(False, doc_group.RiskManagerGK)
  814.         End If
  815.     End If
  816.    
  817. ' отправка Директору
  818.     'инициализируется представление Компаний
  819.     Set view_company = db_start.GetView("CompanyByUID")
  820.     If view_company Is Nothing Then
  821.         Messagebox "Не найдено представление для поиска Компаний. Обратитесь к разработчикам."
  822.         Exit Sub
  823.     End If
  824.     Call view_company.Refresh
  825.     ' инициализируем документ Компании
  826.     Set doc_company = view_company.GetDocumentByKey(doc_cur.UIDCompany(0), True)
  827.     If doc_company Is Nothing Then
  828.         Messagebox "Не найден документ Компании. Обратитесь к администратору."
  829.         Exit Sub
  830.     End If
  831.     If doc_company.Director(0) <> "" Then
  832.         Set nm_to = New NotesName(doc_company.Director(0))
  833.         If Ubound(doc_company.Director) > 0 Or nm_to.Abbreviated <> nm_cur.Abbreviated Then
  834.             ' отправляем не себе, либо не только себе
  835.             Call doc_memo.Send(False, doc_company.Director)
  836.         End If
  837.     End If
  838.    
  839. catch:rethrow
  840. End Sub
  841. Function IsNeedToCheck(element$) As Integer
  842.     If CatchErrors Then On Error Goto catch
  843.    
  844.     Dim arresult
  845.    
  846.     If checkok = 1 Then
  847.         ' нужно проверять все параметры
  848.         IsNeedToCheck = 1 ' нужно проверять
  849.     Else
  850.         ' смотрим, установлен ли нужный флаг в массиве флагов
  851.         arresult = Arraygetindex(check, element)
  852.         If Isnull(arresult) Then
  853.             IsNeedToCheck = 0  ' не нужно проверять
  854.         Else
  855.             IsNeedToCheck = 1  ' нужно проверять
  856.         End If
  857.     End If
  858.    
  859. catch: rethrow
  860. End Function
  861. Sub GetCheck(FieldName As String)
  862.     If CatchErrors Then On Error Goto catch
  863.    
  864.     ' смотрим, что нужно проверять при разрешении КУ/ПУ
  865.    
  866.     checkok = 0 ' берем из настроек
  867.    
  868.     If doc_ex.CheckControlPermit(0) = "1" Then
  869.         check = doc_ex.GetItemValue(FieldName)
  870.     Elseif doc_comp.CheckControlPermit(0) = "1" Then
  871.         check = doc_comp.GetItemValue(FieldName)
  872.     Else
  873.         checkok = 1 ' проверяем все параметры (не вводили индивидуальные в настройках системы
  874.     End If
  875.    
  876. catch: rethrow
  877. End Sub
  878. Sub CheckContract(IsSpec%)
  879.     If CatchErrors Then On Error Goto catch
  880.    
  881.     Dim col_contract As NotesDocumentCollection
  882.     Dim doc_contract As NotesDocument
  883.    
  884.    
  885.     If IsNeedToCheck("Contract") = 1 Then
  886.         Print "Проверяем реквизиты договора"
  887.        
  888.         If IsSpec = 1 Then
  889.         ' спец. разрешение
  890.             errmsg = msg
  891.         End If
  892.        
  893.         ' находим последние Реквизиты договора
  894.         Set col_contract = view_contract.GetAllDocumentsByKey(doc_cur.UIDContract(0), True)
  895.         Set doc_contract = col_contract.GetFirstDocument
  896.        
  897.         If doc_contract Is Nothing Then
  898.         ' нет договора
  899.             errmsg = nline + |Наличие договора: Нет|
  900.         Else
  901.         ' проверяем дату окончания договора  
  902.             If Cstr(doc_contract.ContractEndDate(0)) = "" Then
  903.                 msg = nline + |Наличие договора: дата окончания не указана|
  904.                 con_num = doc_contract.ContractNumber(0) + " от " + Cstr(doc_contract.ContractStartDate(0))
  905.             Else
  906.                 If Cdat(doc_contract.ContractEndDate(0)) < Today Then
  907.                 'Если дата окончания договора наступила, то
  908.                     errmsg = nline + |Наличие договора: просрочен|
  909.                 Else
  910.                 'Иначе (дата окончания не наступила)
  911.                     msg = nline + |Наличие договора: № | & doc_contract.ContractNumber(0) & | от | & doc_contract.ContractStartDate(0) & | по | & doc_contract.ContractEndDate(0)
  912.                     con_num = doc_contract.ContractNumber(0) + " от " + Cstr(doc_contract.ContractStartDate(0))
  913.                 End If
  914.             End If
  915.         End If
  916.        
  917.         If IsSpec = 1 And Len(errmsg) > Len(msg) Then
  918.         ' спец. разрешение
  919.             msg = errmsg
  920.         End If
  921.        
  922.     End If
  923.    
  924. catch: rethrow
  925. End Sub
  926. Sub CheckStatus(doc_partner As NotesDocument, IsSpec%)
  927.     If CatchErrors Then On Error Goto catch
  928.    
  929.     If IsNeedToCheck("Status") = 1 Then
  930.         Print "Проверяем статус Контрагента"
  931.        
  932.         If IsSpec = 1 Then
  933.             ' спец. разрешение
  934.             errmsg = msg
  935.         End If
  936.        
  937.         Select Case doc_partner.Status(0)
  938.         Case "1": msg = msg + nline + |Статус: Активный|
  939.         Case "2": msg = msg + nline + |Статус: Пассивный|
  940.         Case "3":
  941.             msg = msg + nline + |Статус: Запрещенный|
  942.             If IsSpec = 1 Then
  943.                 RequestCauseMessage = |Статус: Запрещенный|
  944.             Else
  945.                 errmsg = errmsg + nline + |Статус: Запрещенный|
  946.             End If
  947.         Case "4":
  948.             msg = msg + nline + |Статус: Потенциальный|
  949.             If IsSpec = 1 Then
  950.                 RequestCauseMessage = |Статус: Потенциальный|
  951.             Else
  952.                 errmsg = errmsg + nline + |Статус: Потенциальный|
  953.             End If
  954.         Case "5":
  955.             msg = msg + nline + |Статус: Временно запрещенный|
  956.             If IsSpec = 1 Then
  957.                 RequestCauseMessage = |Статус: Временно запрещенный|
  958.             Else
  959.                 errmsg = errmsg + nline + |Статус: Временно запрещенный|
  960.             End If
  961.         Case "6": errmsg = errmsg + nline + |Статус: Конкурент|
  962.         End Select
  963.        
  964.         If IsSpec = 1 And Len(errmsg) > Len(msg) Then
  965.             ' спец. разрешение
  966.             msg = errmsg
  967.         End If
  968.        
  969.     End If
  970.    
  971. catch: rethrow
  972. End Sub
  973. Sub CheckPayDelay(KUorPU$, IsSpec%)
  974.     If CatchErrors Then On Error Goto catch
  975.    
  976.     Dim tmpVar As Variant
  977.     Dim db_start As New NotesDatabase("", "")
  978.     Dim view As NotesView
  979.    
  980.     If IsNeedToCheck("PaymentDelay") = 1 Then
  981.         If IsSpec = 1 Then
  982.     ' спец. разрешение
  983.             errmsg = msg
  984.         End If 
  985.        
  986.         tmpVar = Evaluate({
  987. @if(Extension=""; @Return(""); 1);
  988. REM "Получаем настойку для Отсрочки из Старт базы";
  989. extensionTmp :=@DbLookup("":NoCache; srv:db_start; "CompanyByNameF"; CompanyNameF; "ListOfExtensionFilled");
  990.    
  991. @If(@IsError(extensionTmp); @Return(@Prompt([Ok];"Границы отсрочки: отсрочка не найдена (2)";"Отсрочка \"" + Extension + "\" для " + CompanyName + " не найдена"));@True);
  992.    
  993. ListOfExtension := @Left(extensionTmp; "^");
  994.    
  995. indx := @Member(Extension; ListOfExtension);
  996. @If(indx = 0; @Return(@Prompt([Ok]; "Границы отсрочки: отсрочка не найдена (3)"; "Отсрочка \"" + Extension + "\" для " + CompanyName + " не найдена" )); 1);
  997.    
  998. @If(indx <= @Elements(extensionTmp); @True; @Return(""));
  999.  
  1000. processList := @Explode(extensionTmp[indx]; "^");
  1001. PUcheck := @Subset(@Subset(processList; 2); -1);
  1002.  
  1003. Rem "проверяем установлена ли просрочка для Клиента-Подрядчика";
  1004. @if(@Contains(PUcheck; @if("} & KUorPU & {"= "PU";"1";"0")); "1"; @Return(""));
  1005.  
  1006. processList := @Explode(extensionTmp[indx]; "^");
  1007. min_max := @Subset(@Subset(processList; @if("} & KUorPU & {"= "PU"; 6; 4)); -1);
  1008. min_max := min_max + "," + @Subset(@Subset(processList; @if("} & KUorPU & {"= "PU"; 7; 5)); -1);
  1009. min_max}, doc_cur)
  1010.        
  1011.         If Not Isarray(tmpVar) Then Goto ExitSub
  1012.        
  1013.         If tmpVar(0) = "" Then Goto ExitSub
  1014.        
  1015.         tmpVar = Split(tmpVar(0), ",")
  1016.         If Isnumeric(tmpVar(0)) Then
  1017.             If Not doc_cur.PaymentDelay(0) => Cint(tmpVar(0)) Then
  1018.                 errmsg = errmsg + nline + {"Количество дней отсрочки платежа" выходят за границы установленные для Компании "} & doc_cur.CompanyName(0) & Chr(10) & {"Количество дней отсрочки платежа" должно быть больше } & tmpVar(0) & { дней.}
  1019.                 Goto ExitSub
  1020.             End If
  1021.         End If
  1022.        
  1023.         If Isnumeric(tmpVar(1)) Then
  1024.             If Not doc_cur.PaymentDelay(0) <= Cint(tmpVar(1)) Then
  1025.                 errmsg = errmsg + nline + {"Количество дней отсрочки платежа" выходят за границы установленные для Компании "} & doc_cur.CompanyName(0) & Chr(10) & {"Количество дней отсрочки платежа" не должно превышать } & tmpVar(1) & { дней.}
  1026.                 Goto ExitSub
  1027.             End If
  1028.         End If
  1029.        
  1030.        
  1031. ExitSub:
  1032.         If IsSpec = 1 And Len(errmsg) > Len(msg) Then
  1033.         ' спец. разрешение
  1034.             msg = errmsg
  1035.         End If
  1036.     End If
  1037.    
  1038.    
  1039. %REM
  1040. 'старый код
  1041.  
  1042.     Dim PaymentDelay As Single, border As Single
  1043.    
  1044.     If IsNeedToCheck("PaymentDelay") = 1 Then
  1045.         Print "Проверяем отсрочку платежа"
  1046.        
  1047.         If IsSpec = 1 Then
  1048.         ' спец. разрешение
  1049.             errmsg = msg
  1050.         End If
  1051.        
  1052.         If KUorPU = "KU" Then
  1053.             border = doc_group.DelayMax(0)
  1054.             PaymentDelay = doc_cur.PaymentDelay(0)
  1055.         Else
  1056.             border = - doc_group.DelayMin(0)
  1057.             PaymentDelay = - doc_cur.PaymentDelay(0)
  1058.         End If
  1059.        
  1060.         If PaymentDelay > PaymentDelay Then
  1061.             ' Отсрочка в КУ больше DelayMax
  1062.             ' Отсрочка в ПУ меньше DelayMin
  1063.             errmsg = errmsg + nline + |Отсрочка платежа: | + Cstr(doc_cur.PaymentDelay(0)) + | дней|
  1064.         Else
  1065.             msg = msg + nline + |Отсрочка платежа: | + Cstr(doc_cur.PaymentDelay(0)) + | дней|
  1066.         End If
  1067.        
  1068.         If IsSpec = 1 And Len(errmsg) > Len(msg) Then
  1069.         ' спец. разрешение
  1070.             msg = errmsg
  1071.         End If
  1072.        
  1073.     End If
  1074. %END REM   
  1075. catch: rethrow 
  1076. End Sub
  1077. Sub CheckCredit(IsSpec%)
  1078.     If CatchErrors Then On Error Goto catch
  1079.    
  1080.     If IsNeedToCheck("Credit") = 1 Then
  1081.         Print "Проверяем текущий кредит"
  1082.        
  1083.         If IsSpec = 1 Then
  1084.         ' спец. разрешение
  1085.             errmsg = msg
  1086.         End If
  1087.        
  1088.         If Cstr(doc_client.Limit(0)) = "" Then
  1089.             errmsg = errmsg + nline + |Кредитный лимит не установлен|
  1090.             errmsg = errmsg + nline + |Стоимость сделки: | + Cstr(doc_cur.SumGross(0)) + | | + doc_cur.CurrencyGross(0)
  1091.             errmsg = errmsg + nline + |Стоимость сделки в БВ: | + Format$(doc_cur.SumGrossBC(0), "Standard") + | | + doc_cur.CurrencyBC(0)
  1092.         Else
  1093.             If doc_cred.LocalCredit(0) + doc_cur.SumGrossBC(0) > doc_client.Limit(0) Then
  1094.             'если («Локальный» Текущий кредит Клиента)+(SumGrossBC)>(Limit)
  1095.                 errmsg = errmsg + nline + |Кредитный лимит: | + Cstr(doc_client.Limit(0)) + | | + doc_cur.CurrencyBC(0)
  1096.                 errmsg = errmsg + nline + |Текущий кредит: | + Cstr(doc_cred.LocalCredit(0)) + | | + doc_cur.CurrencyBC(0)
  1097.                 errmsg = errmsg + nline + |Стоимость сделки: | + Cstr(doc_cur.SumGross(0)) + | | + doc_cur.CurrencyGross(0)
  1098.                 errmsg = errmsg + nline + |Стоимость сделки в БВ: | + Format$(doc_cur.SumGrossBC(0), "Standard") + | | + doc_cur.CurrencyBC(0)
  1099.             Else
  1100.             'иначе ( («Локальный» Текущий кредит Клиента)+(SumFrossBC)>(Limit) )
  1101.                 msg = msg + nline + |Кредитный лимит: | + Cstr(doc_client.Limit(0)) + | | + doc_cur.CurrencyBC(0)
  1102.                 msg = msg + nline + |Текущий кредит: | + Cstr(doc_cred.LocalCredit(0)) + | | + doc_cur.CurrencyBC(0)
  1103.                 msg = msg + nline + |Стоимость сделки: | + Cstr(doc_cur.SumGross(0)) + | | + doc_cur.CurrencyGross(0)
  1104.                 msg = msg + nline + |Стоимость сделки в БВ: | + Format$(doc_cur.SumGrossBC(0), "Standard") + | | + doc_cur.CurrencyBC(0)
  1105.             End If
  1106.         End If
  1107.        
  1108.         If IsSpec = 1 And Len(errmsg) > Len(msg) Then
  1109.         ' спец. разрешение
  1110.             msg = errmsg
  1111.         End If
  1112.        
  1113.     End If
  1114.    
  1115. catch: rethrow
  1116. End Sub
  1117. Function CheckFinInfo(doc_partner As NotesDocument, IsSpec%) As String
  1118.     If CatchErrors Then On Error Goto catch
  1119.    
  1120.     Dim msg_t$ ' сообщение об ошибке
  1121.     Dim fld List As String ' массив полей
  1122.     Dim fn$ ' название поля
  1123.    
  1124.     If IsNeedToCheck("FinInfo") = 1 Then
  1125.         Print "Проверяем фин. реквизиты"
  1126.        
  1127.         fld("UNN") = "УНН, ИНН, номер налоговой регистрации"
  1128.         fld("OKPO") = "ОКПО"
  1129.         fld("BankName_1") = "Наименование банка"
  1130.         fld("BankAddress_1") = "Адрес банка"
  1131.         fld("BankCode_1") = "Код банка"
  1132.         fld("BankSWIFT_1") = "SWIFT code банка"
  1133.         fld("AccCurrency_1_1") = "Валюта счета"
  1134.         fld("AccAccount_1_1") = "№ счета"
  1135.        
  1136.         msg_t = ""
  1137.         Forall x In fld
  1138.             If Cstr(doc_partner.GetItemValue(Listtag(x))(0)) = "" Then
  1139.                 If msg_t = "" Then
  1140.                     msg_t = nline & "Не заполнены финансовые реквизиты:"
  1141.                 End If
  1142.                 msg_t = msg_t & nline & |- | & x
  1143.             End If
  1144.         End Forall
  1145.        
  1146.         If IsSpec = 1 Then
  1147.         ' спец. разрешение
  1148.             msg = msg & msg_t
  1149.         Else
  1150.             errmsg = errmsg & msg_t
  1151.         End If
  1152.        
  1153.     End If
  1154. catch: rethrow 
  1155. End Function
  1156. Sub CheckTariffForInner(IsSpec%)
  1157.     If CatchErrors Then On Error Goto catch
  1158.    
  1159.     If IsNeedToCheck("TariffForInner") = 1 Then
  1160.        
  1161.         If IsSpec = 1 Then
  1162.         ' спец. разрешение
  1163.             errmsg = msg
  1164.         End If
  1165.        
  1166.         If doc_cur.FullOrBrief(0) = "Internal" Then
  1167.             Print "Проверяем Тарифное Приложение для ВП"
  1168.             If doc_cur.UIDAppendix(0) = "" Then
  1169.                 errmsg = errmsg + nline + |Тарифное Приложение не выбрано.|
  1170.             Else
  1171.                 msg = msg + nline + |Тарифное Приложение | & doc_cur.TariffAppendixRoute(0)
  1172.             End If
  1173.         End If
  1174.        
  1175.         If IsSpec = 1 And Len(errmsg) > Len(msg) Then
  1176.         ' спец. разрешение
  1177.             msg = errmsg
  1178.         End If
  1179.        
  1180.     End If
  1181.    
  1182. catch: rethrow 
  1183. End Sub
  1184. Sub CheckInsurance(IsSpec%)
  1185.     If CatchErrors Then On Error Goto catch
  1186.    
  1187.     If IsNeedToCheck("Insurance") = 1 Then
  1188.         Print "Проверяем страховку"
  1189.        
  1190.         If IsSpec = 1 Then
  1191.         ' спец. разрешение
  1192.             errmsg = msg
  1193.         End If
  1194.        
  1195.         If Cstr(doc_provider.InsuranceEnd(0))="" Then
  1196.             errmsg = errmsg + nline + |Срок действия страховки: не указан|
  1197.         Else
  1198.             If Cdat(doc_provider.InsuranceEnd(0))<Date Then
  1199.             'если Дата окончания страховки Поставщика наступила
  1200.                 errmsg = errmsg + nline + |Срок действия страховки: | + Format(doc_provider.InsuranceEnd(0), "dd.mm.yyyy")
  1201.             Else
  1202.             'иначе (Дата окончания страховки Поставщика не наступила)
  1203.                 msg = msg + nline + |Срок действия страховки: | + Format(doc_provider.InsuranceEnd(0), "dd.mm.yyyy")
  1204.             End If
  1205.         End If
  1206.        
  1207.         If IsSpec = 1 And Len(errmsg) > Len(msg) Then
  1208.         ' спец. разрешение
  1209.             msg = errmsg
  1210.         End If
  1211.        
  1212.     End If
  1213.    
  1214. catch: rethrow 
  1215. End Sub
  1216. Sub CheckRent(IsSpec%)
  1217.     If CatchErrors Then On Error Goto catch
  1218.    
  1219.     Dim col_pu As NotesDocumentCollection   ' коллекция разрешенных ПУ для рентабельности
  1220.     Dim doc_pu As NotesDocument             ' разрешенная ПУ
  1221.     Dim sumNet_pu As Single
  1222.     Dim rent As Single
  1223.    
  1224.     If doc_cur.Form(0) <> "SimpleService" Then
  1225.         Exit Sub
  1226.     End If
  1227.    
  1228.     If IsNeedToCheck("Rent") = 1 Then
  1229.         Print "Проверяем рентабельность сделки"
  1230.        
  1231.         If IsSpec = 1 Then
  1232.         ' спец. разрешение
  1233.             errmsg = msg
  1234.         End If
  1235.        
  1236.         'rent = ( КУ.SumGrossBC - КУ.SumNetBC - ПУ. SumNetBC ) / КУ.SumGrossBC
  1237.         Set col_pu = view_pu.GetAllDocumentsByKey(doc_cur.UIDRequest(0))
  1238.         Set doc_pu = col_pu.GetFirstDocument
  1239.         sumNet_pu = doc_cur.SumNetBC(0)
  1240.         While Not doc_pu Is Nothing
  1241.             sumNet_pu = sumNet_pu + doc_pu.SumNetBC(0)
  1242.             Set doc_pu = col_pu.GetNextDocument(doc_pu)
  1243.         Wend
  1244.        
  1245.         If doc_ku.SumGrossBC(0)>0 Then
  1246.             rent = 100 * (doc_ku.SumGrossBC(0) - sumNet_pu) / doc_ku.SumGrossBC(0)
  1247.         Else
  1248.             Print "Рентабельность не может быть рассчитана -- ставка клиента равна 0"
  1249.             rent = -100
  1250.         End If
  1251.        
  1252.         'если rent < Profitability
  1253.         If rent < doc_ex.Profitability(0) Then
  1254.             errmsg = errmsg + nline + |Рентабельность КУ: | + Format(rent, "Standard")
  1255.         Else
  1256.             msg = msg + nline + |Рентабельность КУ: | + Format(rent, "Standard")
  1257.         End If
  1258.        
  1259.         If IsSpec = 1 And Len(errmsg) > Len(msg) Then
  1260.         ' спец. разрешение
  1261.             msg = errmsg
  1262.         End If
  1263.        
  1264.     End If
  1265.    
  1266. catch: rethrow 
  1267. End Sub
  1268. Sub CheckIsMayUpSumGross(IsSpec%)
  1269.     If CatchErrors Then On Error Goto catch
  1270.    
  1271.     Dim col_pu As NotesDocumentCollection   ' коллекция разрешенных ПУ для рентабельности
  1272.     Dim doc_pu As NotesDocument             ' разрешенная ПУ
  1273.    
  1274.     If doc_cur.Form(0) <> "SimpleService" Then
  1275.         Exit Sub
  1276.     End If
  1277.    
  1278.     If doc_cur.OnOff342(0) = "On" Then
  1279.         Print "Автоматическое увеличение суммы брутто в КУ"
  1280.        
  1281.         If IsSpec = 1 Then
  1282.         ' спец. разрешение
  1283.             errmsg = msg
  1284.         End If
  1285.        
  1286.         ' в данный релиз включена функция автоматического увеличения суммы брутто в КУ
  1287.         Set col_pu = db_cur.Search({ ( (Form="SimpleService" & IsPermit="1") | Form = "AddOperation" )  & !@IsAvailable($Conflict) & UIDRequest = "} & doc_cur.UIDRequest(0) & {"}, Nothing, 0)
  1288.         Set doc_pu = col_pu.GetFirstDocument
  1289.         sumGross_pu = doc_cur.SumGrossBC(0)
  1290.         While Not doc_pu Is Nothing
  1291.             sumGross_pu = sumGross_pu + doc_pu.SumGrossBC(0)
  1292.             Set doc_pu = col_pu.GetNextDocument(doc_pu)
  1293.         Wend
  1294.        
  1295.         If sumGross_pu > doc_ku.SumGrossBC(0) Then
  1296.             ' нужно увеличивать сумму брутто в КУ
  1297.             If Cstr(doc_client.Limit(0)) = "" Then
  1298.                 errmsg = errmsg + nline + |Автоматическое увеличение суммы брутто в КУ:|
  1299.                 errmsg = errmsg + nline & | - Сумма брутто в КУ автоматически увеличивается на: | & (sumGross_pu - doc_ku.SumGrossBC(0)) & | | & doc_cur.CurrencyBC(0)
  1300.                 errmsg = errmsg + nline + | - Кредитный лимит Клиента: не установлен|
  1301.             Else
  1302.                 If doc_cred.LocalCredit(0) + sumGross_pu - doc_ku.SumGrossBC(0) > doc_client.Limit(0) Then
  1303.                     ' превышен кредитный лимит
  1304.                     errmsg = errmsg + nline + |Автоматическое увеличение суммы брутто в КУ:|
  1305.                     errmsg = errmsg + nline & | - Сумма брутто в КУ автоматически увеличивается на: | & (sumGross_pu - doc_ku.SumGrossBC(0)) & | | & doc_cur.CurrencyBC(0)
  1306.                     errmsg = errmsg + nline + | - Кредитный лимит Клиента: | + Cstr(doc_client.Limit(0)) + | | + doc_cur.CurrencyBC(0)
  1307.                     errmsg = errmsg + nline + | - Текущий кредит Клиента: | + Cstr(doc_cred.LocalCredit(0)) + | | + doc_cur.CurrencyBC(0)
  1308.                 Else
  1309.                     msg = msg + nline + |Автоматическое увеличение суммы брутто в КУ:|
  1310.                     msg = msg + nline & | - Сумма брутто в КУ автоматически увеличивается на: | & (sumGross_pu - doc_ku.SumGrossBC(0)) & | | & doc_cur.CurrencyBC(0)
  1311.                     msg = msg + nline + | - Кредитный лимит Клиента: | + Cstr(doc_client.Limit(0)) + | | + doc_cur.CurrencyBC(0)
  1312.                     msg = msg + nline + | - Текущий кредит Клиента: | + Cstr(doc_cred.LocalCredit(0)) + | | + doc_cur.CurrencyBC(0)
  1313.                 End If
  1314.             End If
  1315.            
  1316.         End If
  1317.        
  1318.         If IsSpec = 1 And Len(errmsg) > Len(msg) Then
  1319.         ' спец. разрешение
  1320.             msg = errmsg
  1321.         End If
  1322.        
  1323.     End If
  1324. catch: rethrow 
  1325. End Sub
  1326. Function IsLockedKU As Integer
  1327.     If CatchErrors Then On Error Goto catch
  1328.    
  1329.     Dim holders ' для проверки блокировки
  1330.    
  1331.     If doc_cur.Form(0) <> "SimpleService" Then
  1332.         IsLockedKU = 0 ' НЕ заблокировано
  1333.         Exit Function
  1334.     End If
  1335.    
  1336.     IsLockedKU = 1 ' заблокировано
  1337.    
  1338.     If doc_cur.OnOff342(0) = "On" Then
  1339.         ' в данный релиз включена функция автоматического увеличения суммы брутто в КУ
  1340.         Print "Проверяем, заблокирован ли документ КУ"
  1341.        
  1342.         If sumGross_pu > doc_ku.SumGrossBC(0) Then
  1343.             ' нужно увеличивать сумму брутто в КУ
  1344.             Print "Проверяем блокировку КУ"
  1345.            
  1346.             holders = doc_ku.LockHolders
  1347.             If holders(0) <> "" Then
  1348.                 If holders(0) = session.UserName Then
  1349.                     Messagebox "Вы заблокировали Заявку Клиента. Закройте Заявку Клиента либо откройте ее в режиме чтения."
  1350.                 Else
  1351.                     Messagebox  "Заявка Клиента заблокирована пользователем " & holders(0)
  1352.                 End If
  1353.                 Exit Function
  1354.             End If
  1355.            
  1356.         End If
  1357.        
  1358.     End If
  1359.    
  1360.     IsLockedKU = 0 ' НЕ заблокировано
  1361.    
  1362. catch: rethrow 
  1363. End Function
  1364. Sub CheckGoodCost
  1365.     If CatchErrors Then On Error Goto catch
  1366.    
  1367.     Dim doc_memo As NotesDocument
  1368.     Dim Body As NotesRichTextItem
  1369.     Dim nm_cur As New NotesName(session.UserName)
  1370.     Dim nm_to As NotesName
  1371.    
  1372.     If doc_cur.Form(0) <> "SimpleService" Then
  1373.         Exit Sub
  1374.     End If
  1375.    
  1376.     If IsNeedToCheck("GoodCost") = 1 Then
  1377.         If Cstr(doc_group.GoodCostMax(0)) <> "" And Cstr(doc_ku.GoodCostBC(0)) <> "" Then
  1378.             Print "Проверяем стоимость груза"
  1379.             If doc_ku.GoodCostBC(0) >= doc_group.GoodCostMax(0) Then
  1380.                 Print "Отправляем сообщение о большой стоимости груза"
  1381.                 Set doc_memo = db_cur.CreateDocument
  1382.                
  1383.                 doc_memo.Subject = "Перевозка дорогого груза Поставщиком <" & doc_cur.PartnerNameR(0) & ">"
  1384.                
  1385.                 Set Body = New NotesRichTextItem(doc_memo, "Body")
  1386.                 Call body.AppendText("Пользователь " & session.CommonUserName & " разрешил исполнение Заявки при следующих условиях: ")
  1387.                 Call body.AddNewLine(1)
  1388.                 Call body.AppendText("Клиент: " & doc_cur.ClientName(0))
  1389.                 Call body.AddNewLine(1)
  1390.                 Call body.AppendText("Поставщик: " & doc_cur.PartnerNameR(0))
  1391.                 Call body.AddNewLine(1)
  1392.                 Call body.AppendText("Стоимость груза: " & doc_ku.GoodCostBC(0) & " " & doc_ku.CurrencyBC(0))
  1393.                
  1394.                 Call body.AddNewLine(2)
  1395.                 Call body.AppendText("Для открытия разрешенной Заявки используйте ссылку -> ")
  1396.                 Call body.AppendDocLink(doc_cur, "Ссылка на Заявку")
  1397.                
  1398.             ' отправка Руководителю отдела экспедирования
  1399.                 Set nm_to = New NotesName(doc_cur.DepartmentChief(0))
  1400.                 If nm_to.Abbreviated <> nm_cur.Abbreviated Then
  1401.                     ' отправляем не себе
  1402.                     Call doc_memo.Send(False, doc_cur.DepartmentChief(0))
  1403.                 End If
  1404.                
  1405.             ' отправка Риск-менеджеру Компании
  1406.                 If doc_comp.RiskManager(0) <> "" Then
  1407.                     Set nm_to = New NotesName(doc_comp.RiskManager(0))
  1408.                     If Ubound(doc_comp.RiskManager) > 0 Or nm_to.Abbreviated <> nm_cur.Abbreviated Then
  1409.                         ' отправляем не себе, либо не только себе
  1410.                         Call doc_memo.Send(False, doc_comp.RiskManager)
  1411.                     End If
  1412.                 End If
  1413.                
  1414.             End If
  1415.             msg = msg + nline + |Стоимость груза: | & doc_ku.GoodCostBC(0) & " " & doc_ku.CurrencyBC(0)
  1416.         End If
  1417.     End If
  1418. catch: rethrow 
  1419. End Sub
  1420. Sub UpSumGross
  1421.     If CatchErrors Then On Error Goto catch
  1422.    
  1423.     If doc_cur.Form(0) <> "SimpleService" Then
  1424.         Exit Sub
  1425.     End If
  1426.    
  1427.     If doc_cur.OnOff342(0) = "On" Then
  1428.         ' в данный релиз включена функция автоматического увеличения суммы брутто в КУ
  1429.         If sumGross_pu > doc_ku.SumGrossBC(0) Then
  1430.             ' нужно увеличивать сумму брутто в КУ
  1431.            
  1432.             Print "Увеличиваем сумму брутто в КУ"
  1433.             If doc_ku.SumGrossBC(0)<>0 Then doc_ku.SumGross = doc_ku.SumGross(0) * sumGross_pu / doc_ku.SumGrossBC(0)
  1434.             doc_ku.SumGrossBC = sumGross_pu
  1435.            
  1436.             Print "Обновляем Кредитный лимит"
  1437.             doc_cred.LocalCredit = doc_cred.LocalCredit(0) + sumGross_pu - doc_ku.SumGrossBC(0)
  1438.             Call doc_cred.Save(True, True)
  1439.            
  1440.             Print "Обновляем историю разрешения КУ"
  1441.             doc_ku.PermitHistory = doc_ku.PermitHistory(0) & nline & nline & |Автоматическое увеличение суммы брутто:|
  1442.             doc_ku.PermitHistory = doc_ku.PermitHistory(0) & nline & | - Дата и время: | & Format(Now, "dd.mm.yyyy hh:nn")
  1443.             doc_ku.PermitHistory = doc_ku.PermitHistory(0) & nline & | - Пользователь: | & Session.CommonUserName
  1444.             doc_ku.PermitHistory = doc_ku.PermitHistory(0) & nline & | - Причина: разрешение ПУ для Поставщика | & doc_cur.PartnerNameR(0)
  1445.             doc_ku.PermitHistory = doc_ku.PermitHistory(0) & nline & | - Сумма брутто увеличена на : | & (sumGross_pu - doc_ku.SumGrossBC(0)) & | | & doc_cur.CurrencyBC(0)
  1446.            
  1447.             Print "Сохраняем документ КУ"
  1448.             Call doc_ku.Save(True, True)
  1449.         End If
  1450.     End If
  1451.    
  1452. catch: rethrow 
  1453. End Sub
  1454. Sub InputRequestCauseInput
  1455.     If CatchErrors Then On Error Goto catch
  1456.    
  1457.     If doc_cur.OnOff327(0) <> "On" Then
  1458.         ' в данный релиз не включена функция запроса причины спец. разрешения и отправки уведомлений Директору и Старшему Риск-менеджеру
  1459.         RequestCauseMessage = ""
  1460.     End If
  1461.    
  1462.     If RequestCauseMessage <> "" Then
  1463. rpt_inp:
  1464.         Print "Вводим причину спец. разрешения"
  1465.         RequestCauseInput = ws.Prompt( PROMPT_OKCANCELEDIT, "Причина специального разрешения", |Необходимо ввести причину специального разрешения сделки, т.к.| & nline & RequestCauseMessage)
  1466.        
  1467.         If Isempty(RequestCauseInput) Then
  1468.             Messagebox "Причина специального разрешения сделки не введена. Введите причину!"
  1469.             Goto rpt_inp
  1470.         End If
  1471.         If RequestCauseInput = "" Then
  1472.             Messagebox "Причина специального разрешения сделки не введена. Введите причину!"
  1473.             Goto rpt_inp
  1474.         End If
  1475.     End If
  1476.    
  1477. catch: rethrow 
  1478. End Sub
  1479. Sub Terminate
  1480.    
  1481. End Sub
  1482.  
  1483. Sub UpdateAddOpAndAgentAndOwnKU
  1484.     If CatchErrors Then On Error Goto catch
  1485.    
  1486.     'Функция обновляет название компании и др параметры в подчиненных документах после разрешения заказа.
  1487.     'Нужна для корректного содержания в подчиненных документах скопированных заказов
  1488.    
  1489.     Dim view_p As NotesView
  1490.     Dim col_p As NotesDocumentCollection
  1491.     Dim doc_p As NotesDocument
  1492.    
  1493.     Set view_p= GetViewE(db_cur, "PUAndAddOpByAndAgentUIDRequestC")
  1494.    
  1495.     Set col_p = view_p.GetAllDocumentsByKey(doc_cur.UIDRequest(0), True)
  1496.     Set doc_p = col_p.GetFirstDocument
  1497.     While Not doc_p Is Nothing
  1498.        
  1499.         Select Case doc_p.Form(0)
  1500.         Case "SimpleService"
  1501.             doc_p.ClientContactName = doc_cur.ContactName(0)
  1502.             doc_p.ClientContactPhone = doc_cur.ContactPhone(0)
  1503.             doc_p.ClientCountry = doc_cur.PartnerCountry(0)
  1504.             doc_p.ClientName = doc_cur.PartnerNameR(0)
  1505.             doc_p.UIDClient = doc_cur.UIDPartner(0)
  1506.            
  1507.         Case "AddOperation", "OwnService"
  1508.             doc_p.UIDClient = doc_cur.UIDPartner(0)
  1509.             doc_p.ClientName = doc_cur.PartnerNameR(0)
  1510.            
  1511.         Case "AgentPay"
  1512.             doc_p.RequestNumber=doc_cur.RequestNumber(0)
  1513.            
  1514.             If doc_p.UIDRequest_S(0)="" Then
  1515.                 doc_p.RequestNumber_CU=doc_cur.RequestNumber(0)
  1516.                 doc_p.PartnerNameR = doc_cur.PartnerNameR(0)
  1517.                 doc_p.UIDPartner = doc_cur.UIDPartner(0)
  1518.             End If
  1519.         End Select
  1520.        
  1521.         Call doc_p.Save(True, True)
  1522.         Set doc_p = col_p.GetNextDocument(doc_p)
  1523.     Wend
  1524. catch: rethrow
  1525. End Sub
  1526.  
  1527. Sub UpdateAddOpAndAgentPU
  1528.     If CatchErrors Then On Error Goto catch
  1529.     Dim view_p As NotesView
  1530.     Dim col_p As NotesDocumentCollection
  1531.     Dim doc_p As NotesDocument
  1532.    
  1533.     Set view_p= GetViewE(db_cur, "PUAndAddOpByAndAgentUIDRequestC")
  1534.    
  1535.     Set col_p = view_p.GetAllDocumentsByKey(doc_cur.UIDRequest_S(0), True)
  1536.     Set doc_p = col_p.GetFirstDocument
  1537.     While Not doc_p Is Nothing
  1538.         Select Case doc_p.Form(0)
  1539.         Case "AddOperation"
  1540.             doc_p.UIDProvider = doc_cur.UIDPartner(0)
  1541.             doc_p.ProviderName = doc_cur.PartnerNameR(0)
  1542.             doc_p.RequestNumber_S = doc_cur.RequestNumber_S(0)
  1543.         Case "AgentPay"
  1544.             doc_p.PartnerNameR = doc_cur.PartnerNameR(0)
  1545.             doc_p.UIDPartner = doc_cur.UIDPartner(0)
  1546.             doc_p.RequestNumber_S = doc_cur.RequestNumber_S(0)
  1547.         End Select     
  1548.        
  1549.         Call doc_p.Save(True, True)
  1550.         Set doc_p = col_p.GetNextDocument(doc_p)
  1551.     Wend
  1552. catch: rethrow
  1553. End Sub
  1554.  
  1555. Function InitDbAndViews As Integer
  1556.     If CatchErrors Then On Error Goto catch
  1557.    
  1558.     InitDbAndViews = 0 ' инициализация не провелась
  1559.    
  1560.     Dim view_ku As NotesView
  1561.     Dim view_cnf As NotesView
  1562.    
  1563.     If doc_cur.Form(0) = "ClientRequest" Then
  1564.         ' список для поиска Текущего Кредита
  1565.         Set view_cred = db_cur.GetView("CurrentCreditView")
  1566.         If view_cred Is Nothing Then
  1567.             Messagebox "Не найдено представление с данными о текущем кредите. Обратитесь к разработчикам."
  1568.             Exit Function
  1569.         End If
  1570. '       Call view_cred.Refresh
  1571. '       Sleep 1
  1572.        
  1573.     ' документ Текущего кредита
  1574. '   If doc_cur.Form(0) = "ClientRequest" Then
  1575. '       Set doc_cred = view_cred.GetDocumentByKey(doc_cur.UIDPartner(0), True)
  1576. '   Elseif doc_cur.Form(0) = "SimpleService" Then
  1577. '       Set doc_cred = view_cred.GetDocumentByKey(doc_cur.UIDClient(0), True)
  1578. '   End If
  1579. '   If doc_cur.Form(0) = "ClientRequest" Or doc_cur.Form(0) = "SimpleService" Then
  1580.        
  1581.         Set doc_cred = view_cred.GetDocumentByKey(doc_cur.UIDPartner(0), True)
  1582.        
  1583.         If doc_cred Is Nothing Then
  1584.             Dim itm_a As NotesItem
  1585.             Set doc_cred = db_cur.CreateDocument
  1586.             doc_cred.Form = "CurrentCredit"
  1587.             doc_cred.UIDPartner = doc_cur.UIDPartner(0)
  1588.            
  1589. '           If doc_cur.Form(0) = "ClientRequest" Then
  1590. '               doc_cred.UIDPartner = doc_cur.UIDPartner(0)
  1591. '           Else
  1592. '               doc_cred.UIDPartner = doc_cur.UIDClient(0)
  1593. '           End If
  1594.            
  1595.             Set itm_a = New NotesItem(doc_cred, "AuthorsList", "*", AUTHORS)
  1596.             doc_cred.LocalCredit = 0
  1597.             doc_cred.GlobalCredit = 0
  1598.             Call doc_cred.save(True, False)
  1599.         End If
  1600.     End If
  1601.    
  1602.     ' список для поиска КУ
  1603.     Set view_ku = db_cur.GetView("ClientRequestByUID")
  1604.     If view_ku Is Nothing Then
  1605.         Messagebox "Не найдено представление с данными о Комплексных услугах. Обратитесь к разработчикам."
  1606.         Exit Function
  1607.     End If
  1608.     Call view_ku.Refresh
  1609.    
  1610.     ' документ КУ
  1611.     If doc_cur.Form(0) = "ClientRequest" Or doc_cur.Form(0) = "SimpleService" Then
  1612.         Set doc_ku = view_ku.GetDocumentByKey(doc_cur.UIDRequest(0), True)
  1613.         If doc_ku Is Nothing Then
  1614.             Messagebox "Не найден документ КУ."
  1615.             Exit Function
  1616.         End If
  1617.     End If
  1618.    
  1619.     ' список для поиска разрешенных ПУ по UID КУ
  1620.     Set view_pu = db_cur.GetView("PUByUIDRequest4Finance")
  1621.     If view_pu Is Nothing Then
  1622.         Messagebox "Не найдено представление с данными о Простых услугах. Обратитесь к разработчикам."
  1623.         Exit Function
  1624.     End If
  1625. '   Call view_pu.Refresh
  1626.    
  1627. ' БД Маркетинг
  1628. '   Set db_mark = New NotesDataBase (db_cur.Server, ex375 & "/Marketing_G.nsf")
  1629. '   If Not db_mark.IsOpen Then
  1630. '       Messagebox "БД Маркетинг и CRM не найдена. Обратитесь к разработчикам."   
  1631. '       Exit Function
  1632. '   End If
  1633.    
  1634.     ' список для поиска контрагентов
  1635.     Set view_partner = db_mark.GetView( "PartnerByUID" )
  1636.     If view_partner Is Nothing Then
  1637.         Messagebox "В БД Маркетинг и CRM не найден вид с Контрагентами. Обратитесь к разработчикам." 
  1638.         Exit Function
  1639.     End If
  1640. '   Call view_partner.Refresh
  1641.    
  1642.     ' документ Клиента
  1643. '   If doc_cur.Form(0) = "ClientRequest" Or doc_cur.Form(0) = "SimpleService" Then
  1644.     If doc_cur.Form(0) = "ClientRequest" Then
  1645.         If doc_cur.Form(0) = "ClientRequest" Then
  1646.             Set doc_client = view_partner.GetDocumentByKey(doc_cur.UIDPartner(0), True)
  1647.         Else
  1648.             Set doc_client = view_partner.GetDocumentByKey(doc_cur.UIDClient(0), True)
  1649.         End If
  1650.         If doc_client Is Nothing Then
  1651.             Messagebox "Ошибка при получении документа Клиента. Обратитесь к разработчикам." 
  1652.             Exit Function
  1653.         End If
  1654.     End If
  1655.    
  1656.     ' документ Поставщика
  1657.     If doc_cur.Form(0) = "ClientRequest" Then
  1658.         Set doc_provider = Nothing ' КУ - Поставщик не нужен
  1659.     Else
  1660.         Set doc_provider = view_partner.GetDocumentByKey(doc_cur.UIDPartner(0), True)
  1661.         If doc_provider Is Nothing Then
  1662.             Messagebox "Ошибка при получении документа Поставщика. Обратитесь к разработчикам."   
  1663.             Exit Function
  1664.         End If
  1665.     End If
  1666.    
  1667.     ' список для поиска Реквизитов договора
  1668.     Set view_contract = db_mark.GetView( "ContractByUIDContract" )
  1669.     If view_contract Is Nothing Then
  1670.         Messagebox "В БД Маркетинг и CRM не найден вид с Контрактами. Обратитесь к разработчикам." 
  1671.         Exit Function
  1672.     End If
  1673. '   Call view_contract.Refresh
  1674.    
  1675. ' БД Старт
  1676.     Set db_start = New NotesDataBase (db_cur.Server, ex375 & "\start.nsf")
  1677.     If Not db_start.IsOpen Then
  1678.         Messagebox "БД Старт не найдена. Обратитесь к разработчикам."  
  1679.         Exit Function
  1680.     End If
  1681.    
  1682.     ' список для поиска Группы компаний
  1683.     Set view_GK = db_start.GetView("CompanyGroupList")
  1684.     If view_GK Is Nothing Then
  1685.         Messagebox "Не найдено представление с документом Группы Компаний. Обратитесь к разработчикам."
  1686.         Exit Function
  1687.     End If
  1688. '   Call view_GK.Refresh
  1689.    
  1690.     ' документ Группы Компаний
  1691.     Set doc_group = view_GK.GetFirstDocument
  1692.     If doc_group Is Nothing Then
  1693.         Messagebox "Не найден документ с группой компаний. Обратитесь к разработчикам или администраторам."
  1694.         Exit Function
  1695.     End If
  1696.    
  1697.     ' список для поиска документа Компании
  1698.     Set view_cnf = db_start.GetView("CompanyByNameF")
  1699.     If view_cnf Is Nothing Then
  1700.         Messagebox "Не найдено представление с документами Компаний. Обратитесь к разработчикам."
  1701.         Exit Function
  1702.     End If
  1703.    
  1704.     ' документ Компании
  1705.     Set doc_comp = view_cnf.GetDocumentByKey(doc_cur.CompanyNameF(0), True)
  1706.     If doc_comp Is Nothing Then
  1707.         Messagebox "Не найден документ Компании. Обратитесь к администраторам."
  1708.         Exit Function
  1709.     End If
  1710.    
  1711.     ' список для поиска Отдела экспедирования
  1712.     Set view_ex = db_start.GetView("DepartmentByUID")
  1713.     If view_ex Is Nothing Then
  1714.         Messagebox "Не найдено представление сотрудников отделов. Обратитесь к разработчикам."
  1715.         Exit Function
  1716.     End If
  1717.    
  1718.     ' документ Отдела Экспедиторов
  1719.     Set doc_ex = view_ex.GetDocumentByKey(doc_cur.UIDDepartment(0), True)
  1720.     If doc_ex Is Nothing Then
  1721.         Messagebox "Не найден документ сотрудников отделов. Обратитесь к разработчикам."
  1722.         Exit Function
  1723.     End If
  1724.    
  1725.     ' обнуляем глобальные переменные
  1726.     msg  = ""
  1727.     errmsg = ""
  1728.     con_num = ""
  1729.     RequestCauseMessage = ""
  1730.     RequestCauseInput = ""
  1731.     sumGross_pu  = 0
  1732.    
  1733.     InitDbAndViews = 1 ' все ок
  1734. catch: rethrow
  1735. End Function
Add Comment
Please, Sign In to add comment