Работа с динамическими списками в 1С — это одна из самых частых задач при разработке управляемого интерфейса. Часто стандартное представление ссылочных типов (например, «Реализация товаров и услуг №... от...») не вписывается в дизайн или требования заказчика. Кроме того, возникает необходимость сделать список интерактивным: чтобы при нажатии на колонку со связанным документом открывался именно этот документ, а не основной объект списка. В этой статье мы подробно разберем, как решить эти задачи эффективно, сохранив высокую производительность системы.
Рассмотрим ситуацию, когда нам нужно вместо стандартной длинной строки отобразить в колонке краткую информацию, например, только номер и дату. Существует несколько способов добиться этого, не прибегая к изменению модуля менеджера объекта (что критично, если конфигурация находится на поддержке).
Способ 1: Использование вычисляемых полей СКД
Динамический список в 1С работает на базе Системы компоновки данных (СКД). Это дает нам мощный инструмент — вычисляемые поля. В отличие от обычного запроса, в выражениях СКД доступна функция Формат(), что позволяет легко преобразовывать даты в текст.
Разберем этот метод по шагам:
КраткоеПредставление.
"№ " + Номер + " от " + Формат(Дата, "ДФ=dd.MM.yyyy")
После этого мы можем просто вытащить это поле в колонки нашей таблицы на форме. Этот метод является наиболее предпочтительным, так как вычисления происходят на уровне платформы при подготовке данных, что не тормозит интерфейс.
Способ 2: Группировка полей в ячейке
Если нам не принципиально иметь «чистую» строку, а нужно просто визуально изменить отображение, проанализируем вариант с группировкой. Рассмотрим алгоритм действий:
Номер и Дата.В этом случае система сама расположит данные в одной колонке. Плюс этого метода в том, что по этим полям сохраняется стандартная возможность сортировки и отбора, которая может пропасть при использовании чисто текстовых представлений.
Вторая задача заключается в том, чтобы при двойном клике или нажатии Enter на колонке со ссылкой на другой документ (например, «Заказ» в списке «Расходных ордеров») открывался именно этот «Заказ».
Использование события «Выбор»
Стандартное поведение списка — открытие основной формы текущей строки (в нашем примере — Ордера). Чтобы это изменить, проанализируем обработчик события Выбор у таблицы динамического списка. Разберем пример кода, который нужно разместить в модуле формы:
&НаКлиенте
Процедура ДинамическийСписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
// Проверяем, на каком поле пользователь нажал кнопку или дважды кликнул
Если Поле.Имя = "Заказ" Тогда
// Отменяем стандартное открытие формы Расходного ордера
СтандартнаяОбработка = Ложь;
// Получаем значение ссылки из текущей строки
// В управляемых формах данные текущей строки доступны через элемент таблицы
ТекущиеДанные = Элемент.ТекущиеДанные;
Если ТекущиеДанные <> Неопределено И ЗначениеЗаполнено(ТекущиеДанные.Заказ) Тогда
// Используем универсальный метод для открытия формы объекта
ПоказатьЗначение(, ТекущиеДанные.Заказ);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Функция ПоказатьЗначение() — это современный и «чистый» способ открыть форму объекта. Она сама определит нужную форму и отобразит её пользователю.
Чтобы пользователь сразу понимал, что на поле со связанным документом можно нажать, выясним, как превратить обычный текст в гиперссылку. Для этого выполним следующие действия:
Истина.В сочетании с обработчиком события Нажатие (вместо Выбор) это создаст эффект работы как в веб-браузере, что очень удобно для пользователей интерфейса «Такси».
&НаКлиенте
Процедура СписокЗаказНажатие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ТекущиеДанные = Элементы.Список.ТекущиеДанные;
Если ТекущиеДанные <> Неопределено Тогда
ПоказатьЗначение(, ТекущиеДанные.Заказ);
КонецЕсли;
КонецПроцедуры
Рассмотрим вопрос производительности. Некоторые разработчики пытаются менять представление строк в обработчике ПриПолученииДанныхНаСервере. Посмотрим на этот процесс критически: этот код выполняется каждый раз, когда пользователь листает список или когда список перерисовывается. Если в списке 50 строк, код выполнится 50 раз для каждой отрисовки. Если внутри процедуры будут обращения к базе данных или сложные преобразования, интерфейс начнет «фризить».
Поэтому, если ваша задача — просто изменить текст ссылки, всегда отдавайте приоритет вычисляемым полям СКД или произвольному запросу. Используйте программную обработку только в тех случаях, когда визуальное оформление зависит от сложной бизнес-логики, которую невозможно описать языком запросов или выражений компоновки.
Мы проанализировали два ключевых вопроса кастомизации динамических списков. Выяснили, что для изменения представления ссылки лучше всего использовать инструменты СКД, а для управления навигацией — события Выбор или Нажатие с явным отключением СтандартнаяОбработка. Применяя эти подходы, вы создадите профессиональный и быстрый интерфейс, который будет удобен пользователям и прост в поддержке.