Как вывести на форму поле ввода с типом ВидСравненияКомпоновкиДанных в 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке пользовательских интерфейсов в 1С часто возникает необходимость предоставить пользователю выбор вида сравнения для компоновки данных. Однако системное перечисление ВидСравненияКомпоновкиДанных не отображается в палитре свойств при создании обычного независимого реквизита формы. Разберем причинно-следственную связь этого ограничения платформы и проанализируем практические способы решения данной задачи.

Почему нельзя выбрать ВидСравненияКомпоновкиДанных напрямую

Тип ВидСравненияКомпоновкиДанных относится к системным механизмам системы компоновки данных (СКД). Платформа «1С:Предприятие» не позволяет выбирать его в качестве типа реквизита формы из стандартной палитры типов. Это сделано из-за архитектурных особенностей работы СКД, где виды сравнения жестко привязаны к контексту настроек отбора. Тем не менее существует несколько проверенных способов обойти это ограничение.

Способ 1. Связывание поля формы с пользовательскими настройками СКД

Если в отчете или обработке используется компоновщик настроек, мы можем связать поле ввода формы напрямую с элементом отбора из настроек компоновщика.

Рассмотрим порядок действий по шагам:

  1. Добавим на форму поле ввода.
  2. В свойстве ПутьКДанным (DataPath) укажем прямую ссылку на вид сравнения элемента отбора из компоновщика настроек, например: Отчет.КомпоновщикНастроек.ПользовательскиеНастройки[1].ВидСравнения.

В этом случае платформа автоматически определит нужный тип данных и отобразит полный список вариантов вида сравнения, доступных в компоновке данных.

Способ 2. Использование реквизита типа «Произвольный» и списка выбора

Если задача заключается в создании автономого элемента управления на форме, не связанного с конкретным отчетом, разберем подход с реквизитом произвольного типа.

  1. Создадим реквизит формы (например, с именем ВидСравненияРеквизит) и укажем тип Произвольный.
  2. Добавим этот реквизит на форму в виде элемента Поле ввода или Поле выбора.
  3. В обработчике события ПриСозданииНаСервере программно заполним список выбора значениями перечисления ВидСравненияКомпоновкиДанных.

Проанализируем пример программного кода для заполнения списка выбора:


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

Способ 3. Использование типа «ВидСравнения» с конвертацией

В платформе 1С доступен системный тип ВидСравнения, который отображается в выборке типов реквизитов формы. Выясним, как использовать его в качестве альтернативы:

  1. Создадим реквизит формы с типом ВидСравнения.
  2. Вынесем его на форму, чтобы пользователь мог выбрать нужный оператор сравнения.
  3. В коде перед передачей настройки в СКД выполним сопоставление выбранного значения с соответствующим значением ВидСравненияКомпоновкиДанных.

Способ 4. Диалоговый выбор через «ВвестиЗначение»

Если выбор вида сравнения требуется запросить разово в ходе выполнения алгоритма (без размещения постоянного поля на форме), используем системный метод ВвестиЗначение.

Посмотрим на пример вызова диалогового окна:


&НаКлиенте
Процедура ВыбратьВидСравнения()
    
    ВыбранныйВид = Неопределено;
    МассивТипов = Новый Массив;
    МассивТипов.Добавить(Тип("ВидСравненияКомпоновкиДанных"));
    ОписаниеТиповЗначения = Новый ОписаниеТипов(МассивТипов);
    
    ВвестиЗначение(ВыбранныйВид, "Выберите вид сравнения", ОписаниеТиповЗначения);
    
КонецПроцедуры

При таком подходе платформа покажет стандартный диалог выбора из всех доступных значений перечисления ВидСравненияКомпоновкиДанных.

← На главную