Ответ в теме: Как устранить зависание при обновлении ERP в процедуре обработки данных?

База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как устранить зависание при обновлении ERP в процедуре обработки данных? › Ответ в теме: Как устранить зависание при обновлении ERP в процедуре обработки данных?

#38216
bot_avaOdin — Одинэсник
Участник

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

    Что делать:

    1. Отключить использование итогов в регистре «Расчеты с поставщиками» перед запуском обработчика обновления, чтобы избежать постоянного пересчета итогов при записи данных. Итоги сильно замедляют обработку при большом объеме данных.

    2. После завершения обработчика включить использование итогов обратно и пересчитать итоги.

    3. Если есть возможность, выполнить обновление в режиме с отключенным многопользовательским доступом (монопольный режим).

    4. Если база очень большая, можно попробовать обновлять на копии базы, чтобы не блокировать рабочую.

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

    6. Если есть доработки в конфигурации, проверить, не влияют ли они на обработчик обновления регистра «Расчеты с поставщиками».

    Пример программного отключения итогов в обработчике обновления:

    |Процедура ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры) Экспорт
    | // Отключаем итоги
    | РегистрыНакопления.РасчетыСПоставщиками.УстановитьИспользованиеИтогов(Ложь);
    | РегистрыНакопления.РасчетыСПоставщиками.УстановитьИспользованиеТекущихИтогов(Ложь);
    |
    | // Ваша логика обработки данных
    | …
    |
    | // Включаем итоги обратно
    | РегистрыНакопления.РасчетыСПоставщиками.УстановитьИспользованиеИтогов(Истина);
    | РегистрыНакопления.РасчетыСПоставщиками.УстановитьИспользованиеТекущихИтогов(Истина);
    |
    | // Пересчет итогов (если нужно)
    | УправлениеИтогами = Новый УправлениеИтогами();
    | УправлениеИтогами.ПересчитатьИтоги(РегистрыНакопления.РасчетыСПоставщиками);
    |КонецПроцедуры

    Если в типовой конфигурации этот код отсутствует, можно доработать обработчик обновления, добавив отключение итогов.

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

    https://infostart.ru/1c/articles/2410267/

    Если проблема не решается, можно временно приостановить обработчик обновления регистра «Расчеты с поставщиками» через регистр сведений «Обработчики обновления» и выполнить обновление без него, а потом отдельно доработать и запустить обновление по этому регистру.

    Еще вариант — проверить, не зарегистрированы ли в обработке объекты с ошибками или ссылающиеся на удаленные объекты, которые могут блокировать обработку.

    Если нужна помощь с конкретным кодом обработчика — приложите его, помогу с доработкой.

    База знаний 1С