Как исправить ошибку «Выберите элемент, а не группу» в 1С:Предприятие 8.3.15 и выше

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

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

Эта ошибка блокирует стандартный выбор папок (групп) в справочниках при заполнении реквизитов на формах, настройке отборов в Журнале регистрации, а также в таких популярных инструментах разработчика, как Консоль запросов или обработка выгрузки и загрузки данных XML. В этой статье мы подробно разберем, почему изменилось поведение платформы, и рассмотрим по шагам все возможные способы решения этой проблемы — как для обычных пользователей, так и для программистов.

Выясняем техническую причину изменения поведения платформы

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

У любого поля ввода на управляемой форме, предназначенного для отображения данных ссылочного типа (например, справочников), существует важнейшее свойство — ВыборГруппИЭлементов (в палитре свойств конфигуратора оно называется «Выбор групп и элементов»). Исторически это свойство по умолчанию имеет значение Авто.

В зависимости от установленного в конфигурации режима совместимости, платформа трактует значение Авто совершенно по-разному:

  1. Режим совместимости включен (версии 8.3.13 и ниже). В этом случае значение Авто автоматически интерпретируется платформой как Группы и элементы. Это означает, что пользователь без каких-либо ограничений может выбирать из формы выбора как конечные элементы справочника, так и целые папки (группы) для иерархических справочников.
  2. Режим совместимости отключен (или поднят до версии 8.3.14, 8.3.15 и выше). С этого момента разработчики платформы изменили дефолтное поведение. Теперь значение Авто строго интерпретируется как Элементы. Платформа считает, что если тип не задан явно, то пользователю разрешено выбирать только конечные элементы (не папки). При попытке выбрать группу система мгновенно выдает ошибку «Выберите элемент, а не группу».

Таким образом, когда прикладные решения (например, «1С:Бухгалтерия предприятия, редакция 3.0») обновили требования к минимальной версии платформы и повысили режим совместимости до актуального, во всех местах конфигурации, где свойство ВыборГруппИЭлементов было оставлено в значении Авто, пользователи лишились возможности выбирать папки.

Решение 1. Явное изменение свойства в Конфигураторе (для разработчиков)

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

Рассмотрим этот процесс по шагам:

  1. Откройте конфигурацию в режиме Конфигуратор.
  2. Найдите нужную форму, в которой возникает ошибка при выборе папки справочника.
  3. Перейдите на вкладку «Элементы» и выберите поле ввода, связанное с вашим реквизитом.
  4. Откройте палитру свойств этого элемента (клавиша F4).
  5. Найдите свойство «Выбор групп и элементов».
  6. Измените установленное по умолчанию значение Авто на значение Группы и элементы.
  7. Сохраните изменения и обновите конфигурацию базы данных.

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

Решение 2. Динамическое (программное) переопределение в коде формы

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

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

Проанализируем пример кода. Наиболее часто программная установка выполняется в обработчике события ПриСозданииНаСервере или непосредственно в обработчике события ПриНачалеВыбора элемента формы:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Динамически разрешаем выбор групп и элементов для поля ввода
    Элементы.ИмяВашегоПоляВвода.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.ГруппыИЭлементы;
КонецПроцедуры

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


&НаКлиенте
Процедура РеквизитСправочникНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    // Явно задаем использование групп и элементов перед открытием формы выбора
    Элемент.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.ГруппыИЭлементы;
КонецПроцедуры

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

Решение 3. Обход проблемы в Консоли запросов при работе с конструкцией «В Иерархии»

Особенно остро эта проблема ощущается разработчиками и аналитиками при отладке запросов. Когда в консоли запросов создается параметр для конструкции В ИЕРАРХИИ, нам жизненно необходимо выбрать именно группу справочника (папку), чтобы запрос корректно выбрал все подчиненные элементы. Однако старые версии консолей запросов выдают ту самую ошибку. В качестве решения можно использовать управляемую консоль запросов.

Давайте разберем четыре практических способа обойти или решить эту проблему в консоли запросов:

  1. Явное указание типа параметра (Типизация). Часто ошибка возникает из-за того, что тип параметра в консоли определен обобщенно (например, просто как ссылка общего вида). Кликните в таблице параметров консоли по колонке «Тип» и выберите конкретный ссылочный тип (например, СправочникСсылка.Номенклатура вместо обобщенной ссылки). После точной типизации платформа зачастую корректно отображает форму выбора и позволяет выбрать группу.
  2. Быстрый ввод текста (Автоподбор в обход формы выбора). Если вы точно знаете наименование или код нужной вам группы, не нажимайте кнопку выбора с многоточием. Начните вводить название группы текстом прямо в поле значения параметра консоли и нажмите клавишу Enter. Платформа выполнит автоподбор по строке и подставит группу, минуя открытие стандартной формы выбора, что позволит избежать проверки свойства ВыборГруппИЭлементов.
  3. Программное исправление кода самой консоли запросов. Если вы используете собственную или корпоративную версию консоли запросов, вы можете открыть её как внешнюю обработку в конфигураторе. Найдите форму управления параметрами, найдите таблицу параметров и для поля ввода значения добавьте обработчик ПриНачалеВыбора, прописав в нем следующий код:

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

Решение 4. Исправление стандартной обработки обмена данными XML

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

Для исправления этой ситуации нам потребуется отредактировать саму обработку:

  1. Откройте обработку «Выгрузка и загрузка данных XML» в конфигураторе как внешний файл.
  2. Найдите форму настройки отборов.
  3. Найдите табличную часть или дерево отборов, найдите элемент поля ввода значения отбора.
  4. Измените его свойство ВыборГруппИЭлементов с Авто на Группы и элементы в палитре свойств или сделайте это программно при инициализации строк компоновщика настроек.
  5. Сохраните файл обработки и запустите её в режиме «1С:Предприятие».

Подводя итоги, можно сказать, что ужесточение контроля типов и значений со стороны платформы 1С — это естественный процесс развития экосистемы, направленный на уменьшение ошибок со стороны конечных пользователей. Тем не менее, понимание внутренних механизмов работы платформы, таких как влияние режимов совместимости на свойства элементов управления, позволяет разработчикам оперативно и безболезненно адаптировать свои решения под любые изменения технологической платформы.

← На главную