При проведении документов или записи элементов справочников в конфигурациях «1С:Управление производственным предприятием» (УПП) или «1С:Комплексная автоматизация» (КА) нередко возникает ошибка вида: Ошибка при выполнении обработчика - 'ПередЗаписью' по причине: Ошибка при получении значения атрибута контекста (НаличиеОбменаУПП) по причине: Попытка получения неинициализированного значения параметра сеанса. Разберем по шагам, почему возникает эта неполадка и какими методами ее можно гарантированно устранить.
Параметры сеанса в платформе 1С:Предприятие инициализируются «по требованию» в специальном модуле — МодульСеанса в обработчике УстановкаПараметровСеанса. Если при обращении к параметру платформа не может получить его значение из-за ограничений прав, сбоев кластера серверов или ошибок в коде, возникает аварийное завершение операции.
Проанализируем серверные настройки. В ряде версий платформы (в частности, в ветках 8.2 до релиза 8.2.15.301, а также при некорректной маршрутизации сеансов в более поздних версиях) при переключении клиентского соединения с одного рабочего процесса (rphost) на другой параметры сеанса могут теряться. Это приводит к тому, что при следующем серверном вызове параметр считается неинициализированным.
Для устранения этой проблемы выполним следующие действия:
rphost) для рабочей базы. Это сразу исключит межпроцессную потерю контекста.Выясним причину, связанную с правами пользователей. Если под полными правами документы и справочники проводятся успешно, а под пользователями с ограниченными правами (например, кадровик, кладовщик или менеджер) возникает ошибка при попытке записи нового объекта, дело в правах на чтение параметра сеанса или данных, из которых он вычисляется.
В типовых конфигурациях (например, УПП 1.3.53) эта ошибка была зарегистрирована вендором (ошибка 20026889). Параметр сеанса НаличиеОбменаУПП требовался при проверке обменов в модулях объектов, но права на его чтение были назначены только роли ПолныеПрава.
Способы решения проблемы прав:
Пользователь скорректированы.Пользователь (или базовую роль, назначенную всем пользователям) и установим для нее право Использование на проблемный параметр сеанса (например, НаличиеОбменаУПП).МодулеСеанса. Процедура инициализации должна выполняться без ограничений прав.Посмотрим на пример правильной организации модуля сеанса:
Процедура УстановкаПараметровСеанса(ТребуемыеПараметры)
УстановитьПривилегированныйРежим(Истина);
Если ТребуемыеПараметры = Неопределено Или ТребуемыеПараметры.Найти("НаличиеОбменаУПП") <> Неопределено Тогда
ПараметрыСеанса.НаличиеОбменаУПП = ПроцедурыОбменаУПП.ПолучитьСтатусОбмена();
КонецЕсли;
КонецПроцедуры
Рассмотрим ситуацию, когда ошибка возникает при межпрограммной интеграции или выгрузке данных через COMConnector. При внешнем подключении клиентские события (такие как ПриНачалеРаботыСистемы) не выполняются, отрабатывает только серверный контекст.
Если параметры сеанса инициализируются в коде клиентских модулей, они останутся пустыми для COM-сессии. Кроме того, при несовпадении версий или повреждении регистрации COM-компонента возникают системные ошибки доступа к контексту.
Для исправления COM-подключения выполним следующие шаги:
МодульСеанса.
regsvr32 "C:\Program Files\1cv8\8.3.XX.XXXX\bin\comcntr.dll"
Если ошибка появилась внезапно после динамического («демонического») обновления конфигурации базы данных, рабочие процессы сервера могли сохранить в памяти старые схемы параметров сеанса.
Выполним полную очистку кэша сервера:
1C:Enterprise Server Agent.C:\Program Files\1cv8\srvinfo или /home/usr1cv8/.1cv8/1C/1cv8).snacc).