Публикация представляет из себя краткие примеры того. как можно заполнять параметры СКД программно так, чтобы все параметры и отборы были доступны в быстрых настройках и в обычных (типовых) настройках параметров и отборов СКД.

1. Пользовательские настройки СКД


При программном заполнении параметров отчета СКД часто возникает ситуация, когда нужно программно установить параметры отчета или добавить отборы.

Проблема возникает в том, что не всегда эти параметры или отборы отображаются на форме так, как нам бы хотелось.

В общем случае, для того, чтобы открыть отчет с заполненными параметрами используется следующая конструкция:

ПараметрыОткрытия = Новый Структура();
ПараметрыОткрытия.Вставить("СформироватьПриОткрытии", Истина);
ПараметрыОткрытия.Вставить("Вариант", КомпоновщикНастроек.Настройки);
ПараметрыОткрытия.Вставить("ПользовательскиеНастройки", КомпоновщикНастроек.ПользовательскиеНастройки);
ОткрытьФорму("Отчет.муОтчет.Форма.ФормаОтчета", ПараметрыОткрытия, ЭтаФорма, Истина);

В данной статье описаны примеры того, как нужно заполнять параметры СКД, чтобы они отображались на форме так, как нужно, а именно Настройки и ПользовательскиеНастройки компоновщика данных.

1.1. Установка пользовательских параметров СКД

Для установки значения параметра обычно используется такая конструкция:

ПараметрКомпоновки = Новый ПараметрКомпоновкиДанных(ИмяПараметра);
ПараметрСКД = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(ПараметрКомпоновки);
ПараметрСКД.Значение = Значение;
ПараметрСКД.Использование = Истина;

Данный код установит значение параметра, но при заполнении отчета переданными настройками значение параметра не отобразится на форме и реквизит будет пустым.

Для того, чтобы пользователь видел значение параметра на форме нужно добавить следующую конструкцию:

Если ЗначениеЗаполнено(ПараметрСКД.ИдентификаторПользовательскойНастройки) Тогда
	ПользовательскийПараметр = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(
	ПараметрСКД.ИдентификаторПользовательскойНастройки);
	Если ТипЗнч(ПользовательскийПараметр) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда
		ПользовательскийПараметр.Значение = ПараметрСКД.Значение;
	КонецЕсли;
КонецЕсли;

Данный код по значению идентификатора пользовательской настройки находит элемент этой настройки и устанавливает значение параметра еще и там.

1.2. Установка пользовательских отборов СКД

1.2.1. Пример открытия отчета с фиксированным отбором

В общем случае для того, чтобы открыть отчет с отбором можно использовать следующие конструкции


Отбор.Вставить("Номенклатура", ОтборПоНоменклатуре);		
ПараметрыОткрытия = Новый Структура(); 	
ПараметрыОткрытия.Вставить("СформироватьПриОткрытии", Истина);
ПараметрыОткрытия.Вставить("Отбор", Отбор);
ОткрытьФорму("Отчет.муОтчет.Форма.ФормаОтчета", ПараметрыОткрытия, ЭтаФорма, Истина);

В данном случае форма откроется с отбором, но отбор не будет доступен для редактирования.

1.2.2. Пример открытия отчета с пользовательским отбором

Для того, чтобы отбор появился на форме и был доступен как в быстры отборах, так и на вкладке "отбор", нужно использовать следующую конструкцию:

//Ищем пользовательский отбор
ПользовательскийОтбор = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(
КомпоновщикНастроек.Настройки.Отбор.ИдентификаторПользовательскойНастройки);
ЭлементОтбораПользовательский =  ПользовательскийОтбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбораПользовательский.ИдентификаторПользовательскойНастройки = Новый УникальныйИдентификатор();
ЭлементОтбораПользовательский.ВидСравнения = ВидСравнения;
ЭлементОтбораПользовательский.ЛевоеЗначение = ПолеКомпоновкиЭлемента;
ЭлементОтбораПользовательский.ПравоеЗначение = Значение;
ЭлементОтбораПользовательский.Использование = Истина;

В данном случае ненужно заполнять отбор обычных настроек компоновщика (так как в таком случае элементы формы будут задублированы), нужно взять из настроек идентификатор пользовательских настроек и по нему найти их.

После чего добавить отбор в пользовательские настройки. Он появится на форме, в быстрых настройках СКД, и на вкладке "Отборы".