Как программно Изменить Отбор в отчете СКД Эта тема тоже достаточна распространена. Нюанс программного изменения отбора заключается в том, что коллекция:
Код 1C v 8.х КомпоновщикНастроек. Настройки. Отбор. Элементы
в отличие от аналогичной коллекции параметров, не имеет метода Найти(). Можно конечно изменять отбор «в лоб», т.е. по индексу, но это не есть хорошо. Самый оптимальный вариант, обходить все поля отбора в цикле.
Приведу пример универсальной функции для изменения отбор компоновки данных:
Код 1C v 8.х
Процедура ИзменитьОтбор(ЭлементСтруктуры,
СоответствиеПоискаОтбора = Неопределено, СоответствиеНовогоОтбора) Экспорт
Если ТипЗнч( ЭлементСтруктуры) = Тип( "КомпоновщикНастроекКомпоновкиДанных" ) Тогда
Отбор = ЭлементСтруктуры. Настройки. Отбор;
Иначе
Отбор = ЭлементСтруктуры;
КонецЕсли ;
Если ТипЗнч( СоответствиеНовогоОтбора["ЛевоеЗначение" ]) = Тип( "Строка" ) Тогда
нПоле = Новый ПолеКомпоновкиДанных( СоответствиеНовогоОтбора. ЛевоеЗначение) ;
Иначе
нПоле = СоответствиеНовогоОтбора["ЛевоеЗначение" ];
КонецЕсли ;
Если СоответствиеНовогоОтбора. Получить( "ВидСравнения" ) = Неопределено Тогда
нВидСравнения = ВидСравненияКомпоновкиДанных. Равно;
Иначе
нВидСравнения = СоответствиеНовогоОтбора["ВидСравнения" ];
КонецЕсли ;
Если СоответствиеНовогоОтбора. Получить( "Использование" ) = Неопределено Тогда
нИспользование = Истина ;
Иначе
нИспользование = СоответствиеНовогоОтбора["Использование" ];
КонецЕсли ;
нЗначение = СоответствиеНовогоОтбора["Значение" ];
ТолькоПоЛевомуЗначению = Ложь ;
Если СоответствиеПоискаОтбора = Неопределено Тогда
ТолькоПоЛевомуЗначению = Истина ;
КонецЕсли ;
сЛевоеЗначение = СоответствиеПоискаОтбора. Получить( "ЛевоеЗначение" ) ;
Если сЛевоеЗначение = Неопределено Тогда
сЛевоеЗначение = нПоле;
КонецЕсли ;
сВидСравнения = СоответствиеПоискаОтбора. Получить( "ВидСравнения" ) ;
Если ВидСравнения = Неопределено Тогда
сВидСравнения = ВидСравнения;
КонецЕсли ;
сИспользование = СоответствиеПоискаОтбора. Получить( "Использование" ) ;
Если сИспользование = Неопределено Тогда
сИспользование = нИспользование;
КонецЕсли ;
Для каждого ЭлементОтбора Из Отбор. Элементы Цикл
Если ТолькоПоЛевомуЗначению Тогда
НайденныйОтбор = ЭлементОтбора;
Прервать ;
Иначе
Если ( ЭлементОтбора. ЛевоеЗначение = сЛевоеЗначение)
И ( ЭлементОтбора. ВидСравнения = сВидСравнения)
И ( ЭлементОтбора. Использование = сИспользование) Тогда
НайденныйОтбор = ЭлементОтбора;
Прервать ;
КонецЕсли ;
КонецЕсли ;
КонецЦикла ;
Если НайденныйОтбор < > Неопределено Тогда
НайденныйОтбор. ЛевоеЗначение = нПоле;
НайденныйОтбор. Использование = нИспользование;
НайденныйОтбор. ВидСравнения = нВидСравнения;
НайденныйОтбор. ПравоеЗначение = нЗначение;
КонецЕсли ;
КонецПроцедуры
Пример вызова процедуры:
Код 1C v 8.х СоответствиеПоискаОтбора = Новый Соответствие;
СоответствиеПоискаОтбора. Вставить( "ЛевоеЗначение" , Новый ПолеКомпоновкиДанных( "Наименование" ) ) ;
СоответствиеПоискаОтбора. Вставить( "ВидСравнения" , ВидСравненияКомпоновкиДанных. Содержит) ;
СоответствиеПоискаОтбора. Вставить( "Использование" , Истина ) ;
СоответствиеНовогоОтбора = Новый Соответствие;
СоответствиеНовогоОтбора. Вставить( "ЛевоеЗначение" , Новый ПолеКомпоновкиДанных( "Наименование" ) ) ;
СоответствиеНовогоОтбора. Вставить( "ВидСравнения" , ВидСравненияКомпоновкиДанных. Содержит) ;
СоответствиеНовогоОтбора. Вставить( "Использование" , Истина ) ;
СоответствиеНовогоОтбора. Вставить( "Значение" , "бла-бла-бла" ) ;
ИзменитьОтбор( КомпоновщикНастроек, СоответствиеПоискаОтбора, СоответствиеНовогоОтбора) ;
Автор: also Опубликовано на сайте: https://HelpF.pro Прямая ссылка: https://HelpF.pro/faq/view/721.html