Обращение К Др.форме Из Гл.формы

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

  1. Dimok-163rus

    Dimok-163rus Well-Known Member

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

    Работаю в форме "Рублев.облигации"(jpeg 1 файл вложен) - она является основной формой, в которой содержатся многие другие:

    - досрочное погашение,
    - списки владельцев,
    - существенные факты,
    - купонные периоды и т.д

    кнопку создал в форме существенные факты(jpeg 2 файл вложен) "Генерация сущ.фактов", с помощью неё будет идти выгрузка в Word, код кнопки ниже...

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

    Dim ws As New NotesUIWorkspace
    Dim sess As New NotesSession

    On Error Goto handler

    Dim NotDocColl As NotesDocumentCollection
    Dim tmpdoc As NotesDocument

    Dim curdb As NotesDatabase
    Dim uidoc As NotesUIDocument
    Dim pdoc As NotesDocument

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

    Dim refdb As NotesDatabase
    Dim profile As NotesDocument

    'Продолжать? 
    Dim askme As Variant
    askme = ws.Prompt(PROMPT_YESNO, "Вы уверены?", "Сгенерировать документ?")
    '   Msgbox pdoc.Podpisant(0)   
    If askme=0 Then
    Exit Sub
    End If

    '--------------------------------------------------------------------------------------------------------------------------------------
    'Проверка на корректность ввода 
    If pdoc.Podpisant(0)="" Then
    Messagebox "Не указан подписант", 0 ,"Ошибка ввода"
    Messagebox "Заполните поле подписант!"
    Exit Sub       
    End If
    If pdoc.Dol_podp(0)="" Then
    Messagebox "Не указана должность подписанта", 0 ,"Ошибка ввода"
    Messagebox "Заполните поле должность подписанта!"
    Exit Sub       
    End If
    If pdoc.Osn_podpis(0)="" Then
    Messagebox "Не указана основание для подписания сущ.фактов!", 0 ,"Ошибка ввода"
    Messagebox "Заполните поле основание для подписания сущ.фактов!"
    Exit Sub       

    'Поля из других форм

    'Открыть на редактирование ajhve
    '       If pdoc.EditMode = False Then
    '           Call ws.EditDocument( True )
    '       End If 
    '       Call pdoc.Save( True, False )
    '       Exit Sub

    handler:
    ' Простейший обработчик ошибок
    Msgbox "Error:" & Error$ & Chr(10) & Chr(13) & " in line:" & Erl,16
    If Not view Is Nothing Then View.AutoUpdate = True ' Это чтобы вернуть автообновление при ошибке.
    Resume endh
    endh:
    End If
    End Sub
    как мне обратиться к полям другой формы, например форма "купонный период" поле "Num_period", она так же вложена в форму "рублевые облигации",
    дабы проверить поля на корректность ввода и для последующих работ с ними...
     

    Вложения:

  2. Dragon108

    Dragon108 Well-Known Member

    Регистрация:
    19 янв 2010
    Сообщения:
    264
    Симпатии:
    0
    Ну я правильно понимаю что "Рублев.облигации" - это Парент док? а все остальные доки (- досрочное погашение, - списки владельцев, - существенные факты, - купонные периоды и т.д) являются к нему респонсами?

    Тогда берите в коде от вашего pdoc - ParentDocument - аолучите документ родитель. Возьмете от него (парент дока) Responses - получите коллекцию респонсов к нему. В ней и ищите и проверяйте нужные вам доки
     
  3. Dimok-163rus

    Dimok-163rus Well-Known Member

    Регистрация:
    20 июн 2013
    Сообщения:
    88
    Симпатии:
    0
    В коде нашел родительский док Parent, потом коллекцию от него документов, вместо номера документа в коллекции можно ли подставить имя этого документа/формы?
    Код (LotusScript):
    Sub Click(Source As Button)

    Dim ws As New NotesUIWorkspace
    Dim sess As New NotesSession
    Dim view As NotesView
    Dim db As NotesDatabase
    Dim parentdoc As NotesDocument

    On Error Goto handler

    Dim NDColl As NotesDocumentCollection

    Dim uidoc As NotesUIDocument
    Set uidoc = ws.CurrentDocument

    'док-т который открыт
    Set docnow = uidoc.Document

    Set db = sess.CurrentDatabase

    'Продолжать? 
    Dim askme As Variant
    askme = ws.Prompt(PROMPT_YESNO, "Вы уверены?", "Сгенерировать документ?")
    '   Msgbox pdoc.Podpisant(0)   
    If askme=0 Then
    Exit Sub
    End If

    '--------------------------------------------------------------------------------------------------------------------------------------
    'Обращение к полям других форм

    Set sess = db.Parent
    Set NDColl = db.AllDocuments
    Msgbox NDColl.Count

    'Вместо 1 мне можно подставить название закладки "досрочное погашение" к прмеру?
    'для дальнейшей работы с полями "досрочного погашения"
    Set parentdoc = NDColl.GetNthDocument(1)


    Exit Sub

    handler:
    ' Простейший обработчик ошибок
    Msgbox "Error:" & Error$ & Chr(10) & Chr(13) & " in line:" & Erl,16
    If Not view Is Nothing Then View.AutoUpdate = True ' Это чтобы вернуть автообновление при ошибке.
    Resume endh
    endh:
    End Sub
     
  4. Dragon108

    Dragon108 Well-Known Member

    Регистрация:
    19 янв 2010
    Сообщения:
    264
    Симпатии:
    0
    Прежде всего не путайте документ и форму, первое это основополагающая сущность, второе - элемент дизайна, поля на форме могут не находится в доке и наоборот.

    Насчет второго вам подскажет класс NotesDocumentCollection - ссылка

    А вообще, скорее всего, мне кажется все ваши документ еще как то связаны через свои UNID-ы друг с другом - поищите поля в которых эти UNID-ы могут находится
     
  5. Dimok-163rus

    Dimok-163rus Well-Known Member

    Регистрация:
    20 июн 2013
    Сообщения:
    88
    Симпатии:
    0
    в каждом документе есть ID_Rubl_obl - он у всех документов в рублевой облегации одинаковый, с ним как то можно увязать поиск нужного документа, с полями которого нужны операции?

    А в принципе сейчас смотрю, так как я нахожусь в "существенных фактах" и могу легко найти значение любого поля в "сущ-ых фактах" с помощью Msgbox docnow.Podpisant(0) в коде, мне попросту нужно подняться на стадию "рублевой облегации" на форму эту и там прописать аналогично
    Код (LotusScript):
    Sub Click(Source As Button)

    Dim ws As New NotesUIWorkspace
    Dim sess As New NotesSession
    Dim view As NotesView
    Dim db As NotesDatabase
    Dim parentdoc As NotesDocument

    On Error Goto handler

    Dim NDColl As NotesDocumentCollection
    Dim tmpdoc As NotesDocument

    Dim currNoteID As String   

    Dim uidoc As NotesUIDocument

    Set uidoc = ws.CurrentDocument
    Set docnow = uidoc.Document

    Set db = sess.CurrentDatabase

    'Продолжать? 
    Dim askme As Variant
    askme = ws.Prompt(PROMPT_YESNO, "Вы уверены?", "Сгенерировать документ?")
    '   Msgbox pdoc.Podpisant(0)   
    If askme=0 Then
    Exit Sub
    End If

    '--------------------------------------------------------------------------------------------------------------------------------------
    'Обращение к полям других форм

    Msgbox docnow.Podpisant(0)
    Set sess = db.Parent
    Set NDColl = db.AllDocuments
    Msgbox NDColl.Count

    'Вместо 1 мне можно подставить название закладки "досрочное погашение" к прмеру?
    'для дальнейшей работы с полями "досрочного погашения"
    Set parentdoc = NDColl.GetNthDocument(1)


    '--------------------------------------------------------------------------------------------------------------------------------------
    'Проверка на корректность ввода 
    '   If parentdoc.Podpisant(0)="" Then
    '       Messagebox "Не указан подписант", 0 ,"Ошибка ввода"
    '       Messagebox "Заполните поле подписант!"
    '       Exit Sub       
    '   End If
    '   If parentdoc.Dol_podp(0)="" Then
    '       Messagebox "Не указана должность подписанта", 0 ,"Ошибка ввода"
    '       Messagebox "Заполните поле должность подписанта!"
    '       Exit Sub       
    '   End If
    '   If parentdoc.Osn_podpis(0)="" Then
    '       Messagebox "Не указана основание для подписания сущ.фактов!", 0 ,"Ошибка ввода"
    '       Messagebox "Заполните поле основание для подписания сущ.фактов!"
    '       Exit Sub       
    Exit Sub

    handler:
    ' Простейший обработчик ошибок
    Msgbox "Error:" & Error$ & Chr(10) & Chr(13) & " in line:" & Erl,16
    If Not view Is Nothing Then View.AutoUpdate = True ' Это чтобы вернуть автообновление при ошибке.
    Resume endh
    endh:
    End Sub
     
  6. Dimok-163rus

    Dimok-163rus Well-Known Member

    Регистрация:
    20 июн 2013
    Сообщения:
    88
    Симпатии:
    0
    Такой вопрос, как мне прописать код, который бы отработал MsgBox рублев.облегация.Поле1(0),
    находясь внутри рублевой облегации, на документе "существенные факты", вот тут запутался

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

    Dim ws As New NotesUIWorkspace
    Dim sess As New NotesSession
    Dim view As NotesView
    Dim db As NotesDatabase
    Dim parentdoc As NotesDocument

    On Error Goto handler

    Dim NDColl As NotesDocumentCollection
    Dim tmpdoc As NotesDocument

    Dim currNoteID As String   

    Dim uidoc As NotesUIDocument

    Set uidoc = ws.CurrentDocument
    Set docnow = uidoc.Document

    Set db = sess.CurrentDatabase

    'Продолжать? 
    Dim askme As Variant
    askme = ws.Prompt(PROMPT_YESNO, "Вы уверены?", "Сгенерировать документ?")
    If askme=0 Then
    Exit Sub
    End If

    '--------------------------------------------------------------------------------------------------------------------------------------
    'Обращение к полю формы "рублевые облигации"   

    '   Msgbox docnow.Podpisant(0)
    Set sess = db.Parent
    Set NDColl = db.AllDocuments
    '   Msgbox NDColl.Count

    Exit Sub

    handler:
    ' Простейший обработчик ошибок
    Msgbox "Error:" & Error$ & Chr(10) & Chr(13) & " in line:" & Erl,16
    If Not view Is Nothing Then View.AutoUpdate = True ' Это чтобы вернуть автообновление при ошибке.
    Resume endh
    endh:
    End Sub
     
  7. Dimok-163rus

    Dimok-163rus Well-Known Member

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

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    Тут и я уже запутался... Документ или закладка.
    Документ один или нет?
     
  9. Dimok-163rus

    Dimok-163rus Well-Known Member

    Регистрация:
    20 июн 2013
    Сообщения:
    88
    Симпатии:
    0
    savl, привет, есть форма "рублевые облигации" в ней закладки (разные, я на одной из них сделал кнопку (генерация - выгрузка в ворд полей с разных закладок(которые находятся в одной форме "рублевые облигации")),
    на этой закладке значение полей легко могу увидеть:

    Код (LotusScript):
    Dim ws As New NotesUIWorkspace
    Dim sess As New NotesSession

    Dim pdoc As NotesDocument
    Dim uidoc As NotesUIDocument

    Set uidoc = ws.CurrentDocument
    Set pdoc = uidoc.Document

    'выдает значение поля Podpisant(0)
    Msgbox pdoc.Podpisant(0)
    а теперь мне нужно взять значение полей с другой вкладки, у меня не получается...

    Т.е значение полей формы в целом, сам синтаксис не понимаю блин

    например нужно чтобы отработало (MsgBox рублевая облигация.поле2(0))
    рублев.облигация - форма, поле2 - поле, которое находится на другой закладке

    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Весь код</div></div><div class="sp-body"><div class="sp-content">
    Код (LotusScript):
    Sub Click(Source As Button)

    On Error Goto handler

    Dim ws As New NotesUIWorkspace
    Dim sess As New NotesSession

    Dim pdoc As NotesDocument
    Dim coll As NotesDocumentCollection
    Dim tmpdoc As NotesDocument

    Dim curdb As NotesDatabase

    '   Dim currNoteID As String           
    '   Dim Podpisant(0) As String

    Dim uidoc As NotesUIDocument

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

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


    'Продолжать? 
    Dim askme As Variant
    askme = ws.Prompt(PROMPT_YESNO, "Вы уверены?", "Сгенерировать документ?")
    If askme=0 Then
    Exit Sub
    End If
    '--------------------------------------------------------------------------------------------------------------------------------------
    'Обращение к полю формы "рублевые облигации"    
    '   Msgbox docnow.Podpisant(0)
    '   Set sess = db.Parent
    '   Set NDColl = db.AllDocuments
    '   Msgbox NDColl.Count

    Msgbox pdoc.Podpisant(0)
    Exit Sub

    '-------------------------------------------------------------------------------------------------------------------------------------------   
    '   Dim coll1 As NotesDocumentCollection
    '   Dim doc1 As NotesDocument
    '   Dim dt1 As New NotesDateTime("")
    '   Set coll1 = curdb.Search({Form = "Agenda_Question" & UINPrnt = "}+pdoc.UniversalID+{" & ConclusionFlag=""},dt1,0)
    '   If coll1.Count>0 Then
    '       Messagebox "Невозможно перейти к генерации поручения: не по всем вопросам повестки дня принято решение!",,"Внимание!"
    '       Exit Sub
    '   End If
    '  
    '   'По коду шаблона ищем в справочнике шаблонов нужную карточку шаблона
    '   pth_str$=""
    '   Set coll1 = refdb.Search({Form = "TmpForm_Profile" & ShortName = "PRCH"},dt1,0)
    '   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

    '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)
    '  
    '   tmppth_str = Environ$("TEMP") + "\TmpTpl_"+dt_date$+"_"+dt_time$
    '   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$)) 'Создаем новый документ на основе соответствующего шаблона   
    '   Call word.documents.add("Return and Uplift.dot") 'Создание нового документа по шаблону Return and Uplift.dot
    Set WordDoc = Word.activedocument

    'Присваивание полям-Word'a значений из полей notes-документа
    worddoc.FormFields(1).result = pdoc.Podpisant(0)

    worddoc.saveas("Podpisant(0)") 'сохранение документа-Word'a с именем файла ""
    word.visible = True 'Сделать видимым окно Word'a
    'word.quit 'закрытие Word'a


    handler:
    ' Простейший обработчик ошибок
    Msgbox "Error:" & Error$ & Chr(10) & Chr(13) & " in line:" & Erl,16
    If Not view Is Nothing Then View.AutoUpdate = True ' Это чтобы вернуть автообновление при ошибке.
    Resume endh
    endh:
    End Sub
     

    Вложения:

    • 1.jpg
      1.jpg
      Размер файла:
      463,8 КБ
      Просмотров:
      89
    • 2.jpg
      2.jpg
      Размер файла:
      518,3 КБ
      Просмотров:
      85
  10. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    Так... Если этот документ - создан по форме рублевые облигации и открыт по этой форме, то все поля формы существуют в контексте документа.
    В данном случае это pDoc.
    Значит обращение к ним одинаковое, единственное что их лучше преобразовать для вывода в текст, по крайней мере пока.
    Вот так работает?
    Код (LotusScript):
    MsgBox "" & pDoc.поле2(0)
     
  11. Dimok-163rus

    Dimok-163rus Well-Known Member

    Регистрация:
    20 июн 2013
    Сообщения:
    88
    Симпатии:
    0
    Неа, пробовал так...Поля других закладок получается существуют не в этом контексте...
    "Существенный факт" - закладка на которой я нахожусь - это встроенная форма, а другие закладки - располагаются просто в рублевой облигации...
    Может поэтому и не отрабатывает MsgBox "" & pDoc.поле2(0)
     
  12. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    Открой документ.
    Alt + Enter, вторая закладка.
    в списке полей есть это поле?
     
  13. Dimok-163rus

    Dimok-163rus Well-Known Member

    Регистрация:
    20 июн 2013
    Сообщения:
    88
    Симпатии:
    0
    Есть, я брал
    Код (LotusScript):
    Msgbox pdoc.Podpisant(0) & pDoc.ISIN_kod(0)
    А вот этого поля, значение которого выводится из встроенной формы нет
    Код (LotusScript):
    pdoc.Podpisant(0)
     

    Вложения:

    • 1.jpg
      1.jpg
      Размер файла:
      245,5 КБ
      Просмотров:
      74
  14. Dimok-163rus

    Dimok-163rus Well-Known Member

    Регистрация:
    20 июн 2013
    Сообщения:
    88
    Симпатии:
    0
    а через уникальный код попробовать найти эти поля в форме "рублевой облигации" возможно? На каждой закладке в "рублевой облигации" есть поле ID_Rubl_obl, так и в встроенной форме, на которой я ставлю кнопку, есть поле ID_Rubl_obl, значение его выводится
     
  15. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    ЯННП...
    Не в форме, а в документе.
    Форма - лишь оболочка, отображает информацию в нужном порядке и виде.
    А вот документ уже хранит эту информацию, в полях.

    Так есть или нет поля в документе рублевых облигаций?
    Что ты называешь встроенной формой? Приказы?
     
  16. Dimok-163rus

    Dimok-163rus Well-Known Member

    Регистрация:
    20 июн 2013
    Сообщения:
    88
    Симпатии:
    0
    Встроенная форма - "существенный факт" (отдельная форма, которая тоже есть в "рублевых облигациях") в ней кнопка генерации, в ней же легко можно найти значение полей:
    Podpisant Tip_fakt и т.д (Msgbox pdoc.Podpisant(0) & pDoc.Tip_fakt(0))

    когда открываю пользовательский лотус -> рублевые облигации -> Alt + F9, полей (Podpisant, Tip_fakt) не вижу, есть поля, которые нужно найти:
    (ISIN_kod, Seria и т.д) (Msgbox pdoc.ISIN_kod(0) & pDoc.Seria(0)), вот к ним добраться из "существенных фактов" не получается ... Рис ниже
     

    Вложения:

    • 1.jpg
      1.jpg
      Размер файла:
      459,7 КБ
      Просмотров:
      12
    • 2.jpg
      2.jpg
      Размер файла:
      553,6 КБ
      Просмотров:
      12
  17. savl

    savl Lotus team
    Lotus team

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

    Вот примерно это тебе надо сделать, что ты будешь делать в цикле уже зависит от задачи.
    Код (LotusScript):
    dim view as NotesVIew
    Set view = db.GetView(<имя встроенного представления где отображаются СФ>)
    Set dc = View.GetAllDocumentsByKey(<Ключ поиска по UNID>)
    ' Тут нужно указать значение поля, как в ShowSingleCategory встроенного представления
    ' Set dc = View.GetAllDocumentsByKey(pdoc.Getitemvalue(<имя поля с UNID документа>)(0))
    Set Doc = dc.getfirstDocument
    while not doc is nothing
    ' Что-то делаем со значениями
    set doc = dc.getnextdocument(doc)
    wend
     
  18. Dimok-163rus

    Dimok-163rus Well-Known Member

    Регистрация:
    20 июн 2013
    Сообщения:
    88
    Симпатии:
    0
    я же как раз в СФ кнопочку создал, поэтому в СФ легко как раз к полям добраться, а вот с полями других закладочек как раз и придется повозиться так?
     
  19. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    Да, тогда наоборот, надо получить рублевую из СФ, по ключу UNID-рублевой.
    Думаю через Db.GetDocumentByUNID(<имя поля с UNID>)
     
  20. Dimok-163rus

    Dimok-163rus Well-Known Member

    Регистрация:
    20 июн 2013
    Сообщения:
    88
    Симпатии:
    0
    savl, всё так, спасибо! :)
     
Загрузка...
Похожие Темы - Обращение Др форме
  1. Bafomet
    Ответов:
    18
    Просмотров:
    150
  2. Shouldercannon
    Ответов:
    1
    Просмотров:
    149
  3. proteam
    Ответов:
    7
    Просмотров:
    791
  4. Вовкин
    Ответов:
    0
    Просмотров:
    723
  5. Вовкин
    Ответов:
    0
    Просмотров:
    684

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