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