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