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