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