Переход с версии ERP 2.4 на 2.5 — это не просто обновление интерфейса или добавление новых функций, это масштабная перестройка архитектуры учета. Одним из самых трудоемких этапов является выполнение отложенных обработчиков обновления. Часто специалисты сталкиваются с ситуацией, когда обработчик Документы.ПогашениеСтоимостиТМЦВЭксплуатации.ОбработатьДанныеДляПереходаНаНовуюВерсию зависает, зацикливается или выполняется бесконечно долго. В этой статье мы подробно разберем причины этой проблемы и пошагово рассмотрим способы ее решения.
Проанализируем ситуацию: в версии 2.5 произошел коренной отказ от старых механизмов учета партий ТМЦ в эксплуатации. Теперь данные должны соответствовать структуре нового регистра накопления Партии ТМЦ в эксплуатации. Процесс обновления пытается сопоставить старые остатки с новыми правилами партионного учета. Рассмотрим основные факторы, которые мешают обработчику завершить работу:
ТМЦ в эксплуатации присутствуют записи с битыми ссылками (объект не найден), пустыми аналитиками (например, не указан сотрудник или документ передачи), обработчик спотыкается. Он не может сформировать новую партию и пропускает объект, но при этом не снимает его с регистрации в плане обмена.ПроблемныхОбъектов, но на следующей итерации фоновое задание снова выбирает те же самые документы, создавая бесконечный цикл.Этот метод считается наиболее эффективным, так как он позволяет «обмануть» систему обновления, завершить общий процесс, а затем точечно пересчитать проблемные данные. Разберем шаги по порядку:
Шаг 1. Остановка фоновых заданий. Прежде всего, необходимо заблокировать выполнение регламентных заданий в консоли кластера серверов 1С или через параметры информационной базы, чтобы новые попытки обновления не мешали нашей работе. Удалите текущие зависшие фоновые задания обновления.
Шаг 2. Поиск зарегистрированных документов. Воспользуемся консолью запросов, чтобы понять, какие именно документы стоят в очереди на обновление. Отложенные обновления в 1С:ERP используют план обмена ОбновлениеИнформационнойБазы. Нам нужно найти узел, отвечающий за текущее обновление, и посмотреть зарегистрированные на нем документы Погашение стоимости ТМЦ в эксплуатации.
Шаг 3. Снятие с регистрации. Используем типовую обработку с ИТС РегистрацияИзмененийДляОбменаДанными. Найдем в ней план обмена ОбновлениеИнформационнойБазы, выберем нужный узел и удалим регистрацию для всех документов типа Погашение стоимости. Это позволит системе считать, что обрабатывать больше нечего.
Шаг 4. Завершение обновления. После удаления регистрации запустим отложенное обновление снова. Поскольку очередь пуста, обработчик мгновенно завершится со статусом «Выполнено».
Шаг 5. Повторный запуск и исправление. Теперь, когда база формально обновлена, нам нужно вернуть данные в корректное состояние:
Обработчики обновления найдем наш обработчик и вручную изменим его статус с «Выполнен» на «Не выполнялся».Погашение стоимости на том же узле плана обмена с помощью той же обработки РегистрацияИзмененийДляОбменаДанными.Партии ТМЦ и Направления деятельности.Если вы хотите детально разобраться в причине ошибки в конкретном документе, рассмотрим вариант с использованием конфигуратора. Нам потребуется подключить отладку фоновых заданий.
Проанализируем код обработчика. Нам нужно найти место, где формируется структура Параметры. В процессе итерации обработчик проверяет результат выполнения. Если мы видим, что данные зациклились на небольшом количестве объектов, мы можем вмешаться в процесс:
// Пример логики, которую можно применить в отладке
// Если мы понимаем, что документ безнадежен,
// мы можем принудительно очистить выборку в переменной
Результат = Запрос.Выполнить().Выгрузить();
// В отладчике можно принудительно установить:
Параметры.ОбработкаЗавершена = Истина;
Выясним причину ошибки, проходя по шагам процедуру обработки. Часто проблема кроется в заполнении переменной СписокПартий. Если СписокПартий.Количество() равно нулю, но при этом есть записи в старых регистрах, система может уйти в бесконечный цикл. Проверьте содержимое таблицы Результат.Выгрузить(), чтобы понять, какие именно документы блокируют процесс.
Чтобы не доводить ситуацию до зависания, рекомендуется выполнить предварительную подготовку базы еще на версии 2.4. Рассмотрим чек-лист обязательных действий:
Ведомость по ТМЦ в эксплуатации. Проанализируйте колонки количества и стоимости. Любые отрицательные значения должны быть исправлены до запуска обновления конфигурации.ТМЦ в эксплуатации на предмет пустых значений Физическое лицо или Инвентарный номер. Если учет ведется в разрезе этих аналитик, их отсутствие станет критичным для формирования новых партий.Технологический журнал для сбора событий DBMSSQL и EXCP. Это поможет выяснить, на каком именно SQL-запросе база данных «задумывается» дольше всего.Проанализируем дополнительные возможности ускорения процесса. В некоторых случаях помогает принудительный запуск обновления в один поток. По умолчанию БСП пытается выполнять задания параллельно, что при работе с ТМЦ может вызвать блокировки таблиц. Чтобы выполнить обработку в один поток, можно воспользоваться настройками в форме «Обслуживание» — «Обновление программы» — «Результаты обновления» — «Настройка потоков».
Также стоит обратить внимание на вспомогательный регистр Сведения о партиях ТМЦ в эксплуатации. Если в нем уже есть записи с пустыми полями Партия или Документ возникновения расходов, это верный признак того, что основной обработчик не справится с задачей без ручного вмешательства в данные.
Важный итог: Не бойтесь использовать «хирургические» методы с планами обмена, если типовые механизмы зашли в тупик. Главное — всегда делайте резервную копию базы данных перед любыми манипуляциями со статусами обработчиков обновления и регистрацией данных в планах обмена.