Почему зависает расчет себестоимости в УТ 11 и как найти причину ошибки

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

После обновления конфигурации 1С:Управление торговлей (например, при переходе с версии 11.2 на 11.3 или 11.4/11.5) пользователи нередко сталкиваются с ситуацией, когда процедура закрытия месяца и расчет себестоимости выполняются бесконечно долго. При этом программа не выдает сообщений об ошибках, а точки останова в типовом общем модуле РасчетСебестоимости не срабатывают. Разберем по шагам архитектуру выполнения этой операции, выясним причины зависания и научимся правильно отлаживать регламентные процедуры распределения затрат и партий.

Почему точка останова в модуле расчета себестоимости не срабатывает

В современных версиях УТ закрытие месяца выполняется асинхронно с помощью механизма фоновых заданий. Если в конфигураторе установлена стандартная точка останова, серверный процесс фонового задания просто игнорирует её при стандартных настройках отладки. Кроме того, расчет финансового результата представляет собой многоэтапный конвейер: до вызова процедур распределения дополнительных расходов и формирования себестоимости запускается этап партионного учета.

Если система зависает или зацикливается на этапе распределения партий, управление в модуль РасчетСебестоимости вообще не передается. Проанализируем, как правильно настроить среду разработки для перехвата выполнения.

Настройка отладки фоновых заданий и замер производительности

Чтобы отладчик начал останавливаться в коде регламентных процедур закрытия месяца, выполним следующие действия:

  1. Откроем конфигуратор и перейдем в меню Отладка — Подключение...
  2. В открывшемся окне нажмем кнопку Настройка автоматического подключения.
  3. Установим флаг напротив пункта Фоновые задания, а также убедимся, что включены флаги для клиента и сервера.
  4. Если используется клиент-серверный вариант информационной базы, убедимся, что служба сервера 1С:Предприятия запущена с ключом отладки (параметр -debug).
  5. Для определения точного места зависания запустим Замер производительности перед стартом регламентной операции из интерфейса программы.

После включения отладки фоновых заданий точки останова следует ставить не только в модуле РасчетСебестоимости, но и в модулях подсистемы партионного учета: ПартионныйУчетСервер, ПартионныйУчет и РасчетСебестоимостиПрикладныеАлгоритмы.

Анализ журнала регистрации по событиям партионного учета

Вместо ожидания завершения фонового задания откроем Журнал регистрации в рабочей или тестовой базе. Выполним отбор по следующим параметрам:

  1. В поле отбора событий найдем подсистемы, относящиеся к регламентным заданиям и закрытию месяца.
  2. Установим фильтр по представлению событий, содержащих подстроку Партионный учет или Расчет партий.
  3. Обратим внимание на наличие ошибок блокировок, сообщений о невозможности распределения или циклических перезапусков регламентных заданий обновления индексов и отложенных обработчиков.

Типичные причины бесконечного расчета себестоимости

Рассмотрим основные источники проблем, вызывающие зацикливание алгоритмов закрытия месяца после обновления конфигурации:

  1. Некорректные даты в регистре сведений «Задания к расчету себестоимости». Механизм закрытия анализирует очередь заданий. Если при обновлении, групповом перепроведении или случайной ошибке оператора в базе появился документ с датой глубокого прошлого (например, нулевой год или десятилетняя давность), система пытается последовательно пересчитать партии за каждый месяц, начиная с этой даты до текущего момента.
  2. Не завершены отложенные обработчики обновления БСП. При переходе между версиями конфигурации меняется структура партионного учета (например, переход на партионный учет версии 2.2). Если регламентные процедуры обработки данных завершились аварийно или находятся в статусе ожидания, расчет себестоимости блокируется несогласованностью регистров.
  3. Отрицательные остатки на складах и по организациям. Наличие количественных или суммовых минусов в регистрах Товары организаций, Себестоимость товаров и Партии товаров организаций приводит к тому, что алгоритм списания партий по методу ФИФО входит в бесконечный цикл поиска приходного документа для покрытия расхода.
  4. Кольцевые перемещения и встречные продажи (Интеркампани). Если в рамках одного месяца оформлены циклические передачи между собственными организациями (например, Организация А передает товар Организации Б, а та возвращает его или перепродает обратно Организации А), система линейных уравнений расчета стоимости не может сойтись к точному решению.
  5. Дубли ключей аналитики учета номенклатуры. В случае сбоя генерации справочников Ключи аналитики учета номенклатуры и Виды запасов внутренние запросы распределения партий формируют избыточные декартовы произведения, многократно увеличивая объем обрабатываемых строк.

Практический алгоритм исправления ситуации

Разберем последовательность действий для восстановления работоспособности закрытия месяца:

  1. Проверяем состояние обновления: перейдем в меню НСИ и администрирование — Обслуживание — Результаты обновления программы. Убедимся, что все процедуры дополнительной обработки данных успешно завершены.
  2. Очищаем очередь заданий: через интерфейс «Все функции» (или «Функции для технического специалиста») откроем регистр сведений Задания к расчету себестоимости. Проанализируем колонку даты документа и периода. Удалим некорректные записи за старые исторические периоды, оставив задания только по текущему закрываемому месяцу.
  3. Диагностируем отрицательные остатки: сформируем отчеты Ведомость по товарам на складах и Ведомость по товарам организаций за расчетный период с группировкой по регистратору. Устраним все выявленные отрицательные остатки.
  4. Запускаем расчет в синхронном режиме: чтобы избежать влияния механизмов фоновых заданий и перехватить ошибку в обычном клиентском сеансе, откроем список документов Расчет себестоимости товаров (раздел Финансовый результат и контроллинг — Регламентные документы). Создадим документ вручную, выберем расчетный месяц, установим вариант расчета Окончательный расчет и выполним его проведение. При возникновении ошибки система выдаст диагностическое сообщение непосредственно в диалоговом окне или остановится на установленной точке останова.
← На главную