При обновлении нетиповых (измененных или кастомизированных) конфигураций «1С:Бухгалтерия предприятия» в режиме «1С:Предприятие» пользователи и разработчики часто сталкиваются с внезапным аварийным завершением процесса. Обновление доходит до определенного этапа (обычно от 8% до 15%), после чего система аварийно завершает работу, выдавая ошибку: «Метод объекта не обнаружен (ПриЗаполненииОграниченияДоступа)».
В этой статье мы подробно разберем, почему возникает данная ошибка, как устроена подсистема безопасности в современных версиях Библиотеки стандартных подсистем (БСП) и рассмотрим несколько практических методов решения этой проблемы — от быстрого временного «костыля» до полноценного исправления архитектуры метаданных вашей базы данных.
Для того чтобы понять природу ошибки, обратимся к архитектуре платформы «1С:Предприятие» и входящих в состав конфигураций библиотек. Начиная с определенных релизов (в частности, в линейке обновлений «1С:Бухгалтерии» 3.0.73 и выше), фирма «1С» осуществила глобальный переход на так называемый производительный режим ограничений доступа (RLS 2.0 / Универсальный RLS).
В старых версиях БСП и платформы механизмы ограничения доступа на уровне записей (RLS) прописывались непосредственно внутри ролей конфигурации в виде SQL-подобных запросов. Это существенно снижало общую производительность СУБД, особенно при работе с большими объемами данных.
В новом универсальном режиме RLS логика ограничений перенесена на уровень программного кода БСП:
УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа() регистрирует все объекты метаданных (справочники, документы, регистры), для которых должны действовать правила ограничения прав.ПриЗаполненииОграниченияДоступа(Ограничение).ПриЗаполненииОграниченияДоступа, система не может выполнить инициализацию прав доступа. Происходит аварийный останов с ошибкой: Метод объекта не обнаружен.Особенно часто это происходит на «правленых» (кастомизированных) базах, где при сравнении и объединении конфигураций были оставлены старые объекты, снятые с поддержки, либо модули менеджеров стандартных объектов не были обновлены до актуального состояния.
Рассмотрим пошагово четыре практических способа решения этой проблемы.
Если обновление требуется провести в кратчайшие сроки, а детальный аудит конфигурации запланирован на более позднее время, мы можем прибегнуть к добавлению пустой процедуры-заглушки в модуль менеджера проблемного объекта. Проанализируем, как это сделать правильно.
Выясним по тексту ошибки (или в журнале регистрации), на каком именно объекте спотыкается обновление. Предположим, как в рассматриваемом случае на форуме, система ругается на справочник Справочник.ОтправкиБанкРоссии.
Выполним следующие действия в Конфигураторе:
ОтправкиБанкРоссии (или любой другой объект, на который ругается система).
// Добавление процедуры для прохождения обновления БСП
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
// Процедура-заглушка для обхода ошибки инициализации RLS
КонецПроцедуры
Обязательно проверьте наличие ключевого слова Экспорт, так как подсистема управления доступом вызывает данный метод исключительно извне. Сохраните конфигурацию базы данных и запустите обновление в режиме «1С:Предприятие» заново. Система успешно найдет метод, инициализирует пустые настройки для этого объекта и продолжит процесс обновления.
Добавление заглушек — рабочий, но не самый красивый метод («костыль»). В будущем при последующих обновлениях вы рискуете снова наступить на те же грабли. Правильный путь — разобраться, почему в базе остались объекты старой структуры.
Проанализируем две типичные ситуации:
Ситуация А: Объект является типовым, но его модуль устарел.
Если справочник или документ поставляется фирмой «1С» в новой версии, но у вас он остался старым, это означает, что при выполнении операции сравнения и объединения вы случайно сняли флажок с обновления модуля менеджера этого объекта. Чтобы исправить это:
Ситуация Б: Объект является устаревшим («мусорным») и отсутствует в новой поставке.
Часто при переходе на новые редакции «1С» некоторые объекты удаляются разработчиками из типовой конфигурации. Если ваша база находится на измененной поддержке, эти объекты могли остаться в вашей основной конфигурации как «сироты». БСП по-прежнему видит их в реестре метаданных и пытается настроить RLS, но так как код поддержки этих объектов из новых модулей БСП удален, возникает ошибка.
В этом случае необходимо провести ревизию таких объектов, перенести нужные данные (если они там вообще остались) в новые структуры и корректно удалить неиспользуемые устаревшие объекты из метаданных.
Чтобы не гадать, в каких еще модулях может отсутствовать нужный метод, воспользуемся специализированным инструментом разработчика, который поставляется в составе дистрибутива Библиотеки стандартных подсистем.
Рассмотрим, как задействовать этот инструмент:
ПроверкаВнедренияБСП.erf. Ее можно скачать на официальном портале ИТС в разделе поддержки БСП соответствующей версии.Инструмент автоматически проанализирует все модули менеджеров объектов, сопоставит их с требованиями БСП и выведет детальный отчет, в каких именно справочниках, документах или журналах документов отсутствует процедура ПриЗаполненииОграниченияДоступа. Это позволит вам исправить все ошибки за один раз, не запуская обновление повторно ради каждого отдельного справочника.
Иногда система выдает ошибку по причине рассинхронизации справочника, хранящего внутренние идентификаторы метаданных. В базе могут остаться записи об удаленных или переименованных объектах, к которым подсистема RLS пытается обратиться.
Для исправления этой проблемы выполним принудительное обновление вспомогательных данных конфигурации:
"C:\Program Files\1cv8\8.3.XX.XXXX\bin\1cv8.exe" ENTERPRISE /F "ПутьКВашейБазе" /N "ИмяАдминистратора" /P "Пароль" /C ЗапускОбновленияИнформационнойБазы
Параметр /C ЗапускОбновленияИнформационнойБазы (или в некоторых версиях /C StartInfobaseUpdate) заставляет систему принудительно перезаписать все элементы справочника ИдентификаторыОбъектовМетаданных, удалив неактуальные хвосты от старых конфигураций. После выполнения этой операции запустите процесс обновления в обычном режиме.
Мы подробно разобрали критическую ошибку обновления БСП и рассмотрели различные методы ее устранения. Для быстрого обхода проблемы в критической ситуации достаточно внедрить пустую процедуру ПриЗаполненииОграниченияДоступа с ключевым словом Экспорт в модуль менеджера давшего сбой объекта.
Однако для поддержания здоровья и стабильности информационной системы в долгосрочной перспективе настоятельно рекомендуем регулярно проводить аудит метаданных, избавляться от устаревших нетиповых объектов, своевременно обновлять модули менеджеров стандартных подсистем до актуальных версий поставщика и тестировать процесс обновления на резервной копии базы данных.