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