При разработке интерфейсов на управляемых формах 1С часто возникает задача вывести дополнительные поля или характеристики объекта в таблицу динамического списка без написания программного кода. Разберем, как устроен механизм работы с полями в динамических списках, почему секция {ХАРАКТЕРИСТИКИ} ведет себя иначе, чем в отчетах СКД, и какие существуют способы отображения и сортировки таких данных.
Проанализируем причину, по которой колонки не появляются на форме автоматически при выборе полей в настройках компоновщика. В платформе 1С:Предприятие 8.3 существует четкое разделение между моделью данных и визуальным представлением формы:
ВыбранныеПоля.Элементы). Чтобы поле появилось в списке, для него обязательно должен существовать соответствующий элемент типа ПолеФормы, привязанный к пути к данным.{ХАРАКТЕРИСТИКИ ...} предназначена в первую очередь для отборов, группировок и оформления. Виртуальные поля характеристик формируются динамически, но платформа не создает под них визуальные колонки в таблице сама по себе.Рассмотрим стандартный интерактивный способ, доступный пользователю или администратору без изменения конфигурации:
Важное ограничение сортировки: если поле добавлено через секцию {ХАРАКТЕРИСТИКИ}, при попытке интерактивной сортировки по заголовку такой колонки платформа выдаст ошибку о невозможности упорядочивания. Это связано с тем, что курсорная выборка динамического списка требует прямой индексированной сортировки на уровне СУБД, чего динамические левые соединения СКД обеспечить не могут.
Также учтем, что изменения через диалог «Изменить форму» сохраняются в ХранилищеСистемныхНастроек конкретного пользователя, а не в настройках компоновщика данных. Для распространения этих колонок другим пользователям потребуется переносить настройки интерфейса.
Если для дополнительного реквизита или параметра обязательно требуется возможность сортировки по клику на заголовок, секцию {ХАРАКТЕРИСТИКИ} использовать нельзя. В этом случае пропишем явное соединение с таблицей значений в тексте запроса динамического списка:
ВЫБРАТЬ
CW_Грузоперевозки.Ссылка КАК Ссылка,
Характеристики.Значение КАК ПараметрГрузоперевозки
ИЗ
Справочник.CW_Грузоперевозки КАК CW_Грузоперевозки
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.CW_ХарактеристикиГрузоперевозок КАК Характеристики
ПО Характеристики.Грузоперевозка = CW_Грузоперевозки.Ссылка
И Характеристики.Параметр = &НужныйПараметр
После добавления поля в выборку запроса перетащим его в конфигураторе в состав колонок таблицы динамического списка. Поле станет полноценной колонкой с поддержкой быстрой сортировки (при условии индексации реквизита в регистре).
Если состав дополнительных характеристик динамический, но необходимо отображать их как колонки без ручной настройки формы каждым пользователем, добавим элементы программно в серверном событии формы:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Добавляем новую колонку в таблицу формы "Список"
ИмяЭлемента = "СписокПараметрГрузоперевозки";
Если Элементы.Найти(ИмяЭлемента) = Неопределено Тогда
НоваяКолонка = Элементы.Добавить(ИмяЭлемента, Тип("ПолеФормы"), Элементы.Список);
НоваяКолонка.Вид = ВидПоляФормы.ПолеНадписи;
НоваяКолонка.ПутьКДанным = "Список.ПараметрГрузоперевозки";
НоваяКолонка.Заголовок = "Параметр перевозки";
КонецЕсли;
КонецПроцедуры
Если в конфигурации внедрена Библиотека стандартных подсистем (БСП), для работы с дополнительными реквизитами рекомендуется использовать модуль УправлениеСвойствами, который берет на себя создание колонок и чтение значений свойств без необходимости ручной верстки элементов.
Когда колонки настроены интерактивно через «Изменить форму», перенесем готовую пользовательскую настройку интерфейса другим пользователям программно через системное хранилище:
КлючОбъекта = "Справочник.CW_Грузоперевозки.Форма.ФормаСписка/НастройкиФормы";
ХранилищеСистемныхНастроек.Копировать(КлючОбъекта, "ПользовательИсточник", "ПользовательПриемник");
В типовых конфигурациях для аналогичного результата воспользуемся стандартной административной обработкой Настройки пользователей и прав (Управление настройками пользователей).
Без использования кода или диалога «Изменить форму» вывести отдельную колонку характеристики на форму динамического списка невозможно в силу разделения механизмов СКД и элементов управляемой формы. Для простых отборов и группировок достаточно секции {ХАРАКТЕРИСТИКИ}, а для полноценного отображения с возможностью сортировки следует использовать явные соединения в запросе либо программное создание элементов формы.