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