Как найти неоплаченные накладные в УТ 11 и почему не заполняется регистр Расчеты с поставщиками по документам

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

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

Архитектура взаиморасчетов в УТ 11: две модели учета

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

  1. Оффлайн-модель (характерна для версий до 11.4.11 и старых релизов типа 11.1): В этой модели при проведении первичных документов (Накладных, Платежек) движения делаются только в «оперативном» регистре РасчетыСПоставщиками. Детализация до конкретных документов (сопоставление авансов и долгов по методу FIFO) происходит позже.
  2. Онлайн-модель (появилась в 11.4 и стала основной в 11.5): Здесь распределение происходит непосредственно в момент проведения документа. Если эта опция включена, оба регистра (общий и детальный) заполняются синхронно.

Если вы работаете в версии 11.1 или в новой версии с выключенными автоматическими расчетами, регистр РасчетыСПоставщикамиПоДокументам будет заполняться только после запуска регламентного задания или выполнения обработки «Распределение расчетов».

Различия между регистрами РасчетыСПоставщиками и РасчетыСПоставщикамиПоДокументам

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

Регистр РасчетыСПоставщиками является основным. В нем хранится информация о задолженности в разрезе объектов расчетов. Объект расчетов — это ключевое понятие. В зависимости от настроек договора, объектом расчетов может выступать:

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

Почему в регистре РасчетыСПоставщикамиПоДокументам нет движений?

Проанализируем основные причины отсутствия данных в этом регистре, с которыми столкнулся автор темы:

1. Настройки учетной политики и ФО. Проверьте путь: НСИ и администрирование — Настройка НСИ и разделов — Финансы — Взаиморасчеты. Если флаг «Автоматически рассчитывать взаиморасчеты» снят, данные в детальный регистр будут попадать только при закрытии месяца или через фоновое задание.

2. Регламентные задания. За распределение расчетов отвечает задание Регистрация расчетов с поставщиками (в старых версиях) или Выполнение отложенных движений по расчету с партнерами. Если у вас файловая база и не запущен отдельный сеанс для обработки заданий, регистр будет пустовать.

3. Порядок расчетов в договоре. Хотя в теме упоминалось, что стоит «По накладным», важно помнить: если расчеты ведутся «По накладным», то сама накладная и есть объект расчетов. В этом случае информация о долге по конкретной ПТУ уже присутствует в основном регистре РасчетыСПоставщиками.

Как программно найти неоплаченные ПТУ

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

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


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	РасчетыСПоставщикамиОстатки.ОбъектРасчетов КАК ДокументПоступления,
    |	РасчетыСПоставщикамиОстатки.СуммаОстаток КАК ОстатокДолга
    |ИЗ
    |	РегистрНакопления.РасчетыСПоставщиками.Остатки(&Период, Поставщик = &Поставщик) КАК РасчетыСПоставщикамиОстатки
    |ГДЕ
    |	РасчетыСПоставщикамиОстатки.СуммаОстаток > 0";

Запрос.УстановитьПараметр("Период", ТекущаяДата());
Запрос.УстановитьПараметр("Поставщик", ВыбранныйПартнер);

Важный нюанс: Если в поле ОбъектРасчетов находится ссылка на Документ.ПриобретениеТоваровУслуг, это означает, что расчеты ведутся детализировано по накладным, и вам не нужно обращаться к регистру ...ПоДокументам. Вы сразу получаете остаток по конкретной ПТУ.

Что делать, если расчеты ведутся «По договору»?

В ситуации, когда объект расчетов — Договор, а вам нужно найти, какие именно накладные в рамках этого договора не оплачены, ситуация усложняется. Посмотрим на алгоритм действий:

  1. Проверить актуальность расчетов. В программном коде перед получением остатков можно инициировать распределение расчетов. В УТ 11 для этого существуют специальные методы в модулях менеджеров расчетов.
  2. Если расчеты актуальны, обратитесь к регистру РасчетыСПоставщикамиПоДокументам. Там измерение Документ будет содержать нужную вам накладную, даже если ОбъектРасчетов — договор.

Пример кода для проверки актуальности (для версий 11.4+):


ПараметрыРасчета = ВзаиморасчетыСервер.ПараметрыРаспределения();
ПараметрыРасчета.Партнер = НужныйПартнер;
ВзаиморасчетыСервер.ВыполнитьРаспределениеРасчетов(ПараметрыРасчета);

Выводы и рекомендации

Подведем итог нашего анализа. Для автоматического заполнения Взаимозачета:

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

← На главную