• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

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

  • Автор темы SkyRanger
  • Дата начала
S

SkyRanger

Есть куча документов.

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

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

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

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

morpheus

Для: 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 у разных заказчиков, и поверте все абсолютно разные, разве что графики пока им не выводил )


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

Elena Nefedova

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

SkyRanger

Сделал я генерацию отчета на базе папок:

Код:
	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 и сразу код :)
 
M

morpheus

<!--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]


Читайте хэлп

This script removes the Sales Leads view from the current database.
Код:
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
 
S

SkyRanger

Пасибо. Просто хочется убить того гада, что делал систему хелпа и писал примеры B) Если равнивать с Борландовским...
 
Мы в соцсетях:

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