Каждый разработчик и администратор систем 1С рано или поздно сталкивается с ситуацией, когда после очередного обновления платформы или конфигурации привычные механизмы начинают вести себя непредсказуемо. Одной из таких неприятных неожиданностей стал переход на релизы платформы 1С:Предприятие 8.3.15 (и последующие версии), при котором пользователи начали массово получать системное предупреждение: «Выберите элемент, а не группу».
Эта ошибка блокирует стандартный выбор папок (групп) в справочниках при заполнении реквизитов на формах, настройке отборов в Журнале регистрации, а также в таких популярных инструментах разработчика, как Консоль запросов или обработка выгрузки и загрузки данных XML. В этой статье мы подробно разберем, почему изменилось поведение платформы, и рассмотрим по шагам все возможные способы решения этой проблемы — как для обычных пользователей, так и для программистов.
Давайте детально проанализируем, почему эта проблема вообще возникла. Первоисточник кроется в изменении логики работы ядра платформы 1С при работе с элементами форм и отключении (или повышении) режима совместимости конфигурации.
У любого поля ввода на управляемой форме, предназначенного для отображения данных ссылочного типа (например, справочников), существует важнейшее свойство — ВыборГруппИЭлементов (в палитре свойств конфигуратора оно называется «Выбор групп и элементов»). Исторически это свойство по умолчанию имеет значение Авто.
В зависимости от установленного в конфигурации режима совместимости, платформа трактует значение Авто совершенно по-разному:
Авто автоматически интерпретируется платформой как Группы и элементы. Это означает, что пользователь без каких-либо ограничений может выбирать из формы выбора как конечные элементы справочника, так и целые папки (группы) для иерархических справочников.Авто строго интерпретируется как Элементы. Платформа считает, что если тип не задан явно, то пользователю разрешено выбирать только конечные элементы (не папки). При попытке выбрать группу система мгновенно выдает ошибку «Выберите элемент, а не группу».Таким образом, когда прикладные решения (например, «1С:Бухгалтерия предприятия, редакция 3.0») обновили требования к минимальной версии платформы и повысили режим совместимости до актуального, во всех местах конфигурации, где свойство ВыборГруппИЭлементов было оставлено в значении Авто, пользователи лишились возможности выбирать папки.
Если вы столкнулись с этой проблемой в собственной конфигурации или находитесь в процессе доработки типового решения (находящегося на поддержке с возможностью изменения), наиболее правильным и надежным способом будет статическое изменение свойств элементов формы в конфигураторе.
Рассмотрим этот процесс по шагам:
F4).Авто на значение Группы и элементы.После выполнения этих простых действий платформа поймет, что в данном конкретном поле разрешен выбор объектов любого уровня иерархии, и ошибка больше не побеспокоит пользователей.
Бывают ситуации, когда форму невозможно или нежелательно изменять статически в конфигураторе (например, если форма генерируется динамически или вы хотите минимизировать изменения в типовой конфигурации для облегчения последующих обновлений). В этом случае мы можем управлять поведением элементов формы программно.
Для этого мы воспользуемся возможностями встроенного языка 1С и настроим свойство ВыборГруппИЭлементов динамически при открытии формы или при начале выбора значения.
Проанализируем пример кода. Наиболее часто программная установка выполняется в обработчике события ПриСозданииНаСервере или непосредственно в обработчике события ПриНачалеВыбора элемента формы:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Динамически разрешаем выбор групп и элементов для поля ввода
Элементы.ИмяВашегоПоляВвода.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.ГруппыИЭлементы;
КонецПроцедуры
Если же вам необходимо переопределить поведение непосредственно в момент интерактивного клика пользователя по кнопке выбора («три точки»), вы можете привязать к элементу формы обработчик события ПриНачалеВыбора. Посмотрим на практический пример реализации такой процедуры на клиенте:
&НаКлиенте
Процедура РеквизитСправочникНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
// Явно задаем использование групп и элементов перед открытием формы выбора
Элемент.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.ГруппыИЭлементы;
КонецПроцедуры
Обратите внимание, что системное перечисление ИспользованиеГруппИЭлементов содержит три возможных значения: Группы, Элементы и ГруппыИЭлементы. Принудительная установка значения ГруппыИЭлементы полностью решает проблему совместимости.
Особенно остро эта проблема ощущается разработчиками и аналитиками при отладке запросов. Когда в консоли запросов создается параметр для конструкции В ИЕРАРХИИ, нам жизненно необходимо выбрать именно группу справочника (папку), чтобы запрос корректно выбрал все подчиненные элементы. Однако старые версии консолей запросов выдают ту самую ошибку. В качестве решения можно использовать управляемую консоль запросов.
Давайте разберем четыре практических способа обойти или решить эту проблему в консоли запросов:
СправочникСсылка.Номенклатура вместо обобщенной ссылки). После точной типизации платформа зачастую корректно отображает форму выбора и позволяет выбрать группу.Enter. Платформа выполнит автоподбор по строке и подставит группу, минуя открытие стандартной формы выбора, что позволит избежать проверки свойства ВыборГруппИЭлементов.ПриНачалеВыбора, прописав в нем следующий код:
&НаКлиенте
Процедура ТаблицаПараметровЗначениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
// Разрешаем выбор групп в консоли для любых параметров ссылочного типа
Элемент.ВыборГруппИЭлементов = ГруппыИЭлементы.ГруппыИЭлементы;
КонецПроцедуры
Похожая проблема часто возникает при использовании стандартной обработки «Выгрузка и загрузка данных XML» (особенно старых версий). При попытке настроить отбор по родителю или группе справочника для выгрузки, обработка блокирует выбор групп. Для решения этой проблемы можно использовать адаптивную обработку выгрузки и загрузки данных XML.
Для исправления этой ситуации нам потребуется отредактировать саму обработку:
ВыборГруппИЭлементов с Авто на Группы и элементы в палитре свойств или сделайте это программно при инициализации строк компоновщика настроек.Подводя итоги, можно сказать, что ужесточение контроля типов и значений со стороны платформы 1С — это естественный процесс развития экосистемы, направленный на уменьшение ошибок со стороны конечных пользователей. Тем не менее, понимание внутренних механизмов работы платформы, таких как влияние режимов совместимости на свойства элементов управления, позволяет разработчикам оперативно и безболезненно адаптировать свои решения под любые изменения технологической платформы.