При переходе на новые релизы конфигурации «Бухгалтерия предприятия, редакция 3.0», в частности на версию 3.0.178.20, некоторые специалисты сталкиваются с критической ошибкой, которая прерывает процесс обновления на этапе выполнения отложенных обработчиков. Система выдает сообщение: Значение не является значением объектного типа (ПриОтменеПотока). Давайте разберем по шагам, почему это происходит и как устранить данную неисправность, чтобы успешно завершить обновление базы данных.
Проанализируем стек вызовов, который обычно сопровождает данную проблему. Ошибка возникает в общем модуле ОбновлениеИнформационнойБазыСлужебный. Это свидетельствует о том, что сбой происходит в механизмах Библиотеки стандартных подсистем (БСП), отвечающих за многопоточное выполнение процедур обновления.
Разберем ситуацию подробнее: при попытке системы проверить состояние потоков обновления или при необходимости их экстренной остановки (например, если один из потоков завершился с ошибкой), вызывается процедура ОтменитьВыполнениеВсехПотоков. В этой процедуре система перебирает структуру или коллекцию ОписаниеПотока. Если по какой-то причине (сбой кэша, незавершенное фоновое задание или некорректная инициализация) переменная ОписаниеПотока не содержит ожидаемого объекта, обращение к ее свойству ПриОтменеПотока вызывает исключение.
Факторы, провоцирующие ошибку:
Если вы обладаете правами на изменение конфигурации (база находится на поддержке с возможностью изменения), мы можем применить «терапевтическую» правку кода. Это позволит системе игнорировать пустые описания потоков и продолжить работу. Посмотрим на пример кода, который необходимо модифицировать в общем модуле ОбновлениеИнформационнойБазыСлужебный.
Найдем строку, указанную в тексте ошибки (в районе 5841), где происходит обращение к свойству. Нам нужно добавить проверку на тип значения. Рассмотрим, как это выглядит на практике:
// Было:
Если ОписаниеПотока.ПриОтменеПотока <> Неопределено Тогда
// Стало (рекомендуемый вариант исправления):
Если ТипЗнч(ОписаниеПотока) = Тип("Структура")
И ОписаниеПотока.Свойство("ПриОтменеПотока")
И ОписаниеПотока.ПриОтменеПотока <> Неопределено Тогда
Такая проверка гарантирует, что программа не попытается обратиться к свойству, если ОписаниеПотока является простым значением (например, Неопределено) или не содержит нужного ключа. После внесения правок необходимо сохранить конфигурацию базы данных и запустить процесс обновления повторно.
Выясним причину с точки зрения инфраструктуры. Часто бывает, что код модуля абсолютно корректен, но из-за старого кэша платформа «видит» структуру объектов неправильно. Проанализируем ситуацию: если у других пользователей на том же релизе обновление проходит гладко, значит, проблема в данных конкретной информационной базы.
Рекомендуемая последовательность действий:
srvinfo/reg_1541/snacc... на сервере и локальных папок %AppData%/1C/1cv8 у пользователя, под которым запускается обновление./C ЗапуститьОбновлениеИнформационнойБазы. Это принудительно инициирует процедуры обновления БСП.Компания «1С» оперативно выпускает исправления для критических ошибок релизов. Рассмотрим, как проверить наличие готового решения. Если ваша система подключена к интернет-поддержке, перейдите в раздел Администрирование — Обслуживание — Обновление программы — Установленные исправления (патчи).
Проверьте наличие патча с описанием, похожим на «Ошибка при отмене потоков обновления». Обычно такие патчи имеют префикс EF_. Если патч найден, установите его. Он автоматически применит исправление к общему модулю ОбновлениеИнформационнойБазыСлужебный без необходимости снимать конфигурацию с поддержки.
Если после устранения ошибки в коде процесс обновления все равно не завершается (висит в статусе «Выполняется»), проанализируем состояние служебных регистров. Нам могут понадобиться следующие регистры:
РегистрСведений.ПотокиОбновленияРегистрСведений.ОчередьОбновленияДанныхВ случае критического зацикливания можно попробовать аккуратно очистить записи в этих регистрах, предварительно сделав резервную копию базы данных. После очистки следует снова запустить процедуру обновления через «Монитор основных показателей» или форму «Результаты обновления программы».
Важное напоминание: Всегда делайте бэкап перед любыми манипуляциями с кодом или кэшем. Как показывает практика, фраза «трусы делают бэкапы» часто становится девизом самых опытных и успешных программистов 1С, сохранивших не одну базу данных после подобных «гнилых» (по мнению некоторых пользователей) обновлений.