← На главную
При активном перепроведении документов товародвижения (заказов, реализаций, платежных документов) в современных редакциях «1С:Управление торговлей 11.5» многие сталкиваются с лавинообразным ростом записей в регистре сведений ЗаданияКРаспределениюВзаиморасчетов. Это приводит к блокировкам базы данных, разрастанию таблиц СУБД и значительному снижению производительности. Разберем архитектуру этого механизма, выясним причины зависания очереди и определим правильные способы устранения проблемы без риска исказить данные учета.
Архитектура онлайн-взаиморасчетов: почему формируются задания при отсутствии режима «Офлайн»
Проанализируем распространенное заблуждение: многие считают, что отказ разработчиков от старого режима «Офлайн» означает проведение всех движений строго в транзакции документа. В действительности в редакции 11.5 используется двухуровневая архитектура взаиморасчетов, призванная снизить количество блокировок при оперативной работе пользователей:
- Оперативная очередь: простые и быстрые движения, рассчитываемые непосредственно при проведении документа или сразу после него в коротком фоновом потоке.
- Неоперативная очередь: тяжелые расчеты (смещение дат погашения задолженности, пересчет курсовых разниц, цепочки распределения авансов и долгов по ФИФО). При изменении документов задним числом система автоматически отправляет расчет в эту очередь.
Регистр сведений ЗаданияКРаспределениюВзаиморасчетов служит входной точкой для неоперативной очереди. Штатной функциональностью отключить формирование этих записей невозможно, так как от них напрямую зависит корректность данных в регистрах РасчетыСКлиентамиПоСрокам и РасчетыСПоставщикамиПоСрокам.
Рассматриваемый регистр тесно связан со служебным контуром, включающим:
РегистрСведений.ЗаданияНеоперативногоДопроведенияДокументов
РегистрСведений.ОшибкиОчередейЗаданий
РегистрСведений.ПриоритетныеЗаданияНеоперативнойОчереди
Какие регламентные задания отвечают за расчет взаиморасчетов
Разберем назначение фоновых заданий, присутствующих в системе, чтобы исключить запуск устаревших или дублирующих процедур:
- «Исполнение неоперативной очереди заданий» — это главное актуальное регламентное задание для УТ 11.5. Именно оно считывает накопленные порции из регистра
ЗаданияКРаспределениюВзаиморасчетов, вычисляет распределение и формирует детальные движения по срокам. Данное задание должно быть обязательно включено.
- «Выполнение отложенных движений по расчетам с клиентами\поставщиками» — механизм старой архитектуры распределения (рудимент прошлых редакций). В условиях актуальной онлайн-схемы оно не обрабатывает новую очередь и при отсутствии переходных процессов может быть отключено.
- «Выполнение отложенных заданий» — общий инфраструктурный диспетчер библиотечных подсистем, который обрабатывает пулы заданий общего назначения и напрямую за ядро взаиморасчетов не отвечает.
Причины лавинообразного роста очереди и торможения СУБД
Выясним, почему регистр начинает заполняться миллионами строк при массовом перепроведении:
- Каскадный пересчет цепочек. Изменение даты или суммы в накладной по договору или заказу аннулирует ранее зафиксированное распределение всех последующих оплат и отгрузок по этому объекту расчетов, порождая лавину зависимых записей.
- Ошибки и мертвые блокировки. Если фоновое задание при обработке очереди сталкивается с коллизией (блокировка объекта другим сеансом, некорректная аналитика), запись фиксируется в регистре
ОшибкиОчередейЗаданий. Обработка очереди на проблемном объекте прекращается, но новые документы продолжают накапливаться.
- Даты запрета изменения данных. Если регламентное задание запущено под пользователем, для которого установлена дата запрета изменения, фоновый процесс не может записать движения в закрытый период и аварийно завершает обработку.
- Эскалация блокировок на уровне SQL. При накоплении сотен тысяч нераспределенных записей запросы выборки пакетов начинают использовать тяжелые временные таблицы, что приводит к разрастанию tempdb и взаимным блокировкам (deadlocks).
Опасность ручной очистки регистра
Принудительное удаление записей из регистра ЗаданияКРаспределениюВзаиморасчетов (через групповую обработку или напрямую из таблиц СУБД) устраняет только симптом, но разрушает учет:
- Основной регистр остатков (например,
РасчетыСКлиентами) сохраняет движения из проведенного документа.
- Регистры срочности и графиков (
РасчетыСКлиентамиПоСрокам) не получают движений, так как очередь была уничтожена до выполнения расчета.
- В отчетах по дебиторской и кредиторской задолженности возникает рассинхронизация: общий долг не сходится с долгом по срокам, выпадают плановые даты платежей, а процедура закрытия месяца завершается ошибками.
Пошаговый алгоритм решения проблемы и перепроведения документов
Разберем по шагам, как правильно разгрузить систему и выполнить перепроведение данных:
- Анализ регистра ошибок: откроем регистр сведений
ОшибкиОчередейЗаданий. Если в нем есть строки, разберем причины сбоев (нераспределенные остатки, конфликты блокировок), устраним их и очистим ошибочные статусы.
- Проверка прав регламентного задания: убедимся, что регламентное задание «Исполнение неоперативной очереди заданий» выполняется от имени учетной записи с полными административными правами, не ограниченной датами запрета изменения данных.
- Порционное проведение документов: при необходимости восстановить последовательность товародвижения откажемся от сплошного группового перепроведения за длительные периоды. Разобьем массив на небольшие интервалы (например, по одной-две недели или по отдельным организациям), дожидаясь полного разбора очереди заданий между этапами.
- Ускорение обработки очереди: на время масштабных регламентных работ временно настроим расписание задания
Исполнение неоперативной очереди заданий с интервалом запуска каждую минуту, ограничив время одного сеанса.
- Восстановление данных после очистки: если регистр ранее уже был очищен вручную, выполним регламентную процедуру закрытия месяца, запустив этап «Актуализация движений документов по данным взаиморасчетов», либо воспользуемся типовой служебной обработкой заполнения регистров взаиморасчетов для восстановления согласованности регистров.