Как исправить ошибку зацикливания и зависания отложенного обновления при переходе на УТ 11.5

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

Переход с версии 1С:Управление торговлей 11.4 на 11.5 является одним из самых технически сложных этапов сопровождения системы. Одной из наиболее распространенных проблем является сбой отложенных обработчиков обновления информационной базы, особенно тех, которые касаются документов ПриобретениеТоваровУслуг и регистров накопления. Часто пользователи сталкиваются с ошибкой: «Произошло зацикливание процедуры обработки данных. Выполнение прервано». В этой статье мы подробно разберем, почему это происходит и как устранить причину зависания.

Анализируем причину ошибки зацикливания в БСП

Для начала разберем механизм работы Библиотеки Стандартных Подсистем (БСП). Ошибка «Произошло зацикливание» генерируется системой автоматически, когда один и тот же объект (например, конкретный документ) попадает в выборку обработчика более 10 раз, но после попытки записи он всё равно остается помеченным как «необработанный». Рассмотрим ситуацию на примере модуля ОбновлениеИнформационнойБазыСлужебный.

Система пытается выполнить процедуру Документы.ПриобретениеТоваровУслуг.ОбработатьДанныеДляПереходаНаНовуюВерсию. В ходе этой процедуры документ открывается, заполняются новые реквизиты, и вызывается метод Записать(). Если в конфигурации или расширениях есть доработки, которые препятствуют корректной записи, БСП фиксирует неудачу и пробует снова в следующем потоке, что и приводит к бесконечному циклу.

Выясняем влияние изменений в учете НДС

Одной из ключевых причин зависания на этапе 11.5 является глобальное изменение структуры учета НДС. Рассмотрим основные моменты:

  1. Раньше Ставка НДС была значением Перечисления (фиксированный список).
  2. В новых версиях ставка НДС стала элементом Справочника СтавкиНДС.
  3. При обновлении система должна сопоставить старые значения и создать/подставить новые ссылки из справочника. Различные варианты миграции данных и обновления торгового учета представлены в разделе с решениями по переносу данных в 1С:Управление торговлей.

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

Разбираем проблему кастомного кода и расширений

Наиболее часто решение кроется не в типовом коде, а в подписках на события или коде расширений. Рассмотрим механизм конфликта подробнее. В версии 11.5 многие реквизиты (например, связанные с условиями оплаты и сроками) были перенесены или переименованы (получили префикс Удалить...). Если у вас есть код в обработчике ПриЗаписи, который обращается к этим старым полям, возникает ошибка.

Пример проблемного кода, который может вызвать зацикливание:


Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    // Если в расширении остался старый код обращения к реквизиту
    Если Объект.СрокОплаты = Дата(1, 1, 1) Тогда 
        // В версии 11.5 этот реквизит может быть уже неактуален или перемещен
        Объект.СрокОплаты = ТекущаяДата(); 
    КонецЕсли;
КонецПроцедуры

Когда обработчик обновления пытается записать документ ПриобретениеТоваровУслуг, срабатывает ваш код из расширения. Если запись не проходит из-за обращения к несуществующим или заблокированным полям, транзакция откатывается, документ не обновляется, и обработчик БСП запускает его снова. Рассмотрим, как это выявить.

Шаги по диагностике и решению проблемы

Для эффективного решения задачи проанализируем последовательность действий программиста:

  1. Анализ журнала регистрации: Необходимо установить фильтр по событию «Обновление информационной базы» и уровню «Ошибка». Зачастую там фиксируется конкретная ссылка на документ, который не удалось записать, и текст исключения (например, «Поле объекта не обнаружено»). Для упрощения обслуживания системы можно настроить автоматическое архивирование, обновление и тестирование нескольких информационных баз.
  2. Отладка фоновых заданий: Поскольку обновление выполняется в фоновом режиме, необходимо включить «Отладку фоновых заданий» в настройках отладчика. После этого нужно установить точку останова в общем модуле, где вызывается процедура ЗавершитьВыполнениеОтложенногоОбработчика.
  3. Проверка регистра «Данные к обработке»: Посмотрим на содержимое этого регистра. В нем хранятся ссылки на объекты, которые еще не прошли обновление. Если список не уменьшается — значит, объекты блокируются внешним кодом.
  4. Отключение расширений: Попробуйте временно отключить все активные расширения и запустить отложенное обновление заново. Если процесс пошел — значит, причина в коде расширения.

Ручной запуск обработчика для поиска ошибки

Если автоматическое обновление зависло, мы можем попробовать выполнить процедуру для одного конкретного документа вручную через консоль кода. Это позволит увидеть точную ошибку записи в реальном времени. Рассмотрим пример такого кода:


// Выбираем один документ из тех, что зависли в обновлении
ДокументОбъект = Документы.ПриобретениеТоваровУслуг.НайтиПоНомеру("0000-000001", ТекущаяДата()).ПолучитьОбъект();

// Вызываем процедуру обновления из общего модуля (имя может меняться в зависимости от версии)
Параметры = Новый Структура;
Параметры.Вставить("Объект", ДокументОбъект);

Попытка
    Документы.ПриобретениеТоваровУслуг.ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры);
    ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
    Сообщить("Документ успешно обновлен");
Исключение
    Сообщить("Ошибка при обновлении: " + ОписаниеОшибки());
КонецПопытки;

Решение проблемы с регистром «Товары к поступлению»

Часто в списке зависших процедур фигурирует обработка регистра ТоварыКПоступлению. В УТ 11.5 изменилась концепция работы с неотфактурованными поставками. Если у вас зависла эта процедура, проанализируем следующие моменты:

Во-первых, проверьте наличие «битых» ссылок (Объект не обнаружен) в документах-основаниях. Если регистр пытается сослаться на удаленный заказ, процедура будет завершаться с ошибкой.

Во-вторых, убедитесь, что все документы ПриобретениеТоваровУслуг завершили свое обновление. Процедуры по регистрам накопления обычно зависят от успешного завершения обработки самих документов. Пока документы не «прожеваны» системой, регистры будут находиться в состоянии ожидания или выдавать ошибки зацикливания.

Итоги и рекомендации

Подводя итог, можно сказать, что «зацикливание» при обновлении на УТ 11.5.7 чаще всего не является ошибкой в коде 1С. Это защитный механизм БСП, который сообщает вам о конфликте между данными обновления и вашими доработками. Главный совет: обращайте внимание на реквизиты, которые были изменены или удалены в новой версии. Если ваш код пытается программно заполнять СрокОплаты или специфические Ставки НДС через старые механизмы, обновление не завершится.

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

← На главную