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

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

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #38215
      Фото аватараOdineski
      Участник

        При обновление ERP зависает обработчик РегистрыНакопления.РасчетыСПоставщиками.ОбработатьДанныеДляПереходаНаНовуюВерсию

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

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

          Что делать:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С