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