При организации работы в 1С:Бухгалтерия 7.7 ред. 4.5 нередко возникает задача предоставить определенным сотрудникам (аудиторам, стажерам, увольняющимся специалистам) доступ к информационной базе исключительно в режиме чтения. В современных конфигурациях на платформе 1С:Предприятие 8 для этого предусмотрены развитые профили групп доступа и дата запрета изменения данных. В платформе 1С 7.7 архитектура разграничения прав устроена иначе. Разберем основные способы и технические нюансы реализации режима «Только просмотр».
Наиболее надежный и рекомендуемый способ на уровне метаданных — создание отдельного набора прав, в котором для всех объектов информационной базы запрещены операции изменения и добавления.
Разберем по шагам порядок настройки прав:
Просмотр или ТолькоЧтение.Рассмотрим важную техническую особенность: при входе и выходе из программы типовой код конфигурации в процедурах ПриНачалеРаботыСистемы и ПриЗавершенииРаботыСистемы выполняет служебные действия — обращение к константам, проверку временных таблиц или фиксацию параметров сеанса. Если набор прав полностью лишен доступа к чтению служебных объектов, платформа выдаст предупреждение «Недостаточно прав». Чтобы избежать подобных сообщений, убедимся, что для набора прав открыт доступ на чтение системных констант и разрешен общий запуск системы.
В типовой конфигурации «Бухгалтерия 7.7» присутствует штатный механизм блокировки прошлых периодов с помощью константы ДатаЗапретаРедактирования. Если установить в этой константе дату из будущего (например, 31.12.2099), то документы станут недоступны для проведения и редактирования.
Однако проанализируем ограничения данного метода:
Если требуется точечно ограничить действия пользователя без полной переработки наборов прав метаданных, применяют программные методы в модулях форм.
Посмотрим на пример установки формы в режим просмотра при открытии. В процедуре ПриОткрытии() модуля формы документа или справочника проверяем текущий набор прав пользователя с помощью функции НазваниеНабораПрав():
Процедура ПриОткрытии()
Если НазваниеНабораПрав() = "Просмотр" Тогда
Форма.ТолькоПросмотр(1);
КонецЕсли;
КонецПроцедуры
Метод Форма.ТолькоПросмотр(1) делает все элементы диалога недоступными для изменения и отключает возможность сохранения данных через стандартные элементы управления.
Для гарантированной защиты от записи изменений в предопределенной процедуре ПриЗаписи() формы или модуля объекта можно добавить дополнительный контроль:
Процедура ПриЗаписи()
Если НазваниеНабораПрав() = "Просмотр" Тогда
Предупреждение("У вас нет прав на сохранение изменений!");
СтатусВозврата(0);
Возврат;
КонецЕсли;
КонецПроцедуры
Выясним распространенную ошибку: попытку сделать базу «только для чтения» путем установки атрибута Read Only или отзыва прав на запись в папку с базой данных в Windows.
Платформа 1С:Предприятие 7.7 при запуске обязательно создает и модифицирует служебные файлы блокировок (*.LCK), временные файлы и файлы индексов таблиц (*.CDX). Если у пользователя операционной системы нет прав на запись в каталог базы, платформа завершит работу с критической ошибкой еще на этапе запуска. Любое ограничение прав должно выполняться исключительно средствами платформы 1С.
Если информационная база требуется только для архивного просмотра или проверки контролирующими органами, эффективным решением является создание отдельной архивной копии базы в изолированном каталоге. Для массовой блокировки форм без модификации каждого отдельного объекта в конфигураторе разработчики также используют внешние компоненты (например, FormEx или 1C++), которые позволяют глобально перехватывать открытие любых экранных форм и централизованно активировать режим ТолькоПросмотр(1).