Обновление конфигурации «Бухгалтерия предприятия» с ветки 3.0.11 на 3.0.12 является исторически сложным этапом. Именно в этот период (примерно 2012–2013 годы) происходил активный переход на новые подсистемы Библиотеки стандартных подсистем (БСП), что повлекло за собой серьезные изменения в архитектуре доступа к данным. Ошибка, возникающая в общем модуле РегламентированнаяОтчетность, связана с тем, что система пытается прочитать данные, защищенные механизмом RLS (Record Level Security), в момент, когда параметры сеанса еще не инициализированы.
Рассмотрим детально, почему это происходит и какими способами мы можем решить данную проблему, чтобы успешно довести базу до актуального релиза.
Проанализируем ситуацию: при выполнении обработчиков обновления в фоновом режиме или при первом запуске после обновления конфигурации, система вызывает метод Следующий() для выборки из справочника ЦиклыОбмена. В этот момент срабатывает ограничение доступа на уровне записей, прописанное в роли пользователя.
Запрос RLS в старых редакциях БП 3.0 часто опирается на параметры сеанса, такие как ТекущийПользователь или специфические параметры доступа. Если обновление запускается в контексте, где процедура УстановкаПараметровСеанса не была вызвана или отработала не полностью (что часто случается в фоновых заданиях или при специфических режимах обновления на новых версиях платформы), мы получаем исключение: «Попытка получения неинициализированного значения параметра сеанса».
Первым делом обратим внимание на версию платформы. Пользователи часто совершают ошибку, пытаясь обновить конфигурацию десятилетней давности на самой современной платформе (например, 8.3.20 и выше). Новые версии платформы гораздо строже относятся к инициализации параметров сеанса и безопасности запросов.
Если проблема заключается в ограничении прав, самым логичным шагом будет временное устранение этого барьера. Рассмотрим, как это сделать:
Если зайти в интерфейс не удается, попробуйте программно отключить использование RLS через консоль кодом:
Константы.ИспользоватьОграниченияПравДоступаНаУровнеЗаписей.Установить(Ложь);
ПараметрыСеанса.ИспользоватьОграниченияПравДоступаНаУровнеЗаписей = Ложь;
Ошибка часто возникает на конкретном объекте: Справочник.ЦиклыОбмена, табличная часть ДополнительныеПредметы. Данный справочник хранит информацию о документообороте с контролирующими органами (1С-Отчетность). Если в базе есть «битые» ссылки или незавершенные сессии обмена за 2012 год, они могут блокировать процесс.
Проанализируем шаги по очистке:
ДополнительныеПредметы часто позволяет методу Следующий() проскочить проблемный участок кода без вызова исключения.Для опытных разработчиков есть способ «принудительной» инициализации. Если мы понимаем, какой именно параметр сеанса вызывает ошибку, мы можем инициализировать его вручную в модуле сеанса.
УстановкаПараметровСеанса добавьте блок кода, который принудительно устанавливает значения для параметров, используемых в RLS.Рассмотрим пример кода, который можно временно внедрить для прохождения обновления:
Процедура УстановкаПараметровСеанса(ТребуемыеПараметры)
// Установим значения по умолчанию для критичных параметров
Если ТребуемыеПараметры = Неопределено Тогда
// Инициализация всех параметров для фоновых заданий
ПараметрыСеанса.ТекущийПользователь = Справочники.Пользователи.НайтиПоНаименованию("Администратор");
// Добавьте здесь другие параметры, на которые ругается система
КонецЕсли;
КонецПроцедуры
Важно: После успешного обновления этот код необходимо удалить, чтобы вернуть стандартное поведение системы.
Иногда прыжок с 3.0.11.06 сразу на 3.0.12.04 оказывается слишком велик для механизмов автоматического обновления. Выясним, есть ли промежуточные точки.
Проанализируем еще несколько моментов, которые могут помочь:
.dt файл и загрузить ее в пустую новую базу. Это пересоздаст индексы и может устранить скрытые проблемы на уровне СУБД.ЦиклыОбмена параллельно с процессом обновления.Используя комплексный подход — откат платформы к версии 8.2.18, временное отключение RLS и очистку технических данных — вы сможете преодолеть этот «архитектурный барьер» в истории обновлений 1С:Бухгалтерии.