При работе с консолью запросов в режиме управляемого приложения программисты часто сталкиваются с досадным ограничением: при попытке выбрать группу (папку) справочника в качестве параметра система выдает предупреждение «Выберите элемент». Это происходит потому, что по умолчанию форма выбора настроена на работу только с конечными элементами. Разберем подробно, почему так происходит, и как мы можем это исправить несколькими способами.
В платформе 1С:Предприятие 8 за ограничение выбора в полях ввода отвечает свойство ВыборГруппИЭлементов (в программном коде — ChoiceFoldersAndItems). Когда консоль запросов динамически строит таблицу параметров, она создает элементы формы (поля ввода) для каждого найденного в запросе параметра. Если тип параметра определен как ссылка на иерархический справочник, платформа автоматически устанавливает режим выбора в значение Авто.
Проанализируем поведение режима Авто: если в метаданных самого справочника не задано иное, система склоняется к выбору только элементов. Это сделано для обеспечения логической целостности данных, чтобы разработчик случайно не передал папку туда, где ожидается конкретный объект. Однако в консоли запросов нам часто нужно условие типа В ИЕРАРХИИ, где параметром как раз должна выступать группа.
Если мы используем самописную или типовую консоль с открытым кодом, мы можем внести исправление непосредственно в алгоритм генерации полей. Рассмотрим, как это сделать. Нам необходимо найти процедуру, которая отвечает за заполнение параметров (обычно она вызывается при нажатии кнопки «Заполнить параметры» или при изменении текста запроса). Нам нужно найти участок кода, где вызывается метод Элементы.Добавить() для создания поля ввода параметра.
Добавим в этот блок установку нужного нам свойства. Код будет выглядеть примерно так:
// Находим место создания нового элемента формы для параметра
НовыйЭлемент = Элементы.Добавить("Параметр_" + ИмяПараметра, Тип("ПолеФормы"), ГруппаПараметров);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлемент.ПутьКДанным = "Объект.Параметры.Значение";
// Устанавливаем возможность выбора и групп, и элементов
НовыйЭлемент.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.ГруппыИЭлементы;
После такого изменения любая форма выбора, открытая из этого поля, позволит нам выделить и выбрать папку справочника.
В некоторых продвинутых версиях консолей запросов (например, из инструментов разработчика или расширенных учебных версиях) разработчики уже предусмотрели колонку «Выбор групп и элементов» прямо в таблице параметров. Выясним, как проверить наличие этой настройки:
Авто или Элементы, щелкнем по нему и выберем Группы и элементы.Если такая настройка есть, это самый быстрый способ решить задачу без вмешательства в конфигуратор.
Если возможности править код нет, а консоль не имеет встроенных настроек, воспользуемся хитростями платформы 1С. Рассмотрим три эффективных метода:
Способ А: Ввод по строке. Если мы знаем точное наименование группы или её код, мы можем начать вводить текст прямо в поле параметра, не открывая форму выбора. Зачастую механизм автоподбора игнорирует жесткое ограничение формы выбора и позволяет выбрать найденную группу из выпадающего списка.
Способ Б: Перетаскивание (Drag-and-Drop). Этот метод работает в толстом клиенте и в некоторых версиях тонкого клиента. Попробуем выполнить следующие действия:
Платформа часто позволяет «пробросить» ссылку таким образом, минуя проверку формы выбора.
Способ В: Использование выражений (Shift+F2). В мощных консолях рядом с полем значения параметра есть кнопка функции или возможность вызвать редактор выражений. Мы можем получить ссылку программно. Проанализируем пример выражения:
Справочники.Номенклатура.НайтиПоНаименованию("Оптовые товары")
Такой подход гарантированно установит в параметр нужную группу, так как результат функции НайтиПоНаименованию() возвращает ссылку напрямую в обход любых интерфейсных ограничений.
Разберем ситуацию, когда даже эти методы могут не сработать. Важно помнить о структуре метаданных. В 1С существует два вида иерархии:
ЭтоГруппа = Истина). Именно для этого случая актуальны все вышеописанные решения.Если же в справочнике в конфигураторе вовсе отключена иерархия, то выбрать группу не удастся ни одним из способов, так как понятия «группа» для данного объекта данных не существует в принципе.
Таким образом, мы выяснили, что проблема кроется в свойстве ВыборГруппИЭлементов. Оптимальным решением для постоянной работы будет единоразовая правка кода консоли, а для разовых задач идеально подходят методы ввода по строке или использования программных выражений.