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