Почему в УТ 11 не восстанавливается последовательность расчетов с поставщиками и как это исправить

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

При работе в программе «1С:Управление торговлей 11» пользователи часто сталкиваются со следующей проблемой: запускается стандартный механизм восстановления последовательности (через меню Проведение документов -> Восстановление последовательности), расчеты с клиентами успешно актуализируются и сдвигаются на текущую дату, а вот граница расчетов с поставщиками намертво «застывает» на какой-то старой дате. При этом групповое перепроведение документов проходит абсолютно гладко, система не выдает никаких ошибок, а в журнале регистрации отсутствуют какие-либо критические записи.

В этой статье мы подробно разберем, почему возникает подобная ситуация, как устроена архитектура взаиморасчетов в современных версиях УТ 11, и по шагам пройдем весь путь локализации и устранения этой проблемы.


Архитектурная причина: Офлайн-режим взаиморасчетов

Для того чтобы понять, почему стандартное восстановление последовательности не дает результатов, нам необходимо заглянуть под капот конфигурации «1С:Управление торговлей 11». В редакциях 11.1–11.4 по умолчанию часто используется так называемый «офлайновый» режим распределения взаиморасчетов.

В отличие от старых конфигураций (например, УТ 10.3), где зачет авансов и распределение платежей происходили непосредственно в момент проведения первичного документа (накладной или платежного поручения), в УТ 11 этот процесс разделен на два этапа:

  1. При проведении документа система лишь фиксирует сам факт хозяйственной операции и делает быструю запись в специальный вспомогательный регистр сведений — ЗаданияКРаспределениюРасчетовСПоставщиками (или аналогичный регистр по расчетам с клиентами).
  2. Непосредственный расчет остатков, распределение оплат по накладным и зачет авансов выполняются позже — в фоновом режиме или при закрытии месяца. Это делается для того, чтобы проведение документов в многопользовательском режиме происходило максимально быстро и без блокировок СУБД.

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


Проблемы с выполнением регламентных заданий

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


Скрытые ошибки в данных: как их найти

Часто фоновый алгоритм распределения расчетов спотыкается на конкретном документе из-за логических ошибок в данных. При обычном интерактивном проведении документа система не выдает ошибок, но при попытке распределить взаиморасчеты фоновым заданием происходит сбой.

Проанализируем наиболее частые скрытые ошибки:

  1. Пустой «Объект расчетов»: Такая проблема часто возникает при программном переносе документов из сторонних систем или при обновлении базы с очень старых релизов. В регистре сведений может быть сформировано задание к документу, у которого в табличной части или реквизитах шапки не заполнена ссылка на договор, соглашение или заказ (которые выступают в роли объекта расчетов). Руками документ проводится без проблем, но фоновый алгоритм распределения при попытке прочитать пустую ссылку «вылетает» по ошибке.
  2. Дублирование записей (нарушение уникальности): В редких случаях при сбое СУБД или некорректной работе распределенной информационной базы (РИБ) в физических таблицах регистров накопления взаиморасчетов могут появиться дублирующие записи. При попытке распределить расчеты сервер 1С пытается записать данные в регистр, но SQL-сервер возвращает ошибку нарушения уникальности индексов, и расчет по конкретному поставщику аварийно останавливается.

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


Решение проблемы: Переход на «Онлайн-взаиморасчеты»

Если вы работаете в современных версиях программы (начиная с релизов УТ 11.4 и выше), разработчики 1С предлагают кардинальное решение этой проблемы — переход на новую архитектуру «Онлайн-взаиморасчеты».

В режиме «Онлайн» распределение взаиморасчетов происходит мгновенно в момент проведения документов. Классический «офлайновый» механизм и регистры заданий к распределению в этом случае вообще не используются, а сама вкладка восстановления последовательности расчетов в интерфейсе становится неактивной или полностью скрывается. Это избавляет базу данных от необходимости регулярного запуска фоновых заданий актуализации.

Разберем по шагам, как переключить программу в этот режим:

  1. Перейдем в раздел НСИ и администрирование.
  2. Выберем пункт Настройка НСИ и разделов -> Казначейство и взаиморасчеты.
  3. В блоке настроек взаиморасчетов переключим режим ведения взаиморасчетов на «Онлайн».
  4. Запустим процедуру обновления данных (система автоматически пересчитает старые движения по новой схеме). Обратите внимание, что на больших базах данных этот процесс может занять значительное время и должен выполняться во время отсутствия пользователей в системе.

Практические шаги по исправлению (для офлайн-режима)

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

Шаг 1. Используем рабочее место «Закрытие месяца»

Забудьте про устаревшие обработки восстановления последовательности через стандартное меню проведения. Все расчеты в УТ 11 завязаны на единый регламент закрытия периода. Перейдем в раздел Финансовый результат и контроллинг -> Закрытие месяца. Запустим расчет для нужной организации. Обратим особое внимание на этап «Формирование движений по данным взаиморасчетов». Если на этом этапе возникает ошибка, система покажет детальный лог со ссылкой на конкретный документ-виновник.

Шаг 2. Ручная инициация заданий к распределению

Иногда система просто «теряет» информацию о том, что по какому-то контрагенту нужно пересчитать расчеты (например, если документы были изменены напрямую кодом без записи в регистры заданий). Мы можем инициировать расчет вручную:

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

Шаг 3. Очистка зависших сессий на сервере

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

  1. Откроем консоль администрирования кластера серверов 1С:Предприятия.
  2. Перейдем в список активных сеансов нашей базы данных.
  3. Найдем фоновые задания, связанные с актуализацией расчетов (в имени приложения будет указано BackgroundJob).
  4. Принудительно завершим эти сеансы, после чего повторим запуск актуализации из рабочего места закрытия месяца.

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

← На главную