• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Отчет в лотусе

  • Автор темы nila
  • Дата начала
N

nila

Нужно сделать отчет в лотусе.
То есть Есть много документов в базе. Они создаются каждый месяц. Раз в месяц. То есть даты идут по месяцам.
И мне надо сделать такой отчет по этми документам.

Пользователь в водит дату начала.... ( под датой понимается месяц и год) и дату конца.
И должно в виде или в папке это выводится?
Я видела давно давно обсуждался такой вопрос... но так я до конца и не разобралась.
1. Как быть с датой у меня
Dim years As Integer
years=Year(doc.DateStart(0))
query = "Form = 'DMV' & years< CreatedDate" '/// здесь не знаю как правильно... так не срабатывает
Set collection = db.Search( query, Nothing, 0 )
If collection.Count=0 Then Exit Sub
Call collection.PutAllInFolder( "Test" ) // здесь получается что он переносит документы в фолдер.. мне бы надо

чтоб он просто копировал их туда... или как даже и не знаю.
2. Как в форму фолдер встраивать...
или как они будут принтовать этот отчет с лотуса.
Со встроиным видом... я так поняла не надо....

Пожалуйста , я видела Вы поднимали эту тему года два назад. ( а может где то и есть ...сейчас
Помогите разобратся!
Большой респект!
 
N

nila

Народ! Кто знает, помогите пожалуйста как это лучше сделать
Может это легко.. но не могу я разобраться..
 
A

Alexander (Criz)

Как правило при обсуждении отчетов в Лотусе все приходят к мнению что надо использовать сторонние средства (Excel, HTML, СУБД...).
Всё это уже много раз обсуждалось, и для Excel множество примеров...

В вашем случае можно сделать формочку с выбором дат, по которым используя db.Search собрать коллекцию, которую можно обработать нужным Вам способом и вывести в Excel. При этом можно это автоматизировать (например первого числа каждого месяца готовить стандартный отчёт и хранить его в базе..)
 
K

Kee_Keekkenen

создаете цикл по выбранному пользователем диапазону дат с шагом (месяц, год или др),
соответственно шагу формируете формулу для поиска документов, получаете коллекцию по формуле,
в цикле из полей переносите в ячейки значения..фолдер и связанное сним создавать не обязательно..
 
N

nila

автоматизировать (например первого числа каждого месяца готовить стандартный отчёт и хранить его в базе..)
Да! хорошая идея! Спасибо... буду с этим сейчас разбираться.


Вообще ребята... я начала с фолдерами морочиться.
Без использования Exel. Хотела попробовать как оно работает.
И столкнулась с такой проблеммой.
У меня в фолдоре кнопка. ( на форуме приводили этот пример ребята раньше.)

Sub Click(Source As Button) Тут все отлично работает!
Dim ws As New NotesUIWorkspace
Dim session As New NotesSession
Dim searchDoc As NotesDocument
Dim dc As NotesDocumentCollection
Dim find As String
Set searchDoc = New NotesDocument(session.CurrentDatabase)
If ws.DialogBox("(Report1)", True, True, Flse, False, False, False, "Search", searchDoc , True) Then

find = find + {(CreatedDate >= @TextToTime("} + searchDoc.Date1(0) + {"))}
find = find + {&(CreatedDate<= @TextToTime("} + searchDoc.Date2(0) + {"))}

Set dc = session.CurrentDatabase.Search(find, Nothing, 0)
Call dc.PutAllInFolder("SearchFolder", False)
Call ws.ViewRefresh

End If
End Sub
при нажатии на кнопку документы переносятся в фолдер.

Почему то не убираются доки из фолдера. Когда я закрываю фолдер.
Как я должна писать, что б этот фолдер обнулить. На Queryclose?


Sub Queryclose(Source As Notesuiview, Continue As Variant)
Dim ws As New NotesUIWorkspace
Dim session As New NotesSession
Dim db As NotesDatabase
Dim collection As NotesDocumentCollection
..............................
Call collection.RemoveAllFromFolder( "SearchFolder")
End Sub


Потому что эти начальники почему то в лотусе печатать хотят. Но думаю их убедить.
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
4
Почему то не убираются доки из фолдера. Когда я закрываю фолдер.
Как я должна писать, что б этот фолдер обнулить. На Queryclose?

Sub Queryclose(Source As Notesuiview, Continue As Variant)
Dim ws As New NotesUIWorkspace
Dim session As New NotesSession
Dim db As NotesDatabase
Dim collection As NotesDocumentCollection
..............................
Call collection.RemoveAllFromFolder( "SearchFolder")
End Sub
Ну да. Всё верно.
Только, по-моему, лучше очищать папку в Queryopen.
 
N

nila

Агы.
Только как взять колекцию этих всех документов в этом текушем фолдоре?
Смотрю если через Source As Notesuiview
Set col=Source.Documents -eto vudelennue budut
через NotesView там все по ключу. GetDocumentbykey ...
uprocesses тоже не покатит.
 
N

nila

Боже, какой ты молодчина ... точно. СПАСИБО тебе большое!!!!

Чего интересно в фолдере не показываются колонки которые скатегаризированы? У меня их две и обе... скрываются в фолдоре.
 
N

nila

Ааа... я не скрывала... а было выставленно, Click on column header Both. И эти две первые колонки праподали в никуда. Такая не удобная эта штука...
 
N

nila

ОК!
на Queryopen в папке я пишу так.
Dim ws As New NotesUIWorkspace
Dim session As New NotesSession
Dim db As NotesDatabase
Dim collection As NotesDocumentCollection
Set db = session.CurrentDatabase
Set collection=db.AllDocuments
Call collection.RemoveAllFromFolder( "SearchFolder") Все отлично работает.


Папка у меня повешена на Outline. Когда они нажимают на ссылку показывается фолдер. С кнопкой Отчет (выше)
Можно ли сначала обнулять папку при нажатии на эту кнопку а потом наполнять. Или как то это можно лучше сделать.
Потому что это происходит очень медленно.
Dim ws As New NotesUIWorkspace
Dim session As New NotesSession
Dim db As NotesDatabase
Dim searchDoc As NotesDocument
Dim dc As NotesDocumentCollection
Dim find As String


'Set db = session.CurrentDatabase
'Set collection=db.AllDocuments
'Call collection.RemoveAllFromFolder( "SearchFolder")


Это нормально?
Это мне нужно... для того что бы когда они нажимали второй раз на эту кнопку, что б им очишалась папка и наполнялась на ново.
Так как они могут же и не закрыть эту папку... тогда Queryopen срабатывать не будет.(


Set searchDoc = New NotesDocument(session.CurrentDatabase)
If ws.DialogBox("(Report1)", True, True, False, False, False, False, "Search", searchDoc ) Then

find = find + {(CreatedDate >= @TextToTime("} + searchDoc.Date1(0) + {"))}
find = find + {&(CreatedDate<= @TextToTime("} + searchDoc.Date2(0) + {"))}

Set dc = session.CurrentDatabase.Search(find, Nothing, 0)
Call dc.PutAllInFolder("SearchFolder", False)
Call ws.ViewRefresh

End If
 
K

Kee_Keekkenen

это
Код:
'Set db = session.CurrentDatabase
'Set collection=db.AllDocuments
'Call collection.RemoveAllFromFolder( "SearchFolder")
как-то не очень
лучше, наверное, как-то так
Код:
dim view as notesview
Set db = session.CurrentDatabase
set view = db.getview("SearchFolder")
if view is nothing then ' на всяк случ
print "not found design element", "SearchFolder"
exit sub
endif
' очистить фолдер
call view.AllEntries.RemoveAllFromFolder( "SearchFolder" )

.. хотя разницы никакой.. тоже самое получилось, что и у тебя, и скорость работы вроде та же..
 
N

nila

да так правильнее!
А что же делать с этой скоростью :(
 
R

RooS

Я делал следующим образом.. создавал форму, в ней обычные текстовые поля под значения для отчета... и отчет генерируется прямо на форме.. из View...скорость просто отличная.... в базе документов порядка 5-6 тысяч.. а отчет генериться порядка 15-20 сек.
вот код, думаю логику поймешь:
[codebox]Sub Click(Source As Button)
Dim util As New Utils
Dim db As NotesDatabase
Dim dic As NotesDatabase
Dim ses As New NotesSession
Dim ws As New NotesUIWorkspace
Dim doc As NotesDocument
Dim uidoc As NotesUIDocument
Dim col As NotesDocumentCollection
Dim search As String
Dim i As Integer
Dim j As Integer
Dim view As NotesView


Set dic = util.dictionary
Set db = ses.CurrentDatabase
Set uidoc = ws.CurrentDocument
Set view = db.GetView("ReportPRByReception")

Set doc = view.GetFirstDocument
While Not doc Is Nothing
' m - количество лиц, которые приняли
m=m+1
Set doc = view.GetNthDocument(m+1)
Wend

Redim AuthorRU(m) As String
Redim AuthorKZ(m) As String
Redim TitleRu(m) As String
Redim TitleKZ(m) As String
Redim sum(m) As Integer
Redim mas1(m) As Integer
Redim mas2(m) As Integer
Redim mas3(m) As Integer
Redim mas4(m) As Integer
Redim mas5(m) As Integer


For i = 1 To m
Set doc = view.GetNthDocument(i)
AuthorRu(i) = doc.DocumentAuthorNameRu(0)
AuthorKz(i) = doc.documentAuthorNameKz(0)
Next

Search = "Form = ""EstablishedPost"" "
Set col = dic.Search(Search,Nothing,0)

For i = 1 To col.Count
Set doc = col.GetNthDocument(i)
For j = 1 To m
If AuthorRu(j) = doc.EmployeeShortNameRU(0) Then
TitleRu(j) = doc.PostNameRU(0)
TitleKz(j) = doc.PostNemeKz(0)
End If
Next
Next

Search = "Form = ""PR"" & PRType = ""Word"" "
Set col = db.Search(Search,Nothing,0)
n=col.Count
'n - количество документов
For i = 1 To n
Set doc = col.GetNthDocument(i)
D = Cdat(doc.GetItemValue("DocumentInDate")(0))
D1 = Cdat(UIDoc.Document.GetItemValue("D1")(0))
D2 = Cdat(UIDoc.Document.GetItemValue("D2")(0))

If (D>=D1) And (D<=D2) Then
For j = 1 To m
If doc.GetItemValue("DocumentAuthorNameRu")(0) = AuthorRu(j) Then
sum(j) = sum(j) + 1
w=w+1
' вопрос решен положительно
If doc.EXECUTIONRESULTTEXTNAMERU(0) = "Удовлетворено" Then
mas1(j)=mas1(j)+1
w1=w1+1
End If
' Просьба не удовлетворена
If doc.EXECUTIONRESULTTEXTNAMERU(0) = "Отказано" Then
mas2(j)=mas2(j)+1
w2=w2+1
End If

' Направленно в подразделение гос. органа
If doc.EXECUTIONRESULTTEXTNAMERU(0) = "Направлено в другие государственные органы" Then
mas3(j)=mas3(j)+1
w3=w3+1
End If

' Дано разъяснение
If doc.EXECUTIONRESULTTEXTNAMERU(0) = "Разъяснены" Then
mas4(j)=mas4(j)+1
w4=w4+1
End If

' Направленно в другие орг.
If doc.EXECUTIONRESULTTEXTNAMERU(0) = "Направлено в другие организации" Then
mas5(j)=mas5(j)+1
w5=w5+1
End If

End If
Next
End If
Next


For i = 1 To m
Name1 = Name1+ Chr(13) + AuthorRu(i)
NameTitle1 = NameTitle1 + Chr(13) + TitleRu(i)
Itog = Itog + Chr(13) + Cstr(sum(i))
a1 = a1+Chr(13) + Cstr(mas1(i))
a2 = a2+Chr(13) + Cstr(mas2(i))
a3 = a3+Chr(13) + Cstr(mas3(i))
a4 = a4+Chr(13) + Cstr(mas4(i))
a5 = a5+Chr(13) + Cstr(mas5(i))
Next

Set Item = uidoc.Document.ReplaceItemValue("Name",Name1)
Set Item = uidoc.Document.ReplaceItemValue("NameTitle",NameTitle1)
Set Item = uidoc.Document.ReplaceItemValue("Itog",Itog)
Set Item = uidoc.Document.ReplaceItemValue("a1",a1)
Set Item = uidoc.Document.ReplaceItemValue("a2",a2)
Set Item = uidoc.Document.ReplaceItemValue("a3",a3)
Set Item = uidoc.Document.ReplaceItemValue("a4",a4)
Set Item = uidoc.Document.ReplaceItemValue("a5",a5)

Set Item = uidoc.Document.ReplaceItemValue("w",w)
Set Item = uidoc.Document.ReplaceItemValue("w1",w1)
Set Item = uidoc.Document.ReplaceItemValue("w2",w2)
Set Item = uidoc.Document.ReplaceItemValue("w3",w3)
Set Item = uidoc.Document.ReplaceItemValue("w4",w4)
Set Item = uidoc.Document.ReplaceItemValue("w5",w5)

uidoc.Refresh
End Sub[/codebox]
.
 
N

nila

Спасибо ребята!

Самое лучшее решение отчета в Лотусе. Это форма на ней кнопка... в которой заполняем РТ поле. (все данные для отчета... )
Очень быстро работает! Суперски!
 
Мы в соцсетях:

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