Выгрузка В Ворд

Тема в разделе "Lotus - Программирование", создана пользователем Dimok-163rus, 16 авг 2013.

  1. Dimok-163rus

    Dimok-163rus Well-Known Member

    Регистрация:
    20 июн 2013
    Сообщения:
    88
    Симпатии:
    0
    Ребят, проблема такая:

    - по шаблону(заложенному в справочнике) создается документ, куда присваивается значение полей,

    - после этого созданный документ/файл присваивается в поле"Sfakt" этой формы.(но файл присваивается форме по умолчанию почему то*)

    Все отрабатывает, но, когда нажимаем на кнопку генерации, открывается "форма по умолчанию" и в неё вкладывается этот файл с какой то радости, сохраняем все, файл правильно сгенерированный, присоединяется не в поле, в которое надо этой формы, а висит где то...Рисунки приложил.
    Почему открывается форма по умолчанию вот вопрос <_<
    Рис1. - начальная форма, в которой находится кнопка
    Рис.2 и Рис.3 - форма по умолчанию, в которую файлик вкладывается, после нажатия на кнопку генерации,
    Рис.4 - открытие начальной формы, после сохранения


    Код (LotusScript):
    Sub Click(Source As Button)

    'обработчик ошибок
    On Error Goto MesError
    '_________________________________________
    Dim ws As New NotesUIWorkspace
    Dim sess As New NotesSession

    Dim pdoc As NotesDocument, childdoc As NotesDocument, tmpDoc As NotesDocument, profile As NotesDocument
    Dim dc As NotesDocumentCollection

    Dim db As NotesDatabase, sprdb As NotesDatabase

    Dim uidoc As NotesUIDocument

    Dim view As NotesView

    'Поля, необходимо которые выгрузить
    Dim Seria(0) As Variant
    Dim Number_reg(0) As String
    Dim Data_reg_izm(0) As Variant
    Dim Pravo_vlad(0)As Variant
    Dim Dol_podp(0)As Variant
    Dim Osn_podpis(0)As Variant
    Dim Podpisant(0)As Variant


    Set uidoc = ws.CurrentDocument
    Set pdoc = uidoc.Document  
    Set db = sess.CurrentDatabase

    'Профиль системы и база справочника
    Set profile = db.GetProfileDocument("ConfigPrf")
    If profile.pthRefer(0)="" Then
    Messagebox "В профиле конфигурации системы не указан путь к БД Справочники!",0 ,"Ошибка настройки системы"
    Exit Sub
    End If

    Set sprdb = sess.GetDatabase(db.Server, profile.pthRefer(0))

    'Продолжать? 
    Dim askme As Variant
    askme = ws.Prompt(PROMPT_YESNO, "Вы уверены?", "Сгенерировать документ?")
    If askme=0 Then
    Exit Sub
    End If
    '--------------------------------------------------------------------------------------------------------------------------------------
    Set childdoc = db.GetDocumentByUNID(pdoc.GetItemValue("ID_Rubl_obl")(0))   
    'Что делаем с полями
    '   Msgbox childdoc.Name(0)
    '   Msgbox childdoc.Seria(0)
    '   Msgbox childdoc.Number_reg(0)
    '   Msgbox childdoc.Data_reg_izm(0)  
    '   Msgbox childdoc.Pravo_vlad(0)
    '   Msgbox pdoc.Dol_podp(0)
    '   Msgbox pdoc.Osn_podpis(0)
    '   Msgbox pdoc.Podpisant(0)
    '   Msgbox Today

    '-------------------------------------------------------------------------------------------------------------------------------------------   

    '   Set sprdb = sess.GetDatabase(db.Server, profile.pthRefer(0))

    Dim coll1 As NotesDocumentCollection
    Dim dt1 As New NotesDateTime("")
    Dim doc1 As NotesDocument 'Справочный док

    'По коду шаблона ищем в справочнике шаблонов нужную карточку шаблона
    pth_str$=""
    Set coll1 = sprdb.Search({Form = "TmpForm_Profile" & ShortName = "P001"},Nothing,0)
    '   Msgbox "Количество док-тов : " & coll1.Count
    Dim rttmp As NotesRichTextItem
    If coll1.Count >0 Then
    Set doc1 = coll1.GetFirstDocument
    Set rttmp = doc1.GetFirstItem("TmpDoc")
    Forall o In rttmp.EmbeddedObjects
    If Right(o.Name,4)=".dot" Then
    pth_str$ = o.Name
    Goto ExtrMark
    End If
    End Forall
    End If
    If pth_str$="" Then
    Messagebox "Невозможно перейти к генерации поручения: в справочнике шаблонов отсутствует шаблон поручения!",,"Внимание!"
    Exit Sub
    End If

    'pth_str$ шаблон найденный

    ExtrMark:  
    'Создаем каталог временной выгрузки на С
    Dim dt As New NotesDateTime( "" )
    Call dt.SetNow
    dt_date$ = dt.DateOnly
    dt_time$ = dt.TimeOnly
    dt_date$ = Left(dt_date$,2)+Right(Left(dt_date$,5),2)+Right(dt_date$,2)
    dt_time$ = Left(dt_time$,2)+Right(Left(dt_time$,5),2)+Right(dt_time$,2)

    'Environ$ - возвращает значение типа str
    tmppth_str = Environ$("TEMP") + "\TmpTpl_"+dt_date$+"_"+dt_time$
    'tmppth_str строковое выражение, значение которого является именем создаваемого каталога.
    Mkdir tmppth_str

    'Выгружаем шаблон в созданную директорию
    Dim object As NotesEmbeddedObject
    Set object = rttmp.GetEmbeddedObject(pth_str$ )
    'в созданный каталог помещаем наш шаблон
    Call object.ExtractFile (tmppth_str & "\" & Cstr(pth_str$))

    '--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------  
    Dim Word As Variant
    Dim WordDoc As Variant

    'Новый объект Word

    Set Word = CreateObject("Word.Application") 'Создание объекта Word'a
    Call Word.documents.add(tmppth_str & "\" & Cstr(pth_str$)) 'Создаем новый документ на основе соответствующего шаблона
    Set WordDoc = Word.activedocument

    'Присваивание полям-Word'a значений из полей notes-документа
    worddoc.FormFields(1).result = childdoc.Name(0)
    worddoc.FormFields(2).result = childdoc.Seria(0)
    worddoc.FormFields(3).result = childdoc.Number_reg(0)
    worddoc.FormFields(4).result = childdoc.Data_reg_izm(0)    
    worddoc.FormFields(5).result = childdoc.Pravo_vlad(0)
    worddoc.FormFields(6).result = Today
    worddoc.FormFields(7).result = pdoc.Dol_podp(0)    
    worddoc.FormFields(8).result = pdoc.Osn_podpis(0)
    worddoc.FormFields(9).result = pdoc.Podpisant(0)   
    worddoc.FormFields(10).result = Today  

    nm_doc$ = ReplaceChr(ReplaceChr({"}, {"}, " "),{/}," ")+"File1.doc"
    WordDoc.saveas(tmppth_str + "\"+nm_doc$)

    'проверяем есть ли поле в документе
    'rttmp - шаблон
    If pdoc.HasItem("Sfakt") Then
    Set rttmp = pdoc.GetFirstItem("Sfakt")
    Else
    Set rttmp = New NotesRichTextItem(pdoc, "Sfakt")
    End If

    'Добавляет в RTF-поле присоединенный файл или ссылку на него.
    Set object = rttmp.EmbedObject( EMBED_ATTACHMENT, nm_doc$, tmppth_str + "\"+nm_doc$)

    WordDoc.close

    'открыть на редактирование тек. док
    Call ws.EditDocument(True, pdoc)

    '   Удаляем директорию
    Kill tmppth_str & "\" & Cstr(pth_str$)
    Kill tmppth_str + "\"+nm_doc$
    Rmdir tmppth_str
    Exit Sub

    MesError:  
    'Обработка сбоев
    ErrNo = Err
    ErrLine = Erl
    ErrMessage = Error
    Messagebox "Button Click " + Cstr(Err) + " " + Cstr(Erl) + " " + Error
    Exit Sub
    End Sub

    'открыть на редактирование тек. док
    Call ws.EditDocument(True, pdoc)

    использует форму по умолчанию получается, может как то можно прописать какую форму функция должна брать!?
     

    Вложения:

  2. alexas

    alexas Well-Known Member

    Регистрация:
    10 июн 2009
    Сообщения:
    215
    Симпатии:
    0
    Надо полагать в pdoc поле Form отсутствует.

    pdoc.Form = "YourForm"
    Call ws.EditDocument(True, pdoc)
     
  3. Dimok-163rus

    Dimok-163rus Well-Known Member

    Регистрация:
    20 июн 2013
    Сообщения:
    88
    Симпатии:
    0
    мне не поле Form надо, а саму форму )
    сама форма открыта, я же вложил файлы jpeg
     
  4. alexas

    alexas Well-Known Member

    Регистрация:
    10 июн 2009
    Сообщения:
    215
    Симпатии:
    0
    В поле Form хранится название формы по которой будет открываться док.
    Если поля нет или оно пустое - док будет открываться по форме "по умолчанию"

    P.S.
    Надо внимательнее читать, что пишут гуру: первый абзац, после цитаты
     
  5. Dimok-163rus

    Dimok-163rus Well-Known Member

    Регистрация:
    20 июн 2013
    Сообщения:
    88
    Симпатии:
    0
    форма пустая написал, удалил форму по умолчанию теперь, вот что пишет... <_<
     

    Вложения:

  6. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    Феерично...

    Тебе все правильно сказали, но форму удалять не надо было.
    Просто сохранить надо документ.
    Не знаю с какой версии, но ws.editDocument переполучает документ как-то и без сохранения поля в нем не появляются.

    В каждой своей форме создай поле Form = "<имя формы>", текстовое.
     
  7. Dimok-163rus

    Dimok-163rus Well-Known Member

    Регистрация:
    20 июн 2013
    Сообщения:
    88
    Симпатии:
    0
    я не удалил форму по умолчанию, а просто убрал флажок с неё...

    убрал строку одну, теперь у меня не вызывается вторая форма на редактирование(что уже хорошо), а просто не присваивается полю RTF файл, поля RTF не находит в pdoc

    Код (LotusScript):
    Sub Click(Source As Button)

    'обработчик ошибок
    On Error Goto MesError
    '_________________________________________
    Dim ws As New NotesUIWorkspace
    Dim sess As New NotesSession

    Dim pdoc As NotesDocument, childdoc As NotesDocument, tmpDoc As NotesDocument, profile As NotesDocument
    Dim dc As NotesDocumentCollection

    Dim db As NotesDatabase, sprdb As NotesDatabase

    Dim uidoc As NotesUIDocument

    Dim view As NotesView

    'Поля, необходимо которые выгрузить
    Dim Seria(0) As Variant
    Dim Number_reg(0) As String
    Dim Data_reg_izm(0) As Variant
    Dim Pravo_vlad(0)As Variant
    Dim Dol_podp(0)As Variant
    Dim Osn_podpis(0)As Variant
    Dim Podpisant(0)As Variant


    Set uidoc = ws.CurrentDocument
    Set pdoc = uidoc.Document  
    Set db = sess.CurrentDatabase

    'Профиль системы и база справочника
    Set profile = db.GetProfileDocument("ConfigPrf")
    If profile.pthRefer(0)="" Then
    Messagebox "В профиле конфигурации системы не указан путь к БД Справочники!",0 ,"Ошибка настройки системы"
    Exit Sub
    End If

    Set sprdb = sess.GetDatabase(db.Server, profile.pthRefer(0))

    'Продолжать? 
    Dim askme As Variant
    askme = ws.Prompt(PROMPT_YESNO, "Вы уверены?", "Сгенерировать документ?")
    If askme=0 Then
    Exit Sub
    End If
    '--------------------------------------------------------------------------------------------------------------------------------------
    Set childdoc = db.GetDocumentByUNID(pdoc.GetItemValue("ID_Rubl_obl")(0))   
    'Что делаем с полями
    '   Msgbox childdoc.Name(0)
    '   Msgbox childdoc.Seria(0)
    '   Msgbox childdoc.Number_reg(0)
    '   Msgbox childdoc.Data_reg_izm(0)  
    '   Msgbox childdoc.Pravo_vlad(0)
    '   Msgbox pdoc.Dol_podp(0)
    '   Msgbox pdoc.Osn_podpis(0)
    '   Msgbox pdoc.Podpisant(0)
    '   Msgbox Today

    '-------------------------------------------------------------------------------------------------------------------------------------------   

    '   Set sprdb = sess.GetDatabase(db.Server, profile.pthRefer(0))

    Dim coll1 As NotesDocumentCollection
    Dim dt1 As New NotesDateTime("")
    Dim doc1 As NotesDocument 'Справочный док

    'По коду шаблона ищем в справочнике шаблонов нужную карточку шаблона
    pth_str$=""
    Set coll1 = sprdb.Search({Form = "TmpForm_Profile" & ShortName = "P001"},Nothing,0)
    '   Msgbox "Количество док-тов : " & coll1.Count
    Dim rttmp As NotesRichTextItem
    If coll1.Count >0 Then
    Set doc1 = coll1.GetFirstDocument
    Set rttmp = doc1.GetFirstItem("TmpDoc")
    Forall o In rttmp.EmbeddedObjects
    If Right(o.Name,4)=".dot" Then
    pth_str$ = o.Name
    Goto ExtrMark
    End If
    End Forall
    End If
    If pth_str$="" Then
    Messagebox "Невозможно перейти к генерации поручения: в справочнике шаблонов отсутствует шаблон поручения!",,"Внимание!"
    Exit Sub
    End If

    'pth_str$ шаблон найденный

    ExtrMark:  
    'Создаем каталог временной выгрузки на С
    Dim dt As New NotesDateTime( "" )
    Call dt.SetNow
    dt_date$ = dt.DateOnly
    dt_time$ = dt.TimeOnly
    dt_date$ = Left(dt_date$,2)+Right(Left(dt_date$,5),2)+Right(dt_date$,2)
    dt_time$ = Left(dt_time$,2)+Right(Left(dt_time$,5),2)+Right(dt_time$,2)

    'Environ$ - возвращает значение типа str
    tmppth_str = Environ$("TEMP") + "\TmpTpl_"+dt_date$+"_"+dt_time$
    'tmppth_str строковое выражение, значение которого является именем создаваемого каталога.
    Mkdir tmppth_str

    'Выгружаем шаблон в созданную директорию
    Dim object As NotesEmbeddedObject
    Set object = rttmp.GetEmbeddedObject(pth_str$ )
    'в созданный каталог помещаем наш шаблон
    Call object.ExtractFile (tmppth_str & "\" & Cstr(pth_str$))

    '--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------  
    Dim Word As Variant
    Dim WordDoc As Variant

    'Новый объект Word

    Set Word = CreateObject("Word.Application") 'Создание объекта Word'a
    Call Word.documents.add(tmppth_str & "\" & Cstr(pth_str$)) 'Создаем новый документ на основе соответствующего шаблона
    Set WordDoc = Word.activedocument

    'Присваивание полям-Word'a значений из полей notes-документа
    worddoc.FormFields(1).result = childdoc.Name(0)
    worddoc.FormFields(2).result = childdoc.Seria(0)
    worddoc.FormFields(3).result = childdoc.Number_reg(0)
    worddoc.FormFields(4).result = childdoc.Data_reg_izm(0)    
    worddoc.FormFields(5).result = childdoc.Pravo_vlad(0)
    worddoc.FormFields(6).result = Today
    worddoc.FormFields(7).result = pdoc.Dol_podp(0)    
    worddoc.FormFields(8).result = pdoc.Osn_podpis(0)
    worddoc.FormFields(9).result = pdoc.Podpisant(0)   
    worddoc.FormFields(10).result = Today  

    nm_doc$ = ReplaceChr(ReplaceChr({"}, {"}, " "),{/}," ")+"File1.doc"
    WordDoc.saveas(tmppth_str + "\"+nm_doc$)

    'проверяем есть ли поле в документе
    'rttmp - шаблон
    If pdoc.HasItem("Sfakt") Then
    Set rttmp = pdoc.GetFirstItem("Sfakt")
    Else
    Set rttmp = New NotesRichTextItem(pdoc, "Sfakt")
    End If

    WordDoc.close

    'Добавляет в RTF-поле присоединенный файл или ссылку на него.
    Set object = rttmp.EmbedObject( EMBED_ATTACHMENT, nm_doc$, tmppth_str + "\"+nm_doc$)

    'открыть на редактирование тек. док
    'Call ws.EditDocument(True, pdoc)

    '   Удаляем директорию
    Kill tmppth_str & "\" & Cstr(pth_str$)
    Kill tmppth_str + "\"+nm_doc$
    Rmdir tmppth_str
    Exit Sub

    MesError:  
    'Обработка сбоев
    ErrNo = Err
    ErrLine = Erl
    ErrMessage = Error
    Messagebox "Button Click " + Cstr(Err) + " " + Cstr(Erl) + " " + Error
    Exit Sub
    End Sub
    Когда идет проверка на "есть ли поле RTF в документе:

    Код (LotusScript):
    'проверяем есть ли поле в документе
    'rttmp - шаблон
    If pdoc.HasItem("Sfakt") Then
    Set rttmp = pdoc.GetFirstItem("Sfakt")
    Else
    Set rttmp = New NotesRichTextItem(pdoc, "Sfakt")
    End If
    отрабатывает условие второе:
    Код (LotusScript):
    Set rttmp = New NotesRichTextItem(pdoc, "Sfakt")
    получается в моем документе RTF поля нет, его надо объявлять что ли?
    Вложил рис. с формой, в которой поле RTF (Sfakt) имеется
     

    Вложения:

  8. alexas

    alexas Well-Known Member

    Регистрация:
    10 июн 2009
    Сообщения:
    215
    Симпатии:
    0
    Нет смысла удалять форму "по умолчанию" для разрешения твоей ситуации - в доке надо иметь Item с именем "Form" и содержанием "Название формы" (по ней и будет открываться док).
    Если pdoc создаешь в UI - cоздай на форме текстовое поле с именем "Form" и увидишь что оно пустое.
    Если pdoc создаешь в бекграунде (т.е. агентом, скриптом ...) - в скрипте (на кнопке) напиши "msgbox pdoc.Form(0)" непосредственно перед "ws.EditDocument(..." - получишь пустой месседж!

    P.S.
    savl
    пардон, тебя я не заметил :). Исчез.
     
  9. Dimok-163rus

    Dimok-163rus Well-Known Member

    Регистрация:
    20 июн 2013
    Сообщения:
    88
    Симпатии:
    0
    Форму по умолчанию я не удалил, сказал же, она не должна идти по умолчанию - такое задание, флажок должен быть снят - снял флажок!
    Теперь у меня не присваивается полю RTF объект, вот что не отрабатывает:

    Код (LotusScript):
    'Выгружаем шаблон в созданную директорию
    Dim object As NotesEmbeddedObject
    Set object = rttmp.GetEmbeddedObject(pth_str$ )
    'в созданный каталог помещаем наш шаблон
    Call object.ExtractFile (tmppth_str & "\" & Cstr(pth_str$))

    Set rttmp = New NotesRichTextItem(pdoc, "Sfakt")

    'Добавляет в RTF-поле присоединенный файл или ссылку на него.
    Set object = rttmp.EmbedObject( EMBED_ATTACHMENT, nm_doc$, tmppth_str + "\"+nm_doc$)
    ws.EditDocument я убрал - оно не нужно
     
  10. alexas

    alexas Well-Known Member

    Регистрация:
    10 июн 2009
    Сообщения:
    215
    Симпатии:
    0
    tmppth_str & "\" & Cstr(pth_str$)) = tmppth_str + "\"+nm_doc$ - это ТАК ?????
     
  11. Dimok-163rus

    Dimok-163rus Well-Known Member

    Регистрация:
    20 июн 2013
    Сообщения:
    88
    Симпатии:
    0
    это же наименования шаблона, они не причем скорей всего...
     
  12. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    Dim-ok
    Еще раз: форма нужна для отображения документа на экране.
    Если поле Form - нет в документе, то открывается форма по умолчанию, поэтому она должна быть в базе Иначе все время будет ошибка такая.
    Поле должно содержать имя формы(или Alias), по которой он создан.

    Теперь про файл:
    Чтобы увидеть файл после прикрепления кодом. документ надо переоткрыть. такая вот особенность работы.
    Код (LotusScript):
    Set object = rttmp.EmbedObject( EMBED_ATTACHMENT, nm_doc$, tmppth_str + "\"+nm_doc$)
    call pDoc.save(true,doc.Isresponse)
    call uidoc.close
    call ws.editdocument(false,pdoc)
    Call uidoc
     
  13. Dimok-163rus

    Dimok-163rus Well-Known Member

    Регистрация:
    20 июн 2013
    Сообщения:
    88
    Симпатии:
    0
    Добавил в форму текстовое поле Form, по умолчанию поставил значение своей формы "SFakt".

    call pDoc.save(true,pdoc.IsResponse)
    call uidoc.close
    call ws.editdocument(false,pdoc)
    Call uidoc.close

    у меня три раза ошибка лотуса чет выскакивала <_<
     

    Вложения:

  14. Dimok-163rus

    Dimok-163rus Well-Known Member

    Регистрация:
    20 июн 2013
    Сообщения:
    88
    Симпатии:
    0
    убрал первое закрыть call uidoc.close, отработала программа, создала док, теперь полю присвоен файл, но как я только нажимаю созранить или выйти, занова открываю док этот, так у меня файлик о5 лежит вне формы ) Замкнутый круг пля ) Код и рисунки форм до и после генерации:

    Код (LotusScript):
    Sub Click(Source As Button)

    'обработчик ошибок
    On Error Goto MesError
    '_________________________________________
    Dim ws As New NotesUIWorkspace
    Dim sess As New NotesSession

    Dim pdoc As NotesDocument, childdoc As NotesDocument, tmpDoc As NotesDocument, profile As NotesDocument
    Dim dc As NotesDocumentCollection

    Dim db As NotesDatabase, sprdb As NotesDatabase

    Dim uidoc As NotesUIDocument

    Dim view As NotesView

    'Поля, необходимо которые выгрузить
    Dim Seria(0) As Variant
    Dim Number_reg(0) As String
    Dim Data_reg_izm(0) As Variant
    Dim Pravo_vlad(0)As Variant
    Dim Dol_podp(0)As Variant
    Dim Osn_podpis(0)As Variant
    Dim Podpisant(0)As Variant


    Set uidoc = ws.CurrentDocument
    Set pdoc = uidoc.Document  
    Set db = sess.CurrentDatabase

    'Профиль системы и база справочника
    Set profile = db.GetProfileDocument("ConfigPrf")
    If profile.pthRefer(0)="" Then
    Messagebox "В профиле конфигурации системы не указан путь к БД Справочники!",0 ,"Ошибка настройки системы"
    Exit Sub
    End If

    Set sprdb = sess.GetDatabase(db.Server, profile.pthRefer(0))

    'Продолжать? 
    Dim askme As Variant
    askme = ws.Prompt(PROMPT_YESNO, "Вы уверены?", "Сгенерировать документ?")
    If askme=0 Then
    Exit Sub
    End If
    '--------------------------------------------------------------------------------------------------------------------------------------
    Set childdoc = db.GetDocumentByUNID(pdoc.GetItemValue("ID_Rubl_obl")(0))   
    'Что делаем с полями
    '   Msgbox childdoc.Name(0)
    '   Msgbox childdoc.Seria(0)
    '   Msgbox childdoc.Number_reg(0)
    '   Msgbox childdoc.Data_reg_izm(0)  
    '   Msgbox childdoc.Pravo_vlad(0)
    '   Msgbox pdoc.Dol_podp(0)
    '   Msgbox pdoc.Osn_podpis(0)
    '   Msgbox pdoc.Podpisant(0)
    '   Msgbox Today

    '-------------------------------------------------------------------------------------------------------------------------------------------   

    '   Set sprdb = sess.GetDatabase(db.Server, profile.pthRefer(0))

    Dim coll1 As NotesDocumentCollection
    Dim dt1 As New NotesDateTime("")
    Dim doc1 As NotesDocument 'Справочный док

    'По коду шаблона ищем в справочнике шаблонов нужную карточку шаблона
    pth_str$=""
    Set coll1 = sprdb.Search({Form = "TmpForm_Profile" & ShortName = "P001"},Nothing,0)
    '   Msgbox "Количество док-тов : " & coll1.Count
    Dim rttmp As NotesRichTextItem
    If coll1.Count >0 Then
    Set doc1 = coll1.GetFirstDocument
    Set rttmp = doc1.GetFirstItem("TmpDoc")
    Forall o In rttmp.EmbeddedObjects
    If Right(o.Name,4)=".dot" Then
    pth_str$ = o.Name
    Goto ExtrMark
    End If
    End Forall
    End If
    If pth_str$="" Then
    Messagebox "Невозможно перейти к генерации поручения: в справочнике шаблонов отсутствует шаблон поручения!",,"Внимание!"
    Exit Sub
    End If

    'pth_str$ шаблон найденный

    ExtrMark:  
    'Создаем каталог временной выгрузки на С
    Dim dt As New NotesDateTime( "" )
    Call dt.SetNow
    dt_date$ = dt.DateOnly
    dt_time$ = dt.TimeOnly
    dt_date$ = Left(dt_date$,2)+Right(Left(dt_date$,5),2)+Right(dt_date$,2)
    dt_time$ = Left(dt_time$,2)+Right(Left(dt_time$,5),2)+Right(dt_time$,2)

    'Environ$ - возвращает значение типа str
    tmppth_str = Environ$("TEMP") + "\TmpTpl_"+dt_date$+"_"+dt_time$
    'tmppth_str строковое выражение, значение которого является именем создаваемого каталога.
    Mkdir tmppth_str

    'Выгружаем шаблон в созданную директорию
    Dim object As NotesEmbeddedObject
    Set object = rttmp.GetEmbeddedObject(pth_str$ )
    'в созданный каталог помещаем наш шаблон
    Call object.ExtractFile (tmppth_str & "\" & Cstr(pth_str$))

    '--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------  
    Dim Word As Variant
    Dim WordDoc As Variant

    'Новый объект Word

    Set Word = CreateObject("Word.Application") 'Создание объекта Word'a
    Call Word.documents.add(tmppth_str & "\" & Cstr(pth_str$)) 'Создаем новый документ на основе соответствующего шаблона
    Set WordDoc = Word.activedocument

    'Присваивание полям-Word'a значений из полей notes-документа
    worddoc.FormFields(1).result = childdoc.Name(0)
    worddoc.FormFields(2).result = childdoc.Seria(0)
    worddoc.FormFields(3).result = childdoc.Number_reg(0)
    worddoc.FormFields(4).result = childdoc.Data_reg_izm(0)  
    worddoc.FormFields(5).result = childdoc.Pravo_vlad(0)
    worddoc.FormFields(6).result = Today
    worddoc.FormFields(7).result = pdoc.Dol_podp(0)    
    worddoc.FormFields(8).result = pdoc.Osn_podpis(0)
    worddoc.FormFields(9).result = pdoc.Podpisant(0)   
    worddoc.FormFields(10).result = Today  

    nm_doc$ = ReplaceChr(ReplaceChr({"}, {"}, " "),{/}," ")+"File1.doc"
    WordDoc.saveas(tmppth_str + "\"+nm_doc$)

    'проверяем есть ли поле в документе
    'rttmp - шаблон
    If pdoc.HasItem("Sfakt") Then      
    Msgbox "есть поле"
    Set rttmp = pdoc.GetFirstItem("Sfakt")
    Else       
    Msgbox "нет поля"
    Set rttmp = New NotesRichTextItem(pdoc, "Sfakt")
    End If

    WordDoc.close

    'Добавляет в RTF-поле присоединенный файл или ссылку на него.
    Set object = rttmp.EmbedObject( EMBED_ATTACHMENT, nm_doc$, tmppth_str + "\"+nm_doc$)

    'открыть на редактирование тек. док

    Call pdoc.save(True,pdoc.IsResponse)
    Call uidoc.close
    Call ws.editdocument(False,pdoc)

    '   Удаляем директорию
    Kill tmppth_str & "\" & Cstr(pth_str$)
    Kill tmppth_str + "\"+nm_doc$
    Rmdir tmppth_str
    Exit Sub

    MesError:  
    'Обработка сбоев
    ErrNo = Err
    ErrLine = Erl
    ErrMessage = Error
    Messagebox "Button Click " + Cstr(Err) + " " + Cstr(Erl) + " " + Error
    Exit Sub
    End Sub
     

    Вложения:

    • 1.jpg
      1.jpg
      Размер файла:
      333,1 КБ
      Просмотров:
      15
    • 2.jpg
      2.jpg
      Размер файла:
      339,8 КБ
      Просмотров:
      10
    • 3.jpg
      3.jpg
      Размер файла:
      325,6 КБ
      Просмотров:
      13
  15. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    Молодец))))) а форма то такая есть? Имя у нее какое, у существенного факта?
    В дизайнере имя формы есть, вот его и надо прописать в это поле.

    поcледний close? Я видимо ошибся.

    Судя по всему файл прикрепился, вот только что за ошибка непонятная...
    Еще надо word.close делать до того, как ты будешь прикреплять файл
     
  16. Dimok-163rus

    Dimok-163rus Well-Known Member

    Регистрация:
    20 июн 2013
    Сообщения:
    88
    Симпатии:
    0

    SFakt называется форма, а вот файл после закрытия как написал в предыдущем сообщении уходит вниз формы при повторном открытии, как будто не закрепился в поле RTF по закрытию формы
     
  17. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    RTF может сносится при закрытии?
    Посмотри через свойство документа после того как откроешь документ, если оно там.
    И чему равно поле Form.

    Может поможет:
    Код (LotusScript):
    call pDoc.ComputeWithForm(false,false)
    call pDoc.save(true,doc.Isresponse)
     
  18. Dimok-163rus

    Dimok-163rus Well-Known Member

    Регистрация:
    20 июн 2013
    Сообщения:
    88
    Симпатии:
    0
    call pDoc.ComputeWithForm(false,false)
    call pDoc.save(true,doc.Isresponse)

    не помогли (

    Открыл док после генерации, Form = SFakt (Верно)
    Sfakt поле, в нем ничего нет
     
  19. alexas

    alexas Well-Known Member

    Регистрация:
    10 июн 2009
    Сообщения:
    215
    Симпатии:
    0
    Сорри, в 10 комменте был неправ - спойлер не читал, написал по контексту, как понял.
    В коде...
    Смотрим Help:
    Syntax
    Set notesEmbeddedObject = notesRichTextItem.EmbedObject( type%, class$, source$, [ name$ ] )
    ...........
    class$
    String.
    ... If you are using EMBED_OBJECTLINK or EMBED_ATTACHMENT, specify an empty string ("").
     
  20. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.079
    Симпатии:
    300
    читать всю треду не удосужился... <_<, может коллеги уже и говорили
    Такое может возникнуть если РТ поле не создано!
    т.е. для вновь созданных доков:
    - док не сохранялся с пересчетом по форме (CWF) - если создан программно (хотя и здесь м.б. нюансы). Выше это выполнялось...
    - док не сохранялся интерактивно
    - поле не было принудительно создано (именно как рт айтем) - даже если поле есть на форме - это нужно сделать, если не выполнены к-л из условий выше
    поле точно РТ типа?

    и перестаньте путать в объяснениях форму и документ...
    документ - это то что хранится с данными, в БД, форма - это док типа дизайнноты и он напрямую не связан с доком, кот. вы создаете программно или интерактивно вне дизайнера
     
Загрузка...

Поделиться этой страницей