Каким Образом Можно Сделать Сортировку Коллекции

Тема в разделе "Lotus - Программирование", создана пользователем dzheyzhi, 28 май 2013.

  1. dzheyzhi

    dzheyzhi Active Member

    Регистрация:
    8 дек 2011
    Сообщения:
    30
    Симпатии:
    0
    Многоуважаемые программисты!!! :(
    Подскажите каким образом можно сделать сортировку коллекции документов по данному коду...
    Производится поиск по базе по выбранному диапазону дат С - ПО и выгружается в Excel

    Код (LotusScript):
        searchStr$ = {(Form = "invoice") | (TypDoc = "177-СЧЕТ НА ОПЛАТУ") | (TypDoc = "СЧЕТ НА ОПЛАТУ") | (TypeDoc = "invoice") & (Date >= [} & bDT.DateOnly & {]) & (Date <= [} & eDT.DateOnly & {]) & (Trash = "")}
    Set offCL = offDB.Search( searchStr$, Nothing, 0 )
    Set offDOC = offCL.GetFirstDocument
    While Not ( offDOC Is Nothing )

    wb.Application.Range({A} & Trim(CStr(row))).Value = offDOC.punkt(0)
    wb.Application.Range({B} & Trim(CStr(row))).Value = offDOC.punktDescription(0)
    wb.Application.Range({C} & Trim(CStr(row))).Value = offDOC.FROMORG(0)
    wb.Application.Range({D} & Trim(CStr(row))).Value = offDOC.Info(0)
    wb.Application.Range({E} & Trim(CStr(row))).Value = offDOC.date(0)
    wb.Application.Range({F} & Trim(CStr(row))).Value = offDOC.Summa(0)
    row = row + 1

    Set offDOC = offCL.GetNextDocument( offDOC )
    Wend
     
  2. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    Искать нужные данные по вью getAllEntrysByKey, где они отсортированы нужным образом.

    Написать свою класс коллекцию и сортировать в ней данные

    что то типа того:

    Код (Text):
    Class myClass
    punkt as string
    punktDescription as string
    FROMORG as string
    End Class

    Class arrMyClass
    arr() as myClass
    End Class
     
  3. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    Сортировать Excel'ем:
    Код (LotusScript):
            'Set wapp = CreateObject("Excel.Application") - wapp это объект Excel
    wapp.ActiveSheet.Columns("A:AB").Select
    wapp.Selection.Sort wapp.Range("A2"),1, , , , , , 0, 1, False, 1, , 0, ,
    По моему это по возрастанию.
     
  4. dzheyzhi

    dzheyzhi Active Member

    Регистрация:
    8 дек 2011
    Сообщения:
    30
    Симпатии:
    0
    Спасибо большое!!! буду пробовать варианты :(
     
  5. Darkhan

    Darkhan Well-Known Member

    Регистрация:
    14 дек 2012
    Сообщения:
    95
    Симпатии:
    4
    В классе SortCollection документы помещаются в массив, что бъет по памяти (обсуждалось тут). Есть предложение использовать следующее решение
     
  6. dzheyzhi

    dzheyzhi Active Member

    Регистрация:
    8 дек 2011
    Сообщения:
    30
    Симпатии:
    0
    Решил свою проблему таким способом :eek:

    Код (LotusScript):
        Dim formula As String
    Set curVIEW=curDB.GetView("PD")
    formula = "SELECT Form = 'invoice' & StatusName = 'Счет оплачен' & date >= [" & bDT.DateOnly & "] & date <= [" & eDT.DateOnly & "]"
    curVIEW.SelectionFormula = formula
    curVIEW.Refresh


    Set offDOC = curVIEW.GetFirstDocument
    summ = 0
    While Not ( offDOC Is Nothing )

    punkt$ = CStr(offDOC.punkt(0))


    wb.Application.Range({A} & Trim(CStr(row))).Value = offDOC.punkt(0)
    wb.Application.Range({B} & Trim(CStr(row))).Value = offDOC.punktDescription(0)
    wb.Application.Range({C} & Trim(CStr(row))).Value = offDOC.FROMORG(0)
    wb.Application.Range({D} & Trim(CStr(row))).Value = offDOC.Info(0)
    wb.Application.Range({E} & Trim(CStr(row))).Value = offDOC.date(0)
    wb.Application.Range({F} & Trim(CStr(row))).Value = offDOC.Summa(0)
    wb.Application.Range({G} & Trim(CStr(row))).Value = offDOC.StatusName(0)
    row = row + 1
    summ = offDOC.Summa(0) + summ
    Set offDOC = curVIEW.GetNextDocument( offDOC )

    If punkt$ = offDOC.punkt(0) Then
    Else
    wb.Application.Range({E} & Trim(CStr(row))).Value = "Сумма"
    wb.Application.Range({F} & Trim(CStr(row))).Value = summ
    summ = 0
    row = row + 1
    End If
    Wend
    И отсортировал view по пунктам

    Код (LotusScript):
    p := @Explode(punkt;".");
    txt := "";
    @For( i:=1; i <= @Elements( p ); i := i + 1; txt := txt + @If(@IsNumber(@ToNumber(p[i]));@Repeat("0"; 2-@Length(p[i]));"") + p[i]);
    txt
    Спасибо большое за советы!
     
  7. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    dzheyzhi
    Надеюсь эта вьюха служебная и больше нигде не используется, но такой способ на мой скромный взгляд - извращение...
    Сортировать лучше не документы, а данные, которые потом пойдут в отчет, либо, в случае Excel сортировать уже результаты.
     
  8. gpatron

    gpatron Active Member

    Регистрация:
    13 авг 2009
    Сообщения:
    26
    Симпатии:
    0
    на мой взгляд в данном случае (при выводе результатов в Excel) есть два наиболее быстрых способа сортировки:
    1. как сказал savl "Сортировать Excellем"
    2. перегнать нужные данные в массив, отсортировать его и потом указанному диаппазону листа Excel присвоить получившийся массив

    я как правило использую второй способ
    да и к тому же поячеечный способ заполнения экселя более медленный, чем присвоение диаппазону массива
     
Загрузка...
Похожие Темы - Каким Образом Можно
  1. fedotxxl
    Ответов:
    13
    Просмотров:
    14.969
  2. Истребитель
    Ответов:
    6
    Просмотров:
    2.197
  3. Анастасия
    Ответов:
    3
    Просмотров:
    1.042
  4. legzzi
    Ответов:
    1
    Просмотров:
    1.121
  5. nestadima
    Ответов:
    0
    Просмотров:
    2.758

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