При разработке простых отчетов в схеме компоновки данных (СКД) разработчики нередко сталкиваются с ситуацией: числовые показатели, такие как сумма, выводятся в итоговой строке корректно, а поле количества остается пустым. Часто возникает ошибочное предположение, будто платформа 1С анализирует смысл данных и намеренно запрещает суммировать разные единицы измерения или упаковки (например, штуки, коробки разного размера или килограммы с литрами).
Выясним причину такого поведения платформы и подробно разберем, как заставить СКД подсчитывать любые числовые показатели в общих итогах и группировках.
Схема компоновки данных не проверяет физический или бизнес-смысл суммируемых величин. Для механизма компоновки любые числовые поля — это просто абстрактные математические значения. СКД не будет блокировать суммирование только потому, что в одной строке указаны паллеты, а в другой — штуки.
Если поле присутствует в детальных записях отчета, но отсутствует в строке Общий итог или в строках группировок, причина заключается исключительно в технических настройках схемы компоновки.
Рассмотрим основной механизм агрегации данных в СКД. Любое поле, по которому требуется рассчитывать итоги (сумму, среднее, минимум, максимум), должно быть явно объявлено как ресурс схемы компоновки.
КоличествоУпаковок или Количество) в список ресурсов.
Сумма(КоличествоУпаковок)
Номенклатура), то на уровне всего отчета и вышестоящих узлов итог рассчитываться не будет.Проанализируем структуру настроек на вкладке Настройки. Даже если поле добавлено в ресурсы, оно может не отображаться в общих итогах из-за некорректного размещения в выбранных полях:
Разберем ситуацию, когда ресурс добавлен, но в итоговой ячейке отображается пустота. Это может происходить при наличии неопределенных значений или несовместимых типов:
ЛЕВОЕ СОЕДИНЕНИЕ, в результате могут появляться значения NULL. В ряде выражений это приводит к пустому результату агрегации. В запросе всегда оборачиваем числовые поля:
ЕСТЬNULL(Таблица.КоличествоУпаковок, 0) КАК КоличествоУпаковок
Число). Если поле ошибочно распознано как Строка или имеет составной тип, агрегатные функции работать не будут.Посмотрим на задачу с точки зрения бизнес-логики. Сложение разнородных коробок (например, маленьких объемом 0.01 куб. м и больших объемом 1 куб. м) дает число упаковок, но не всегда объективно отражает складскую нагрузку. Разберем, как сделать такой отчет более информативным:
Сумма(КоличествоУпаковок * Номенклатура.Объем)
Это позволит получить реальный суммарный объем груза для планирования складских мощностей и транспорта.Упаковка в группировку строк или колонок таблицы СКД. В таком случае система рассчитает промежуточные суммы отдельно по маленьким и большим коробкам, сохранив логику учета без смешивания разнородных единиц.