Ограничение видимости конфиденциальных данных по заработной плате — это одна из наиболее частых задач, которую ставят перед техническими специалистами владельцы бизнеса и главные бухгалтеры. В программе 1С:Бухгалтерия предприятия 3.0 (БП 3.0) за детальный учет расчетов по оплате труда отвечает счет 70 «Расчеты с персоналом по оплате труда». Из-за специфики платформы 1С и принципа двойной записи просто так «скрыть» этот счет для отдельных пользователей стандартными галочками в пользовательском интерфейсе невозможно.
В этой статье мы подробно проанализируем, почему типовой механизм ограничения прав на уровне записей (RLS) не подходит для решения этой задачи в лоб, выясним причины возникающих технических ошибок и разберем работающие альтернативные методики решения этой проблемы.
Начнем с анализа наиболее очевидной идеи, которая приходит в голову многим администраторам и программистам 1С: настроить RLS (Row-Level Security) на таблицы регистра бухгалтерии или на план счетов. Давайте разберем по шагам, почему этот подход технически некорректен и к каким критическим последствиям он может привести:
Организация. Если мы попытаемся наложить ограничение непосредственно на счет учета (например, запретим чтение записей регистра, где счет равен 70), то при формировании общих отчетов (таких как общая Оборотно-сальдовая ведомость) у пользователя «поедет» баланс. Обороты по дебету перестанут сходиться с оборотами по кредиту, поскольку часть проводок будет скрыта.ФизическиеЛица) пользователь сможет легко догадаться, какие именно операции проводятся в системе.Посмотрим на практические альтернативные решения, которые позволяют обойти эти ограничения без изменения типовой архитектуры программы.
Самый надежный, методологически верный и безопасный способ скрыть персональные данные по зарплате — это вынос всех расчетов во внешнюю программу 1С:Зарплата и управление персоналом 3.1 (ЗУП), а в БП 3.0 выгрузка данных в свернутом виде.
Разберем по шагам, как реализуется этот подход:
Отражение зарплаты в бухучете.Важный подводный камень: Обратите внимание, что даже при сводной выгрузке персональные данные сотрудников могут «утекать» через смежные механизмы. Например, при расчете удержаний по исполнительным листам (счет 76.41) или по прочим операциям с персоналом (счет 73) программе все равно требуются конкретные контрагенты-физлица для корректного ведения взаиморасчетов. Чтобы решить эту проблему, техническим специалистам приходится дорабатывать правила обмена, принудительно заменяя реальных сотрудников на технических контрагентов прямо в процессе синхронизации.
Если разделение баз невозможно, а доступ нужно ограничить внутри одной базы БП 3.0 (например, дать доступ бухгалтеру по ОС, но скрыть от него зарплату), можно применить программный метод ограничения доступа к формам.
Рассмотрим подробнее этот алгоритм:
РегистрБухгалтерии.Хозрасчетный.Современные стандарты разработки в среде 1С:Предприятие 8.3 позволяют решить эту задачу элегантно и без снятия конфигурации с поддержки — с помощью механизма расширений. Мы можем программно перехватить компоновку стандартных отчетов.
Проанализируем пример кода расширения, который можно внедрить в процедуру формирования отчета, чтобы заблокировать вывод данных по счету 70 для неавторизованных пользователей:
// Пример программного контроля счетов в СКД стандартного отчета
&После("ПриКомпоновкеРезультата")
Процедура Ист_ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
// Проверяем наличие у текущего пользователя специализированной роли доступа к зарплате
Если Не РольДоступна("ПолныеПрава") И Не РольДоступна("Ист_ДоступЗарплатаБухгалтерия") Тогда
// Анализируем структуру настроек компоновщика данных отчета
ПараметрыОтбора = КомпоновщикНастроек.Настройки.Отбор.Элементы;
Для Каждого ЭлементОтбора Из ПараметрыОтбора Цикл
Если ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Счет") Тогда
// Если пользователь пытается сделать отбор по счету 70
Если ЭлементОтбора.ПравоеЗначение = ПланыСчетов.Хозрасчетный.РасчетыСПерсоналомПоОплатеТруда Тогда
ВызватьИсключение "У вас недостаточно прав для формирования отчета с использованием счета 70!";
КонецЕсли;
КонецЕсли;
КонецЦикла;
// Дополнительно блокируем вывод группировок по субконто "РаботникиОрганизаций"
Группировки = КомпоновщикНастроек.Настройки.Структура;
Для Каждого Группировка Из Группировки Цикл
Если ТипЗнч(Группировка) = Тип("ГруппировкаПолейКомпоновкиДанных") Тогда
Для Каждого ПолеГруппировки Из Группировка.ПоляГруппировки.Элементы Цикл
Если ПолеГруппировки.Поле = Новый ПолеКомпоновкиДанных("Субконто1") Тогда
// Проверяем тип субконто1 у счета 70
ВызватьИсключение "Доступ к аналитике сотрудников ограничен!";
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Данный метод позволяет точечно перехватить построение отчетов типа ОСВ по счету, Карточка счета и Анализ счета. Система выдаст предупреждение и заблокирует вывод конфиденциальной информации на экран.
Если для сверки балансовых показателей бухгалтеру по ОС или другому смежному сотруднику всё же необходимо видеть общие обороты по счету 70, но категорически нельзя показывать конкретные фамилии сотрудников и их индивидуальные начисления, применяется метод деперсонализации прав.
Алгоритм настройки выглядит следующим образом:
ФизическиеЛица и Сотрудники.Важное ограничение: Применяя этот метод, учитывайте, что ограничение доступа к справочнику сотрудников может заблокировать корректную работу пользователя в других документах. Например, там, где эти сотрудники выступают в качестве ответственных лиц, авторов документов, подотчетных лиц или материально-ответственных лиц (МОЛ) на складах. Поэтому данный способ требует детального предварительного тестирования на копии базы данных.
Ограничить доступ к счету 70 в БП 3.0 стандартными методами платформы «в один клик» невозможно из-за базовых принципов ведения учета. Наиболее стабильным и архитектурно правильным решением остается ведение расчетов в ЗУП с выгрузкой сводных показателей. Если этот вариант не подходит, следует смотреть в сторону разработки расширения конфигурации для динамической фильтрации отчетов или использовать метод обезличивания справочника физлиц.