При разработке интерфейсов в обычном приложении 1С программисты часто сталкиваются с задачей: необходимо сделать так, чтобы пользователь мог сортировать журнал документов простым щелчком мыши по заголовку нужной колонки (например, «Номер» или «Дата»). Начинающие разработчики нередко пытаются найти событие клика по шапке таблицы и вручную вызывать метод Порядок.Установить(). Разберем, как устроена работа со списком документов, почему такой подход ошибочен и как правильно включить стандартное интерактивное упорядочивание.
Проанализируем механику работы табличного поля в обычных формах платформы «1С:Предприятие 8». У элемента формы ТабличноеПоле, отображающего журнал документов, отсутствует событие нажатия на заголовок колонки. Попытка привязать установку порядка к событию ПриАктивизацииКолонки приводит к логическим ошибкам:
ПриАктивизацииКолонки вызывается при переходе курсора между ячейками внутри таблицы (с помощью мыши или стрелок на клавиатуре), а не при нажатии на заголовок.Платформа 1С берет управление интерактивной сортировкой на себя, если предоставить пользователю такую возможность на уровне настроек порядка табличного поля.
Чтобы список автоматически менял направление и поле сортировки при клике по заголовку, не нужно перехватывать действия мыши. Достаточно один раз разрешить интерактивную сортировку для требуемой колонки. Для этого используется коллекция НастройкаПорядка табличного поля.
Выясним, в какой обработчик формы следует вставить этот код. Поскольку настройка интерфейса таблицы должна производиться до начала работы пользователя со списком, идеальным местом является событие ПриОткрытии модуля формы (либо непосредственно тело модуля формы при инициализации).
Посмотрим на пример кода, который помещается в обработчик события ПриОткрытии:
Процедура ПриОткрытии()
// Включаем возможность сортировки по клику на колонку "Номер"
ЭлементыФормы.ЖурналДокументовСписок.НастройкаПорядка.Номер.Доступность = Истина;
// Включаем возможность сортировки по клику на колонку "Дата"
ЭлементыФормы.ЖурналДокументовСписок.НастройкаПорядка.Дата.Доступность = Истина;
КонецПроцедуры
После установки свойства Доступность = Истина в заголовке соответствующей колонки появляется возможность клика. При первом нажатии данные упорядочиваются по возрастанию, при повторном — по убыванию, с отображением стрелки направления сортировки в шапке таблицы.
Рассмотрим важные нюансы работы с динамическими списками документов, без учета которых код может вызывать ошибки или не давать ожидаемого результата:
НастройкаПорядка, и попытка обратиться к ней программно вызовет ошибку выполнения.НастройкаПорядка.Добавить() недоступен. Состав полей для упорядочивания формируется платформой строго на основе метаданных журнала.ХранилищеЗначения.Если требуется жестко управлять порядком отображения документов без щелчков по заголовкам колонок, применим программное изменение порядка с помощью кнопок командной панели. Разберем по шагам, как это реализовать:
Установить() у свойства Порядок списка:
Процедура ДействиеСортировкаПоНомеру(Кнопка)
// Устанавливаем порядок по возрастанию номера
ЖурналДокументовСписок.Порядок.Установить("Номер Возр");
КонецПроцедуры
Процедура ДействиеСортировкаПоДате(Кнопка)
// Устанавливаем порядок по убыванию даты
ЖурналДокументовСписок.Порядок.Установить("Дата Убыв");
КонецПроцедуры
Таким образом, для реализации сортировки по клику на заголовок колонки не нужно перехватывать клики вручную: достаточно единожды включить Доступность = Истина нужных колонок в процедуре ПриОткрытии, предварительно убедившись в наличии индексов для этих полей в конфигураторе.