При внедрении и сопровождении крупных корпоративных систем на базе 1С:ERP Управление предприятием часто возникает задача по обеспечению конфиденциальности данных. Один из типичных вопросов, который встает перед архитекторами и разработчиками: как скрыть от определенных пользователей операции по конкретным счетам учета (например, по банковским счетам, учету заработной платы или финансовому результату)?
В этой статье мы подробно разберем, почему стандартный механизм ограничения доступа на уровне записей (RLS — Record Level Security) не предназначен для работы напрямую со счетами плана счетов, к каким критическим последствиям может привести попытка его принудительной настройки, и проанализируем наиболее эффективные альтернативные варианты решения этой задачи.
---
Начнем с анализа технических ограничений платформы «1С:Предприятие 8». Попытка наложить ограничения RLS непосредственно на счета плана счетов (будь то регламентированный или международный учет) сталкивается со следующими фундаментальными проблемами:
Хозрасчетный или Международный) платформа позволяет эффективно накладывать ограничения доступа только по балансовым измерениям. К ним относятся Организация и Подразделение. Накладывать сложные условия RLS на реквизиты проводки (такие как СчетДт и СчетКт) на уровне платформы крайне затруднительно и неэффективно с точки зрения генерации SQL-запросов.<Объект не найден> или пустые строки, что вызовет панику и сделает работу с базой невозможной.Таким образом, попытка «в лоб» ограничить доступ к счетам через переопределение ролей в Конфигураторе — это тупиковый путь, который гарантированно приведет к нестабильной работе информационной системы.
---
Выяснив технические ограничения, рассмотрим архитектурно верные подходы, которые позволяют решить задачу сокрытия конфиденциальных данных в 1С:ERP без ущерба для производительности и целостности системы.
Это самый рекомендуемый и гибкий способ разделения финансовых данных в 1С:ERP. Направление деятельности (справочник НаправленияДеятельности) является сквозным аналитическим разрезом системы.
Разберем этот вариант по шагам:
Часто задача скрыть счета возникает тогда, когда нужно скрыть конкретные объекты учета, например, определенные банковские счета компании. Вместо того чтобы закрывать счета бухгалтерского учета (например, 51 или 52), правильнее закрыть доступ к объектам, которые генерируют эти проводки.
Проанализируем этот подход:
Если ваша цель — сделать так, чтобы определенные счета «не мозолили глаза» рядовым сотрудникам в Оборотно-сальдовой ведомости и других отчетах, но при этом жесткая защита данных на уровне СУБД не требуется, можно перенести логику ограничения с уровня базы данных на уровень интерфейса.
Рассмотрим, как это можно реализовать с помощью расширения конфигурации:
Посмотрим на пример шаблона кода в расширении для модификации схемы компоновки данных в модуле объекта отчета:
Процедура ПередЗаполнениемПанелиБыстрыхНастроек(ПараметрыОтчета) Экспорт
// Проверяем, есть ли у пользователя роль доступа к секретным счетам
Если Не РольДоступна("ДоступКСекретнымСчетам") Тогда
// Находим в настройках компоновщика отбор по счету
СчетОтбора = ПланыСчетов.Хозрасчетный.НайтиПоКоду("91.09"); // Пример закрываемого счета
// Устанавливаем принудительный отбор "Не равно" для исключения счета из ОСВ
НовыйОтбор = Отчет.КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
НовыйОтбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Счет");
НовыйОтбор.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
НовыйОтбор.ПравоеЗначение = СчетОтбора;
НовыйОтбор.Использование = Истина;
НовыйОтбор.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
КонецЕсли;
КонецПроцедуры
Важное примечание: Этот метод не защищает данные на 100%. Продвинутый пользователь, имеющий доступ к универсальному отчету или консоли запросов, теоретически сможет добраться до этих проводок. Однако для 95% рядовых сотрудников этот барьер будет непреодолим, и задача визуального сокрытия данных будет решена без потери производительности базы данных.
Этот подход является классическим для учета заработной платы (счет 70). Детальный расчет зарплаты ведут в специализированной программе 1С:Зарплата и Управление Персоналом, доступ к которой имеет строго ограниченный круг лиц. В основную базу 1С:ERP передаются только свернутые проводки (без аналитики по сотрудникам), где субконто Сотрудники на 70 счете либо отключено, либо не заполняется.
Аналогично можно поступить и со специфическими финансовыми операциями:
---
Пытаться настроить ограничения RLS непосредственно на счета плана счетов в 1С:ERP — это архитектурная ошибка, которая приведет к сбоям в закрытии месяца, искажению отчетов и критическому замедлению работы системы.
Для решения этой задачи мы рекомендуем использовать следующие лучшие практики: