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

  • Автор темы Автор темы camelot91
  • Дата начала Дата начала
C

camelot91

Здравствуйте. У меня такая проблема, есть представление с невозвращенными документами, мне оттуда надо взять поля ( №, дату, кому выдан) и поместить на форму "Отчет" в поле "clist" . Нижепредставленный код из кнопки на форме "Отчет", он берет поля из представления и выводит просто в строку состояния, как вывести их в поле clist.

Код:
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
 
Ну раз уж так...
Код скинуть или объяснить как это сделать? Ибо если не программист, то смысл в понимании...
 
Начинающий программист. Хочу научиться понимать. Если можно и код скинуть и объяснить по возможности.
 
Смотрите хелм и класс NotesDocument.

Еще посмотрите внедренные представления (Embedded View), может подойдет.
 
<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">
Код:
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
 
лчно я не очень люблю прямой доступ к полям, предпочитаю GetItemValue. Сроки объединяю всегда через &
нелюбовь нужно подкреплять декларированием имен полей, а не хардкодом в тексте :(
 
lmike
константы? А смысл если имена полей не должны меняться?
 
константы? А смысл если имена полей не должны меняться?
а еще не повторяться по коду, названия редизайну не подвергаться и др. базы код не наследоваться... :(
а в чем тогда отличия от расширенной нотации ;)?!

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

Добавлено: и если уж грить об оптимизации - сложение стрингов очень накладная операция...
не помню - корректно ли работает Append у поля
 
а в чем тогда отличия от расширенной нотации
Если честно - уже толком и не помню, когда-то было быстрее, потом привычка, да и нагляднее для меня это.
Но так чтобы зашивать в константы, почти нет такого, только если наименования полей доступа, да и парочки служебных.
Обычно храню в настройках, либо профайлах.
P.S. про msgbox - тоже привычка, у меня константа nLine на их месте.
 
Сторонникам джихада Хейтерам расширенного синтаксиса могу рекомендовать добавлять точку в имена полей.
Код:
hz = doc.getItemValue("buyer.name")(0)
'' hz = doc.buyer.name(0) - враг не пройдет
При этом расширенный синтаксис тупо перестает компилироваца, а синтаксически толерантные коллеги начинают чаще вспоминать ваше имя всуе.

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

Disclaimer: Расширенный синтаксис люблю и использую, предложенный метод считаю актом насилия над коллегами :-)
 
Но так чтобы зашивать в константы, почти нет такого, только если наименования полей доступа, да и парочки служебных.
очень тяжело поддерживать код, в кот. стринги размазаны по тексту
уже не раз сталкивался - любое изменение - куча ошибок и поиск/сопоставление (причем не вполне тривиальных)
 
Да кто как хочет - так и пишет.
Но если работаете в команде, то лучше сначала договориться о едином синтаксисе.
На прошлой работе был регламент по написанию кода - не использовать расширенный синтаксис.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!