Реквизит формы с типом КомпоновщикНастроекКомпоновкиДанных

 

Рассмотрим задачу, когда на форме нужно получить значения отбора (вид сравнения и значения сравнения) для дальнейшего использования.

Рассмотрим на примере. На форму объекта внешней обработки добавляем реквизит НастройкиСКД с типом КомпоновщикНастроекКомпоновкиДанных:

Добавление реквизита с типом КомпоновщикНастроекКомпоновкиДанных

Раскрываем реквизит НастройкиСКД и перетаскиваем на форму в раздел Элементы НастройкиСКД.Настройки.Отбор.

Далее устанавливаем обработчик события формы ПриСозданииНаСервере, текст процедуры (у внешней обработки есть макет МакетСКД с типом Схема компоновки данных, в котором настроен Отбор):

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
                ЭтотОбъект = РеквизитФормыВЗначение("Объект");  
               СхемаКомпоновкиДанных = ЭтотОбъект.ПолучитьМакет("МакетСКД");
               НастройкиСКД.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
               
                СхемаКомпоновкиДанныхВХ = ПоместитьВоВременноеХранилище(СхемаКомпоновкиДанных); 
               НастройкиСКД.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанныхВХ));
КонецПроцедуры

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

Затем можно обработать указанные пользователем значения видов сравнения и значений сравнения, пример кода:

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

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