Ситуация, когда пользователь (даже с полными правами администратора) получает сообщение «Недостаточно прав для просмотра» при попытке открыть отчет по прямой ссылке, является довольно распространенной в практике администрирования 1С:Предприятие 8.3. Особенно часто это встречается в конфигурациях, построенных на базе Библиотеки стандартных подсистем (БСП), таких как «Зарплата и управление персоналом» (ЗУП), «ERP» или «Бухгалтерия предприятия». Техническое обслуживание и тестирование нескольких таких баз в автоматическом режиме выполняет программу Обновлятор 1С для обслуживания баз.
В этой статье мы подробно разберем, почему система выдает ошибку прав доступа там, где их, казалось бы, достаточно, и как корректно передавать ссылки на отчеты между пользователями и базами.
Прежде чем приступать к глубокому анализу настроек, нам необходимо точно выяснить, на какой именно объект ругается система. Ошибка прав доступа не всегда означает отсутствие прав на сам отчет. Система может блокировать доступ к вспомогательному объекту, через который происходит открытие. Для оперативной проверки прав и ролей пользователя на конкретные объекты можно использовать обработку для поиска прав доступа пользователей.
Разберем последовательность действий для локализации проблемы:
Как показывает практика, в подобных случаях ошибка часто возникает в общем модуле ВариантыОтчета. Если в журнале регистрации зафиксирован отказ при обращении к справочнику Справочник.ВариантыОтчетов, это верный признак того, что проблема кроется в самой ссылке, а не в правах пользователя на отчет «Исполнительные листы» или любой другой.
Рассмотрим механизм формирования ссылки в 1С. Когда мы нажимаем кнопку «Получить ссылку», программа генерирует строку вида:
e1cib/data/Справочник.ВариантыОтчетов?ref=...
Здесь кроется главная ловушка. Ссылка ведет не на отчет как объект метаданных (чертеж в конфигураторе), а на конкретную запись в справочнике «Варианты отчетов». Каждая запись в любой таблице 1С имеет свой уникальный идентификатор — GUID (или UUID).
Выясним причину возникновения ошибки в разных сценариях:
ВариантыОтчета может прервать выполнение с ошибкой прав.Проанализируем ситуацию, упомянутую в обсуждении. Ошибка возникает в строке 1364 модуля ВариантыОтчета. В типовых конфигурациях (ЗУП, ERP) этот участок кода отвечает за проверку прав доступа к конкретному варианту перед его программным открытием.
Программа выполняет примерно следующий алгоритм:
// Псевдокод логики проверки в БСП
Функция ПроверитьПраваНаВариант(СсылкаНаВариант)
Если СсылкаНаВариант.Пустая() Тогда
ВызватьИсключение "Недостаточно прав для просмотра";
КонецЕсли;
// Проверка, что вариант принадлежит текущему пользователю или общий
Если Не ВариантДоступенТекущемуПользователю(СсылкаНаВариант) Тогда
ВызватьИсключение "Недостаточно прав для просмотра";
КонецЕсли;
КонецФункции
Когда вы переходите по «чужой» ссылке из другой базы, метод НайтиПоСсылке() может вернуть пустую или битую ссылку, что на этапе программных проверок интерпретируется как отсутствие прав.
Чтобы избежать подобных проблем, разберем, какие существуют альтернативы передаче ссылок на элементы справочника.
1. Использование ссылок на объект метаданных
Если вам нужно, чтобы у пользователя просто открылась форма отчета (пустая, со стандартными настройками), ссылка должна указывать на отчет, а не на вариант. Такая ссылка выглядит так:
e1cib/app/Отчет.ИмяВашегоОтчета
Такая ссылка будет работать в любой базе с этой конфигурацией, так как имена метаданных (Отчет.ИсполнительныеЛисты) везде одинаковы.
2. Выгрузка и загрузка настроек (XML)
Если необходимо передать конкретные настройки (отборы, группировки), которые сделал один пользователь, другому пользователю в другую базу, используйте механизм сохранения настроек:
3. Синхронизация вариантов отчетов
Для программистов: если необходимо, чтобы навигационные ссылки работали в разных базах (например, в узлах РИБ), необходимо следить за тем, чтобы элементы справочника ВариантыОтчетов создавались с одинаковыми GUID. Это достигается либо средствами миграции данных, либо программным созданием через УстановитьСсылкуНового(). Для поиска примеров кода и работы с функциями библиотеки пригодится справочник по методам БСП.
// Пример программного создания элемента с фиксированным GUID
НовыйВариант = Справочники.ВариантыОтчетов.СоздатьЭлемент();
НужныйGUID = Новый УникальныйИдентификатор("здесь-ваш-uuid-из-другой-базы");
НоваяСсылка = Справочники.ВариантыОтчетов.ПолучитьСсылку(НужныйGUID);
НовыйВариант.УстановитьСсылкуНового(НоваяСсылка);
// Заполнение полей...
НовыйВариант.Записать();
Посмотрим на ситуацию шире. Если GUID совпадает, но ошибка сохраняется, проанализируем следующие моменты:
/ClearCache в строке запуска) или простое перезаполнение настроек в справочнике через консоль администратора.Ошибка «Недостаточно прав для просмотра» при переходе по ссылке в 1С чаще всего является следствием того, что ссылка указывает на объект (элемент справочника), которого физически нет в данной информационной базе. Система безопасности 1С защищает данные и вместо сообщения «Объект не найден» выдает ошибку прав доступа.
Для надежной работы всегда проверяйте, в какой базе была получена ссылка, и при необходимости передавайте настройки отчета через файлы XML или делитесь вариантом отчета внутри одной базы через настройки прав доступа самого варианта.