HelpF.pro

Как программно установить отбор в СКД

Код 1C v 8.х
 

Процедура ВашРеквизитПриИзменении(Элемент)
СоответствиеПоискаОтбора = Новый Соответствие;
   СоответствиеПоискаОтбора.Вставить("ЛевоеЗначение",Новый ПолеКомпоновкиДанных("%Нужное поле компоновки%"));
   СоответствиеПоискаОтбора.Вставить("ВидСравнения",ВидСравненияКомпоновкиДанных.ВСписке); //сюда впихнуть нужный вид сравнения
   СоответствиеПоискаОтбора.Вставить("Использование",Истина);


   СоответствиеНовогоОтбора = Новый Соответствие;
   СоответствиеНовогоОтбора.Вставить("ЛевоеЗначение",Новый ПолеКомпоновкиДанных("%Нужное поле компоновки%"));
   СоответствиеНовогоОтбора.Вставить("ВидСравнения",ВидСравненияКомпоновкиДанных.ВСписке); // вид сравнения
Если ЗначениеЗаполнено(Кампейны) тогда
   СоответствиеНовогоОтбора.Вставить("Использование",Истина);
Иначе
СоответствиеНовогоОтбора.Вставить("Использование",Ложь);
КонецЕсли;


   СоответствиеНовогоОтбора.Вставить("Значение",Кампейны);


   ИзменитьОтбор(КомпоновщикНастроек,СоответствиеПоискаОтбора,СоответствиеНовогоОтбора);    
КонецПроцедуры


Процедура ИзменитьОтбор(ЭлементСтруктуры, СоответствиеПоискаОтбора = Неопределено, СоответствиеНовогоОтбора) Экспорт


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


Если ТипЗнч(СоответствиеНовогоОтбора["ЛевоеЗначение"]) = Тип("Строка") Тогда
   нПоле = Новый ПолеКомпоновкиДанных(СоответствиеНовогоОтбора.ЛевоеЗначение);
Иначе
   нПоле = СоответствиеНовогоОтбора["ЛевоеЗначение"];
КонецЕсли;


Если СоответствиеНовогоОтбора.Получить("ВидСравнения") = Неопределено Тогда
   нВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
Иначе
   нВидСравнения = СоответствиеНовогоОтбора["ВидСравнения"];
КонецЕсли;


Если СоответствиеНовогоОтбора.Получить("Использование") = Неопределено Тогда
   нИспользование = Истина;
Иначе
   нИспользование = СоответствиеНовогоОтбора["Использование"];
КонецЕсли;


нЗначение = СоответствиеНовогоОтбора["Значение"];


ТолькоПоЛевомуЗначению = Ложь;
Если СоответствиеПоискаОтбора = Неопределено Тогда
   ТолькоПоЛевомуЗначению = Истина;
КонецЕсли;


сЛевоеЗначение  =  СоответствиеПоискаОтбора.Получить("ЛевоеЗначение");
Если сЛевоеЗначение = Неопределено Тогда
   сЛевоеЗначение = нПоле;
КонецЕсли;


сВидСравнения  =  СоответствиеПоискаОтбора.Получить("ВидСравнения");
Если ВидСравнения = Неопределено Тогда
   сВидСравнения = ВидСравнения;
КонецЕсли;


сИспользование =  СоответствиеПоискаОтбора.Получить("Использование");
Если сИспользование = Неопределено Тогда
   сИспользование = нИспользование;
КонецЕсли;


Для каждого ЭлементОтбора Из Отбор.Элементы Цикл
   Если ТолькоПоЛевомуЗначению Тогда
       НайденныйОтбор = ЭлементОтбора;
       Прервать;
   Иначе
       Если (ЭлементОтбора.ЛевоеЗначение = сЛевоеЗначение)
           И (ЭлементОтбора.ВидСравнения = сВидСравнения)
            Тогда
           НайденныйОтбор = ЭлементОтбора;
           Прервать;
       КонецЕсли;
   КонецЕсли;
КонецЦикла;


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


ПолеОтбора = Новый ПолеКомпоновкиДанных(нПоле);


НовыйЭлементОтбора.ЛевоеЗначение  = нПоле;
НовыйЭлементОтбора.Использование  = нИспользование;
НовыйЭлементОтбора.ВидСравнения   = нВидСравнения;
НовыйЭлементОтбора.ПравоеЗначение = нЗначение;
КонецЕсли;


КонецПроцедуры


Опубликовано на сайте: https://HelpF.pro
Прямая ссылка: https://HelpF.pro/faq8/view/1689.html