Почему элементу справочника не назначается группа в 1С: особенности работы в Обычных формах

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

При разработке в среде 1С:Предприятие 8, особенно при работе с Обычными формами (ОФ), разработчики часто сталкиваются с ситуацией, когда настройки, заданные в дереве метаданных, ведут себя не так, как ожидается в интерфейсе пользователя. Одной из таких классических проблем является невозможность выбора группы в иерархическом справочнике, даже если в свойствах реквизита четко указано значение Группы и элементы. Разберем подробно, почему так происходит и как заставить систему работать корректно.

Анализ фундаментальной причины проблемы

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

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

Как отмечают опытные разработчики, свойство Выбор групп и элементов в метаданных реквизита было добавлено во многом для совместимости и корректной работы Управляемых форм. В Обычных формах это свойство зачастую игнорируется механизмом автогенерации, если не соблюдены определенные условия.

Решение 1: Настройка свойств элемента управления на форме

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

  1. Откроем нужную форму в конфигураторе.
  2. Найдем элемент управления ПолеВвода, который связан с нашим реквизитом.
  3. Откроем палитру свойств этого элемента (клавиша F4).
  4. Найдем категорию Данные и в ней свойство Выбор групп и элементов.
  5. Убедимся, что там установлено значение Группы и элементы. Если там стоит Элементы, то никакие настройки в метаданных самого справочника не помогут — форма будет блокировать выбор групп.

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

Решение 2: Создание и назначение специализированной Формы Выбора

Проанализируем другую ситуацию: что если формы объекта нет, и платформа открывает автогенерируемую форму? Или если открывается стандартная ФормаСписка? Рассмотрим, как это влияет на выбор.

В 1С существует принципиальная разница между Формой списка и Формой выбора.

Если для справочника, из которого мы выбираем (в нашем примере это ВидД), не создана явная Форма выбора, платформа пытается использовать Форму списка в режиме выбора. Чтобы решить проблему гарантированно, рекомендуем создать отдельную форму выбора для справочника ВидД. В этом случае у формы автоматически установится признак РежимВыбора = Истина, что позволит корректно обрабатывать выбор групп.

Решение 3: Программная установка параметров выбора

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


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

Также можно управлять этим процессом при открытии формы объекта:


Процедура ПриОткрытии()
    // Находим нужный элемент формы и устанавливаем ограничение
    ЭлементыФормы.РеквизитА.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.ГруппыИЭлементы;
КонецПроцедуры

Использование свойства ИспользованиеГруппИЭлементов позволяет гибко управлять поведением интерфейса в зависимости от условий (например, в зависимости от прав пользователя или заполненности других полей).

Почему группы "не выбираются" кнопкой Enter?

Выясним еще один нюанс поведения Обычных форм. Иногда разработчик все настроил верно, но пользователь жалуется: "Я нажимаю на группу, а она просто открывается, а не выбирается".

Посмотрим на логику работы стандартных кнопок. В режиме выбора в верхней панели формы (командной панели) обычно есть кнопка с синей иконкой "Выбрать" (пиктограмма с галочкой). Если пользователь нажимает Enter или дважды кликает мышью, платформа 1С в Обычных формах часто приоритезирует действие "Перейти на уровень ниже".

Чтобы выбрать именно группу, пользователь должен:

  1. Выделить нужную группу в списке одним кликом.
  2. Нажать на кнопку Выбрать в командной панели формы выбора.
  3. Или нажать комбинацию клавиш Shift + Enter (это стандартное поведение для выбора текущего объекта в ОФ без захода внутрь).

Особенности иерархии справочников

Проанализируем влияние настройки типа иерархии самого справочника ВидД. В 1С существует два типа иерархии:

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

Резюме по исправлению проблемы

Если вы столкнулись с тем, что элементу справочника не назначается группа, выполните следующие шаги по порядку:

  1. Проверьте свойства элемента управления на форме: Самая частая причина — в ПолеВвода на форме стоит ограничение "Только элементы", которое перекрывает метаданные.
  2. Создайте явную Форму выбора: Это инициализирует правильный режим работы формы (РежимВыбора = Истина) и упростит взаимодействие пользователя с интерфейсом.
  3. Проверьте программный код: Убедитесь, что нигде в процедурах ПриОткрытии или ПередНачаломВыбора не устанавливается жесткое ограничение на тип выбираемых данных.
  4. Инструктируйте пользователя: Объясните разницу между навигацией по группам (двойной клик) и выбором группы (кнопка "Выбрать" или Shift+Enter).

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

← На главную