Как связать документы реализации и оплаты в отчете для 1С:УПП 1.3

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

В конфигурации «1С:Управление производственным предприятием, редакция 1.3» (УПП) задача сопоставления документов отгрузки (реализаций) и документов оплаты является одной из самых частых. Трудность заключается в том, что в зависимости от настроек договоров контрагентов взаиморасчеты могут вестись как в разрезе конкретных сделок и документов, так и по договору в целом. Во втором случае прямая физическая связь между накладной и платежом в оперативных регистрах отсутствует, и система распределяет платежи по методу FIFO.

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

Понимание архитектуры расчетов в УПП 1.3

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

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

Выяснив эти особенности, мы можем составить два варианта запросов для получения связи «Реализация — Оплата».

Вариант А: Запрос для детализации по документам расчетов

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

Рассмотрим пример такого запроса:


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

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

Вариант Б: Универсальный запрос по регистру «Расчеты по реализации»

Если у вас в договорах не всегда установлена детализация расчетов, то предыдущий запрос вернет пустой результат или неполные данные. Чтобы решить эту проблему универсально, мы обратимся к регистру РасчетыПоРеализации. В нем программа фиксирует сопоставление по FIFO независимо от настроек договора.

Проанализируем структуру запроса к этому регистру:


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

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

Как получить физически подчиненные документы одним запросом

Иногда перед разработчиком стоит задача найти не просто финансовую оплату по регистру, а вообще все документы, которые были созданы на основании конкретной реализации (например, доверенности, акты расхождений, корректировки или непосредственно связанные платежи, введенные "на основании").

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


ВЫБРАТЬ
	СвязанныеДокументы.Ссылка КАК ПодчиненныйДокумент
ИЗ
	КритерийОтбора.СвязанныеДокументы(&ПараметрСсылкаНаРеализацию) КАК СвязанныеДокументы

Этот запрос вернет плоский список документов, в которых реквизиты ссылаются на переданную в параметре &ПараметрСсылкаНаРеализацию накладную. Однако помните: если оплата разносилась автоматически (не вводом на основании), критерий отбора ее не покажет. Для финансовой отчетности всегда следует использовать регистры накопления, описанные в Вариантах А и Б.

Настройка СКД для вывода результатов

Теперь рассмотрим, как превратить полученную таблицу связей в красивый и понятный пользователю отчет с помощью Системы компоновки данных. Создадим новый отчет, добавим схему компоновки данных и поместим один из наших запросов в набор данных - запрос.

Определим поле СуммаОплаты как Ресурс на соответствующей вкладке СКД, указав для него выражение Сумма(СуммаОплаты).

Перейдем на вкладку Настройки и разберем два варианта представления структуры отчета.

Вывод оплат в строках под реализацией (Дерево)

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

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

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

Вывод оплат в колонках справа (Таблица)

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

Разберем процесс настройки по шагам:

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

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

Важный нюанс: Последовательность расчетов

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

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

← На главную