При разработке отчетов или обработок в конфигурации Управление торговлей 10.3 часто возникает задача фильтрации заказов, которые не были оплачены в полном объеме. Многие разработчики сталкиваются с тем, что стандартные запросы к регистру РасчетыСКонтрагентами выдают неверные данные: в выборку попадают уже оплаченные заказы, или, наоборот, теряются данные при наличии нескольких сделок в одном договоре. Давайте разберемся, как решить эту задачу профессионально.
Прежде чем приступать к написанию кода, важно проанализировать, почему классический подход «остаток < 0» часто подводит. Основная проблема заключается в настройках ведения взаиморасчетов. Если в карточке ДоговорКонтрагента установлен признак ведения взаиморасчетов По договору в целом, поле Сделка в регистрах может заполняться некорректно или оставаться пустым. Это приводит к тому, что система не может однозначно идентифицировать, к какому именно заказу относится конкретная оплата.
Кроме того, механизм автоматического зачета авансов в УТ 10.3 может приводить к тому, что суммы перераспределяются между сделками внутри одного договора. В результате остаток по одной конкретной сделке становится нулевым, хотя фактически заказ еще не закрыт полностью по данным оперативного учета.
Чтобы исключить влияние некорректных остатков, лучше анализировать обороты по конкретной сделке. Для этого мы используем виртуальную таблицу Обороты регистра РасчетыСКонтрагентами. Разберем пример логики запроса, которая позволяет сравнить запланированные суммы и фактически произведенные оплаты.
Рассмотрим структуру запроса, которая позволяет извлечь данные для анализа:
ВЫБРАТЬ
РасчетыСКонтрагентами.Сделка КАК Заказ,
РасчетыСКонтрагентами.ДоговорКонтрагента КАК Договор,
РасчетыСКонтрагентами.СуммаВзаиморасчетовРасход КАК Запланировано,
РасчетыСКонтрагентами.СуммаВзаиморасчетовПриход КАК Оплачено
ИЗ
РегистрНакопления.РасчетыСКонтрагентами.Обороты(
,
&ДатаАнализа,
,
ДоговорКонтрагента = &ДоговорКонтрагента
) КАК РасчетыСКонтрагентами
ГДЕ
РасчетыСКонтрагентами.СуммаВзаиморасчетовПриход < РасчетыСКонтрагентами.СуммаВзаиморасчетовРасход
По заказам. Без этого параметра аналитика в разрезе сделок не будет достоверной.РасчетыСКонтрагентами не дает нужной точности из-за специфики учета, рассмотрите использование регистра ЗаказыПоставщикам. Он создан специально для отслеживания состояния обеспечения и оплаты заказов.СуммаВзаиморасчетовПриход (оплачено) и СуммаВзаиморасчетовРасход (запланировано). Условие Оплачено < Запланировано является универсальным для поиска частично или полностью неоплаченных заказов.&ДатаАнализа и &ДоговорКонтрагента, чтобы ограничить выборку и повысить производительность системы.Помните, что если в вашей конфигурации учет ведется не по заказам, программное получение списка неоплаченных сделок будет невозможным, так как в регистрах отсутствует необходимая аналитика. В таком случае необходимо либо перенастроить учетную политику (что требует осторожности), либо использовать более сложные объединения запросов, чтобы «вытянуть» информацию из других регистров накопления.
Применяйте предложенный метод с оборотами для создания отчетов по дебиторской и кредиторской задолженности. Это позволит вам видеть реальную картину платежной дисциплины по каждому контрагенту и заказу отдельно, исключая ошибки, связанные с автоматическим зачетом авансов.
Если вы столкнулись с тем, что даже после настройки учета данные отображаются неверно, проверьте корректность движений самих документов ЗаказПоставщику и ПлатежноеПоручениеИсходящее — возможно, причина кроется в ручной корректировке движений или некорректно заполненных реквизитах сделки в документах оплаты.