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

Тема в разделе "Lotus - Программирование", создана пользователем Gor, 9 июл 2009.

  1. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    Всем доброго дня.

    задача следующая.
    Есть в базе некоторое количество документов (500-1000)
    В документах набор поле (10 штук)

    Необходимо их отсортировать следующим образом.
    Сгруппировать все документы по двум полям у которых будут совпадать значения, создать один общий документ родитель в котором будут собраны все значения из сгруппированных документов.

    на примере, что сейчас есть:

    Дата Клиент Прочее1 Прочее2

    20.01.2009 Клиент1 111 11
    15.01.2008 Клиент2 222 22
    20.01.2009 Клиент1 333 33
    24.01.2007 Клиент3 444 44
    23.01.2009 Клиент4 555 55
    13.02.2009 Клиент5 666 66
    15.01.2008 Клиент2 777 77
    08.08.2009 Клиент7 888 88
    15.01.2008 Клиент6 999 99

    Необходимо:

    Дата Клиент Прочее1 Прочее2

    родитель1 20.01.2009 Клиент1 111 11
    333 33
    потомок1.1 20.01.2009 Клиент1 111 11
    потомок1.2 20.01.2009 Клиент1 333 33

    родитель2 15.01.2008 Клиент2 222 22
    777 77
    потомок2.1 15.01.2008 Клиент2 222 22
    потомок2.2 15.01.2008 Клиент2 777 77


    родитель3 24.01.2007 Клиент3 444 44
    потомок3.1 24.01.2007 Клиент3 444 44


    родитель4 23.01.2009 Клиент4 555 55
    потомок4.1 23.01.2009 Клиент4 555 55

    родитель5 13.02.2009 Клиент5 666 66
    потомок5 13.02.2009 Клиент5 666 66

    родитель6 08.08.2009 Клиент7 888 88
    потомок6 08.08.2009 Клиент7 888 88

    родитель7 15.01.2008 Клиент6 999 99
    потомок7 15.01.2008 Клиент6 999 99


    Подскажите с алгоритмом как реализовать и с помощью чего? И вообще реально ли это?
     
  2. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    С помощью списков всё реально. ;)
    Т.е. создаешь список документов
    Код (Text):
    Dim doclist List As NotesDocument
    Потом проходишь по коллекции документов и проверяешь:
    While
    If Not (IsElement(doclist(твои значения))) Then
    создаешь новый документ
    Set doclist(твои значения) = db.CreateDocument()
    ...
    End if
    добавляшь значения
    Call doclist(твои значения).ReplaceItemValue(...)
    ...
    Wend
    Потом список документов нужно сохранить.
     
  3. erdi

    erdi Well-Known Member

    Регистрация:
    20 авг 2008
    Сообщения:
    261
    Симпатии:
    36
    как вариант создай вьюшку где будешь выбирать все документы(select form=1 & form=2), где первый столбец - каталог дат, второй - каталог названия фирмы.
    Тогда пробежавшись по этой вьюшке, ты будешь создавать документы(родителя), когда наткнешься на IsCategory=true & IndentLevel=0, а создавать документ(потомок 1(n)) когда наткнешься на IsCategory=true & IndentLevel=1, а все остальные поля возьмешь в документах IndentLevel=3
     
  4. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    to Medevic:
    Код (Text):
    С помощью списков всё реально.
    Т.е. создаешь список документов

    Dim doclist List As NotesDocumentПотом проходишь по коллекции документов и проверяешь:
    While If Not (IsElement(doclist(твои значения))) Then   создаешь новый документ   
    Set doclist(твои значения) = db.CreateDocument()   
    ... End if добавляшь значения
    Call doclist(твои значения).ReplaceItemValue(...) .
    ..Wend
    Потом список документов нужно сохранить.
    Не совсем понял.
    Мне предположим для семи документов одинаковыми двумя полями надо создать ТОЛЬКО ОДИН родительский док со всеми значениями из этих семи. А в этом способе я так понимаю мы просто создаём документы на каждое значение или я понял неправильно(

    т.е. смысл создать один документ из нескольких (на основе одинаковых значений в них) и привязаться к этим докам как родительский документ - а они станут потомками.

    to Erdi:
    не хочется плодить служебные вьюхи)
     
  5. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    В этом способе мы как раз создадим один документ. У списка используй такой тэг: doclist(твои_одинаковые_значения_в_виде_строки)
     
  6. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    to: Medevic

    Список документов действительно создаётся корректный.
    Получается что то типа

    Код (Text):
    Dim doclist List As NotesDocument

    Set doc = view.GetFirstDocument()  

    While Not doc Is Nothing       

    If Not (Iselement(doclist(doc.GRID(0)+" "+doc.MJ_AssessmentPeriod_3(0)))) Then         

    Set doclist(doc.GRID(0)+" "+ doc.MJ_AssessmentPeriod_3(0)) = db.CreateDocument()   
    End If

    Call doclist(doc.GRID(0)+" "+doc.MJ_AssessmentPeriod_3(0)).ReplaceItemValue("ClName",doc.ClName(0))
    Call doclist(doc.GRID(0)+" "+doc.MJ_AssessmentPeriod_3(0)).ReplaceItemValue("GRID",doc.GRID(0))
    Call doclist(doc.GRID(0)+" "+doc.MJ_AssessmentPeriod_3(0)).ReplaceItemValue("Field1",doc.Field1(0))
    Call doclist(doc.GRID(0)+" "+doc.MJ_AssessmentPeriod_3(0)).ReplaceItemValue("Field2",doc.Field2(0))
    Call doclist(doc.GRID(0)+" "+doc.MJ_AssessmentPeriod_3(0)).ReplaceItemValue("Field3",doc.Field3(0))
    Call doclist(doc.GRID(0)+" "+doc.MJ_AssessmentPeriod_3(0)).ReplaceItemValue("Field4",doc.Field4(0))

    Set doc = view.GetNextDocument(doc)
    Wend
    А на каком этапе и как эти документы сделать родительскими (parent) а остальные зависимые от него респонсами (response) + надо же ещё в эти родительские документы значения из всех зависимых переписать... А сейчас получается что в родительские документы попадают значения только из одного зависимого
     
  7. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    На этом этапе.
    Код (Text):
    добавляшь значения
    Call doclist(твои значения).ReplaceItemValue(...)
     
Загрузка...
Похожие Темы - Сортировка документов по
  1. Altaya
    Ответов:
    7
    Просмотров:
    2.790
  2. LuMee
    Ответов:
    38
    Просмотров:
    11.602
  3. vera2014
    Ответов:
    0
    Просмотров:
    1.074
  4. Liori
    Ответов:
    2
    Просмотров:
    1.007
  5. FCDK
    Ответов:
    0
    Просмотров:
    1.266

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