При разработке пользовательских интерфейсов в 1С часто возникает необходимость предоставить пользователю выбор вида сравнения для компоновки данных. Однако системное перечисление ВидСравненияКомпоновкиДанных не отображается в палитре свойств при создании обычного независимого реквизита формы. Разберем причинно-следственную связь этого ограничения платформы и проанализируем практические способы решения данной задачи.
Тип ВидСравненияКомпоновкиДанных относится к системным механизмам системы компоновки данных (СКД). Платформа «1С:Предприятие» не позволяет выбирать его в качестве типа реквизита формы из стандартной палитры типов. Это сделано из-за архитектурных особенностей работы СКД, где виды сравнения жестко привязаны к контексту настроек отбора. Тем не менее существует несколько проверенных способов обойти это ограничение.
Если в отчете или обработке используется компоновщик настроек, мы можем связать поле ввода формы напрямую с элементом отбора из настроек компоновщика.
Рассмотрим порядок действий по шагам:
Отчет.КомпоновщикНастроек.ПользовательскиеНастройки[1].ВидСравнения.В этом случае платформа автоматически определит нужный тип данных и отобразит полный список вариантов вида сравнения, доступных в компоновке данных.
Если задача заключается в создании автономого элемента управления на форме, не связанного с конкретным отчетом, разберем подход с реквизитом произвольного типа.
ВидСравненияРеквизит) и укажем тип Произвольный.ПриСозданииНаСервере программно заполним список выбора значениями перечисления ВидСравненияКомпоновкиДанных.Проанализируем пример программного кода для заполнения списка выбора:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ЭлементФормы = Элементы.ВидСравненияРеквизит;
ЭлементФормы.РежимВыбораИзСписка = Истина;
Список = ЭлементФормы.СписокВыбора;
Список.Добавить(ВидСравненияКомпоновкиДанных.Равно, "Равно");
Список.Добавить(ВидСравненияКомпоновкиДанных.НеРавно, "Не равно");
Список.Добавить(ВидСравненияКомпоновкиДанных.ВСписке, "В списке");
Список.Добавить(ВидСравненияКомпоновкиДанных.Содержит, "Содержит");
Список.Добавить(ВидСравненияКомпоновкиДанных.Заполнено, "Заполнено");
КонецПроцедуры
В платформе 1С доступен системный тип ВидСравнения, который отображается в выборке типов реквизитов формы. Выясним, как использовать его в качестве альтернативы:
ВидСравнения.ВидСравненияКомпоновкиДанных.Если выбор вида сравнения требуется запросить разово в ходе выполнения алгоритма (без размещения постоянного поля на форме), используем системный метод ВвестиЗначение.
Посмотрим на пример вызова диалогового окна:
&НаКлиенте
Процедура ВыбратьВидСравнения()
ВыбранныйВид = Неопределено;
МассивТипов = Новый Массив;
МассивТипов.Добавить(Тип("ВидСравненияКомпоновкиДанных"));
ОписаниеТиповЗначения = Новый ОписаниеТипов(МассивТипов);
ВвестиЗначение(ВыбранныйВид, "Выберите вид сравнения", ОписаниеТиповЗначения);
КонецПроцедуры
При таком подходе платформа покажет стандартный диалог выбора из всех доступных значений перечисления ВидСравненияКомпоновкиДанных.