Как скрыть справочник Физические лица в 1С 8.3 для определенных пользователей

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

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

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

Проблема прямого ограничения прав в ЗУП

Прежде чем мы перейдем к коду, важно проанализировать ситуацию. В конфигурации ЗУП 3.1 справочник Физические лица тесно связан со справочником Сотрудники. Если мы полностью закроем права на чтение физлиц через типовые роли, пользователи не смогут работать даже со списком сотрудников, так как многие данные в экранных формах подтягиваются именно из данных физлица. Поэтому наша задача — не просто «отрубить» права, а сделать справочник недоступным для интерактивного просмотра или поиска.

Способ 1. Блокировка открытия формы через расширение

Рассмотрим самый быстрый и надежный метод — использование механизма расширений. Мы перехватим событие создания формы карточки физического лица и запретим ее открытие всем, кроме администраторов.

Шаг 1. Создание расширения

  1. Перейдем в Конфигуратор, меню Конфигурация — Расширения конфигурации.
  2. Создадим новое расширение (например, с именем ОграничениеДоступаФизЛица).
  3. Назначение выберем Адаптация.
  4. Снимем флажки Безопасный режим и Защита от опасных действий в свойствах расширения (это часто необходимо для корректной работы серверных процедур БСП).

Шаг 2. Добавление объекта в расширение

Найдем в дереве объектов основной конфигурации справочник Физические лица, раскроем его формы и добавим ФормаЭлемента в наше расширение.

Шаг 3. Программный код

В модуле формы расширения создадим обработчик события ПриСозданииНаСервере с типом вызова Перед. Проанализируем следующий код:


&НаСервере
Процедура Расш1_ПриСозданииНаСервереПеред(Отказ, СтандартнаяОбработка)
    
    // Проверяем, является ли пользователь полноправным администратором
    Если НЕ Пользователи.ЭтоПолноправныйПользователь() Тогда
        
        // Отменяем стандартную обработку и устанавливаем отказ в открытии
        СтандартнаяОбработка = Ложь;
        Отказ = Истина;
        
        // Выводим сообщение пользователю
        ВызватьИсключение "Недостаточно прав для просмотра карточки физического лица. Обратитесь к администратору.";
        
    КонецЕсли;
    
КонецПроцедуры

Этот метод хорош тем, что он «жестко» пресекает попытку заглянуть в данные. Однако он затронет всех, кто не является администратором. Рассмотрим ситуацию, когда нам нужно ограничить только конкретного бухгалтера.

Способ 2. Ограничение по специальной роли

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

Для этого создадим в расширении новую роль, например, БухгалтерБезДоступаКФизЛицам. Назначать её пользователям мы будем в режиме 1С:Предприятие. Код в форме элемента будет выглядеть так:


&НаСервере
Процедура Расш1_ПриСозданииНаСервереПеред(Отказ, СтандартнаяОбработка)
    
    // Проверяем наличие роли-"черной метки"
    // Важно: в расширениях имя роли проверяется с префиксом расширения
    Если Пользователи.РолиДоступны("Расш1_БухгалтерБезДоступаКФизЛицам") Тогда
        
        Отказ = Истина;
        Сообщить("Доступ к персональным данным ограничен согласно вашей должностной инструкции.");
        
    КонецЕсли;
    
КонецПроцедуры

Обратите внимание: использование метода Пользователи.РолиДоступны() является стандартом для конфигураций на базе БСП (Библиотека стандартных подсистем). Это позволяет избежать ошибок при проверке прав на сервере.

Способ 3. Скрытие из интерфейса (Командный интерфейс)

Просто запретить открытие формы недостаточно — пользователь все равно будет видеть пункт Физические лица в меню Кадры или Справочники. Это вызывает лишние вопросы. Проанализируем, как «прикрыть» визуальное присутствие объекта.

Разберем действия по шагам:

  1. В расширении найдем подсистемы, в которые включен справочник (в ЗУП это обычно подсистема Кадры).
  2. Нажмем правой кнопкой мыши на подсистему — Командный интерфейс.
  3. В открывшемся окне снимем галочку Видимость для справочника Физические лица напротив тех ролей, которым мы хотим запретить доступ.

Таким образом, справочник просто исчезнет из панели навигации пользователя, и он не будет пытаться в него зайти.

Нюансы работы в ЗУП: Списки и отчеты

Важно понимать, что ограничение в ФормеЭлемента защищает только карточку. Но данные физлиц могут «вылезать» в списках (например, в форме списка справочника). Чтобы скрыть данные там, нужно проделать аналогичную операцию с ФормаСписка и ФормаВыбора.

Профессиональный совет: если вы хотите скрыть конкретные колонки (например, СНИЛС) в списке для определенных пользователей, используйте Условное оформление в процедуре ПриСозданииНаСервере формы списка:


// Пример программного скрытия колонки
ЭлементОформления = Список.УсловноеОформление.Элементы.Добавить();
ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить();
ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("СНИЛС");
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Текст", "*** Скрыто ***");
// Добавить условие по роли...

Почему RLS — это не всегда лучший выбор?

Многие специалисты советуют использовать RLS (Record Level Security). Рассмотрим, почему в данном конкретном случае форумчане советуют его избегать:

Итоги и рекомендации

Мы выяснили, что наиболее сбалансированным решением для задачи «скрыть, но не сломать» является сочетание скрытия из командного интерфейса и программного отказа в открытии форм через расширение.

Основные выводы нашей совместной работы:

  1. Всегда используйте событие ПриСозданииНаСервере вместо ПриОткрытии, так как это безопаснее и работает быстрее.
  2. Не забудьте про префиксы ролей в расширениях (Расш1_ИмяРоли).
  3. В ЗУП помните о связке СотрудникиФизические лица: скрывая одно, убедитесь, что информация не доступна через другое.
  4. Для полной защиты данных в отчетах всё же стоит рассмотреть настройку типовых Групп доступа физических лиц, которые предусмотрены в ЗУП «из коробки» (раздел Настройки — Управление пользователями и доступом).
← На главную