т.е. прям изМне показалось там все за мудрено и слишком умно.
Ссылка скрыта от гостей
сложно, издеваетесь?тупо вставить это код в java агент, а
Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе
т.е. прям изМне показалось там все за мудрено и слишком умно.
Не умеете найти документы в базе? Это можно сделать либо по специально для этого построенной вьюхе по ключу, совпадающему с критерием поиска, либо функцией Search. Вы пробовали что-нибудь из этого? Что-то не получилось? Какие-то ошибки? Вы пишите подробнее что не получается, что уже пробовали, в чём проблема - не экономьте буквы. Расскажите конкретнее о задаче, которую вы пытаетесь решить. Вы так и не ответили на мой вопрос "что вы собираетесь потом делать с этим вордовым документом, вам его печатать или "посмотреть", а от этого сильно зависят варианты решения вашей проблемы.проблема в том как организовать отбор в представление документов удовлетворяющий условию, и потом вывести их поочередно.
@Ruska132,
- Для вывода на печать Word не нужен вообще. Лучше сформировать PDF файл - смотрите iText, Apache FOP, xdocreport, Jasper Report и пр. Проще сформировать HTML файл, но придётся вручную настроить параметры печати в броузере (колонтитулы, хедеры, футеры, размеры полей). Можно в Lotus Notes сделать специальную форму исключительно для печати.
- В поиске даты обычно берутся в квадратные скобки, а ещё лучше явно привести значение к типу "дата" при помощи функции @Date, что бы не было проблем с различиями текстового формата даты.
Вы берёте текстовое значение поля "DataEnd" и преобразуете его в тип "Дата" с помощью функции @TextToTime, которая воспринимает дату в виде строки в зависимости от настроек операционной системы. Вы уверены что 01.12.2016 - это всегда 1-е декабря 2016 года, а не 12-е января?@TextToTime('"+wsCurrent.CurrentDocument.FieldGetText("DataEnd")+"')
Sub Click(Source As Button)
'Текущая сессия Lotus
Dim Session As New NotesSession
'Текущий рабочее простпранство Lotus -то в котором мы визуально работаем
Dim wsCurrent As New NotesUIWorkspace
Dim WS As New NotesUIWorkspace
Dim VwSotr, VwMarsh, VwZayv As NotesView
Dim CollectZayv, CollectMarsh, CollectSotr As NotesDocumentCollection
'Представление заявка
Set VwZayv = Session.CurrentDatabase.GetView("(VZayv)")
'Представление по сотрудникам
Set VwSotr = Session.CurrentDatabase.GetView("(Vsotrudnik)")
'Представление Masrh
Set VwMarsh = Session.CurrentDatabase.GetView("(VMarsh)")
'Переменные для Word
Dim WrdApp, WrdDoc As Variant
'Это документы с заявки
Dim docZayvTmp As NotesDocument
'Это документы с сотрудниками
Dim docSotrTmp As NotesDocument
'Это документы с маршрутами
Dim docMarshTemp As NotesDocument
'переменные для цикла
Dim i,j,g As Integer
'***********************************************************************************
'Это готовый рабочий кусок кода для использования шаблона отчета,
'который запихивается в БД Шаблоны
Dim Db_Tmpl As NotesDatabase
Dim Vw_Tmpl As NotesView
Dim Dc_Tmpl As NotesDocument
Dim NmRpt As String
Dim NumPos As Integer
Set Db_Tmpl = New NotesDatabase(Session.CurrentDatabase.Server, "TemplatesAktZF.nsf")
'БД Шаблоны отчетов
If Not Db_Tmpl.IsOpen Then
Msgbox( "Ошибка при открытии БД Шаблоны отчетов")
Exit Sub
End If
Set Vw_Tmpl = Db_Tmpl.GetView("ViewMainTmpl")
' В БД Шаблоны отчет созранен под кодом 27
Set Dc_Tmpl = Vw_Tmpl.GetDocumentByKey(27)
Print ""
If Dc_Tmpl Is Nothing Then
Msgbox( "Не найден шаблон отчета с кодом №27")
Exit Sub
End If
'Сохраняем локально шаблон у пользователя C:\Documents and Settings\Администратор\Local Settings\Temp
Print "Сохранение шаблона отчета..."
Set RTI = Dc_Tmpl.GetFirstItem( "Body" )
If (RTI.Type = RICHTEXT) Then
Forall Obj In RTI.EmbeddedObjects
If ( Obj.Type = EMBED_ATTACHMENT ) Then
NmRpt = Environ("Temp") & "\RepBron" & Format(Now, "ddmmyyyyhhmmss") &".tmp"
Print "Формирование временного файла: " & NmRpt
Call Obj.ExtractFile(NmRpt)
End If
End Forall
End If
Print "Формирование отчета..."
'***********************************************************************************
'Создаем документ Word
Set WrdApp = CreateObject("Word.Application")
'Для примера делаю его сразу видимым. В рабочей версии здесь лучше сделать False
WrdApp.Visible = True 'false
'Присваиваю сохраненный шаблон нашему ворду
Call WrdApp.Documents.Add(NmRpt)
Set WrdDoc = WrdApp.ActiveDocument
'Поиск документов по условию
Print "Поиск документов..."
Set CollectZayv = Session.CurrentDatabase.Search("select form='FMain'& Status = '2' & Fdatabegin>=@TextToTime('"+wsCurrent.CurrentDocument.FieldGetText("DataStart")+"') & Fdatabegin<=@TextToTime('"+wsCurrent.CurrentDocument.FieldGetText("DataEnd")+"')",Nothing,0)
Print "Найдено заявок: ", CollectZayv.Count
Set docZayvTmp = CollectZayv.GetFirstDocument()
For i=1 To CollectZayv.Count
WrdDoc.Tables.Item(1).Cell(WrdDoc.Tables.Item(1).Rows.Count, 1).Range.Text=docZayvTmp.RegNum(0)
WrdDoc.Tables.Item(1).Cell(WrdDoc.Tables.Item(1).Rows.Count, 2).Range.Text=docZayvTmp.Fdatabegin(0)
Set CollectSotr =VwSotr.GetAllDocumentsByKey(docZayvTmp.UniversalID, False)
Print "Найдено сотрудников: ", CollectSotr.Count
'сотрудник
Set docSotrTmp = CollectSotr.GetFirstDocument()
For j=1 To CollectSotr.Count
Print " ", + docSotrTmp.P_fio(0)
WrdDoc.Tables.Item(1).Cell(WrdDoc.Tables.Item(1).Rows.Count, 3).Range.Text=docSotrTmp.P_fio(0)
'маршрут
Set CollectMarsh =VwMarsh.GetAllDocumentsByKey(docSotrTmp.UniversalID, False)
' Print "Найдено сотрудников: ", CollectMarsh.Count
Set docMarshTemp = CollectMarsh.GetFirstDocument()
' WrdDoc.Tables.Item(1).Rows.Add
For g=1 To CollectMarsh.Count
' Print " ", + docMarshTemp.F_Marsh_ub(0)
WrdDoc.Tables.Item(1).Cell(WrdDoc.Tables.Item(1).Rows.Count, 4).Range.Text=docMarshTemp.F_Marsh_ub(0) + " - " + docMarshTemp.F_Marsh_pr(0)
WrdDoc.Tables.Item(1).Cell(WrdDoc.Tables.Item(1).Rows.Count, 5).Range.Text=docMarshTemp.F_DateMarsh(0)
WrdDoc.Tables.Item(1).Cell(WrdDoc.Tables.Item(1).Rows.Count, 6).Range.Text=docMarshTemp.F_Comp(0)
WrdDoc.Tables.Item(1).Cell(WrdDoc.Tables.Item(1).Rows.Count, 7).Range.Text=docMarshTemp.F_Klass(0)
WrdDoc.Tables.Item(1).Cell(WrdDoc.Tables.Item(1).Rows.Count, 8).Range.Text=docMarshTemp.F_Cen_Bil(0)
If docMarshTemp.F_nazad(0) = "1" Then
WrdDoc.Tables.Item(1).Rows.Add
WrdDoc.Tables.Item(1).Cell(WrdDoc.Tables.Item(1).Rows.Count, 4).Range.Text=docMarshTemp.F_Marsh_ub_ob(0) + " - " + docMarshTemp. F_Marsh_pr_ob(0)
WrdDoc.Tables.Item(1).Cell(WrdDoc.Tables.Item(1).Rows.Count, 5).Range.Text=docMarshTemp.F_DateMarsh_ob(0)
WrdDoc.Tables.Item(1).Cell(WrdDoc.Tables.Item(1).Rows.Count, 6).Range.Text=docMarshTemp.F_Comp(0)
' WrdDoc.Tables.Item(1).Cell(WrdDoc.Tables.Item(1).Rows.Count, 7).Range.Text=docMarshTemp.F_Klass(0)
' WrdDoc.Tables.Item(1).Cell(WrdDoc.Tables.Item(1).Rows.Count, 8).Range.Text=docMarshTemp.F_Cen_Bil(0)
End If
Set docMarshTemp = CollectMarsh.GetNextDocument (docMarshTemp)
WrdDoc.Tables.Item(1).Rows.Add
Next
Set docSotrTmp = CollectSotr.GetNextDocument (docSotrTmp)
Next
Set docZayvTmp = CollectZayv.GetNextDocument (docZayvTmp)
' WrdDoc.Tables.Item(1).Rows.Add
Next
End Sub
Вопрос на засыпку: какой тип у VwSotr, VwMarsh?Dim VwSotr, VwMarsh, VwZayv As NotesView
Set Dc_Tmpl = Vw_Tmpl.GetDocumentByKey(27)
Print ""
If Dc_Tmpl Is Nothing Then
Msgbox( "Не найден шаблон отчета с кодом №27")
Const REPCODE27=27
Const CM_ERR_FINDREPCODE={Не найден шаблон отчета с кодом №}
...
Set Dc_Tmpl = Vw_Tmpl.GetDocumentByKey(REPCODE27)
Print ""
If Dc_Tmpl Is Nothing Then
Msgbox( CM_ERR_FINDREPCODE &Cstr(REPCODE27))
Error 1024, CM_ERR_FINDREPCODE &Cstr(REPCODE27)
мое занудство...
вот так писать код - это себе дороже, чтобы что-то исправить - тонну текста придется перелопатить
простой пример
и да - если есть выход из ф-ции по условию, возможно лучшим будет выход по ошибкеКод:Const REPCODE27=27 Const CM_ERR_FINDREPCODE={Не найден шаблон отчета с кодом №} ... Set Dc_Tmpl = Vw_Tmpl.GetDocumentByKey(REPCODE27) Print "" If Dc_Tmpl Is Nothing Then Msgbox( CM_ERR_FINDREPCODE &Cstr(REPCODE27))
и обработчик ошибки всегда нужен!Код:Error 1024, CM_ERR_FINDREPCODE &Cstr(REPCODE27)
В константы необходимо выносить все строки (заискл. отладочных)
как привык я (есть др. способы)честно обработчик ошибок не использовал не разу.
не подскажите куда лучше вписать строчки.
Ну, отлично. Что из этого не работает? Документы в поиске находятся те, которые надо? Таблица в Word'е формируется?Собственно и скрывать та нечего
вся процедура кнопки ниже
{select form = "FMain" & Status = "2" & Fdatabegin >= @TextToTime("} + wsCurrent.CurrentDocument.FieldGetText("DataStart") + {") & Fdatabegin <= @TextToTime("} + wsCurrent.CurrentDocument.FieldGetText("DataEnd") + {")}
select form = "FMain" & Status = "2"
Dim key(1) as Variant
key(0) = doc.getItemValue("DateStart")(0)
key(1) = doc.getItemValue("DateEnd")(0)
Dim dc as NotesDocumentCollection
Set dc = view.GetAllDocumentsByKey(key, true)
Обучение наступательной кибербезопасности в игровой форме. Начать игру!