Как устранить зависание и ошибки при переходе с 1С:УТ 11.4 на 11.5 в распределенных базах

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

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

Разберем причину: архитектурный переход на Объекты расчетов

Для начала проанализируем ситуацию: почему именно процедура СгенерироватьОбъектыРасчетов становится «камнем преткновения»? В версии 11.5 разработчики 1С внедрили новый механизм — справочник ОбъектыРасчетов. Если раньше в регистрах накопления (таких как «Расчеты с клиентами» или «Расчеты с поставщиками») в качестве аналитики выступали конкретные документы (Заказ, Реализация, Поступление), то теперь все они заменяются ссылкой на новый справочник.

При обновлении система должна просканировать все исторические записи в базе, создать для каждой уникальной цепочки расчетов элемент в справочнике ОбъектыРасчетов и подставить его в соответствующие регистры. Это колоссальный объем данных, который в распределенных базах может обрабатываться некорректно из-за конфликтов блокировок и особенностей работы Библиотеки стандартных подсистем (БСП).

Способ 1. Исправление программной ошибки в общем модуле

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

Найдем в конфигураторе общий модуль ОбновлениеИнформационнойБазы и проанализируем функцию СоздатьВременнуюТаблицуЗаблокированныхДляЧтенияИИзмененияДанных. Выясним причину: в некоторых случаях алгоритм пытается получить тип из стандартного реквизита Регистратор, тогда как для текущего контекста обработки требуется обращение к измерению Ссылка.

Выполним следующие действия по шагам:

  1. Перейдем к функции СоздатьВременнуюТаблицуЗаблокированныхДляЧтенияИИзмененияДанных.
  2. Найдем строку кода, устанавливающую параметр ПустоеЗначение для запроса.
  3. Внесем изменения, добавив проверку имени измерения.

Проанализируем пример кода до и после правки:


// Было:
Запрос.УстановитьПараметр("ПустоеЗначение", МетаданныеОбъекта.СтандартныеРеквизиты.Регистратор.Тип.ПривестиЗначение);

// Стало (с учетом исправления):
Если ИмяИзмеренияДляОтбора = "Ссылка" Тогда
    Запрос.УстановитьПараметр("ПустоеЗначение", МетаданныеОбъекта.Измерения.Ссылка.Тип.ПривестиЗначение);
Иначе
    Запрос.УстановитьПараметр("ПустоеЗначение", МетаданныеОбъекта.СтандартныеРеквизиты.Регистратор.Тип.ПривестиЗначение);
КонецЕсли;

Важно: этот патч актуален для ситуаций, когда обновление «зависает» без явного сообщения об ошибке, бесконечно выполняя одну и ту же итерацию по объектам ПриходныйКассовыйОрдер или РеализацияТоваровУслуг.

Способ 2. Устранение зацикливания процедуры обновления

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

Причины зацикливания часто связаны с качеством данных в базе:

Для решения этой проблемы рекомендуется временно отключить автоматический запуск отложенного обновления и выполнить Тестирование и исправление (ТИИ) информационной базы. Особое внимание следует уделить пунктам «Проверка логической целостности» и «Очистка ссылок на несуществующие объекты».

Способ 3. Обходной путь через файловую базу (для РИБ)

Если штатные методы исправления кода и ТИИ не помогают завершить обновление в узле распределенной базы, рассмотрим радикальный, но эффективный метод «пересоздания» узла. Часто в РИБ таблицы очереди обновлений рассинхронизируются, что не дает процессу завершиться корректно.

Разберем алгоритм действий:

  1. Выполните выгрузку данных периферийного узла в файл .dt.
  2. Загрузите этот файл в локальную файловую информационную базу на мощном рабочем компьютере.
  3. Запустите обновление в файловом варианте. В однопользовательском режиме без конкуренции за ресурсы SQL-сервера отложенные обработчики часто проходят гораздо быстрее и без ошибок блокировок.
  4. После успешного завершения всех процедур обновления (проверьте через ФормаМонитораОтложенногоОбновления), сделайте выгрузку обратно и замените базу на сервере.
  5. В некоторых случаях проще создать новый начальный образ узла из уже обновленной Центральной базы, если объем данных позволяет это сделать в разумные сроки.

Рекомендации по интеграции с Bitrix

Выясним, почему переход на 11.5 стал обязательным для многих компаний. Основная причина — прекращение поддержки старых протоколов обмена в модулях интеграции с 1С-Битрикс. Новые версии модулей ориентированы на работу с объектами расчетов и новыми механизмами ценообразования. Поэтому, если ваша компания использует связку «1С + Сайт», затягивать с обновлением до 11.5 не получится.

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

Заключение

Мы проанализировали основные сложности перехода на 11.5 и выяснили, что большинство проблем в распределенных базах решается либо точечной правкой кода БСП, либо предварительной очисткой данных. Помните, что архитектура «Объектов расчетов» — это фундаментальное изменение, и корректность его выполнения напрямую влияет на правильность формирования финансового результата и ведомостей расчетов в будущем.

← На главную