Как исправить ошибку «Попытка получения неинициализированного значения параметра сеанса» при обновлении 1С

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия IT и автоматизация бизнеса
← На главную

При выполнении обновления доработанных типовых решений или конфигураций с интегрированными сторонними модулями (например, БИТ.Финанс) разработчики и администраторы 1С часто сталкиваются с критической ошибкой при попытке записи или проведения документов. В журнале регистрации и на экране пользователя появляется сообщение вида: «Попытка получения неинициализированного значения параметра сеанса».

Рассмотрим детально причины возникновения этой проблемы, механизм работы параметров сеанса в платформе 1С:Предприятие и пошаговые варианты устранения ошибки.

Анализ причины возникновения ошибки

Проанализируем ситуацию на конкретном примере. При попытке записать документ РеализацияТоваровУслуг система выдает следующее окно с ошибкой:


{ОбщийМодуль.бит_рлс_Основной.Модуль(75)}: Ошибка при получении значения атрибута контекста (бит_рлс_ЦФОСтатьиОборотов)
 Если ПараметрыСеанса.бит_рлс_ЦФОСтатьиОборотов Тогда
по причине:
Попытка получения неинициализированного значения параметра сеанса

Главная причина такого поведения — нарушение логики инициализации параметров сеанса при обращении к ним. В платформе 1С:Предприятие 8 используется так называемая «ленивая» (динамическая) инициализация: параметр сеанса заполняется не всегда при старте программы, а в момент первого обращения к нему из кода, если он не был установлен ранее.

За инициализацию отвечает обработчик УстановкаПараметровСеанса в Модуле сеанса. Если в процессе обновления типовой конфигурации (например, 1С:Бухгалтерия предприятия) стандартный механизм объединения затирает вызовы процедур сторонней подсистемы или сам код инициализации специфических параметров (в данном случае параметров БИТ), то при первом обращении к ПараметрыСеанса.бит_рлс_ЦФОСтатьиОборотов платформа обращается к модулю сеанса, не находит там логики установки данного параметра и генерирует ошибку.

Проверка модуля сеанса

Выясним, как выглядит процедура УстановкаПараметровСеанса в конфигурации. При объединении конфигураций необходимо следить, чтобы вызовы обработчиков всех установленных подсистем сохранялись. Типовой модуль сеанса с интегрированным блоком БИТ должен содержать вызов специализированного модуля:


Процедура УстановкаПараметровСеанса(ИменаПараметровСеанса)
    
    // Инициализация параметров сеанса системы лицензирования и подсистемы БИТ
    бит_сл_сервер.ИнициализацияПараметровСеанса(ИменаПараметровСеанса);
    
    // Подсистема "СтандартныеПодсистемы"
    СтандартныеПодсистемыСервер.УстановкаПараметровСеанса(ИменаПараметровСеанса);
    
    // Подсистема "ТехнологияСервиса"
    ТехнологияСервиса.ВыполнитьДействияПриУстановкеПараметровСеанса(ИменаПараметровСеанса);
    
КонецПроцедуры

Если при обновлении релизов основной конфигурации режим сравнения и объединения был настроен по умолчанию, изменения в модуле сеанса могут полностью замениться типовым кодом поставщика 1С. В результате вызовы бит_сл_сервер или подсистемы RLS БИТ пропадают, что и приводит к сбою при вызове процедур в обработчиках событий ПередЗаписью или ПриЗаписи документов.

Варианты решения проблемы

Рассмотрим основные способы исправления ошибки в зависимости от условий работы со сбором конфигурации.

Способ 1. Восстановление затертых изменений при обновлении

Если ошибка проявилась сразу после обновления базы, выполним следующие шаги:

  1. Откроем конфигурацию в режиме Конфигуратор и перейдем в Модуль сеанса.
  2. Проверим наличие вызова процедур установки параметров сеанса для сторонней подсистемы (в нашем примере — подсистемы БИТ).
  3. Сравним текущую конфигурацию с резервной копией до обновления или с конфигурацией поставщика БИТ.
  4. При последующих обновлениях в окне сравнения и объединения конфигураций обязательно снимаем галочки с модуля сеанса или настраиваем объединение вручную в режиме «Объединить с оговорками», чтобы сохранить вызовы всех подсистем.

Способ 2. Инициализация параметров через Расширение конфигурации

Чтобы избежать повторного затирания кода при последующих обновлениях типовой конфигурации 1С, рекомендуется вынести инициализацию дополнительных параметров сеанса в Расширение конфигурации.

Для этого создадим расширение и добавим в него процедуру-обработчик с аннотацией &После:


&После("УстановкаПараметровСеанса")
Процедура Расш1_УстановкаПараметровСеанса(ИменаПараметровСеанса)
    
    // Вызов инициализации параметров сеанса сторонней подсистемы
    Если НайтиМетаданныеПоИмени() Тогда
        бит_сл_сервер.ИнициализацияПараметровСеанса(ИменаПараметровСеанса);
    КонецЕсли;

КонецПроцедуры

Такой подход защитит доработанный код от затирания при выполнении стандартных процедур обновления основной конфигурации.

Способ 3. Ручная проверка и явная установка параметра

В случаях, когда скомпилированные модули стороннего блока недоступны для изменения, а параметр сеанса используется как флаг проверки прав или настроек RLS, можно принудительно инициализировать его перед выполнением операции или при старте системы (в модуле управляемого приложения или подсистеме авторизации):


// Пример явной установки значения, если параметр не был инициализирован
ПараметрыСеанса.бит_рлс_ЦФОСтатьиОборотов = Ложь;

Важно: При явной установке значений параметров сеанса необходимо строго соблюдать тип данных, заданный в метаданных конфигурации для данного параметра сеанса, иначе платформа выдаст ошибку несоответствия типов.

Дополнительные рекомендации

Посмотрим на сопутствующие действия, которые помогают устранить фоновые проблемы с параметрами сеанса:

← На главную