При обновлении типовых конфигураций, таких как 1С:Бухгалтерия предприятия 3.0, пользователи часто сталкиваются с ситуацией, когда привычные дополнительные отчеты или обработки перестают работать. Одной из наиболее распространенных проблем является ошибка ограничения прав доступа к объектам, которые получили префикс Удалить. В этой статье мы подробно разберем, почему возникает ошибка доступа к таблице Справочник.УдалитьОценочныеОбязательства, и проанализируем различные способы её устранения, сохранив конфигурацию на поддержке.
Прежде чем приступать к исправлению, разберем механику процесса. В релизах ветки 3.0.66.х компания 1С проводила масштабную реструктуризацию механизмов учета оценочных обязательств и резервов отпусков. В рамках этого процесса старые объекты метаданных (справочники, регистры) помечаются префиксом Удалить. Согласно стандартам разработки 1С, такие объекты исключаются из типовых ролей, предназначенных для обычных пользователей (например, ГлавныйБухгалтер или Бухгалтер), так как предполагается, что новые данные в них записываться не будут.
Однако внешние отчеты или старые механизмы конфигурации могут продолжать обращаться к этим таблицам для получения исторических данных. Поскольку у пользователя нет прав на чтение этой «удаляемой» таблицы, система блокирует выполнение кода и выдает ошибку. При этом под пользователем с полными правами (Администратор) всё работает корректно, так как административные роли игнорируют ограничения прав доступа.
Рассмотрим самый быстрый способ исправления, если ошибка возникает внутри программного кода внешнего отчета или обработки. Если отчет пытается собрать данные из нескольких источников, один из которых — заблокированный справочник, мы можем модифицировать текст запроса.
Проанализируем работу механизма РАЗРЕШЕННЫЕ. Добавление этого слова в тело запроса указывает платформе 1С, что из базы данных нужно извлечь только те записи, на которые у текущего пользователя есть права. Если прав на таблицу нет совсем, запрос просто вернет пустой результат по этой таблице вместо вызова исключения и остановки работы.
Посмотрим на пример модификации кода:
ТекстЗапроса = "ВЫБРАТЬ
| ОценочныеОбязательства.Ссылка КАК Ссылка,
| ОценочныеОбязательства.Наименование КАК Наименование
|ИЗ
| Справочник.УдалитьОценочныеОбязательства КАК ОценочныеОбязательства";
Чтобы избежать ошибки «Недостаточно прав», изменим запрос следующим образом:
ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ОценочныеОбязательства.Ссылка КАК Ссылка,
| ОценочныеОбязательства.Наименование КАК Наименование
|ИЗ
| Справочник.УдалитьОценочныеОбязательства КАК ОценочныеОбязательства";
Важный нюанс: этот метод эффективен только в том случае, если данные из «удаленного» справочника не являются критически важными для итоговых показателей отчета. Если отчет обязан вывести данные именно из этой таблицы, использование РАЗРЕШЕННЫЕ просто скроет ошибку, но результат отчета будет неверным (пустым).
Если руководство не разрешает снимать конфигурацию с поддержки («раззамочивать» объекты), оптимальным решением будет использование механизма расширений. Это позволит нам добавить необходимые права, не меняя основную конфигурацию.
Разберем этот процесс по шагам:
Справочник.УдалитьОценочныеОбязательства, нажмем правую кнопку мыши и выберем Добавить в расширение.ЧтениеУдаленныхОбъектов.После этого нам необходимо назначить эту роль пользователю. Поскольку роль находится в расширении, она станет доступна в режиме «1С:Предприятие» в справочнике Профили групп доступа. Создадим новый профиль, включим в него нашу новую роль из расширения и добавим пользователя в группу доступа с этим профилем.
Прежде чем программировать, стоит проверить, нет ли в системе уже существующей роли, дающей нужные права. В конфигурациях на базе БСП (Библиотеки стандартных подсистем) часто присутствуют технические роли для просмотра архивных данных.
Проанализируем ситуацию в режиме конфигуратора:
Справочник.УдалитьОценочныеОбязательства.ПолныеПрава) установлены права на Чтение.Если такая роль найдена (например, какая-нибудь техническая роль типа ЧтениеНизкоуровневыхДанных), нам достаточно в режиме «Предприятие» зайти в Администрирование — Настройки пользователей и прав — Профили групп доступа, найти профиль Главный бухгалтер, скопировать его и добавить в список разрешенных ролей найденную техническую роль. Затем назначим этот новый профиль пользователю.
Если конфигурация содержит сотни ролей, искать нужную вручную крайне трудозатратно. Рассмотрим возможность использования специализированных обработок. Существуют инструменты (например, доступные на порталах сообщества 1С), которые позволяют выбрать конкретный объект метаданных и получить список всех ролей, в которых этот объект задействован с определенными правами.
Это значительно ускоряет процесс диагностики, особенно когда ошибка прав возникает не на одном объекте, а на целой цепочке связанных регистров и справочников.
Подводя итог, можно сказать, что наиболее «чистым» и правильным с точки зрения архитектуры решением является создание расширения (Способ 2). Это гарантирует, что при следующем обновлении типовой конфигурации ваши изменения не затрутся, а отчеты продолжат работать корректно.
Использование ключевого слова РАЗРЕШЕННЫЕ в запросах (Способ 1) подходит для быстрого «затыкания дыр» во внешних отчетах, когда нет времени на манипуляции с ролями и группами доступа. Однако всегда помните о контроле целостности данных: отсутствие прав на чтение не должно приводить к искажению финансовой отчетности.
Также рекомендуется проверить наличие обновленных версий самих дополнительных отчетов. Зачастую разработчики этих отчетов выпускают патчи сразу после выхода новых релизов 1С, учитывая изменения в именовании объектов метаданных.