В современных релизах конфигурации 1С:Управление торговлей 11.5 (а также в ERP и КА 2.5) разработчики внедрили обновленный механизм «онлайн-взаиморасчетов». Его главная цель — ускорить проведение документов за счет выноса сложных расчетов (распределение авансов, расчет остатков по этапам оплаты) в фоновый режим. Однако на практике многие пользователи сталкиваются с тем, что технический регистр ЗаданияКРаспределениюВзаиморасчетов раздувается до десятков миллионов записей, что приводит к зависаниям базы и некорректным данным в отчетах. Разберем детально, как привести систему в порядок.
Проанализируем механику работы системы. При проведении любого документа, влияющего на расчеты (Заказ, Реализация, Поступление безналичных ДС), программа не выполняет итоговое распределение суммы по чекам или этапам сразу. Вместо этого в регистр сведений ЗаданияКРаспределениюВзаиморасчетов записывается «намерение» произвести этот расчет позже. Рассмотрим основные причины, по которым очередь заданий может перестать обрабатываться:
Если в вашем регистре накопилось 50 миллионов записей, стандартные регламентные задания уже не смогут его «разгрести» самостоятельно. Проанализируем ситуацию: регистр ЗаданияКРаспределениюВзаиморасчетов является вспомогательным. Его очистка не удаляет сами движения по деньгам или товарам. Она лишь заставляет базу «забыть» о необходимости фонового пересчета.
Рассмотрим, как безопасно очистить этот регистр программным способом. Для этого необходимо создать внешнюю обработку и выполнить следующий код:
Набор = РегистрыСведений.ЗаданияКРаспределениюВзаиморасчетов.СоздатьНаборЗаписей();
// Мы не устанавливаем фильтры, чтобы очистить таблицу целиком
Набор.Записать();
Для более сложных случаев можно изучить примеры корректировки записей регистра для выборочной очистки.
Важно: Аналогичную операцию стоит провести для регистров ВспомогательнаяИнформацияВзаиморасчетов и ЗаданияНеоперативногоДопроведенияДокументов, используя удаление записей регистров типа «Задания», если количество записей в них также исчисляется сотнями тысяч.
После полной очистки таблицы Ведомость по взаиморасчетам может показывать неактуальные данные (например, висит долг при наличии оплаты, так как аванс не распределился). Выясним, как восстановить порядок без повторного раздувания регистра:
Чтобы проблема не повторилась, проверим настройки фоновых процессов. Перейдем в раздел Администрирование — Обслуживание — Регламентные задания — для контроля их работы пригодится расширение для мониторинга регламентных заданий. Нас интересуют два основных задания:
Выполнение отложенных движений по расчетам с клиентамиВыполнение отложенных движений по расчетам с поставщикамиПроанализируем их расписание. В идеале они должны запускаться каждые 10-15 секунд. Если задания завершаются с ошибкой «Конфликт блокировок», стоит увеличить интервал до 1 минуты, чтобы процессы не мешали друг другу.
Посмотрим на настройки подсистемы «Казначейство». В новых версиях УТ 11.5 режим «Онлайн» является обязательным, однако есть нюанс. Проверьте опцию «Выполнять распределение взаиморасчетов при просмотре отчетов».
Рекомендация: Если у вас многомиллионная база, эту опцию лучше отключить. В противном случае каждый раз, когда бухгалтер будет открывать ведомость, система будет пытаться в реальном времени разгрести очередь заданий, что приведет к «мертвому» зависанию сеанса пользователя.
Проанализируем работу SQL-сервера при работе с этим регистром. Когда таблица становится критически большой, индексы могут фрагментироваться. После очистки регистра рекомендуется выполнить Shrink базы данных и Reindex (реиндексацию), чтобы вернуть производительность на прежний уровень — сократить размер базы поможет обработка для свертки и сжатия базы 1С.
Если вы заметили, что записи продолжают плодиться без видимых причин (например, по одним и тем же документам), это может быть признаком ошибки округления валют в коде. В этом случае единственным долгосрочным решением будет обновление конфигурации на последний патч или релиз, так как 1С регулярно выпускает исправления именно для модулей распределения взаиморасчетов.
Таким образом, мы разобрали, что регистр ЗаданияКРаспределениюВзаиморасчетов — это всего лишь очередь, которую можно и нужно чистить при критических сбоях, соблюдая последовательность восстановления данных через порционное перепроведение или специализированные обработки — для этого пригодится утилита группового перепроведения и очистки движений.