Работа с расширениями в платформе 1С:Предприятие 8.3 открывает широкие возможности для кастомизации типовых конфигураций без изменения основной конфигурации. Одной из самых частых задач является добавление новых колонок в формы списков (динамические списки). Однако программисты часто сталкиваются с ситуацией, когда запрос изменен, поле добавлено, а колонка на форме упорно не появляется. Рассмотрим подробно, как правильно реализовать эту задачу и какие подводные камни могут встретиться на пути.
Для начала разберем стандартный алгоритм действий, который должен выполнить разработчик. Представим ситуацию: нам нужно вывести в список документов дополнительный реквизит из связанного справочника или другого документа.
Список (имеющий тип ДинамическийСписок).Список в расширении находим поле «Настройка списка» или «Текст запроса». Если в основной конфигурации флаг «Произвольный запрос» выключен, его следует включить в расширении. После этого мы можем изменить текст запроса, добавив в секцию ВЫБРАТЬ нужные нам поля через ЛЕВОЕ СОЕДИНЕНИЕ или напрямую из основной таблицы.Список. Самый надежный способ — просто перетащить это поле мышкой из окна реквизитов на дерево элементов формы.Однако, как показывает практика, даже после выполнения этих шагов колонка может не отобразиться в пользовательском режиме. Проанализируем, почему это происходит.
Иногда разработчики пытаются добавить колонку программно в процедуре ПриСозданииНаСервере. Рассмотрим пример такого кода:
НоваяКолонкаТаблицы = Элементы.Добавить("СписокСНТ", Тип("ПолеФормы"), Элементы.Список);
НоваяКолонкаТаблицы.Заголовок = "СНТ";
НоваяКолонкаТаблицы.Вид = ВидПоляФормы.ПолеНадписи;
НоваяКолонкаТаблицы.ПутьКДанным = "Список.СНТ";
НоваяКолонкаТаблицы.Видимость = Истина;
Такой подход в расширениях может не сработать по нескольким причинам. Во-первых, если расширение применяется к форме, в которой уже есть сложная логика инициализации, программно созданный элемент может быть подавлен или удален логикой основной конфигурации. Во-вторых, программное добавление в расширении требует особого внимания к моменту вызова (обработчики «После» или «Вместо»). Рекомендуется отдавать предпочтение визуальному редактору формы, так как это позволяет платформе корректно разрешить зависимости метаданных при компиляции формы.
Выясним причину, которая чаще всего ставит в тупик даже опытных разработчиков. Это Функциональные опции (ФО). В 1С функциональные опции управляют видимостью объектов метаданных, реквизитов и элементов форм в зависимости от настроек системы.
Если поле, которое вы пытаетесь добавить в динамический список, связано с объектом (например, документом СНТ или определенным реквизитом), который в текущей базе отключен функциональной опцией, то платформа принудительно скроет эту колонку, какие бы настройки видимости вы ни задавали в расширении.
Разберем по шагам, как это проверить:
Важно понимать, что в современных версиях платформы (особенно начиная с 8.3.15) запрос динамического списка в расширении не просто заменяет основной, а объединяется с ним по определенным правилам. Посмотрим на критические моменты:
Использовать всегда в настройках динамического списка. В противном случае платформа оптимизирует запрос и исключит это поле из выборки для экономии ресурсов.Проанализируем ситуацию с версиями. Если ваша конфигурация находится в режиме совместимости 8.3.14 или ниже, работа с динамическими списками в расширениях имеет ряд ограничений:
Чтобы избежать ошибок при добавлении колонок, придерживайтесь следующей последовательности:
Шаг 1. Убедитесь, что реквизит, который вы хотите отобразить, физически существует в базе и заполнен данными. Проверьте функциональные опции, отвечающие за этот реквизит.
Шаг 2. В расширении добавьте форму и основной реквизит Список. В свойствах списка перейдите в «Настройка списка» и добавьте соединение с нужной таблицей или выберите новое поле в основном тексте запроса.
Шаг 3. Перейдите на вкладку «Настройки списка» внутри конструктора и проверьте, появилось ли ваше поле в списке доступных полей. Если его там нет — проблема в синтаксисе запроса.
Шаг 4. Вытяните поле на форму визуально. В свойствах элемента формы проверьте путь к данным — он должен иметь вид Список.ИмяВашегоПоля.
Шаг 5. Если колонка всё еще не видна, проверьте программный код формы в основной конфигурации. Возможно, там присутствует процедура ПриОткрытии или ПриСозданииНаСервере, которая жестко управляет составом колонок (например, через УстановитьНастройкиКомпоновкиДанных), перетирая ваши изменения из расширения.
Подводя итог, можно сказать, что большинство проблем с расширениями динамических списков связаны либо с невнимательностью к функциональным опциям, либо с попытками решить задачу чисто программным кодом там, где платформа ожидает визуальной настройки. Используя описанные методы, вы сможете корректно расширять функционал типовых решений, сохраняя их чистоту и обновляемость.