В крупных организациях часто возникает специфическая задача: необходимо предоставить пользователю (например, главному бухгалтеру, аудитору или техническому специалисту) максимально широкие права в системе 1С:ERP 2.4, но при этом полностью исключить его доступ к персональным данным сотрудников и суммам их заработных плат. Основная сложность заключается в том, что в бухгалтерском учете используется принцип двойной записи, и информация о 70 счете ("Расчеты с персоналом по оплате труда") может "всплывать" в самых разных отчетах и проводках.
Рассмотрим подробнее, почему типовая настройка ролей не всегда решает эту задачу, и разберем по шагам эффективные методы блокировки информации по 70 счету — от организационных до программных.
Если мы просто создадим профиль групп доступа и исключим из него роли, связанные с подсистемой "Зарплата", пользователь перестанет видеть специализированные документы (Начисление зарплаты, Ведомости). Однако, если у пользователя остаются права на просмотр Регистра бухгалтерии "Хозрасчетный" и стандартных бухгалтерских отчетов, он все равно сможет увидеть суммы выплат через:
Проанализируем ситуацию: бухгалтер, работающий с затратами производства, видя проводку Дт 20 - Кт 70, фактически видит фонд оплаты труда цеха. Если же в системе включена детализация по сотрудникам, то конфиденциальность полностью теряется.
Самый надежный способ скрыть зарплату в 1С:ERP — это сделать так, чтобы детальной информации по сотрудникам в базе просто не существовало. Выясним, как это реализовать.
Если учет зарплаты ведется во внешней программе (например, 1С:ЗУП 3.1), при настройке синхронизации данных можно выбрать вариант выгрузки "Сводно по сотрудникам". Для первоначального выделения учета в отдельную базу предварительно выполняется перенос кадровых и расчётных данных ERP 2 в ЗУП 3. Разберем преимущества этого подхода:
Если же учет ведется непосредственно в ERP, можно изменить настройки учетной политики и отключить ведение аналитики по сотрудникам на счете 70 в плане счетов. Однако это может затруднить работу казначейства при формировании ведомостей на выплату, поэтому внешняя синхронизация с ЗУП в режиме "Сводно" является эталоном безопасности.
Если архитектурное разделение невозможно и данные по сотрудникам должны быть в базе, мы можем прибегнуть к программному ограничению. Рассмотрим вариант создания расширения конфигурации, которое будет перехватывать формирование отчетов. Современные отчеты в 1С:ERP построены на базе Системы компоновки данных (СКД) и используют механизмы Библиотеки стандартных подсистем (БСП).
Мы можем программно добавлять отбор по счету, если у текущего пользователя нет специальной роли-допуска. Проанализируем пример кода, который можно разместить в расширении для перехвата компоновки:
// В обработчике события ПриКомпоновкеРезультата (или через общие модули БСП)
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
// Проверяем наличие роли, разрешающей просмотр ЗП
Если НЕ РольДоступна("ПолныйДоступКЗарплате") Тогда
// Получаем настройки компоновки
Настройки = КомпоновщикНастроек.Настройки;
// Ищем существующий отбор или создаем новый
ЭлементОтбора = Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Счет");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВИерархии;
ЭлементОтбора.ПравоеЗначение = ПланыСчетов.Хозрасчетный.РасчетыСПерсоналомПоОплатеТруда; // 70 счет
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
КонецЕсли;
КонецПроцедуры
Этот метод позволяет "маскировать" данные. Даже если пользователь попытается сформировать ОСВ по 70 счету, система принудительно применит фильтр "Счет НЕ в иерархии 70", и отчет выйдет пустым.
Механизм RLS (Record Level Security) позволяет ограничить доступ к конкретным строкам таблиц базы данных. На первый взгляд, это кажется идеальным решением: запретить чтение записей регистра бухгалтерии, где Счет = 70. Однако посмотрим на ситуацию с точки зрения производительности.
Регистр "Хозрасчетный" — один из самых высоконагруженных в 1С:ERP. Добавление условий RLS на этот регистр приведет к тому, что каждый бухгалтерский отчет у каждого пользователя будет работать значительно медленнее, так как серверу БД придется постоянно проверять условия прав для миллионов проводок. Поэтому использование RLS для 70 счета рекомендуется только в крайних случаях и только при небольшом объеме данных.
Посмотрим на проблему шире. Ограничение одного лишь 70 счета не гарантирует полной конфиденциальности. Выясним, через какие еще объекты данные могут стать доступными:
Списание с расчетного счета или Расходный кассовый ордер часто в назначении платежа указывается фамилия сотрудника. Необходимо также настраивать права на чтение этих документов или скрывать назначение платежа.Взаиморасчеты с сотрудниками, Начисления по работам). Если у пользователя есть право "Просмотр" или "Вывод" для этих регистров (например, через консоль отчетов), он увидит данные в обход бухгалтерских отчетов.Для реализации роли "Администратор без доступа к ЗП" мы рекомендуем комбинированный подход:
Такой подход обеспечит баланс между удобством работы специалиста и сохранностью коммерческой тайны предприятия.