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