1

Тема: Копирование нужных полей документа и атачей с "базы 1" в "базу 2".

Пример кнопки, которая отсылает документ с докоборота в промежуточную базу Р.
Причем есть 5 вариантов копирования поля "ПРИЛОЖЕНИЯ_" с атачами, и только последний коректно работает.
У всех остальных атач в доке в базе "Р" есть, но не отображается в поле "ПРИЛОЖЕНИЯ_".

Sub Click(Source As Button)
    Dim Session As New NotesSession    
    Dim uiworkspace As New NotesUIWorkspace    
    Dim CurDataBase As NotesDataBase
    
    server$ = "M"
    databaseFileName$ = "Docoborot\R.nsf"
    Dim db2 As NotesDatabase'Межмин
    Set db2 = session.GetDatabase(server$, databaseFileName$)
    If Not db2.Isopen Then'проверка доступа к базе Межмин'
        Messagebox "Нет доступа к Базе Р!"
        Exit Sub
    End If
    
    Dim dt As New NotesDateTime("Nothing/null")
    Dim item As NotesItem
    Dim View As NotesView
    Dim DocColl As NotesDocumentCollection    
    Dim CurDoc As NotesDocument 'документ   М'
    Dim docR As NotesDocument'документ Межмин'
    Dim doc As NotesDocument
    
    Set CurDoc=uiworkspace.CurrentDocument.Document
    Set CurDataBase=Session.CurrentDataBase
    
    
    If  CurDoc.Server_id(0) <> "" Then
        Messagebox "Документ уже был отправлен в Р"
        Exit Sub
    End If    
    
    If  CurDoc.РЕГИСТРАЦИОННЫЙ_НОМЕР(0) = "" Then
        Messagebox "Документ не зарегистрирован в ведомственном документообороте!"
        Exit Sub
    End If    
    
    Set View=db2.getView("org") 
    If View Is Nothing Or Isnull(View) Then
        Messagebox ErrorMessag$+Chr(13) +"Не найдено представление Организации-межмин"         
        Exit Sub
    End If        
    Set DocColl = uiworkspace.PickListCollection(PICKLIST_CUSTOM, False, server$, databaseFileName$, View.Name, "Выбор Адресата","раскройте список")
    
    If DocColl.Count=0 Then
        Exit Sub
    End If
    
    Set doc = DocColl.GetFirstDocument ' док в базе кор-адресаты
    CurDoc.Server_id = doc.Server_id  'записали ID получателя
    
    
    
    Set docR = New NotesDocument( db2 ) ' создали новый док в базе роутер
    
        ' копируем нужные поля            
    
    Set item = CurDoc.GetFirstItem( "ОРГАНИЗАЦИЯ" )
    Call docR.CopyItem (item,"ОРГАНИЗАЦИЯ")
    
    Set item = CurDoc.GetFirstItem( "ЗАГОЛОВОК" )
    Call docR.CopyItem (item,"ЗАГОЛОВОК")
    
    Set item = CurDoc.GetFirstItem( "АДРЕСАТ" )
    Call docR.CopyItem (item,"АДРЕСАТ")

   
    ......
   
    'Вариант1
   

Set item = CurDoc.GetFirstItem( "ПРИЛОЖЕНИЯ_" )
    Call docR.CopyItem (item,"ПРИЛОЖЕНИЯ_")

   
    'Вариант2

    Set rtitem_R = New NotesRichTextItem ( docR, "ПРИЛОЖЕНИЯ_" )
    If Not Isempty(CurDoc.ПРИЛОЖЕНИЯ_) Then 
    Call rtitem_R.AppendRTItem( CurDoc.GetFirstItem("ПРИЛОЖЕНИЯ_" ))
    End If    

   
    'Вариант3

    Dim rtitemA As NotesRichTextItem
    Dim rtitemB As NotesRichTextItem
    Set rtitemA = CurDoc.GetFirstItem("ПРИЛОЖЕНИЯ_" )
    Set rtitemB  = New NotesRichTextItem( docR, "ПРИЛОЖЕНИЯ_" )
    Call rtitemB.AppendRTItem( rtitemA )
    Call rtitemB.Update

   
    'Вариант 4
   

datapatch$= {C:\XML\}   
    Dim rtitemA As NotesRichTextItem
    Dim rtitem As NotesRichTextItem
    Set rtitem = New NotesRichTextItem( docR, "ПРИЛОЖЕНИЯ_" )
    Dim object As NotesEmbeddedObject
    If CurDoc.HasEmbedded Then    
        Set rtitemA = CurDoc.GetFirstItem("ПРИЛОЖЕНИЯ_" )
        Forall obj In rtitemA.EmbeddedObjects        
            If  ( obj.Type = EMBED_ATTACHMENT ) Then
                Call obj.ExtractFile( datapatch$ & obj.Source )
                Set object = rtitem.EmbedObject  (EMBED_ATTACHMENT,  "", datapatch$ & obj.Source)        
                Kill     datapatch$ & obj.Source 
            End If
        End Forall
    End If

   
    'Вариант 5

Dim itemA As NotesItem
    Set itemA = CurDoc.GetFirstItem( "ПРИЛОЖЕНИЯ_" )
    Call itemA.CopyItemToDocument(docR, "ПРИЛОЖЕНИЯ_")
    
    Set item=CurDoc.GetFirstItem( "СОДЕРЖАНИЕ_" )
    Call docR.copyitem(item, "СОДЕРЖАНИЕ_") 

   

Окончание основного скрипта
   

Set item = CurDoc.GetFirstItem( "ФАМИЛИЯ" )
    Call docR.CopyItem (item,"ФАМИЛИЯ")
    Set item = CurDoc.GetFirstItem( "ТЕЛЕФОН" )
    Call docR.CopyItem (item,"ТЕЛЕФОН")
    
    Set item = CurDoc.GetFirstItem( "Server_id" )
    Call docR.CopyItem (item,Server_id)
' ----------------            
    docR.Form="fmejved"
    docR.fxml="0"
    Call docR.Save(True, True)
    
    CurDoc.Server_id="отправлено"
    Call CurDoc.Save(True,True)    
End Sub

Поделиться