В практике администратора или программиста 1С нередко возникают задачи, связанные с резким ограничением прав доступа по требованию руководства. Одной из таких специфических задач является полное отключение всех отчетов для рядовых пользователей в конфигурациях на «толстом клиенте», таких как 1С:Управление торговлей 10.3. Проблема осложняется тем, что объектов метаданных (отчетов) в системе сотни, и снимать галочки в ролях вручную — крайне трудозатратный процесс. Рассмотрим эффективные способы решения этой задачи «малой кровью».
Если задача стоит максимально жестко — пресечь открытие отчетов даже в том случае, если права на них есть в разных ролях, можно воспользоваться программным методом. Вместо того чтобы открывать каждый отчет в конфигураторе, мы выгрузим тексты модулей всех объектов, внесем в них изменения и загрузим обратно.
Проанализируем последовательность действий. Платформа 1С позволяет работать с конфигурацией через пакетный режим командной строки. Нам понадобятся параметры /DumpConfigFiles и /LoadConfigFiles с ключом -Module.
C:\ConfModules).
"C:\Program Files\1cv8\common\1cv8.exe" DESIGNER /F "ПутьКВашейБазе" /DumpConfigFiles "C:\ConfModules" -Module /Visible
После выполнения этой команды в папке появятся текстовые файлы всех модулей конфигурации. Теперь мы можем воспользоваться любым текстовым редактором, поддерживающим поиск и замену во всех файлах (например, VS Code или Notepad++), чтобы добавить в начало модулей форм отчетов проверку прав.
Разберем пример кода, который нужно вставить в процедуру ПриОткрытии (если отчет имеет форму):
Процедура ПриОткрытии()
// Проверяем, является ли пользователь тем самым «избранным»
ИмяПользователя = ИмяПользователя();
Если ИмяПользователя <> "ИмяДиректора" Тогда
Предупреждение("Доступ к отчетам ограничен руководством.");
Отказ = Истина;
Возврат;
КонецЕсли;
КонецПроцедуры
После внесения правок модули нужно загрузить обратно и обновить конфигурацию базы данных:
"C:\Program Files\1cv8\common\1cv8.exe" DESIGNER /F "ПутьКВашейБазе" /LoadConfigFiles "C:\ConfModules" -Module /UpdateDBCfg /Visible
Важный нюанс: этот метод эффективен только для отчетов, имеющих формы. Если отчет строится исключительно на схеме компоновки данных (СКД) без программного кода в модуле формы, этот способ может не сработать.
Более правильным с точки зрения архитектуры 1С является ограничение прав на уровне метаданных. Чтобы не снимать права вручную, воспользуемся выгрузкой конфигурации в файлы XML (доступно в версиях платформы 8.3).
Рассмотрим этот алгоритм по шагам:
DumpConfigurationToFiles.Roles).Read (Чтение) для объектов Report (Отчет) и установить значение в false.Пример регулярного выражения для поиска в XML файла роли:
<Item>
<Name>Report.*</Name>
<Right>
<Name>Read</Name>
<Value>true</Value>
Меняем Value на false. После массовой замены загружаем конфигурацию обратно через LoadConfigurationToFiles. Это позволит мгновенно «обесточить» отчеты во всех ролях сразу.
В «толстом клиенте» (УТ 10.3) доступность отчетов для пользователя часто определяется назначенным ему интерфейсом. Если мы хотим, чтобы отчеты просто исчезли из глаз, но технически права остались (например, для программных вызовов), мы можем пойти по пути настройки интерфейсов.
Выясним, как это сделать быстрее:
Этот метод считается «косметическим», так как опытный пользователь сможет запустить отчет через меню «Операции — Отчеты», если у него остались права на объект.
В типовой конфигурации 1С:Управление торговлей 10.3 подавляющее большинство отчетов построено на базе механизма УниверсальныйОтчет. Это дает нам отличную возможность ограничить доступ в одной точке.
Проанализируем ситуацию: если мы внесем изменения в модуль объекта или модуль формы самого Универсального отчета, это автоматически заблокирует все отчеты, которые его используют.
Найдем в конфигураторе отчет УниверсальныйОтчет, откроем его модуль объекта и добавим проверку в процедуру инициализации:
// В начале основной процедуры формирования или инициализации
Если НЕ РольДоступна("ПолныеПрава") Тогда
ВызватьИсключение "Доступ к формированию отчетов запрещен администратором.";
КонецЕсли;
Почему это удобно? Вам не нужно править сотни объектов. Достаточно изменить один базовый отчет, и 90% аналитики в базе станет недоступно для всех, у кого нет роли Полные права.
При реализации любого из вышеперечисленных методов следует помнить о ключевых правилах работы системы прав 1С:
Отказ = Истина такие функции могут перестать работать.Подводя итог, наиболее эффективным и «чистым» методом для УТ 10.3 является комбинация снятия прав в ролях через XML-редактирование и внедрение проверки в Универсальный отчет. Это гарантирует, что пользователи не смогут обойти запрет ни через интерфейс, ни через прямые ссылки на объекты.