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