Как в динамическом списке изменить представление ссылок и настроить открытие связанных документов по клику

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

Работа с динамическими списками в 1С — это одна из самых частых задач при разработке управляемого интерфейса. Часто стандартное представление ссылочных типов (например, «Реализация товаров и услуг №... от...») не вписывается в дизайн или требования заказчика. Кроме того, возникает необходимость сделать список интерактивным: чтобы при нажатии на колонку со связанным документом открывался именно этот документ, а не основной объект списка. В этой статье мы подробно разберем, как решить эти задачи эффективно, сохранив высокую производительность системы.

Изменение текстового представления ссылки в динамическом списке

Рассмотрим ситуацию, когда нам нужно вместо стандартной длинной строки отобразить в колонке краткую информацию, например, только номер и дату. Существует несколько способов добиться этого, не прибегая к изменению модуля менеджера объекта (что критично, если конфигурация находится на поддержке).

Способ 1: Использование вычисляемых полей СКД

Динамический список в 1С работает на базе Системы компоновки данных (СКД). Это дает нам мощный инструмент — вычисляемые поля. В отличие от обычного запроса, в выражениях СКД доступна функция Формат(), что позволяет легко преобразовывать даты в текст.

Разберем этот метод по шагам:

  1. Откроем свойства динамического списка в конфигураторе.
  2. Перейдем в «Настройка списка» и выберем «Открыть схему компоновки данных».
  3. На закладке «Вычисляемые поля» добавим новое поле, назовем его КраткоеПредставление.
  4. В колонке «Выражение» напишем конструкцию:

"№ " + Номер + " от " + Формат(Дата, "ДФ=dd.MM.yyyy")

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

Способ 2: Группировка полей в ячейке

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

  1. В запросе динамического списка выбираем отдельные поля: Номер и Дата.
  2. На форме в дереве элементов таблицы выделяем эти два поля.
  3. Нажимаем правую кнопку мыши и выбираем пункт «Сгруппировать поля».
  4. В свойствах созданной группы устанавливаем «Отображение» в значение «В ячейке».

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

Реализация перехода к связанным документам

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

Использование события «Выбор»

Стандартное поведение списка — открытие основной формы текущей строки (в нашем примере — Ордера). Чтобы это изменить, проанализируем обработчик события Выбор у таблицы динамического списка. Разберем пример кода, который нужно разместить в модуле формы:


&НаКлиенте
Процедура ДинамическийСписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
    
    // Проверяем, на каком поле пользователь нажал кнопку или дважды кликнул
    Если Поле.Имя = "Заказ" Тогда
        
        // Отменяем стандартное открытие формы Расходного ордера
        СтандартнаяОбработка = Ложь;
        
        // Получаем значение ссылки из текущей строки
        // В управляемых формах данные текущей строки доступны через элемент таблицы
        ТекущиеДанные = Элемент.ТекущиеДанные;
        
        Если ТекущиеДанные <> Неопределено И ЗначениеЗаполнено(ТекущиеДанные.Заказ) Тогда
            // Используем универсальный метод для открытия формы объекта
            ПоказатьЗначение(, ТекущиеДанные.Заказ);
        КонецЕсли;
        
    КонецЕсли;
    
КонецПроцедуры

Функция ПоказатьЗначение() — это современный и «чистый» способ открыть форму объекта. Она сама определит нужную форму и отобразит её пользователю.

Улучшение пользовательского интерфейса через гиперссылки

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

  1. В элементах формы выберем поле (колонку), отвечающую за вывод ссылки (например, тот же «Заказ»).
  2. В палитре свойств найдем флаг Гиперссылка и установим его в значение Истина.
  3. Теперь текст в колонке станет синим и подчеркнутым при наведении курсора.

В сочетании с обработчиком события Нажатие (вместо Выбор) это создаст эффект работы как в веб-браузере, что очень удобно для пользователей интерфейса «Такси».


&НаКлиенте
Процедура СписокЗаказНажатие(Элемент, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    ТекущиеДанные = Элементы.Список.ТекущиеДанные;
    Если ТекущиеДанные <> Неопределено Тогда
        ПоказатьЗначение(, ТекущиеДанные.Заказ);
    КонецЕсли;
КонецПроцедуры

Почему не стоит злоупотреблять событием ПриПолученииДанныхНаСервере

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

Поэтому, если ваша задача — просто изменить текст ссылки, всегда отдавайте приоритет вычисляемым полям СКД или произвольному запросу. Используйте программную обработку только в тех случаях, когда визуальное оформление зависит от сложной бизнес-логики, которую невозможно описать языком запросов или выражений компоновки.

Подведем итоги

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

← На главную