Как добавить произвольную колонку в динамический список с основной таблицей?

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

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

Метод 1: Модификация запроса динамического списка

Самым правильным и производительным способом является дополнение текста запроса динамического списка. Если мы хотим видеть «настоящую» колонку, которая будет доступна для сортировки и отбора, нам нужно включить её в текст запроса.

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

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

Пример программного изменения запроса:


// В расширении используем перехват процедуры создания формы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Получаем текущий запрос и дополняем его новым полем
    ТекстЗапроса = Список.ТекстЗапроса;
    ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ИЗ", ", ВЫРАЗИТЬ("" "" КАК Строка(100)) КАК МояКолонка ИЗ");
    Список.ТекстЗапроса = ТекстЗапроса;
    
    // Программно добавляем элемент на форму
    Элемент = Элементы.Добавить("МояКолонка", Тип("ПолеФормы"), Элементы.Список);
    Элемент.ПутьКДанным = "Список.МояКолонка";
    Элемент.Заголовок = "Моя колонка";
КонецПроцедуры

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

Метод 2: Подмена представления в событии ПриПолученииДанныхНаСервере

Если вам не требуется сортировка или отбор по новой колонке, а нужно только отобразить данные (например, статус из стороннего регистра), можно воспользоваться механизмом оформления ячеек. Это позволяет не усложнять запрос, если производительность критична.

Рассмотрим реализацию данного метода:

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


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

Технические нюансы и рекомендации

При работе с динамическими списками важно помнить о следующих правилах:

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

← На главную