Задача [#9625]: Сортировка в модуле «Документы»

Формулировка проблемы: необходима возможность изменять сортировку в самом журнале, а не только в подфильтрах журнала.

Решение.

Разделим данную задачи на 4 подзадачи.

1. Настройка сортировки документов журналов в Конфигураторе

Необходимо добавить новую группу опций в настройки журналов в конфигураторе (Документооборот -> Журналы): лейбл Сортировать по полю и условия сортировки.

Условие сортировки представляет собой набор параметров, каждый из которых содержит списки Поле сортировки, Направление сортировки и Соединение.

Параметры условия сортировки между собой можно соединять только оператором «затем по» (логическое «И»). Новый параметр можно добавить, выбрав в списке соединения значение «затем по» (по умолчанию там указано пустое значение), при этом появляется новая строка, связанная с предыдущей через логическое «И». После этого из списка соединения пункт с пустым значением пропадает - больше его выбрать нельзя. Удалить параметр сортировки (кроме первого) можно, нажав на соответствующую иконку «корзины». Если удаляемый параметр является последним, то у предыдущего параметра значение соединения выставляется в пустое.

Примечание: вышеописанное поведение соединения нескольких условий аналогично таковому в настройках процесса «условный переход».

Рисунок 120. Настройки журналов

Настройки журналов

Выпадающий список Поле сортировки должен содержать следующие параметры:

  • Краткое содержание

  • Номер

  • Тип документа

  • Статус

  • Дата регистрации - выбран по умолчанию

  • Автор

  • Зарегистрировал

  • Исполнитель

  • Длительность (раб.дн.)

  • далее идут динамически формируемые пункты в формате Элемент номера №п/п -, и далее соответствие частям шаблона номера, выбранного для данного журнала, исключая стандартные счетчики даты регистрации

Выпадающий список Направление сортировки должен содержать:

  • по возрастанию

  • по убыванию - выбран по умолчанию

Выпадающий список Соединение должен содержать:

  • пустое значение - выбран по умолчанию

  • затем по

2. Настройка сортировки документов в диалоге редактирования фильтра

Корневым фильтрам документов («Журналы», «Дела», «Все») и подфильтрам первого уровня (подфильтры журналов, дел, «Мои», «Полученные», «Отправленные») в контекстное меню необходимо добавить пункт Редактировать фильтр. Данный пункт вызывает диалоговое окно редактирования фильтра, который должен содержать только параметры сортировки:

  • Флажок Использовать настройки сортировки по умолчанию (по умолчанию, включен) - присутствует только для подфильтров (в т.ч. пользовательских) журналов.

    Для включенного флажка:

    • все остальные настройки сортировки недоступны для редактирования (автоматически заполняются значения из конфигуратора);

    • сортировка должна осуществляться согласно настройкам данного журнала в конфигураторе;

    • все изменения в условиях сортировки, внесенные в конфигураторе, применяются автоматически.

    Для выключенного флажка, соответственно:

    • настройки сортировки становятся доступными для редактирования (автоматически устанавливаются значения по умолчанию);

    • сортировка в данном журнале должна осуществляться согласно настроенным в данном диалоге условиям;

    • все изменения в условиях сортировки, внесенные в конфигураторе, не применяются.

  • Для корневых фильтров «Журналы» и «Дела», а также для подфильтров дел выпадающий список Поле сортировки должен содержать те же параметры из конфигуратора, за тем исключением, что должны отсутствовать динамически формируемые пункты.

  • Для подфильтров журналов выпадающий список Поле сортировки должен содержать все те же параметры из конфигуратора.

  • Для фильтра документов пользователя «Все», а также подфильтров «Мои», «Полученные», «Отправленные» выпадающий список Поле сортировки должен содержать все те же параметры из конфигуратора, за следующими исключениями:

    • должны отсутствовать динамически формируемые пункты;

    • кроме того, для фильтра:

      • «Полученные» - должны добавиться пункты Дата создания и Дата получения;

      • «Отправленные» - должны добавиться пункты Дата создания и Дата отправки;

      • «Все» и «Мои» - должны добавиться пункты Дата создания и Дата получения/отправки.

Примечание: Дата получения/отправки означает, что в сортировке будут принимать участие либо дата получения (при отсутствии даты отправки), либо дата отправки (соответственно, при отсутствии даты получения), либо максимальная из обеих дат (если у документа есть обе даты).

Кроме того, необходимо скорректировать диалог редактирования пользовательских подфильтров: параметры сортировки заменить на вышеописанный, остальное согласно макетов.

Рисунок 121. Редактирование корневого фильтра, вариант 1

Редактирование корневого фильтра, вариант 1

Рисунок 122. Редактирование корневого фильтра, вариант 2

Редактирование корневого фильтра, вариант 2

Рисунок 123. Редактирование пользовательского фильтра

Редактирование пользовательского фильтра

3. Алгоритмы и примеры сортировки

Сортировка списка документов должна осуществляться по следующему алгоритму.

  1. Берется первый критерий сортировки:

    • сортировка по полю Дата регистрации для журналов должна осуществляться по алгоритму, описанному в задаче #7065, а именно: сначала отображаются документы без номера, отсортированные по дате создания, а затем - документы с номером, отсортированные по значению дополнительного счетчика;

    • сортировка по полю Дата регистрации (для дел и документов) должна осуществляться непосредственно по значениям даты (timestamp[9]);

    • сортировка по полям Дата создания, Дата получения, Дата отправки, Дата получения/отправки должна осуществляться непосредственно по значениям даты и времени (timestamp[10]);

    • сортировка по динамическим пунктам, содержащим числовые счетчики, а также полю Длительность (раб.дн.) должна осуществляться непосредственно по числовому значению поля;

    • сортировка по динамическому пункту, содержащему элементы «*», осуществляется по особому алгоритму, описанному ниже;

    • сортировка по полю Статус осуществляется в порядке, определенном следующей таблицей (в указанной таблице направление сортировки - по возрастанию):

      Статус
      Черновик
      На регистрации
      На исполнении
      Просроченные
      Завершен
      Отклонен
    • сортировка остальных полей, включая по динамическим пунктам, содержащим строковые счетчики должна осуществляться лексикографически (поразрядно).

  2. Если в результате сортировки по первому критерию имеется несколько документов с одинаковым номером по порядку сортировки, то подключается второй критерий. Между собой такая группа документов сортируется по тому же алгоритму из п.1.

  3. Если в результате сортировки по всем настроенным критериям все также имеется несколько документов - последним условием необходимо считать:

    • для документов журналов - Дата регистрации по убыванию, а при отсутствии даты регистрации - Дата создания по убыванию;

    • для документов дел - Дата создания по убыванию;

    • для документов пользователя:

      • для корневого фильтра «Все», а также подфильтра «Мои» - Дата получения/отправки, по убыванию;

      • для подфильтра «Полученные» - Дата получения, по убыванию;

      • для подфильтра «Отправленные» - Дата отправки, по убыванию;

      • при отсутствии указанных полей - Дата создания по убыванию.

Примечание: для документов пользователя (раздел «Все») непрочитанные документы должны быть выше прочитанных, а уже внутри каждой из этих групп должно учитываться настроенное условие сортировки.

Алгоритм специфической сортировки элемента номера, содержащего «*»

Первый критерий сортировки (приоритет числам):

  • сначала идут все пустые записи (не содержащие пробелы, а именно пустые);

  • набор цифр[11], идущих подряд до первого вхождения «не цифры» либо до конца записи, интерпретируется как число, причем все начальные нули и символы не учитываются - сортировка осуществляется по значению этих чисел;

  • записи, после чисел у которых идут «не цифры», сортируются лексикографически (поразрядно).

Второй критерий сортировки:

  • далее идут остальные записи[12], сортировка лексикографическая (поразрядная).

Пример сортировки по значениям даты/времени по возрастанию:

    1  апреля 2014
    2  апреля 2014
    13 апреля 2014
    1  мая    2014
    3  мая    2014
    11 мая    2014

Пример специфической сортировки по возрастанию:

    #пустая запись
    1
    1А // их порядок будет зависеть 
    №1А // от следующих условий либо 
    а1А // от доп.счетчика
    1Б
    1.1
    2 /// их порядок также будет зависеть 
    m2 /// от следующих условий либо 
    n2 /// от доп.счетчика
    03
    10
    100
    m100a
    #запись, содержащая пробел
    $
    &
    A
    B
    Z
    a
    b
    z
    А
    Б
    Я
    а
    б
    я
4. Значения по умолчанию, действия при обновлении системы

При обновлении системы в конфигураторе всем журналам должно установиться значение по умолчанию: Дата регистрации, по убыванию.

В клиентской части должны установиться следующие значения по умолчанию:

  • для корневых фильтров документов («Журналы», «Дела»), а также для подфильтров дел - Дата регистрации, по убыванию;

  • для подфильтров журналов - флажок Использовать настройки сортировки по умолчанию должен быть включен;

  • для корневого фильтра «Все», а также подфильтра «Мои» - Дата получения/отправки, по убыванию;

  • для подфильтра «Полученные» - Дата получения, по убыванию;

  • для подфильтра «Отправленные» - Дата отправки, по убыванию.

Примечание: для документов пользователя (раздел «Все») непрочитанные документы должны быть выше прочитанных, а уже внутри каждой из этих групп должно учитываться настроенное условие сортировки.



[11] Диапазон в таблице символов Unicode: 0030 - 0039 (в таблице символов ASCII: 48 - 57)

[12] Все символы из таблицы символов Unicode, начиная с 0000, исключая 0030 - 0039 (http://unicode-table.com/ru/#tagbanwa)