Это моя первая статья на данном ресурсе и вообще в целом, прошу строго не судить)
В конфигурации 1С ЗУП есть ряд документов, форма модуля которых содержит специальную область "ИнициализацияФормы"
Запустив глобальный поиск по конфигурации, мы получим их перечень:
Основная конфигурация Документ.БольничныйЛист.Форма.ФормаДокумента.Форма.Модуль(2609, 1) #Область ИнициализацияФормы
Основная конфигурация Документ.ВосстановлениеВДолжности.Форма.ФормаДокумента.Форма.Модуль(1469, 1) #Область ИнициализацияФормы
Основная конфигурация Документ.КадровыйПеревод.Форма.ФормаДокумента.Форма.Модуль(2033, 1) #Область ИнициализацияФормы
Основная конфигурация Документ.КадровыйПереводСписком.Форма.ФормаСтроки.Форма.Модуль(1856, 1) #Область ИнициализацияФормы
Основная конфигурация Документ.Командировка.Форма.ФормаДокумента.Форма.Модуль(1738, 1) #Область ИнициализацияФормы
Основная конфигурация Документ.НачислениеЗарплаты.Форма.ФормаДокумента.Форма.Модуль(3124, 1) #Область ИнициализацияФормы
Основная конфигурация Документ.НачислениеПоДоговорам.Форма.ФормаДокумента.Форма.Модуль(1101, 1) #Область ИнициализацияФормы
Основная конфигурация Документ.ОплатаПоСреднемуЗаработку.Форма.ФормаДокумента.Форма.Модуль(1473, 1) #Область ИнициализацияФормы
Основная конфигурация Документ.ОтгулСписком.Форма.ФормаДокумента.Форма.Модуль(969, 1) #Область ИнициализацияФормы
Основная конфигурация Документ.Отпуск.Форма.ФормаДокумента.Форма.Модуль(2384, 1) #Область ИнициализацияФормы
Основная конфигурация Документ.ОтпускБезСохраненияОплаты.Форма.ФормаДокумента.Форма.Модуль(1098, 1) #Область ИнициализацияФормы
Основная конфигурация Документ.ОтпускБезСохраненияОплатыСписком.Форма.ФормаДокумента.Форма.Модуль(1123, 1) #Область ИнициализацияФормы
Основная конфигурация Документ.ОтпускПоУходуЗаРебенком.Форма.ФормаДокумента.Форма.Модуль(2482, 1) #Область ИнициализацияФормы
Основная конфигурация Документ.ПриемНаРаботу.Форма.ФормаДокумента.Форма.Модуль(1868, 1) #Область ИнициализацияФормы
Основная конфигурация Документ.ПриемНаРаботуСписком.Форма.ФормаСтроки.Форма.Модуль(1669, 1) #Область ИнициализацияФормы
Основная конфигурация Документ.ПрогулНеявка.Форма.ФормаДокумента.Форма.Модуль(975, 1) #Область ИнициализацияФормы
Основная конфигурация Документ.ПрогулНеявкаСписком.Форма.ФормаДокумента.Форма.Модуль(963, 1) #Область ИнициализацияФормы
Основная конфигурация Документ.РезервыПоОплатеТруда.Форма.ФормаДокумента.Форма.Модуль(1109, 1) #Область ИнициализацияФормы
Если свернуто, то она выглядит вот так:
Не претендую на то, что максимально правильно воспринял идею этой схемы, но пришел к выводу, что самым удобным местом для вставки нетипового кода является процедура ДополнитьФорму()
Ее параметр ОтложенноеИзменение обеспечивает возможность управления, в какой момент мы добавляем реквизиты, в какой момент добавляем элементы, а когда нужно только настроить элементы:
Если ОтложенноеИзменение Тогда
ДобавлятьЭлементыФормы = Ложь;
ДобавлятьРеквизитыФормы = Истина;
Иначе
ДобавлятьЭлементыФормы = Истина;
ДобавлятьРеквизитыФормы = Ложь;
КонецЕсли;
Например, создаем новый общий модуль МояДоработкаФормы
В нем добавим несколько процедур:
Процедура ДополнитьФорму(Форма,
ДобавлятьЭлементыФормы, ДобавлятьРеквизитыФормы, ОтложенноеИзменение) Экспорт
Если ОтложенноеИзменение = Неопределено Тогда
Возврат;
КонецЕсли;
Если ДобавлятьРеквизитыФормы Тогда
РеквизитыФормы(Форма);
КонецЕсли;
Если ДобавлятьЭлементыФормы Тогда
ДобавитьЭлементыФормы(Форма);
КонецЕсли;
Если НЕ ОтложенноеИзменение Тогда
НастроитьЭлементыФормы(Форма);
КонецЕсли;
КонецПроцедуры
Процедура ДобавитьРеквизитыФормы(Форма)
// Тут добавляем новые реквизиты формы
КонецПроцедуры
Процедура ДобавитьЭлементыФормы(Форма)
// Тут добавляем новые элементы формы
КонецПроцедуры
Процедура НастроитьЭлементыФормы(Форма)
// Тут настраиваем элементы формы
КонецПроцедуры
И в модуле формы в процедуре ДополнитьФорму() добавляем вызов:
МояДоработкаФормы= ОбщегоНазначения.ОбщийМодуль("МояДоработкаФормы");
МояДоработкаФормы.ДополнитьФорму(ЭтотОбъект,
ДобавлятьЭлементыФормы, ДобавлятьРеквизитыФормы, ОтложенноеИзменение);
Таким образом мы уже не запутаемся и избежим таких ошибок, как попытка изменить свойство элемента, когда он еще не создан, или других подобных, благодаря тому, что у нас четко выстроен порядок действий.
При этом важно не забывать, что эта схема подразумевает использование механизма отложенного изменения формы и, к примеру, добавление реквизитов нужно описывать так:
ДобавляемыеРеквизиты = Новый Массив;
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("НовыйРеквизит", Новый ОписаниеТипов("Булево")));
СуществующиеРеквизиты = Новый Массив;
ЗарплатаКадры.ЗаполнитьМассивИменРеквизитовФормы(Форма, СуществующиеРеквизиты, "");
ЗарплатаКадры.ИзменитьРеквизитыФормы(Форма, ДобавляемыеРеквизиты, СуществующиеРеквизиты, , Истина);