Как разрешить выбор групп (папок) справочника в параметрах консоли запросов 1С для управляемых форм?

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

При работе с консолью запросов в режиме управляемого приложения программисты часто сталкиваются с досадным ограничением: при попытке выбрать группу (папку) справочника в качестве параметра система выдает предупреждение «Выберите элемент». Это происходит потому, что по умолчанию форма выбора настроена на работу только с конечными элементами. Разберем подробно, почему так происходит, и как мы можем это исправить несколькими способами.

Анализируем техническую причину проблемы

В платформе 1С:Предприятие 8 за ограничение выбора в полях ввода отвечает свойство ВыборГруппИЭлементов (в программном коде — ChoiceFoldersAndItems). Когда консоль запросов динамически строит таблицу параметров, она создает элементы формы (поля ввода) для каждого найденного в запросе параметра. Если тип параметра определен как ссылка на иерархический справочник, платформа автоматически устанавливает режим выбора в значение Авто.

Проанализируем поведение режима Авто: если в метаданных самого справочника не задано иное, система склоняется к выбору только элементов. Это сделано для обеспечения логической целостности данных, чтобы разработчик случайно не передал папку туда, где ожидается конкретный объект. Однако в консоли запросов нам часто нужно условие типа В ИЕРАРХИИ, где параметром как раз должна выступать группа.

Решение 1: Исправление программного кода консоли

Если мы используем самописную или типовую консоль с открытым кодом, мы можем внести исправление непосредственно в алгоритм генерации полей. Рассмотрим, как это сделать. Нам необходимо найти процедуру, которая отвечает за заполнение параметров (обычно она вызывается при нажатии кнопки «Заполнить параметры» или при изменении текста запроса). Нам нужно найти участок кода, где вызывается метод Элементы.Добавить() для создания поля ввода параметра.

Добавим в этот блок установку нужного нам свойства. Код будет выглядеть примерно так:


// Находим место создания нового элемента формы для параметра
НовыйЭлемент = Элементы.Добавить("Параметр_" + ИмяПараметра, Тип("ПолеФормы"), ГруппаПараметров);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлемент.ПутьКДанным = "Объект.Параметры.Значение";

// Устанавливаем возможность выбора и групп, и элементов
НовыйЭлемент.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.ГруппыИЭлементы;

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

Решение 2: Использование настройки в пользовательском интерфейсе

В некоторых продвинутых версиях консолей запросов (например, из инструментов разработчика или расширенных учебных версиях) разработчики уже предусмотрели колонку «Выбор групп и элементов» прямо в таблице параметров. Выясним, как проверить наличие этой настройки:

  1. Посмотрим на таблицу параметров запроса.
  2. Найдем колонку, которая может называться «Настройка выбора» или иметь иконку папки.
  3. Если там стоит значение Авто или Элементы, щелкнем по нему и выберем Группы и элементы.
  4. Повторим попытку выбора группы в поле значения.

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

Решение 3: Альтернативные способы обхода ограничения (без программирования)

Если возможности править код нет, а консоль не имеет встроенных настроек, воспользуемся хитростями платформы 1С. Рассмотрим три эффективных метода:

Способ А: Ввод по строке. Если мы знаем точное наименование группы или её код, мы можем начать вводить текст прямо в поле параметра, не открывая форму выбора. Зачастую механизм автоподбора игнорирует жесткое ограничение формы выбора и позволяет выбрать найденную группу из выпадающего списка.

Способ Б: Перетаскивание (Drag-and-Drop). Этот метод работает в толстом клиенте и в некоторых версиях тонкого клиента. Попробуем выполнить следующие действия:

Платформа часто позволяет «пробросить» ссылку таким образом, минуя проверку формы выбора.

Способ В: Использование выражений (Shift+F2). В мощных консолях рядом с полем значения параметра есть кнопка функции или возможность вызвать редактор выражений. Мы можем получить ссылку программно. Проанализируем пример выражения:

Справочники.Номенклатура.НайтиПоНаименованию("Оптовые товары")

Такой подход гарантированно установит в параметр нужную группу, так как результат функции НайтиПоНаименованию() возвращает ссылку напрямую в обход любых интерфейсных ограничений.

Важные нюансы иерархии

Разберем ситуацию, когда даже эти методы могут не сработать. Важно помнить о структуре метаданных. В 1С существует два вида иерархии:

  1. Иерархия групп и элементов: Здесь существуют физические папки (тип ЭтоГруппа = Истина). Именно для этого случая актуальны все вышеописанные решения.
  2. Иерархия элементов: В этом случае папок как таковых нет, а родителем для одного товара выступает другой товар. В такой структуре проблема выбора «группы» не возникает, так как технически вы всегда выбираете элемент.

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

Таким образом, мы выяснили, что проблема кроется в свойстве ВыборГруппИЭлементов. Оптимальным решением для постоянной работы будет единоразовая правка кода консоли, а для разовых задач идеально подходят методы ввода по строке или использования программных выражений.

← На главную