Как отобразить в отчете по взаиморасчетам контрагентов без движений и с нулевым остатком в 1С:Управление торговлей 10.3

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

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

Архитектурные ограничения типовых отчетов и виртуальных таблиц

Выясним причину такого поведения системы. Типовые отчеты по расчетам с партнерами (например, «Ведомость по взаиморасчетам с контрагентами») построены на базе механизма «Построитель отчета» (универсального отчета) и обращаются напрямую к виртуальной таблице регистра накопления:

РегистрНакопления.ВзаиморасчетыСКонтрагентами.ОстаткиИОбороты

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

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

Способ 1. Обходной вариант штатными настройками со смещением периода

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

  1. Установим дату начала отчета на момент, когда задолженность еще существовала (например, начало вчерашнего дня), а дату окончания — на текущий момент.
  2. В расширенных настройках отчета добавим условие отбора: Сумма взаиморасчетов начальный остаток > 0 и Сумма взаиморасчетов конечный остаток = 0.
  3. В настройке колонок отключим вывод полей начального остатка и оборотов, оставив для отображения только конечный остаток.

В таком случае в отчет попадут только те клиенты, которые имели долг на начало расширенного периода и полностью погасили его к текущей дате.

Способ 2. Создание внешнего отчета с левым соединением

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

Разберем по шагам построение текста запроса. В качестве ведущей таблицы выберем Справочник.Контрагенты, к которой присоединим данные регистра расчетов, используя функцию ЕСТЬNULL для заполнения отсутствующих числовых значений нулями:


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

Данный отчет сохраняется как внешний файл с расширением .epf и подключается в базу через справочник «Внешние обработки» без снятия конфигурации с поддержки.

Способ 3. Реализация схемы компоновки данных (СКД) с несколькими наборами данных

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

  1. В схеме компоновки данных создадим два набора данных — запроса:
    • НаборДанных_Контрагенты: запрос к таблице Справочник.Контрагенты с выборкой ссылок и необходимых реквизитов;
    • НаборДанных_Взаиморасчеты: запрос к виртуальной таблице РегистрНакопления.ВзаиморасчетыСКонтрагентами.ОстаткиИОбороты с параметрами периода.
  2. Перейдем на вкладку «Связи наборов данных».
  3. Укажем источником связи НаборДанных_Контрагенты, приемником — НаборДанных_Взаиморасчеты, условие связи настроим по полю Ссылка = ДоговорКонтрагента.Владелец (или соответствующему полю аналитики контрагента).
  4. На вкладке «Ресурсы» определим числовые поля (остатки и обороты) с выражением агрегации ЕСТЬNULL(Сумма(СуммаВзаиморасчетовКонечныйОстаток), 0).

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

← На главную