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

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

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

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

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

не могу подобрать тип данных

  • Автор темы azzzza
  • Дата начала
Статус
Закрыто для дальнейших ответов.
A

azzzza

Здраствуйте. Не могу до конца разобраться с типами данных. Если кто может помочь, буду благодарен.
Собственно я хочу реализовать что-то типа списка с двумя ключами, но не знаю как.
Может, я не правильно подошел к решению задачи. Поэтому сформулирую её упрощенную версию.

Есть форма с полями на ней:
f_task - тип задания,
f_depart - отдел,
f_mark - текст обработки документа.

Мне нужно реализовать отчет примерно следующего вида:
22fb9c487ad6.jpg

Количество документов может доходить до нескольких тысяч.
Поэтому остро стоит необходимость, чтобы перебрать их все за один раз в цикле.
Собственно вопрос: как посчитать количество пришедших и обработанных документов для отчета.

Хотел сделать что-то типа такого:
income_count("task","depart");
marked_count("task","depart");

Потом проинизиализировать всё для каждого отдела и задания нулями и при переборе по мере выполнения условий сравнения добавлять значения к елементам списка. В итоге получил бы что-то типа:
income_count("1.1","1 отдел") = 5;
income_count("1.1","2 отдел") = 10;
...
marked_count("1.1","1 отдел") = 4 и т.д.

Как можно подобное реализовать?
 
N

nvyush

Напишите свой класс

А ключи для списка можно формировать в виде:
income_count("1.1|1 отдел") = 5;
income_count("1.1|2 отдел") = 10;
(разделитель — на свой вкус)
 
A

Akupaka

что-то типа списка с двумя ключами, но не знаю как
Ну, есть понятие списка в бейсике: list
Если в элемент такого списка положить другой спиииисок... то будет двухмерный список.
Можно сделать одномерный со сложеным ключем ключ А + ключ Б = ключ АБ. Ключи можно разделить для условности особым набором символов и получим вполне удобный себе ключ. Например, А + ~#~ + Б = А~#~Б.


Добавлено:
Собственно вопрос: как посчитать количество пришедших и обработанных документов для отчета.
Можно поиграться с категоризированными видами и колонками "итого" (totals)
 
A

azzzza

А ключи для списка можно формировать в виде:
income_count("1.1|1 отдел") = 5;
income_count("1.1|2 отдел") = 10;
(разделитель — на свой вкус)
Я тоже об этом думал. Заполнять таким образом список при переборе вроде удобно.
Но не охота потом при выводе отчета парсить строку, выкусывать задачу, подразделения.
Вроде можно быстро и просто написать функции, которые будут на вход принимать ключ списка, а выдавать отдельно задание и отчет, но я ищу возможный другой способ.
Просто пришлось единажды поработать с подобным кодом, только там нужно было парсить длинную такую "колбасу"(строку) - геморой еще тот. Поэтому я к этому немного болезненно отношусь. Хочется, чтобы люди после меня нормально понимали, что куда, как работает программа.
Надеюсь, можно как-то проще.

Ну, есть понятие списка в бейсике: list
Я так понимаю, в Lotus Script они тоже есть. ;)
Если в элемент такого списка положить другой спиииисок... то будет двухмерный список.
Если можно маленький пример, как это выглядит
Можно поиграться с категоризированными видами и колонками "итого" (totals)
Честно говоря, не знаю, что такое категоризированные виды и колонки "итого"
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
4
Очевидно, что надо свой класс писать.
 
X

Xalet

Я немножко о другом. А нужно ли вообще в списки сгружать?
 
A

Akupaka

Я так понимаю, в Lotus Script они тоже есть
Если не полениться и обратиться к документации, то сразу становится понятно, что LS есть superset of Basic.
Если можно маленький пример, как это выглядит
Код:
Sub Initialize
Dim listA List As Variant
Dim listB List As Variant
Dim i As Integer
Dim k As Integer
Dim keyA As String
Dim keyB As String
Dim listValue As String
Dim listVariant As Variant

For i = 0 To 9
For k = 0 To 9
keyB = "B" & Cstr(k)
listB(keyB) = "B-value" & Cstr(k)
Next k

keyA = "A" & Cstr(i)
listA(keyA) = listB
Next i

keyA = "A5"
keyB = "B7"
listVariant = listA(keyA) ' перезаписать полностью список нельзя, поэтому используется буферный Variant
listValue = listVariant(keyB)
Msgbox keyA & "-" & keyB & Chr(13) & listValue
End Sub
Честно говоря, не знаю, что такое категоризированные виды и колонки "итого"
В документации по Domino Designer все написано :)
index: Categories\adding to views, Totals\calculating
 

duchan

Green Team
20.09.2006
127
11
BIT
96
Другой подход:
Если док-ты в одной базе то можно реализовать "служебное" представление для построения данного отчета а далее хоть @Dblookup'ом или GetAllDocumentByKey получать кол-во.
Как пример строим вьшку, первый столбец категоризирован и имеет формулу вычисляющие некие ключи (список ключей для каждого док-та) для выбора, например:
Код:
(@Year(DocDate)+"#"+@Month(DocDate)+"#"+f_task+"#"+f_depart+"#"+f_mark+"##"):(@Year(DocDate)+"#"+@Month(DocDate)+"#"+f_task+"#"+f_depart+"##")
вторая колонка например просто 1.

Далее можем хоть на собака считать отчет:
Код:
REM {всего поступило};
key1 := "2011#4#1.1#1 отдел##";
REM {обработано};
key2 := "2011#4#1.1#1 отдел#1##";
ALL := @Elements(@Dblookup("":"";""; ViewName; key1; 2; [FAILSILENT]));
MARK := @Elements(@Dblookup("":"";""; ViewName; key2; 2; [FAILSILENT]));

Это только "вектор" направления куда можно подумать.. :huh:
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

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