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

Тема в разделе "Lotus - Программирование", создана пользователем nila, 2 май 2008.

  1. nila

    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. Как в форму фолдер встраивать...
    или как они будут принтовать этот отчет с лотуса.
    Со встроиным видом... я так поняла не надо....

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

    nila Гость

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

    Alexander (Criz) Гость

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

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

    Kee_Keekkenen Well-Known Member

    Регистрация:
    5 сен 2006
    Сообщения:
    616
    Симпатии:
    4
    создаете цикл по выбранному пользователем диапазону дат с шагом (месяц, год или др),
    соответственно шагу формируете формулу для поиска документов, получаете коллекцию по формуле,
    в цикле из полей переносите в ячейки значения..фолдер и связанное сним создавать не обязательно..
     
  5. nila

    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


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

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Ну да. Всё верно.
    Только, по-моему, лучше очищать папку в Queryopen.
     
  7. nila

    nila Гость

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

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    notesDatabase.AllDocuments
     
  9. nila

    nila Гость

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

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

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Значит сама скрываешь.
     
  11. nila

    nila Гость

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

    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
     
  13. Kee_Keekkenen

    Kee_Keekkenen Well-Known Member

    Регистрация:
    5 сен 2006
    Сообщения:
    616
    Симпатии:
    4
    это
    Код (Text):
    'Set db = session.CurrentDatabase
    'Set collection=db.AllDocuments
    'Call collection.RemoveAllFromFolder( "SearchFolder")
    как-то не очень
    лучше, наверное, как-то так
    Код (Text):
    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" )
    .. хотя разницы никакой.. тоже самое получилось, что и у тебя, и скорость работы вроде та же..
     
  14. nila

    nila Гость

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

    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]
    .
     
  16. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Да ничего. С папками медленно работает.
     
  17. nila

    nila Гость

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

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

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