Как ограничить доступ к физическим лицам в 1С:ЗУП КОРП 3.1, но сохранить возможность печати документов без ошибок?

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

При работе с конфигурацией 1С:Зарплата и управление персоналом КОРП 3.1.29.38 многие пользователи сталкиваются с необходимостью тонкой настройки прав доступа к данным физических лиц. Задача состоит в том, чтобы ограничить видимость физических лиц на уровне записей (RLS) для определенных пользователей, но при этом обеспечить корректную печать документов, где требуются данные этих же физических лиц, например, для подписей руководителей в приказах. Типовая роль "Чтение данных физических лиц зарплата кадры (для печати руководителя в приказах при RLS)" зачастую предоставляет избыточные права, позволяя просматривать всех физических лиц без ограничений, что нарушает заданные правила RLS.

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

Первоначально, мы должны понимать, что типовой механизм ограничения доступа на уровне записей (RLS) в 1С:ЗУП КОРП 3.1 имеет свои особенности. В частности, полноценное ограничение доступа к физическим лицам исключительно по подразделениям не всегда работает идеально. Часто ограничения по подразделениям распространяются на штатное расписание, но при этом позиции запрещенных подразделений и связанные с ними физические лица могут оставаться доступными для просмотра, ввода и редактирования документов. Это и является одной из причин, почему роль, предназначенная "для печати", может давать более широкий доступ.

Мы рассмотрим несколько подходов, которые помогут решить эту задачу.

1. Использование привилегированного режима для получения данных для печати

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

Как это работает?

  1. Мы изменяем код в процедурах формирования печатных форм.
  2. Перед обращением к данным физических лиц или регистру сведений, содержащему информацию о подписантах (например, РегистрСведений.ОтветственныеЛица), мы устанавливаем привилегированный режим.
  3. Получаем необходимые данные.
  4. После получения данных обязательно отключаем привилегированный режим.

Для активации и деактивации привилегированного режима используются функции:


УстановитьПривилегированныйРежим(Истина); // Включаем привилегированный режим
// Здесь получаем необходимые данные, например:
// ДанныеПодписанта = ОтветственныеЛица.ПолучитьОтветственноеЛицо(НазваниеДолжности, ДатаДокумента);
УстановитьПривилегированныйРежим(Ложь);  // Отключаем привилегированный режим

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

Минусом данного подхода является то, что нам придется изменить код во всех формах печати, где возникает эта проблема. Это может быть трудозатратно, особенно если таких форм много.

2. Создание "физлиц-клонов" или искусственных физических лиц для подписей

Это еще одно популярное решение, которое позволяет избежать проблем с RLS при формировании подписей в документах. Суть подхода заключается в следующем: для тех руководителей или ответственных лиц, чьи данные нужны для печати (например, директор, главный бухгалтер), но доступ к которым должен быть ограничен для большинства пользователей, мы создаем отдельные записи в справочнике "Физические лица". Эти записи будут своего рода "клонами" или "искусственными" физлицами.

Как это работает?

  1. Создаем "клон": Для каждого руководителя или подписанта, к которому применяется RLS, мы создаем вторую запись в справочнике "Физические лица". Например, если есть "Иванов Иван Иванович" (ограниченный RLS), мы создаем еще одного "Иванов Иван Иванович (для подписей)".
  2. Настраиваем доступ для клона: Для этого "клона" мы либо не применяем никаких ограничений доступа, либо включаем его в специальную группу доступа (например, "Ответственные лица для подписей"), к которой имеет доступ только очень ограниченный круг пользователей или система сама по себе.
  3. Используем клона в подписях: В регистрах сведений, которые хранят информацию об ответственных лицах (например, РегистрСведений.ОтветственныеЛица), и в настройках подписей документов, мы указываем именно эту "искусственную" запись физического лица.

Таким образом, когда система обращается к данным подписанта для печати, она видит "клона", который не имеет RLS-ограничений, и успешно получает необходимые данные (ФИО, должность). При этом основные записи физических лиц остаются под строгим контролем RLS.

Преимущества данного метода:

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

3. Создание собственных профилей групп доступа и групп физлиц

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

Как это работает?

  1. Группы физлиц: Мы можем использовать механизм "Группы физлиц". Этот механизм позволяет создавать определенные группы физических лиц (например, "Физлица Дирекции", "Физлица Отдела 1") и затем назначать конкретных физических лиц в эти группы. Далее, пользователям через их группы доступа предоставляется видимость только к тем "Группам физлиц", с которыми они должны работать. Это дает возможность напрямую ограничивать список видимых физических лиц.
  2. Пользовательские профили и роли: Мы создаем новые роли с минимальными необходимыми правами на чтение данных физических лиц, избегая включения ролей, которые дают полный или избыточный доступ. Например, вместо роли "Чтение данных физических лиц зарплата кадры (для печати руководителя в приказах при RLS)" мы можем создать свою роль, которая дает права только на чтение ФИО и должности для тех физических лиц, которые назначены в определенные "Группы физлиц" или указаны как подписанты в специальных регистрах.

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

4. Разработка специализированного справочника "Ответственные лица"

Некоторые компании предпочитают создавать собственный справочник или регистр сведений для управления подписантами, аналогично тому, как это реализовано в 1С:ERP.

Как это работает?

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

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

Дополнительные аспекты и рекомендации

Выбор конкретного решения зависит от сложности вашей системы, количества пользователей, специфики бизнес-процессов и требований к безопасности. Использование привилегированного режима быстрее в реализации, но требует осторожности. Создание "физлиц-клонов" и собственных групп доступа обеспечивает более гибкий и безопасный, хоть и более трудоемкий в настройке, подход. Разработка собственного справочника "Ответственные лица" — это наиболее кастомизированное, но и самое ресурсоемкое решение, подходящее для крупных организаций со сложной структурой управления.

← На главную