В процессе разработки часто возникает задача расширить функционал типовых документов, добавив в них новые табличные части, не прибегая к изменению конфигурации. Рассмотрим, как можно реализовать добавление табличных полей на управляемую форму перед её открытием, используя возможности 1С:Предприятие.
Для управления структурой формы программно используется метод ИзменитьРеквизиты. Этот механизм позволяет «на лету» добавлять реквизиты, связанные с данными (например, ТаблицаЗначений), и элементы управления, которые будут отображать эти данные. Важно понимать, что все изменения, внесенные данным методом, действуют исключительно в рамках текущего экземпляра открытой формы и не сохраняются в метаданных конфигурации.
Разберем, как подготовить массив для динамического изменения формы:
МассивДобавляемыхРеквизитов = Новый Массив;
Реквизит = Новый РеквизитФормы("ТаблицаЗначений", Новый ОписаниеТипов("ТаблицаЗначений"));
МассивДобавляемыхРеквизитов.Добавить(Реквизит);
Для каждого Поле из Колонки Цикл
Столбец = Новый РеквизитФормы(Поле.Имя, Новый ОписаниеТипов(Поле.ТипЗначения), "ТаблицаЗначений", Поле.Имя);
МассивДобавляемыхРеквизитов.Добавить(Столбец);
КонецЦикла;
ИзменитьРеквизиты(МассивДобавляемыхРеквизитов);
Существует несколько подходов к решению задачи, если использование расширений конфигурации ограничено:
ПриСозданииНаСервере отладчиком определяется имя команды, которое затем замещается в коде вашей обработки.ЗначениеВРеквизитФормы и РеквизитФормыВЗначение передаются данные из объекта. Этот способ является наиболее стабильным при обновлении типовых конфигураций.Необходимо учитывать, что попытка вмешательства в процесс ПриСозданииНаСервере чужой формы сопряжена с рисками. Типовые формы 1С часто имеют жесткую структуру, завязанную на конкретные имена элементов и процедур (например, Подключаемый_ПродолжитьВыполнениеКомандыНаСервере). При обновлении релиза конфигурации эти имена могут быть изменены, что приведет к неработоспособности вашей обработки.
Рекомендации по разработке:
ИзменитьРеквизиты следует вызывать на самом раннем этапе жизненного цикла формы.&После и &Вместо, которые являются стандартным и поддерживаемым способом модификации типового функционала.Использование внешних обработок для модификации форм является хорошим инструментом для временных решений или локальных задач, однако для долгосрочной эксплуатации рекомендуем оценивать трудозатраты на поддержку «хаков» в сравнении с использованием штатных механизмов расширения платформы.