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