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