Помощник
Здравствуйте, гость ( Вход | Регистрация )
|
|
2:05:2008, 13:46
|
|
Новенький ![]() Группа: Программист Сообщений: 35 Регистрация: 14:09:2007 Пользователь №: 12 746 Репутация: 0
|
Нужно сделать отчет в лотусе.
То есть Есть много документов в базе. Они создаются каждый месяц. Раз в месяц. То есть даты идут по месяцам. И мне надо сделать такой отчет по этми документам. Пользователь в водит дату начала.... ( под датой понимается месяц и год) и дату конца. И должно в виде или в папке это выводится? Я видела давно давно обсуждался такой вопрос... но так я до конца и не разобралась. 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. Как в форму фолдер встраивать... или как они будут принтовать этот отчет с лотуса. Со встроиным видом... я так поняла не надо.... Пожалуйста , я видела Вы поднимали эту тему года два назад. ( а может где то и есть ...сейчас Помогите разобратся! Большой респект! |
|
Сообщение
#1
|
|
![]() |
|
|
3:05:2008, 15:33
|
|
Новенький ![]() Группа: Программист Сообщений: 35 Регистрация: 14:09:2007 Пользователь №: 12 746 Репутация: 0
|
Народ! Кто знает, помогите пожалуйста как это лучше сделать
Может это легко.. но не могу я разобраться.. |
|
Сообщение
#2
|
|
|
|
3:05:2008, 20:00
|
|
Новенький ![]() Группа: Lotus team Сообщений: 43 Регистрация: 2:05:2007 Из: Москва Пользователь №: 10 593 Специализация: Manager Репутация: 0
|
Как правило при обсуждении отчетов в Лотусе все приходят к мнению что надо использовать сторонние средства (Excel, HTML, СУБД...).
Всё это уже много раз обсуждалось, и для Excel множество примеров... В вашем случае можно сделать формочку с выбором дат, по которым используя db.Search собрать коллекцию, которую можно обработать нужным Вам способом и вывести в Excel. При этом можно это автоматизировать (например первого числа каждого месяца готовить стандартный отчёт и хранить его в базе..) |
|
Сообщение
#3
|
|
|
|
3:05:2008, 20:02
|
|
Гуру ![]() ![]() ![]() Группа: Достойный программист Сообщений: 308 Регистрация: 5:09:2006 Пользователь №: 6 344 Специализация: lotus программист Репутация: 5
|
создаете цикл по выбранному пользователем диапазону дат с шагом (месяц, год или др),
соответственно шагу формируете формулу для поиска документов, получаете коллекцию по формуле, в цикле из полей переносите в ячейки значения..фолдер и связанное сним создавать не обязательно.. |
|
Сообщение
#4
|
|
|
|
4:05:2008, 06:44
|
|
Новенький ![]() Группа: Программист Сообщений: 35 Регистрация: 14:09:2007 Пользователь №: 12 746 Репутация: 0
|
автоматизировать (например первого числа каждого месяца готовить стандартный отчёт и хранить его в базе..) Да! хорошая идея! Спасибо... буду с этим сейчас разбираться. Вообще ребята... я начала с фолдерами морочиться. Без использования 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 Потому что эти начальники почему то в лотусе печатать хотят. Но думаю их убедить. |
|
Сообщение
#5
|
|
|
|
4:05:2008, 06:59
|
|
Что это ? :) ![]() ![]() ![]() ![]() ![]() Группа: Lotus team Сообщений: 2 126 Регистрация: 10:12:2004 Из: Россия, Калуга Пользователь №: 1 144 Репутация: 71
|
Почему то не убираются доки из фолдера. Когда я закрываю фолдер. Как я должна писать, что б этот фолдер обнулить. На 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. |
|
Сообщение
#6
|
|
|
|
4:05:2008, 07:28
|
|
Новенький ![]() Группа: Программист Сообщений: 35 Регистрация: 14:09:2007 Пользователь №: 12 746 Репутация: 0
|
Агы.
Только как взять колекцию этих всех документов в этом текушем фолдоре? Смотрю если через Source As Notesuiview Set col=Source.Documents -eto vudelennue budut через NotesView там все по ключу. GetDocumentbykey ... uprocesses тоже не покатит. |
|
Сообщение
#7
|
|
|
|
4:05:2008, 07:30
|
|
Что это ? :) ![]() ![]() ![]() ![]() ![]() Группа: Lotus team Сообщений: 2 126 Регистрация: 10:12:2004 Из: Россия, Калуга Пользователь №: 1 144 Репутация: 71
|
notesDatabase.AllDocuments
|
|
Сообщение
#8
|
|
|
|
4:05:2008, 07:43
|
|
Новенький ![]() Группа: Программист Сообщений: 35 Регистрация: 14:09:2007 Пользователь №: 12 746 Репутация: 0
|
Боже, какой ты молодчина ... точно. СПАСИБО тебе большое!!!!
Чего интересно в фолдере не показываются колонки которые скатегаризированы? У меня их две и обе... скрываются в фолдоре. |
|
Сообщение
#9
|
|
|
|
4:05:2008, 07:47
|
|
Что это ? :) ![]() ![]() ![]() ![]() ![]() Группа: Lotus team Сообщений: 2 126 Регистрация: 10:12:2004 Из: Россия, Калуга Пользователь №: 1 144 Репутация: 71
|
Значит сама скрываешь.
|
|
Сообщение
#10
|
|
|
|
4:05:2008, 07:54
|
|
Новенький ![]() Группа: Программист Сообщений: 35 Регистрация: 14:09:2007 Пользователь №: 12 746 Репутация: 0
|
Ааа... я не скрывала... а было выставленно, Click on column header Both. И эти две первые колонки праподали в никуда. Такая не удобная эта штука...
|
|
Сообщение
#11
|
|
|
|
5:05:2008, 18:15
|
|
Новенький ![]() Группа: Программист Сообщений: 35 Регистрация: 14:09:2007 Пользователь №: 12 746 Репутация: 0
|
ОК!
на 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 |
|
Сообщение
#12
|
|
|
|
5:05:2008, 20:09
|
|
Гуру ![]() ![]() ![]() Группа: Достойный программист Сообщений: 308 Регистрация: 5:09:2006 Пользователь №: 6 344 Специализация: lotus программист Репутация: 5
|
это
Код '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" ) .. хотя разницы никакой.. тоже самое получилось, что и у тебя, и скорость работы вроде та же.. Сообщение отредактировал Kee_Keekkenen - 5:05:2008, 20:20 |
|
Сообщение
#13
|
|
|
|
5:05:2008, 20:59
|
|
Новенький ![]() Группа: Программист Сообщений: 35 Регистрация: 14:09:2007 Пользователь №: 12 746 Репутация: 0
|
да так правильнее!
А что же делать с этой скоростью |
|
Сообщение
#14
|
|
|
|
6:05:2008, 04:23
|
|
Новенький ![]() Группа: Программист Сообщений: 12 Регистрация: 4:05:2008 Пользователь №: 17 044 Специализация: программист Репутация: 0
|
Я делал следующим образом.. создавал форму, в ней обычные текстовые поля под значения для отчета... и отчет генерируется прямо на форме.. из View...скорость просто отличная.... в базе документов порядка 5-6 тысяч.. а отчет генериться порядка 15-20 сек.
вот код, думаю логику поймешь: CODE 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 . Сообщение отредактировал RooS - 6:05:2008, 04:24 |
|
Сообщение
#15
|
|
|
|
6:05:2008, 05:10
|
|
Что это ? :) ![]() ![]() ![]() ![]() ![]() Группа: Lotus team Сообщений: 2 126 Регистрация: 10:12:2004 Из: Россия, Калуга Пользователь №: 1 144 Репутация: 71
|
|
|
Сообщение
#16
|
|
|
|
10:05:2008, 04:38
|
|
Новенький ![]() Группа: Программист Сообщений: 35 Регистрация: 14:09:2007 Пользователь №: 12 746 Репутация: 0
|
Спасибо ребята!
Самое лучшее решение отчета в Лотусе. Это форма на ней кнопка... в которой заполняем РТ поле. (все данные для отчета... ) Очень быстро работает! Суперски! |
|
Сообщение
#17
|
|
![]() |
|
Текстовая версия | Сейчас: 17:05:2008 - 11:19 |