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

Тема в разделе "Lotus - Программирование", создана пользователем azzzza, 8 апр 2011.

Статус темы:
Закрыта.
  1. azzzza

    azzzza Гость

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

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

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

    Хотел сделать что-то типа такого:
    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 и т.д.

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

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Напишите свой класс

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

    Akupaka А че я?.. О.о

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


    Добавлено:
    Можно поиграться с категоризированными видами и колонками "итого" (totals)
     
  4. azzzza

    azzzza Гость

    Я тоже об этом думал. Заполнять таким образом список при переборе вроде удобно.
    Но не охота потом при выводе отчета парсить строку, выкусывать задачу, подразделения.
    Вроде можно быстро и просто написать функции, которые будут на вход принимать ключ списка, а выдавать отдельно задание и отчет, но я ищу возможный другой способ.
    Просто пришлось единажды поработать с подобным кодом, только там нужно было парсить длинную такую "колбасу"(строку) - геморой еще тот. Поэтому я к этому немного болезненно отношусь. Хочется, чтобы люди после меня нормально понимали, что куда, как работает программа.
    Надеюсь, можно как-то проще.

    Я так понимаю, в Lotus Script они тоже есть. ;)
    Если можно маленький пример, как это выглядит
    Честно говоря, не знаю, что такое категоризированные виды и колонки "итого"
     
  5. RAJ

    RAJ Well-Known Member

    Регистрация:
    17 янв 2007
    Сообщения:
    440
    Симпатии:
    0
    а в чём проблема?
    Код (Text):
    arr = Split(KOLBASA, "#")
    получите массив
     
  6. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Очевидно, что надо свой класс писать.
     
  7. Xalet

    Xalet Well-Known Member

    Регистрация:
    8 авг 2008
    Сообщения:
    410
    Симпатии:
    0
    Я немножко о другом. А нужно ли вообще в списки сгружать?
     
  8. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    Если не полениться и обратиться к документации, то сразу становится понятно, что LS есть superset of Basic.
    Код (LotusScript):
    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
     
  9. duchan

    duchan Well-Known Member

    Регистрация:
    20 сен 2006
    Сообщения:
    106
    Симпатии:
    3
    Другой подход:
    Если док-ты в одной базе то можно реализовать "служебное" представление для построения данного отчета а далее хоть @Dblookup'ом или GetAllDocumentByKey получать кол-во.
    Как пример строим вьшку, первый столбец категоризирован и имеет формулу вычисляющие некие ключи (список ключей для каждого док-та) для выбора, например:
    Код (Text):
    (@Year(DocDate)+"#"+@Month(DocDate)+"#"+f_task+"#"+f_depart+"#"+f_mark+"##"):(@Year(DocDate)+"#"+@Month(DocDate)+"#"+f_task+"#"+f_depart+"##")
    вторая колонка например просто 1.

    Далее можем хоть на собака считать отчет:
    Код (Text):
    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:
     
Загрузка...
Статус темы:
Закрыта.

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