Первый способ: Чтобы добавлять код, хорошо использовать переопределяемые модули. В конфигурации УТ для ФормыОтчетов предусмотрены процедуры:
ОтчетыУТПереопределяемый.ПриСозданииНаСервере()
ОтчетыПереопределяемый.ПередЗагрузкойВариантаНаСервере()
Порядок выполнения процедур при открытии:
&НаСервере:
1. ПриСозданииНаСервере()
2. ПередЗагрузкойВариантаНаСервере()
3. ПриЗагрузкеВариантаНаСервере()
4. ПередЗагрузкойПользовательскихНастроекНаСервере()
5. ПриЗагрузкеПользовательскихНастроекНаСервере()
6. ПриОбновленииСоставаПользовательскихНастроекНаСервере()
&НаКлиенте:
7. ПриОткрытии ()
Порядок выполнения процедур по кнопке "Сформировать":
&НаКлиенте:
1) ОтчетСкомпоноватьРезультат()
2) Сформировать()
&НаСервере:
3) РезультатФормированияОтчета(ФормированиеПриОткрытии, Непосредственно)
4) ПроверитьЗаполнение()
5) ОбработкаПроверкиЗаполненияНаСервере()
6) ЗагрузитьРезультатФормированияОтчета()
Второй способ: если мы хотим изменить какие-то свойства формы, например ограничить отбор в списке поля (1) или выполнить дополнительные действия при выборе значения в поле (2), нам нужно копировать объект метаданных ОбщиеФормы – ФормаОтчета и вставить его в свой отчет. (Не забывайте про общие формы ФормаНастроекОтчета и ФормаВариантаОтчета). Переименуем форму, чтобы в ней не было ссылок на модули ОбщиеФормы – ФормаОтчета. После этого можно смело изменять код. Но нужно учитывать, что поля формы создаются автоматически и называются иначе, чем в схеме СКД.
1. Для изменения свойства поля, найдем в модуле формы процедуру ВывестиЭлементыНастройки и посмотрим в отладчике, как происходит добавление элементов. В переменной СвойстваНастройки хранится связь между полем СКД и идентификатором. Запомним ИмяЭлемента в цикле обработки переменной СвойстваНастройки, потом обработаем.
Для Каждого СвойстваНастройки Из ВыводимыеНастройки Цикл
СоответствиеПользовательскихНастроек.Вставить(СвойстваНастройки.ИдентификаторЭлемента, СвойстваНастройки.ИдентификаторКД);
Если СвойстваНастройки.НастройкаВарианта <> Неопределено Тогда
ПоискНастройкиВарианта = Новый Структура;
ПоискНастройкиВарианта.Вставить("ИдентификаторУзлаКД", СвойстваНастройки.СтрокаДерева.ИдентификаторКД);
ПоискНастройкиВарианта.Вставить("ИмяКоллекции", СвойстваНастройки.НастройкаВарианта.ИмяКоллекции);
ПоискНастройкиВарианта.Вставить("ИдентификаторЭлементаКД", СвойстваНастройки.НастройкаВарианта.ИдентификаторКД);
СоответствиеНастроекВарианта.Вставить(СвойстваНастройки.ИдентификаторЭлемента, ПоискНастройкиВарианта);
КонецЕсли;
//Начало добавления
Если СвойстваНастройки.ПолеКД = ПолеКомпоновки("ОтборНоменклатуры") Тогда
ИмяЭлемента = "ЭлементОтбора_Значение_"+ СвойстваНастройки.ИдентификаторЭлемента;
КонецЕсли;
//Конец добавления
ОтчетыСервер.ВывестиЭлементыНастройки(ЭтотОбъект, Элементы, СвойстваНастройки, ГруппаВывода, Прочее);
КонецЦикла;
//Начало добавления
НужныйЭлемент = Элементы.Найти(ИмяЭлемента);
Если НужныйЭлемент <> Неопределено Тогда
НужныйЭлемент.РежимВыбораИзСписка = Истина;
НужныйЭлемент.СписокВыбора = НужныйСписок();
КонецЕсли;
//Конец добавления
2. Для обработки выбора значения в форме предусмотрены подключаемые процедуры:
Подключаемый_ФлажокИспользование_ПриИзменении
Подключаемый_ПолеВвода_ПриИзменении
Подключаемый_ФлажокЗначения_ПриИзменении
Подключаемый_СписокКомпоновщика_НачалоВыбора
Подключаемый_ЗначениеКомпоновщика_НачалоВыбора
Подключаемый_ВидСравнения_НачалоВыбора
Поставим точку останова – увидим, как происходит обработка выбора значения.
Дополнительные процедуры, которые тоже могут пригодиться:
ОтчетТабличныйДокументВыбор
ОтчетТабличныйДокументОбработкаРасшифровки
ОтчетТабличныйДокументОбработкаДополнительнойРасшифровки