1. Наш канал codeby в telegram. Пишем об информационной безопасности, методах защиты информации, о программировании. Не пропускай новости с кодебай, будь в тренде ! Подробнее ...

    Скрыть объявление

Сводный отчет

Тема в разделе "Lotus - Программирование", создана пользователем SkyRanger, 3 апр 2007.

  1. SkyRanger

    SkyRanger Active Member

    Репутация:
    0
    Регистрация:
    17 мар 2007
    Сообщения:
    44
    Симпатии:
    0
    Есть куча документов.

    В доках есть поле "Исполнитель"

    По этому полю надо построить сводный отчет по документам.

    Т.е. Сколько документов на исполнителе, сколько на контроле, скока исполнено и т.д.

    У меня возникли проблемы с выборкой множества таких документов. Как проще это сделать?
     
  2. morpheus

    morpheus скриптописец

    Репутация:
    0
    Регистрация:
    7 авг 2006
    Сообщения:
    3.915
    Симпатии:
    1
    Для: SkyRanger
    Я зделать довольно таки сложное решение подобной проблемы...
    приблизительно так

    идёт поиск по выбранным параметрам ( как выбираються параметры и генерируеться строка это ввобще тема отдельной статьи ), после поиска получаю коллекцию документов ( предположим - COL )

    Теперь - обьявляем класс типа Entry - этот класс у меня будет нести в себе кучу свойств... всё что угодно, своство для дат(variant), для флагов(boolean) и т.п.
    Пример
    Class Entry
    Public Type As String
    Public RegNum As String
    Public RegDate As Variant
    Public Ispolnitel As String
    ... ( и так сколько угодно свойств )



    Делаю 2й класс - EntryCol - этот класс будет заменителем коллекции ... тоесть содержать в себе масив записей Entry
    Пример
    ' Массив записей
    Class EntryCol
    Public Entry() As Record
    Public Count As Long



    Вот теперь самое интереесное с колеекцией документов (COL) я делаю преобразование в колекцию EntryCol...

    зачем такой изврат????
    обясняю...
    1 СОРТИРОВКА...это поверте очень важно
    2 в Entry можно запихнуть данные и из респонсов и из чего угодно... с обычной коллекцией будет труднее
    3 Вывод в Эксель уже не требует обращений к документам
    4 Работать с коллекцией EntryColбудет намного легче чем с колекцией документов

    Опыт показывает что такое решение являеться универсальным ... так как такая коллекция EntryColбудет даёт возможноть делать ЛЮБЫЕ отчеты ( у меня их около 50 у разных заказчиков, и поверте все абсолютно разные, разве что графики пока им не выводил )


    если Вам интереесно рещшение постараюсь обьяснить подробнее и выложить примеры если Вас интересует
     
  3. Elena Nefedova

    Elena Nefedova Гость

    Репутация:
    0
    Для: SkyRanger
    Категоризация по нескольким признакам во вьюхе + Total для каждой категории не подойдет?
     
  4. SkyRanger

    SkyRanger Active Member

    Репутация:
    0
    Регистрация:
    17 мар 2007
    Сообщения:
    44
    Симпатии:
    0
    Сделал я генерацию отчета на базе папок:

    Код:
    	SumCellsShade = 35
    SCellsShade = 34
    
    Dim WS As New NotesUIWorkspace	
    Set session = New NotesSession
    Set db=session.CurrentDatabase
    Dim fd As NotesDocumentCollection
    
    
    Set uidoc = ws.CurrentDocument
    
    
    formul = {date_priem >=[} & uidoc.FieldGetText("date1") & {] & date_priem <=[} & uidoc.FieldGetText("date2") & {]}
    
    Set v=db.GetView("u_svod_rep")
    
    v.SelectionFormula = formul
    Call v.Refresh
    'Call v.ViewRebuild	
    
    Set tst=v.GetFirstDocument
    
    If tst Is Nothing Then 
    answ = Messagebox("Нет данных за данный период!" , MB_OK+MB_ICONINFORMATION,"Нет данных")
    Exit Sub 
    End If
    
    
    Print "Идет создание отчета. Пожалуйста подождите..."
    
    
    Set xl = CreateObject("Excel.Application")
    Set xlWbk = xl.Workbooks.Add("c:\lotus\rep_svod_1.xlt")
    xlWbk.ActiveSheet.Rows("6:6").Select
    
    row=6	
    
    Set docX=v.GetFirstDocument
    values=Split(docX.ColumnValues(0),", ")
    Forall vl In values 
    vals="urep "& vl
    If Not docX Is Nothing Then
    Call docX.PutInFolder(vals,True)
    End If
    End Forall
    
    While Not docX Is Nothing		
    
    Set docX=v.GetNextDocument(docX)
    If Not docX Is Nothing Then
    values=Split(docX.ColumnValues(0),", ")
    Forall vl In values 
    vals="urep "& vl
    Call docX.PutInFolder(vals,True)
    End Forall
    End If
    Wend
    
    doccount=0
    col=1
    
    Set v=db.GetView("(ispolnotels)")
    If Not v Is Nothing Then
    Set docX=v.GetFirstDocument
    End If
    
    doccount_sum = 0
    control_count_sum = 0
    count_rassm_sum=0
    count_ud_rassm_sum=0
    count_us_rassm_narush_sum =0
    count_ost_rassm_sum=0
    count_ost_rassm_dop_contr_sum=0
    
    srow = False
    
    While Not docX Is Nothing
    doccount=0
    values=Split(docX.ColumnValues(1),", ")
    Forall vl In values 
    vals="urep "& vl
    Set v1=db.GetView(vals)
    If Not v1 Is Nothing Then
    Set docx1=v1.GetFirstDocument
    control_count=0
    count_rassm=0
    count_ud_rassm=0
    count_us_rassm_narush =0
    count_ost_rassm=0
    count_ost_rassm_dop_contr=0
    count_ost_rassm_narush=0
    
    
    While Not docX1 Is Nothing
    doccount=doccount+1	
    If docX1.ColumnValues(4)="Контроль" Then
    control_count=control_count+1
    control_count_sum = control_count_sum +1
    End If
    If docX1.ColumnValues(5)<>"" Then
    count_rassm=count_rassm+1
    count_rassm_sum=count_rassm_sum+1					
    End If
    If docX1.ColumnValues(5)<>4 Then
    If docX1.ColumnValues(5)<>"" Then
    count_ud_rassm=count_ud_rassm+1
    count_ud_rassm_sum=count_ud_rassm_sum+1
    End If
    End If
    
    If docX1.ColumnValues(2)<docX1.ColumnValues(6) Then
    count_us_rassm_narush=count_us_rassm_narush+1
    End If
    
    If docX1.ColumnValues(2)<docX1.ColumnValues(6) Then
    If docX1.ColumnValues(5)="" Then
    count_ost_rassm_narush_sum=count_ost_rassm_narush_sum+1
    count_ost_rassm_narush=count_ost_rassm_narush+1
    End If
    End If
    
    If docX1.ColumnValues(7)="Доп контроль" Then
    count_ost_rassm_dop_contr=count_ost_rassm_dop_contr+1
    count_ost_rassm_dop_contr_sum=count_ost_rassm_dop_contr_sum+1
    End If
    
    Set docX1=v1.GetNextDocument(docX1)
    Wend
    
    If srow=True Then
    scel=SCellsShade
    Else
    scel=2
    End If
    
    xlWbk.ActiveSheet.Cells(row, col)=docX.ColumnValues(1)
    xlWbk.ActiveSheet.Cells(row, col).Borders.LineStyle = 1
    xlWbk.ActiveSheet.Cells(row, col).Interior.ColorIndex = scel
    
    xlWbk.ActiveSheet.Cells(row, col+1)=docX.ColumnValues(0)
    xlWbk.ActiveSheet.Cells(row, col+1).Borders.LineStyle = 1
    xlWbk.ActiveSheet.Cells(row, col+1).Interior.ColorIndex = scel
    xlWbk.ActiveSheet.Cells(row, col+2)=doccount
    xlWbk.ActiveSheet.Cells(row, col+2).Borders.LineStyle = 1			
    xlWbk.ActiveSheet.Cells(row, col+2).Interior.ColorIndex = scel
    xlWbk.ActiveSheet.Cells(row, col+3)=control_count
    xlWbk.ActiveSheet.Cells(row, col+3).Borders.LineStyle = 1			
    xlWbk.ActiveSheet.Cells(row, col+3).Interior.ColorIndex = scel
    xlWbk.ActiveSheet.Cells(row, col+4)=count_rassm
    xlWbk.ActiveSheet.Cells(row, col+4).Borders.LineStyle = 1
    xlWbk.ActiveSheet.Cells(row, col+4).Interior.ColorIndex = scel
    xlWbk.ActiveSheet.Cells(row, col+5)=count_ud_rassm
    xlWbk.ActiveSheet.Cells(row, col+5).Borders.LineStyle = 1
    xlWbk.ActiveSheet.Cells(row, col+5).Interior.ColorIndex = scel
    If count_rassm<>0 Then
    xlWbk.ActiveSheet.Cells(row, col+6)=count_us_rassm_narush
    xlWbk.ActiveSheet.Cells(row, col+6).Borders.LineStyle = 1
    xlWbk.ActiveSheet.Cells(row, col+6).Interior.ColorIndex = scel
    Else
    xlWbk.ActiveSheet.Cells(row, col+6)=0
    xlWbk.ActiveSheet.Cells(row, col+6).Borders.LineStyle = 1
    xlWbk.ActiveSheet.Cells(row, col+6).Interior.ColorIndex = scel
    End If		
    xlWbk.ActiveSheet.Cells(row, col+7)=doccount-count_rassm
    xlWbk.ActiveSheet.Cells(row, col+7).Borders.LineStyle = 1
    xlWbk.ActiveSheet.Cells(row, col+7).Interior.ColorIndex = scel
    
    xlWbk.ActiveSheet.Cells(row, col+8)=count_ost_rassm_narush
    xlWbk.ActiveSheet.Cells(row, col+8).Borders.LineStyle = 1
    xlWbk.ActiveSheet.Cells(row, col+8).Interior.ColorIndex = scel
    
    xlWbk.ActiveSheet.Cells(row, col+9)=count_ost_rassm_dop_contr
    xlWbk.ActiveSheet.Cells(row, col+9).Borders.LineStyle = 1
    xlWbk.ActiveSheet.Cells(row, col+9).Interior.ColorIndex = scel
    
    doccount_sum = doccount_sum + doccount
    row=row+1
    srow=Not srow
    End If 
    End Forall
    Set docX=v.GetNextDocument(docX)
    Wend
    
    xlWbk.ActiveSheet.Cells(row, col+1)="Итого"
    xlWbk.ActiveSheet.Cells(row, col+1).Borders.LineStyle = 1
    xlWbk.ActiveSheet.Cells(row, col+2)=doccount_sum 
    xlWbk.ActiveSheet.Cells(row, col+2).Borders.LineStyle = 1
    xlWbk.ActiveSheet.Cells(row, col+2).Interior.ColorIndex = SumCellsShade
    
    
    xlWbk.ActiveSheet.Cells(row, col+3)=control_count_sum
    xlWbk.ActiveSheet.Cells(row, col+3).Borders.LineStyle = 1			
    xlWbk.ActiveSheet.Cells(row, col+3).Interior.ColorIndex = SumCellsShade
    
    xlWbk.ActiveSheet.Cells(row, col+4)=count_rassm_sum
    xlWbk.ActiveSheet.Cells(row, col+4).Borders.LineStyle = 1
    xlWbk.ActiveSheet.Cells(row, col+4).Interior.ColorIndex = SumCellsShade
    
    xlWbk.ActiveSheet.Cells(row, col+5)=count_ud_rassm_sum
    xlWbk.ActiveSheet.Cells(row, col+5).Borders.LineStyle = 1
    xlWbk.ActiveSheet.Cells(row, col+5).Interior.ColorIndex = SumCellsShade
    
    xlWbk.ActiveSheet.Cells(row, col+6)=count_us_rassm_narush_sum
    xlWbk.ActiveSheet.Cells(row, col+6).Borders.LineStyle = 1
    xlWbk.ActiveSheet.Cells(row, col+6).Interior.ColorIndex = SumCellsShade
    
    xlWbk.ActiveSheet.Cells(row, col+7)=doccount_sum-count_rassm_sum
    xlWbk.ActiveSheet.Cells(row, col+7).Borders.LineStyle = 1
    xlWbk.ActiveSheet.Cells(row, col+7).Interior.ColorIndex = SumCellsShade
    
    xlWbk.ActiveSheet.Cells(row, col+8)=count_ost_rassm_narush_sum
    xlWbk.ActiveSheet.Cells(row, col+8).Borders.LineStyle = 1
    xlWbk.ActiveSheet.Cells(row, col+8).Interior.ColorIndex = SumCellsShade
    
    xlWbk.ActiveSheet.Cells(row, col+9)=count_ost_rassm_dop_contr_sum
    xlWbk.ActiveSheet.Cells(row, col+9).Borders.LineStyle = 1
    xlWbk.ActiveSheet.Cells(row, col+9).Interior.ColorIndex = SumCellsShade
    
    
    xlWbk.ActiveSheet.Cells(3,1)="с " & uidoc.FieldGetText("date1") & " по " & uidoc.FieldGetText("date2")
    
    xlWbk.ActiveSheet.Range("A7").Select
    xl.Visible=True
    Print "Создание отчета завершено"
    такой вот извращеный способ :D

    Внимание вопрос: :)

    Как мне очистить заданную папку от документов и саму папку прибить? Желательно на LotusScript и сразу код :)
     
  5. morpheus

    morpheus скриптописец

    Репутация:
    0
    Регистрация:
    7 авг 2006
    Сообщения:
    3.915
    Симпатии:
    1
    <!--QuoteBegin-SkyRanger+19:04:2007, 01:21 -->
    <span class="vbquote">(SkyRanger @ 19:04:2007, 01:21 )</span><!--QuoteEBegin-->Как мне очистить заданную папку от документов и саму папку прибить? Желательно на LotusScript и сразу код
    [snapback]62783" rel="nofollow" target="_blank[/snapback]​
    [/quote]


    Читайте хэлп

    Код:
    Dim session As New NotesSession 
    Dim db As NotesDatabase 
    Dim view As NotesView 
    Set db = session.CurrentDatabase 
    Set view = db.GetView( "Sales Leads" ) 
    Call view.Remove
     
  6. SkyRanger

    SkyRanger Active Member

    Репутация:
    0
    Регистрация:
    17 мар 2007
    Сообщения:
    44
    Симпатии:
    0
    Пасибо. Просто хочется убить того гада, что делал систему хелпа и писал примеры B) Если равнивать с Борландовским...
     
Загрузка...

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