Как настроить сортировку журнала документов по клику на колонку и в какой обработчик поместить код

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

При разработке интерфейсов в обычном приложении 1С программисты часто сталкиваются с задачей: необходимо сделать так, чтобы пользователь мог сортировать журнал документов простым щелчком мыши по заголовку нужной колонки (например, «Номер» или «Дата»). Начинающие разработчики нередко пытаются найти событие клика по шапке таблицы и вручную вызывать метод Порядок.Установить(). Разберем, как устроена работа со списком документов, почему такой подход ошибочен и как правильно включить стандартное интерактивное упорядочивание.

В чем заключается ошибка ручной установки порядка по клику

Проанализируем механику работы табличного поля в обычных формах платформы «1С:Предприятие 8». У элемента формы ТабличноеПоле, отображающего журнал документов, отсутствует событие нажатия на заголовок колонки. Попытка привязать установку порядка к событию ПриАктивизацииКолонки приводит к логическим ошибкам:

  1. Событие ПриАктивизацииКолонки вызывается при переходе курсора между ячейками внутри таблицы (с помощью мыши или стрелок на клавиатуре), а не при нажатии на заголовок.
  2. Если разместить вызов смены порядка в этом событии, платформа будет при каждой смене активной ячейки перезапрашивать данные из базы, что приведет к зависаниям интерфейса и сбросу текущей позиции пользователя.

Платформа 1С берет управление интерактивной сортировкой на себя, если предоставить пользователю такую возможность на уровне настроек порядка табличного поля.

Правильное решение: настройка доступности порядка в обработчике формы

Чтобы список автоматически менял направление и поле сортировки при клике по заголовку, не нужно перехватывать действия мыши. Достаточно один раз разрешить интерактивную сортировку для требуемой колонки. Для этого используется коллекция НастройкаПорядка табличного поля.

Выясним, в какой обработчик формы следует вставить этот код. Поскольку настройка интерфейса таблицы должна производиться до начала работы пользователя со списком, идеальным местом является событие ПриОткрытии модуля формы (либо непосредственно тело модуля формы при инициализации).

Посмотрим на пример кода, который помещается в обработчик события ПриОткрытии:


Процедура ПриОткрытии()
    
    // Включаем возможность сортировки по клику на колонку "Номер"
    ЭлементыФормы.ЖурналДокументовСписок.НастройкаПорядка.Номер.Доступность = Истина;
    
    // Включаем возможность сортировки по клику на колонку "Дата"
    ЭлементыФормы.ЖурналДокументовСписок.НастройкаПорядка.Дата.Доступность = Истина;
    
КонецПроцедуры

После установки свойства Доступность = Истина в заголовке соответствующей колонки появляется возможность клика. При первом нажатии данные упорядочиваются по возрастанию, при повторном — по убыванию, с отображением стрелки направления сортировки в шапке таблицы.

Ограничения платформы для упорядочивания динамических списков

Рассмотрим важные нюансы работы с динамическими списками документов, без учета которых код может вызывать ошибки или не давать ожидаемого результата:

  1. Наличие индексов в метаданных: табличное поле журнала документов отображает динамический список. Доступность упорядочивания по реквизиту напрямую зависит от того, проиндексирован ли он в базе данных. Если для реквизита или графы журнала в конфигураторе не установлено свойство «Индексировать» (или «Индексировать с доп. упорядочиванием»), колонка не попадет в коллекцию НастройкаПорядка, и попытка обратиться к ней программно вызовет ошибку выполнения.
  2. Запрет на ручное добавление полей: для динамических списков метод НастройкаПорядка.Добавить() недоступен. Состав полей для упорядочивания формируется платформой строго на основе метаданных журнала.
  3. Ограничения по типам данных: платформа не поддерживает сортировку по графам с составными типами данных, полям с неограниченной длиной строки, а также значениям типа ХранилищеЗначения.

Альтернативный вариант: управление порядком через командную панель

Если требуется жестко управлять порядком отображения документов без щелчков по заголовкам колонок, применим программное изменение порядка с помощью кнопок командной панели. Разберем по шагам, как это реализовать:

  1. Добавим на форму или ее командную панель отдельные действия (кнопки), например: «Сортировать по номеру» и «Сортировать по дате».
  2. В обработчиках нажатия этих кнопок вызовем метод Установить() у свойства Порядок списка:

Процедура ДействиеСортировкаПоНомеру(Кнопка)
    
    // Устанавливаем порядок по возрастанию номера
    ЖурналДокументовСписок.Порядок.Установить("Номер Возр");
    
КонецПроцедуры

Процедура ДействиеСортировкаПоДате(Кнопка)
    
    // Устанавливаем порядок по убыванию даты
    ЖурналДокументовСписок.Порядок.Установить("Дата Убыв");
    
КонецПроцедуры

Таким образом, для реализации сортировки по клику на заголовок колонки не нужно перехватывать клики вручную: достаточно единожды включить Доступность = Истина нужных колонок в процедуре ПриОткрытии, предварительно убедившись в наличии индексов для этих полей в конфигураторе.

← На главную