Вставить Данные В Поле

Тема в разделе "Lotus - Программирование", создана пользователем camelot91, 10 июн 2013.

  1. camelot91

    camelot91 New Member

    Регистрация:
    6 июн 2013
    Сообщения:
    4
    Симпатии:
    0
    Здравствуйте. У меня такая проблема, есть представление с невозвращенными документами, мне оттуда надо взять поля ( №, дату, кому выдан) и поместить на форму "Отчет" в поле "clist" . Нижепредставленный код из кнопки на форме "Отчет", он берет поля из представления и выводит просто в строку состояния, как вывести их в поле clist.

    Код (LotusScript):
    Sub Click(Source As Button)
    Dim sview As NotesView
    Dim sdoc As NotesDocument
    Dim line1,lineAll As String

    'Dim db As NotesDatabase
    Set sess = New NotesSession
    Set db = sess.CurrentDatabase
    Set sview = db.GetView("Dolgi")
    Set sdoc = sview.GetFirstDocument
    line1 = ""
    lineAll = ""
    Do While Not sdoc Is Nothing
    line1 = line1 + Cstr(sdoc.ToDate(0)) + " " + line1 + sdoc.Year(0) + "-" + Cstr(sdoc.RegNum(0)) + sdoc.Lit(0)+ " " + sdoc.ToName(0) +Chr(10)
    lineAll = lineAll + line1
    line1 = ""
    Set sdoc = sview.GetNextDocument(sdoc)
    Loop
    Print lineAll
    Exit Sub
    End Sub
     
  2. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    Ну раз уж так...
    Код скинуть или объяснить как это сделать? Ибо если не программист, то смысл в понимании...
     
  3. camelot91

    camelot91 New Member

    Регистрация:
    6 июн 2013
    Сообщения:
    4
    Симпатии:
    0
    Начинающий программист. Хочу научиться понимать. Если можно и код скинуть и объяснить по возможности.
     
  4. Kizarek86

    Kizarek86 Lotus team
    Lotus team

    Регистрация:
    20 июл 2007
    Сообщения:
    857
    Симпатии:
    5
    Смотрите хелм и класс NotesDocument.

    Еще посмотрите внедренные представления (Embedded View), может подойдет.
     
  5. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    <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 sess As New NotesSession ' Это можно делать сразу так.
    Dim db As NotesDatabase
    Dim sview As NotesView
    Dim sdoc As NotesDocument
    Dim rdoc As NotesDocument
    Dim line1 As String ,lineAll As String

    Set db = sess.CurrentDatabase
    Set sview = db.GetView("Dolgi")
    If sview Is Nothing Then Error 5007, "Не найдено представление: Dolgi" ' Если представления нет - лучше об этом знать
    Call sview.Refresh ' обновим данные в представлении
    If sview.EntryCount < 1 Then ' Если нет данных, зачем дальше работать?
    Msgbox "Нет данных для отчета.",64
    Exit Sub
    End If

    sView.AutoUpdate = False ' Отключаем автообновление представления на время создание отчета
    Set sdoc = sview.GetFirstDocument
    line1 = ""
    lineAll = ""
    Set rDoc = db.CreateDocument ' Создаем документ отчета
    Call rDoc.ReplaceItemValue("Form","Отчет") ' Прописываем форму
    Do While Not sdoc Is Nothing
    ' лчно я не очень люблю прямой доступ к полям, предпочитаю GetItemValue. Сроки объединяю всегда через &.
    line1 = line1 & sdoc.GetItemValue("ToDate")(0) & " " & line1 & sdoc.GetItemValue("Year")(0) & "-" & sdoc.GetItemValue("RegNum")(0) & sdoc.GetItemValue("Lit")(0) & " " & sdoc.GetItemValue("ToName")(0) & Chr(10)
    lineAll = lineAll & line1
    line1 = ""
    Set sdoc = sview.GetNextDocument(sdoc)
    Loop

    '   Print lineAll
    Call rDoc.ReplaceItemValue("clist",lineAll) ' Записываем в отчет результаты
    sView.AutoUpdate = True ' возвращаем автообновление вьюхи
    Call rDoc.ComputeWithForm(False,False) ' Пересчитаем отчет по форме.
    Dim ws As New NotesUIWorkspace
    Call ws.EditDocument(True,rDoc) ' Открываем отчет на редактирование

    Exit Sub

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

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.081
    Симпатии:
    300
    нелюбовь нужно подкреплять декларированием имен полей, а не хардкодом в тексте :(
     
  7. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    lmike
    константы? А смысл если имена полей не должны меняться?
     
  8. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.081
    Симпатии:
    300
    а еще не повторяться по коду, названия редизайну не подвергаться и др. базы код не наследоваться... :(
    а в чем тогда отличия от расширенной нотации ;)?!

    Добавлено: и да, в месаджбоксе достаточно Chr(10)

    Добавлено: и если уж грить об оптимизации - сложение стрингов очень накладная операция...
    не помню - корректно ли работает Append у поля
     
  9. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    Если честно - уже толком и не помню, когда-то было быстрее, потом привычка, да и нагляднее для меня это.
    Но так чтобы зашивать в константы, почти нет такого, только если наименования полей доступа, да и парочки служебных.
    Обычно храню в настройках, либо профайлах.
    P.S. про msgbox - тоже привычка, у меня константа nLine на их месте.
     
  10. turumbay

    Регистрация:
    13 мар 2009
    Сообщения:
    625
    Симпатии:
    2
    Сторонникам джихада Хейтерам расширенного синтаксиса могу рекомендовать добавлять точку в имена полей.
    Код (LotusScript):
    hz = doc.getItemValue("buyer.name")(0)
    '' hz = doc.buyer.name(0) - враг не пройдет
    При этом расширенный синтаксис тупо перестает компилироваца, а синтаксически толерантные коллеги начинают чаще вспоминать ваше имя всуе.

    P.S. Собаки к точке в имени поля нечувствительны, во всяких селекшенах можно спокойно писать buyer.name != ""

    Disclaimer: Расширенный синтаксис люблю и использую, предложенный метод считаю актом насилия над коллегами :)
     
  11. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.081
    Симпатии:
    300
    очень тяжело поддерживать код, в кот. стринги размазаны по тексту
    уже не раз сталкивался - любое изменение - куча ошибок и поиск/сопоставление (причем не вполне тривиальных)
     
  12. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    Да кто как хочет - так и пишет.
    Но если работаете в команде, то лучше сначала договориться о едином синтаксисе.
    На прошлой работе был регламент по написанию кода - не использовать расширенный синтаксис.
     
Загрузка...
Похожие Темы - Вставить Данные Поле
  1. Aaleks111
    Ответов:
    2
    Просмотров:
    193
  2. Amfion
    Ответов:
    5
    Просмотров:
    768
  3. Dimkawshm
    Ответов:
    2
    Просмотров:
    1.532
  4. alba
    Ответов:
    1
    Просмотров:
    1.849
  5. Toshka007
    Ответов:
    0
    Просмотров:
    2.048

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