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

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

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

Почему не стоит использовать группировку в динамическом списке

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

  1. Утеря возможности стандартного редактирования строк.
  2. Потеря уникального ключа связи, что делает невозможным использование стандартных команд открытия объектов.
  3. Существенное снижение производительности при большом объеме данных.

Вариант 1: Использование «галочки» и индикации

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

Выбор Когда ТаблицаЧеков.Ссылка Есть Null Тогда Ложь Иначе Истина Конец Как ЕстьЧек.

В форме списка выведите это поле как флажок. Это позволит пользователю визуально видеть наличие связанных данных без раздувания списка дублирующимися строками.

Вариант 2: Отображение гиперссылок при активации строки

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

Для реализации этого метода выполним следующие действия:

  1. Добавим на форму элемент типа Декорация (вид «Надпись» или «Поле форматированного документа»).
  2. В модуле формы в обработчике ПриАктивизацииСтроки выполним запрос к чекам, отфильтрованный по текущему заказу.
  3. Сформируем массив форматированных строк с навигационными ссылками на найденные документы.

Рассмотрим пример реализации кода для вывода гиперссылок:


&НаКлиенте
Процедура СписокПриАктивизацииСтроки(Элемент)
    ТекущиеДанные = Элементы.Список.ТекущиеДанные;
    Если ТекущиеДанные = Неопределено Тогда
        Возврат;
    КонецЕсли;
    
    // Получаем ссылки на чеки по текущему заказу (функция сервера)
    МассивСсылок = ПолучитьМассивЧековНаСервере(ТекущиеДанные.Ссылка);
    
    мФ = Новый Массив;
    Для Каждого СсылкаНаЧек Из МассивСсылок Цикл
        мФ.Добавить(Новый ФорматированнаяСтрока(
            Строка(СсылкаНаЧек), , , , 
            ПолучитьНавигационнуюСсылку(СсылкаНаЧек)));
        мФ.Добавить(Символы.ПС);
    КонецЦикла;
    
    Элементы.ДекорацияЧеки.Заголовок = Новый ФорматированнаяСтрока(мФ);
КонецПроцедуры

Преимущества выбранного подхода

Данный метод обладает рядом преимуществ:

Этот подход является стандартным в современной разработке на управляемых формах и позволяет создавать удобные и быстрые интерфейсы для работы с любыми сложными связями в данных 1С.

← На главную