В процессе работы с конфигурацией «1С:Управление производственным предприятием 1.3» часто возникают ситуации, когда необходимо тонко настроить права доступа. Типичный кейс: руководству компании требуется предоставить определенному сотруднику (или внешнему аудитору/проверяющему) доступ к обобщенным показателям баланса или других регламентированных отчетов, но полностью закрыть возможность детального анализа «вглубь». То есть пользователь должен видеть финальные цифры в ячейках, но при двойном клике по строке отчета расшифровка открываться не должна.
В этой статье мы подробно разберем, как решить эту задачу с минимальным вмешательством в типовую конфигурацию, рассмотрим архитектурные особенности механизма расшифровки и организуем комплексную защиту данных.
Для начала разберем, как устроен механизм расшифровки в регламентированных отчетах 1С. Каждый отчет (например, бухгалтерский баланс) представляет собой сложную обработку. При автоматическом заполнении система генерирует ТабличныйДокумент, в ячейки которого программно записываются не только значения, но и параметры расшифровки.
Когда пользователь совершает двойной клик по ячейке, платформа генерирует событие ОбработкаРасшифровки для поля табличного документа. Попытка переписывать этот обработчик в каждом отчете — это тупиковый путь, который приведет к колоссальным затратам времени при обновлениях конфигурации. Вместо этого проанализируем путь вызова: в типовых решениях управление из локального обработчика формы передается в общий клиентский модуль. Чаще всего за открытие отвечает процедура ОткрытьРасшифровкуОтчета в общем модуле РегламентированнаяОтчетностьКлиент.
Таким образом, нам достаточно перехватить выполнение именно в этой общей точке, чтобы ограничение заработало централизованно для абсолютно всех регламентированных отчетов базы данных.
Если ваша конфигурация уже находится в режиме возможности изменения (но остается на поддержке), мы можем внедрить проверку роли непосредственно в общий модуль. Обратите внимание на замечание из обсуждения: включение возможности изменения — это не «снятие с поддержки». Конфигурация поставщика остается неизменной, и вы по-прежнему можете обновлять систему.
Выясним процедуру, которую нужно доработать. В общем модуле РегламентированнаяОтчетностьКлиент найдем процедуру, отвечающую за расшифровку. Добавим в её начало проверку доступности специализированной роли. Сначала нам потребуется создать новую роль в конфигураторе, например, ЗапретРасшифровкиРегламентированнойОтчетности, или наоборот использовать проверку на отсутствие роли ПолныеПрава.
Рассмотрим пример кода, который внедряется в начало процедуры:
Процедура ОткрытьРасшифровкуОтчета(ПараметрыРасшифровки, СтандартнаяОбработка) Экспорт
// Проверяем доступность роли. Если у пользователя нет полных прав
// или назначена специальная ограничивающая роль, прерываем процесс.
Если НЕ РольДоступна("ПолныеПрава") Тогда
СтандартнаяОбработка = Ложь;
ПоказатьПредупреждение(, "У вас нет прав на просмотр детальной расшифровки показателей отчета.");
Возврат;
КонецЕсли;
// Далее идет типовой код системы...
КонецПроцедуры
Этот простой шаг мгновенно заблокирует детальный просмотр для всех регламентированных отчетов у пользователей без административных прав.
Если база данных работает под управлением платформы «1С:Предприятие 8.3» (даже если сама конфигурация УПП 1.3 запущена в режиме обычного приложения), лучшим решением будет использование механизма Расширения конфигурации. Это позволит избежать изменения основной конфигурации, сохранив её в полностью типовом виде.
Разберем этот процесс по шагам:
РегламентированнаяОтчетностьКлиент.&Перед для процедуры ОткрытьРасшифровкуОтчета.Посмотрим на пример реализации такого перехватчика в расширении:
&Перед("ОткрытьРасшифровкуОтчета")
Процедура Расш_ОткрытьРасшифровкуОтчета(ПараметрыРасшифровки, СтандартнаяОбработка)
// Проверяем роль текущего пользователя
Если РольДоступна("ОграничениеПросмотраДетализации") Тогда
СтандартнаяОбработка = Ложь;
ВызватьИсключение "Доступ к расшифровке регламентированных отчетов ограничен администратором.";
КонецЕсли;
КонецПроцедуры
Использование свойства СтандартнаяОбработка = Ложь предотвращает дальнейшее выполнение оригинального кода платформы, аккуратно прерывая операцию без аварийного завершения работы программы.
Блокировка кнопки или двойного клика мыши на форме отчета — это ограничение исключительно на уровне интерфейса (UI). Опытный пользователь или проверяющий легко сможет обойти этот запрет, если у него останутся права на чтение первичных данных. Проанализируем критически важные уязвимости, которые необходимо закрыть параллельно с отключением расшифровки:
Если у проверяющего сотрудника открыт доступ к Оборотно-сальдовой ведомости (ОСВ), Карточке счета или Анализу счета, то запрет расшифровки в балансе теряет смысл. Пользователь просто откроет параллельно ОСВ по интересующему счету (например, 60 или 62) и увидит всю необходимую конкретику. Для такого пользователя необходимо полностью отключить права на запуск стандартных отчетов.
Расшифровка регламентированной отчетности строится путем выполнения запросов к базе данных, главным образом к регистру РегистрБухгалтерии.Хозрасчетный. Нам необходимо убедиться, что у пользователя в его ролях отсутствует право на прямое чтение этого регистра. Если права отобраны, то даже при попытке программного обхода система выдаст стандартную ошибку платформы о нарушении прав доступа.
Пользователь может попытаться сохранить сформированный баланс во внешний файл (например, в формате Excel), чтобы открыть его на другом компьютере и попытаться извлечь скрытые свойства или просто передать данные третьим лицам. Обязательно проверьте настройки роли этого пользователя: у него должно быть отключено право ВыводРеестровИОтчетов (или системное право Вывод), без которого сохранение табличных документов на диск и копирование ячеек в буфер обмена станет невозможным.
Резюмируя: Наиболее эффективный подход — это создание специализированной роли «ТолькоПросмотрСводныхДанных». У пользователя с этой ролью забираются права на стандартную бухгалтерию, регистры и вывод файлов, а с помощью расширения конфигурации блокируется вызов процедуры ОткрытьРасшифровкуОтчета. Такой комплекс мер гарантирует полную безопасность конфиденциальных данных вашей организации.