Тема: Синхронизация документов в двух базах
Агент для синхронизации
%REM
Agent adrefresh
Created Jun 23, 2022 by Administrator NYY FGR/fond
Description: Comments for Agent
%END REM
Option Public
Option Declare
Sub Initialize
Dim session As New NotesSession
Dim db As NotesDatabase, adrdb As NotesDatabase
Dim view As NotesView, adrview As NotesView
Dim doc As NotesDocument, maindoc As NotesDocument, adrdoc As NotesDocument, mainadrdoc As NotesDocument
Dim formula As String
Dim l1 As Variant, l2 As Variant
Dim isnewd As Boolean
Dim i As Integer, x As Integer
Dim mainadrid As String, fla As String, del As String, stsubdivision As String, sts As String
On Error GoTo ErrH
i=0
Set db=session.Currentdatabase
Set view=db.GetView("reforgs3") ' Адресаты МЭД по donorid в БД ВЭД
Set adrdb=session.GetDatabase("fgrmed/Fgr","promdoc\adress.nsf", False)
If adrdb Is Nothing Then Print "no connection with fgrmed/Fgr !" Else Print "fgrmed/Fgr connection OK!"
Set adrview=adrdb.GetView("all")
For x= 1 To 2
Set adrdoc=adrview.GetFirstDocument ' док в БД Адресаты
While Not adrdoc Is Nothing
Set doc=view.GetDocumentByKey(adrdoc.UniversalID) ' ищем в ВЭД док с бд Адресаты по donorid.
If doc Is Nothing Then
Set doc=db.CreateDocument : doc.form="ref_orgs" ' создали в ВЭД
Else
If doc.modify(0)= adrdoc.LastModified Then GoTo l1 'пропустить неизмененные документы
End If
i=i+1
Print i "." adrdoc.Server_name(0)
If adrdoc.form(0)="forg" And x =1 Then 'Организация в БД Адресаты
doc.donorid=adrdoc.Universal_ID(0)
doc.modify=adrdoc.LastModified
doc.flag_not_visible=adrdoc.flag_not_visible
doc.delete=CStr(adrdoc.delete(0))
doc.Server_name=adrdoc.Server_name ' во вью ref_orgs3 - для отображения.
doc.nam=adrdoc.Server_name ' назв Орг
doc.shnam=doc.nam
doc.code=adrdoc.Server_id
doc.xmlstr="<destination><legalentity><kodorgout>"+doc.code(0)+"</kodorgout><nameorg>"+doc.nam(0)+"</nameorg><structuralsubdivision></structuralsubdivision><post>"+doc.nam(0)+"</post></legalentity></destination>"
Call doc.ComputeWithForm(1,0)
Call doc.Save(1,0)
End If
Sleep 1
If adrdoc.form(0)="forg_resp" And x =2 Then 'Руководитель ФИО, или подвед в БД Адресаты
doc.donorid=adrdoc.Universal_ID(0)
doc.modify=adrdoc.LastModified
'рекурсивный поиск в БД Адресаты , если родительский элемент верхнего уровня - скрыт или удален
mainadrid$=adrdoc.ParentDocumentUNID
While Not mainadrid$=""
Set mainadrdoc = adrdb.GetDocumentByUNID(mainadrid$)
mainadrid$=mainadrdoc.ParentDocumentUNID
Wend
If Not mainadrdoc Is Nothing Then
fla$=mainadrdoc.flag_not_visible(0)' скрыт ли родительский элемент верхнего уровня
del$=CStr(mainadrdoc.delete(0)) ' или удален в БД Адресаты
End If
doc.flag_not_visible=adrdoc.flag_not_visible
If fla$="1" Then doc.flag_not_visible="1" 'скрыть, если родительский элемент верхнего уровня скрыт
doc.delete=CStr(adrdoc.delete(0))
If del$="1" Then doc.delete="1" 'или удален в ВЭД
doc.Server_name=adrdoc.Server_name ' ФИО, или назв орг подведа.
doc.Server_id=adrdoc.Server_id
doc.type_adr =adrdoc.type_adr ' в БД адресаты у орг подведа - 1, а у человека - 2.
stsubdivision$ = doc.Server_id(0)
' Print "Server_id " stsubdivision$
sts=stsubdivision$
doc.donorparentid=adrdoc.ParentDocumentUNID
Set maindoc=view.GetDocumentByKey(doc.donorparentid(0)) ' ищем родительский элемент в ВЭД по donorid в виде reforgs3 в ВЭД
If Not maindoc Is Nothing Then 'вообще всегда есть
Print maindoc.Server_name(0) " /родитель/ " maindoc.type_adr(0)
If maindoc.type_adr(0)="1" Then
'Print "родитель " doc.Server_name(0) " у " maindoc.nam(0)
sts= maindoc.Server_id(0) + "." + doc.Server_id(0)
If stsubdivision$ <> sts Then
Print "подвед " doc.Server_name(0) + " // " sts
stsubdivision$ = maindoc.Server_id(0)
End If
End if
doc.sts = sts
doc.nam=maindoc.nam ' Наименование организации
doc.shnam=maindoc.shnam ' краткое Наименование организации
doc.code=maindoc.code ' Код организации в МЭД
doc.xmlstr="<destination><legalentity><kodorgout>"+doc.code(0)+"</kodorgout><nameorg>"+doc.nam(0)+"</nameorg><structuralsubdivision>" + stsubdivision$ +"</structuralsubdivision><post>"+doc.Server_name(0)+"</post></legalentity></destination>"
Call doc.MakeResponse(maindoc)
End If
'Print "sts " sts
Call doc.ComputeWithForm(1,0)
Call doc.Save(1,0)
End If
l1:
Set adrdoc=adrview.GetNextDocument(adrdoc)
Wend
Next
Print "всего " i
Exit Sub
ErrH:
Print "Ошибка АДРЕСАТЫ " & Error(Err) & " в строке " & Erl
Exit Sub
End Sub