Содержание:
Файлы материала
Достаточно распространенная задача, когда во внешнем отчете на СКД при его открытии или в момент формирования нужно установить определенное значение параметра.
Давайте рассмотрим как это реализовать программно для первого и для второго случая.
* первое решение подходит для всех типовых конфигураций и других конфигураций с внедренной подсистемой «Варианты отчета» из состава БСП, для второго решения не требуется БСП.
Постановка задачи
Предположим, у нас есть некий отчет с параметром «Наименование номенклатуры». И стоит задача программно заполнить этот параметр значением «Моя номенклатура»:

Исходные данные
Создадим отчет на СКД:
1. Добавим в набор данных запрос с параметром НаименованиеНоменклатуры;
2. Уберем ограничение доступности параметра;
3. Выведем его в шапку отчета.

Теперь можем приступать к программной установки этого параметра:
Решение №1. Установка параметра при открытии отчета
Установка параметра будет выполняться в модуле объекта процедуре ПередЗагрузкойНастроекВКомпоновщик, предварительно подключим ее в процедуре ОпределитьНастройкиФормы.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт Настройки.События.ПередЗагрузкойНастроекВКомпоновщик = Истина; КонецПроцедуры Процедура ПередЗагрузкойНастроекВКомпоновщик(Контекст, КлючСхемы, КлючВарианта, НовыеНастройкиКД, НовыеПользовательскиеНастройкиКД) Экспорт Если КлючСхемы <> КлючВарианта Тогда //ИнициализироватьОтчет(); // по необходимости Если ТипЗнч(Контекст) = Тип("ФормаКлиентскогоПриложения") И НовыеНастройкиКД <> Неопределено Тогда НаименованиеНоменклатурыПоУмолчанию = "Моя номенклатура"; // 1. Устанавливаем параметр в "Настройки" КД // Вариант 1 ПараметрНаименованиеНоменклатуры = Новый ПараметрКомпоновкиДанных("НаименованиеНоменклатуры"); ЗначениеПараметра = НовыеНастройкиКД.ПараметрыДанных.НайтиЗначениеПараметра(ПараметрНаименованиеНоменклатуры); ЗначениеПараметра.Значение = НаименованиеНоменклатурыПоУмолчанию; ЗначениеПараметра.Использование = Истина; // Вариант 2 (подходит для ERP 2.5) //КомпоновкаДанныхКлиентСервер.УстановитьПараметр(НовыеНастройкиКД, "НаименованиеНоменклатуры", НаименованиеНоменклатурыПоУмолчанию); // 2. По необходимости устанавливаем параметр в "Пользовательских настройках" КД: Если НовыеПользовательскиеНастройкиКД <> Неопределено Тогда // Вариант 1 Для Каждого ЭлементНастройки Из НовыеПользовательскиеНастройкиКД.Элементы Цикл Если ТипЗнч(ЭлементНастройки) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") И ЭлементНастройки.Параметр = ПараметрНаименованиеНоменклатуры Тогда ЗначениеПараметра = ЭлементНастройки; Прервать; КонецЕсли; КонецЦикла; ЗначениеПараметра.Значение = НаименованиеНоменклатурыПоУмолчанию; ЗначениеПараметра.Использование = Истина; // Вариант 2 (подходит для ERP 2.5) //КомпоновкаДанныхКлиентСервер.УстановитьПараметр(НовыеПользовательскиеНастройкиКД, "НаименованиеНоменклатуры", НаименованиеНоменклатурыПоУмолчанию); КонецЕсли; КонецЕсли; ОтчетыСервер.ПодключитьСхему(ЭтотОбъект, Контекст, СхемаКомпоновкиДанных, КлючСхемы); КлючСхемы = КлючВарианта; КонецЕсли; КонецПроцедуры |
Решение №2. Установка параметра при формировании отчета
В данном случаи установку параметра будем выполнять в процедуре ПриКомпоновкеРезультата, так же модуля объекта.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) //УстановитьПривилегированныйРежим(Истина); //ИнициализироватьОтчет(); // по необходимости НаименованиеНоменклатурыПоУмолчанию = "Моя номенклатура 2"; НастройкиОтчета = КомпоновщикНастроек.Настройки; ЗначениеПараметра = НастройкиОтчета.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("НаименованиеНоменклатуры")); ЗначениеПараметра.Значение = НаименованиеНоменклатурыПоУмолчанию; ЗначениеПараметра.Использование = Истина; // Если в настройках СКД параметр включен в пользовательские настройки (шаг 3 на рисунке выше), то необходимо установить его и тут // Соответственно, если такой флаг в настройках не стоит (что чаще бывает для данного варианта), то код ниже можно не писать Если ЗначениеЗаполнено(ЗначениеПараметра.ИдентификаторПользовательскойНастройки) Тогда ПользовательскиеНастройкиОтчета = КомпоновщикНастроек.ПользовательскиеНастройки; ЗначениеПараметра = ПользовательскиеНастройкиОтчета.Элементы.Найти(ЗначениеПараметра.ИдентификаторПользовательскойНастройки); ЗначениеПараметра.Значение = НаименованиеНоменклатурыПоУмолчанию; ЗначениеПараметра.Использование = Истина; КонецЕсли; КонецПроцедуры |
Дополнительная информация
1. Такой отчет практически сразу кэшируется программой и для того, чтобы применились изменения кода, бывает необходимо изменить его «Имя» и перезапустить.

2. На некоторых конфигурациях программная установка не срабатывает пока не установишь «Форму отчета».

3. Что бы сбросить пользовательские настройки отчета на СКД нужно перейти в меню Еще -> Установить стандартные настройки.

Отчет с примерами можно скачать в начале статьи. Если у вас есть замечания, дополнения или свои варианты решения, то пожалуйста пишите в комментариях.
