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