Переход с редакции 11.4 на 11.5 в конфигурации «Управление торговлей» является одним из самых масштабных обновлений за последние годы. Основная сложность заключается в кардинальном изменении архитектуры учета взаиморасчетов. В этой статье мы подробно разберем, почему возникают зависания при выполнении отложенных обработчиков, как исправить программные ошибки в коде и что делать, если распределенная информационная база (РИБ) отказывается завершать обновление.
Для начала проанализируем ситуацию: почему именно процедура СгенерироватьОбъектыРасчетов становится «камнем преткновения»? В версии 11.5 разработчики 1С внедрили новый механизм — справочник ОбъектыРасчетов. Если раньше в регистрах накопления (таких как «Расчеты с клиентами» или «Расчеты с поставщиками») в качестве аналитики выступали конкретные документы (Заказ, Реализация, Поступление), то теперь все они заменяются ссылкой на новый справочник.
При обновлении система должна просканировать все исторические записи в базе, создать для каждой уникальной цепочки расчетов элемент в справочнике ОбъектыРасчетов и подставить его в соответствующие регистры. Это колоссальный объем данных, который в распределенных базах может обрабатываться некорректно из-за конфликтов блокировок и особенностей работы Библиотеки стандартных подсистем (БСП).
Рассмотрим конкретную техническую ошибку, которая часто встречается в релизах ветки 11.5.7 и смежных. Проблема кроется в неправильном определении типа пустого значения при формировании временных таблиц для блокировок. Если вы видите, что в Журнале регистрации процедура выполняется, но прогресс в мониторе отложенного обновления стоит на месте, нам необходимо вмешаться в код.
Найдем в конфигураторе общий модуль ОбновлениеИнформационнойБазы и проанализируем функцию СоздатьВременнуюТаблицуЗаблокированныхДляЧтенияИИзмененияДанных. Выясним причину: в некоторых случаях алгоритм пытается получить тип из стандартного реквизита Регистратор, тогда как для текущего контекста обработки требуется обращение к измерению Ссылка.
Выполним следующие действия по шагам:
СоздатьВременнуюТаблицуЗаблокированныхДляЧтенияИИзмененияДанных.Проанализируем пример кода до и после правки:
// Было:
Запрос.УстановитьПараметр("ПустоеЗначение", МетаданныеОбъекта.СтандартныеРеквизиты.Регистратор.Тип.ПривестиЗначение);
// Стало (с учетом исправления):
Если ИмяИзмеренияДляОтбора = "Ссылка" Тогда
Запрос.УстановитьПараметр("ПустоеЗначение", МетаданныеОбъекта.Измерения.Ссылка.Тип.ПривестиЗначение);
Иначе
Запрос.УстановитьПараметр("ПустоеЗначение", МетаданныеОбъекта.СтандартныеРеквизиты.Регистратор.Тип.ПривестиЗначение);
КонецЕсли;
Важно: этот патч актуален для ситуаций, когда обновление «зависает» без явного сообщения об ошибке, бесконечно выполняя одну и ту же итерацию по объектам ПриходныйКассовыйОрдер или РеализацияТоваровУслуг.
Рассмотрим другую ситуацию, когда система выдает критическую ошибку: «Произошло зацикливание процедуры обработки данных. Выполнение прервано». Это происходит в тех случаях, когда обработчик СгенерироватьОбъектыРасчетов раз за разом пытается обработать порцию данных, но не может зафиксировать результат. Посмотрим на стек вызова ошибки в общем модуле ОбновлениеИнформационнойБазыСлужебный.
Причины зацикливания часто связаны с качеством данных в базе:
Для решения этой проблемы рекомендуется временно отключить автоматический запуск отложенного обновления и выполнить Тестирование и исправление (ТИИ) информационной базы. Особое внимание следует уделить пунктам «Проверка логической целостности» и «Очистка ссылок на несуществующие объекты».
Если штатные методы исправления кода и ТИИ не помогают завершить обновление в узле распределенной базы, рассмотрим радикальный, но эффективный метод «пересоздания» узла. Часто в РИБ таблицы очереди обновлений рассинхронизируются, что не дает процессу завершиться корректно.
Разберем алгоритм действий:
.dt.ФормаМонитораОтложенногоОбновления), сделайте выгрузку обратно и замените базу на сервере.Выясним, почему переход на 11.5 стал обязательным для многих компаний. Основная причина — прекращение поддержки старых протоколов обмена в модулях интеграции с 1С-Битрикс. Новые версии модулей ориентированы на работу с объектами расчетов и новыми механизмами ценообразования. Поэтому, если ваша компания использует связку «1С + Сайт», затягивать с обновлением до 11.5 не получится.
Перед началом перехода обязательно проверьте наличие установленных патчей от фирмы 1С. Для конфигурации «Управление торговлей» версии 11.5.8 и выше выпущено несколько критических исправлений, касающихся именно производительности обработчиков СгенерироватьОбъектыРасчетов. Убедитесь, что в системе установлены патчи с кодами EF_00123456 (номер может меняться, ищите по ключевым словам «объекты расчетов»).
Мы проанализировали основные сложности перехода на 11.5 и выяснили, что большинство проблем в распределенных базах решается либо точечной правкой кода БСП, либо предварительной очисткой данных. Помните, что архитектура «Объектов расчетов» — это фундаментальное изменение, и корректность его выполнения напрямую влияет на правильность формирования финансового результата и ведомостей расчетов в будущем.