Как скрыть реквизит на автоматически генерируемой форме группы справочника?

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

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

Программная подмена формы через модуль менеджера

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

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


Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка)
    Если ВидФормы = "ФормаГруппы" Тогда
        // Отключаем стандартную генерацию формы группы
        СтандартнаяОбработка = Ложь;
        // Указываем альтернативную форму, например, форму элемента
        ВыбраннаяФорма = "ФормаЭлемента";
    КонецЕсли;
КонецПроцедуры

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

Настройка пользовательской видимости в метаданных

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

  1. Откроем свойства нужного реквизита в дереве метаданных.
  2. Найдем пункт Пользовательская видимость.
  3. В открывшемся окне снимем флажки видимости для всех ролей или только для тех, кому не нужно видеть данный реквизит.

Важный момент: если у реквизита отключена пользовательская видимость, платформа не будет добавлять его на автоматически генерируемую форму. При этом в коде (в модулях объекта или менеджера) вы по-прежнему сможете обращаться к этому реквизиту и изменять его значения.

Использование свойства «Использование» для логического разделения

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

Изменим свойство реквизита Использование (Use). Вместо значения Для группы и элемента установим значение Для элемента. После этого платформа:

Механизм Функциональных опций

Рассмотрим более сложный, но «чистый» с точки зрения методологии 1С способ — использование Функциональных опций (ФО). Если видимость реквизита зависит от каких-то настроек системы, мы можем привязать реквизит к функциональной опции.

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

Ограничение прав доступа на уровне ролей

Посмотрим на проблему с точки зрения безопасности. Если реквизит является техническим и пользователь не должен его редактировать ни при каких обстоятельствах, наиболее правильным будет ограничение прав в Ролях.

Если у пользователя отсутствует право Просмотр или Редактирование для данного реквизита, платформа 1С проигнорирует его при построении автоматической формы. Это гарантирует, что поле не появится в интерфейсе, независимо от того, какая форма (группы или элемента) открывается.

Резюме и рекомендации

Подводя итог, выберем оптимальный путь в зависимости от ваших целей:

  1. Если реквизит вообще не нужен в группах — используйте свойство Использование: Для элемента.
  2. Если реквизит нужен в базе, но должен быть скрыт в интерфейсе везде — настройте Пользовательскую видимость или права доступа в Ролях.
  3. Если требуется сложная логика (скрыть только на форме группы, но оставить в элементе и разрешить ввод) — используйте обработчик ОбработкаПолученияФормы в модуле менеджера для перенаправления на пустую или альтернативную форму.

Применяя эти методы, мы сохраняем типовую конфигурацию максимально «чистой», что существенно облегчит её дальнейшее обновление и поддержку.

← На главную