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