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