Как решить проблему с огромным количеством записей в регистре Задания к распределению взаиморасчетов в УТ 11.5?

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

В современных релизах конфигурации 1С:Управление торговлей 11.5 (а также в ERP и КА 2.5) разработчики внедрили обновленный механизм «онлайн-взаиморасчетов». Его главная цель — ускорить проведение документов за счет выноса сложных расчетов (распределение авансов, расчет остатков по этапам оплаты) в фоновый режим. Однако на практике многие пользователи сталкиваются с тем, что технический регистр ЗаданияКРаспределениюВзаиморасчетов раздувается до десятков миллионов записей, что приводит к зависаниям базы и некорректным данным в отчетах. Разберем детально, как привести систему в порядок.

Почему переполняется регистр заданий?

Проанализируем механику работы системы. При проведении любого документа, влияющего на расчеты (Заказ, Реализация, Поступление безналичных ДС), программа не выполняет итоговое распределение суммы по чекам или этапам сразу. Вместо этого в регистр сведений ЗаданияКРаспределениюВзаиморасчетов записывается «намерение» произвести этот расчет позже. Рассмотрим основные причины, по которым очередь заданий может перестать обрабатываться:

  1. Блокировки данных: Если регламентное задание пытается обработать старый документ, который в данный момент заблокирован другим процессом или пользователем, вся очередь может «встать».
  2. Лавинообразный эффект: При массовом перепроведении документов за прошлые периоды или при загрузке данных из внешних систем количество новых записей превышает скорость работы регламентного задания.
  3. Ошибки в коде (X^2): В некоторых релизах наблюдалась проблема, когда при определенных условиях запрос 1С к этому регистру становился неоптимальным. Вместо обработки порции данных SQL-сервер пытался сопоставить огромные таблицы, что приводило к бесконечному ожиданию.
  4. Дата запрета редактирования: Если в регистре накопились «хвосты» за прошлые периоды, которые уже закрыты датой запрета, регламентное задание может не иметь прав на их изменение, из-за чего записи остаются в таблице навсегда.

Шаг 1: Очистка регистра заданий

Если в вашем регистре накопилось 50 миллионов записей, стандартные регламентные задания уже не смогут его «разгрести» самостоятельно. Проанализируем ситуацию: регистр ЗаданияКРаспределениюВзаиморасчетов является вспомогательным. Его очистка не удаляет сами движения по деньгам или товарам. Она лишь заставляет базу «забыть» о необходимости фонового пересчета.

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


Набор = РегистрыСведений.ЗаданияКРаспределениюВзаиморасчетов.СоздатьНаборЗаписей();
// Мы не устанавливаем фильтры, чтобы очистить таблицу целиком
Набор.Записать(); 

Для более сложных случаев можно изучить примеры корректировки записей регистра для выборочной очистки.

Важно: Аналогичную операцию стоит провести для регистров ВспомогательнаяИнформацияВзаиморасчетов и ЗаданияНеоперативногоДопроведенияДокументов, используя удаление записей регистров типа «Задания», если количество записей в них также исчисляется сотнями тысяч.

Шаг 2: Актуализация данных после очистки

После полной очистки таблицы Ведомость по взаиморасчетам может показывать неактуальные данные (например, висит долг при наличии оплаты, так как аванс не распределился). Выясним, как восстановить порядок без повторного раздувания регистра:

  1. Воспользуйтесь встроенной обработкой «Исправление заданий к распределению взаиморасчетов» или выполните создание отсутствующих ключей аналитики вручную.
  2. Запускайте распределение порциями: например, по одной конкретной организации или по одному месяцу. Это позволит избежать длительных блокировок.
  3. Если объем данных очень большой, рассмотрите возможность временного отключения контроля даты запрета для пользователя, под которым запускается расчет, чтобы система могла «пробросить» копейки в закрытых периодах.

Шаг 3: Настройка регламентных заданий

Чтобы проблема не повторилась, проверим настройки фоновых процессов. Перейдем в раздел Администрирование — Обслуживание — Регламентные задания — для контроля их работы пригодится расширение для мониторинга регламентных заданий. Нас интересуют два основных задания:

Проанализируем их расписание. В идеале они должны запускаться каждые 10-15 секунд. Если задания завершаются с ошибкой «Конфликт блокировок», стоит увеличить интервал до 1 минуты, чтобы процессы не мешали друг другу.

Шаг 4: Настройка параметров в интерфейсе

Посмотрим на настройки подсистемы «Казначейство». В новых версиях УТ 11.5 режим «Онлайн» является обязательным, однако есть нюанс. Проверьте опцию «Выполнять распределение взаиморасчетов при просмотре отчетов».

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

Дополнительные технические нюансы

Проанализируем работу SQL-сервера при работе с этим регистром. Когда таблица становится критически большой, индексы могут фрагментироваться. После очистки регистра рекомендуется выполнить Shrink базы данных и Reindex (реиндексацию), чтобы вернуть производительность на прежний уровень — сократить размер базы поможет обработка для свертки и сжатия базы 1С.

Если вы заметили, что записи продолжают плодиться без видимых причин (например, по одним и тем же документам), это может быть признаком ошибки округления валют в коде. В этом случае единственным долгосрочным решением будет обновление конфигурации на последний патч или релиз, так как 1С регулярно выпускает исправления именно для модулей распределения взаиморасчетов.

Таким образом, мы разобрали, что регистр ЗаданияКРаспределениюВзаиморасчетов — это всего лишь очередь, которую можно и нужно чистить при критических сбоях, соблюдая последовательность восстановления данных через порционное перепроведение или специализированные обработки — для этого пригодится утилита группового перепроведения и очистки движений.

← На главную