Как правильно отобрать полностью оплаченные реализации в отчете на СКД?

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

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

Разбор причин возникновения ошибки

Основная проблема при использовании ЛЕВОЕ СОЕДИНЕНИЕ между документом реализации и документами оплаты (ПриходныйКассовыйОрдер, ОперацияПоПлатежнойКарте) заключается в том, что в типовых конфигурациях 1С взаиморасчеты ведутся не на уровне документов, а через систему регистров накопления.

Рассмотрим ключевые причины, по которым данные «не попадают» в отчет:

  1. Детализация расчетов: Если в договоре контрагента не установлена детализация По документам, программа не хранит жесткую связь между конкретным платежом и конкретной реализацией.
  2. Сложные финансовые операции: Помимо прямых оплат, существуют возвраты товаров, взаимозачеты, списание задолженности и автоматический зачет авансов. Прямой запрос к табличным частям документов не учитывает эти движения.
  3. Порядок проведения: Нарушение хронологии ввода документов может приводить к тому, что система не «видит» оплату для конкретной реализации.

Метод решения через корректный запрос

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

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


ВЫБРАТЬ
    РеализацияТоваровУслугТовары.АБ_ПродажиМенеджер КАК АБ_ПродажиМенеджер,
    РеализацияТоваровУслугТовары.Ссылка КАК ДокументРеализации,
    СУММА(РеализацияТоваровУслугТовары.СуммаВзаиморасчетов) КАК СуммаРеализации,
    СУММА(ЕСТЬNULL(ПриходныйКассовыйОрдерРасшифровкаПлатежа.СуммаВзаиморасчетов, 0) + ЕСТЬNULL(ОперацияПоПлатежнойКартеРасшифровкаПлатежа.СуммаВзаиморасчетов, 0)) КАК СуммаОплат
ИЗ
    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
ЛЕВОЕ СОЕДИНЕНИЕ 
    Документ.ПриходныйКассовыйОрдер.РасшифровкаПлатежа КАК ПриходныйКассовыйОрдерРасшифровкаПлатежа 
    ПО РеализацияТоваровУслугТовары.Ссылка = ПриходныйКассовыйОрдерРасшифровкаПлатежа.ОснованиеПлатежа
ЛЕВОЕ СОЕДИНЕНИЕ 
    Документ.ОперацияПоПлатежнойКарте.РасшифровкаПлатежа КАК ОперацияПоПлатежнойКартеРасшифровкаПлатежа 
    ПО РеализацияТоваровУслугТовары.Ссылка = ОперацияПоПлатежнойКартеРасшифровкаПлатежа.ОснованиеПлатежа
СГРУППИРОВАТЬ ПО
    РеализацияТоваровУслугТовары.АБ_ПродажиМенеджер,
    РеализацияТоваровУслугТовары.Ссылка
ИМЕЮЩИЕ
    СУММА(РеализацияТоваровУслугТовары.СуммаВзаиморасчетов) = СУММА(ЕСТЬNULL(ПриходныйКассовыйОрдерРасшифровкаПлатежа.СуммаВзаиморасчетов, 0) + ЕСТЬNULL(ОперацияПоПлатежнойКартеРасшифровкаПлатежа.СуммаВзаиморасчетов, 0))

Обратите внимание на использование секции ИМЕЮЩИЕ. Именно она позволяет отфильтровать только те документы, где сумма реализации в точности совпадает с суммой по всем найденным платежным документам.

Профессиональный подход: использование регистров накопления

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

Почему это лучше:

Для реализации этого подхода выполните следующие действия:

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

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

← На главную