Часто при разработке отчетов в системе компоновки данных (СКД) возникает ситуация, когда при включенных детальных записях отчет выводит корректные суммы, а при отключении детальных записей и выводе только группировок значения в итогах становятся неверными или повторяют показатели первой строки. Давайте вместе разберемся, почему так происходит и как это исправить.
Первым делом важно понять, что СКД — это интеллектуальный механизм, который пытается оптимизировать ваш запрос в зависимости от настроек структуры. Когда вы отключаете детальные записи, СКД «видит», что часть полей больше не участвует в выводе, и может автоматически исключить их из итогового запроса. Если эти поля были критически важны для вычислений (например, участвовали в соединении таблиц или сложных формулах), итоговый результат может исказиться.
Для начала проанализируем настройки ресурсов:
Система компоновки данных активно использует механизм автоматического исключения полей. Если вы используете сложные запросы с ЛЕВОЕ СОЕДИНЕНИЕ, СКД может отбросить соединяемую таблицу, если поля из нее не выводятся в отчет. Чтобы этого избежать, мы можем принудительно заставить систему учитывать эти данные.
Рассмотрим пример правильной структуры запроса, который гарантированно дает корректные итоги:
ВЫБРАТЬ
Данные.Склад КАК Склад,
Данные.Номенклатура КАК Номенклатура,
Данные.Показатель КАК Показатель
ИЗ
(ВЫБРАТЬ "Склад 1" КАК Склад, "Ручка синяя" КАК Номенклатура, 100 КАК Показатель
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ "Склад 1", "Ручка красная", 200
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ "Склад 2", "Ручка красная", 400
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ "Склад 2", "Ручка синяя", 50) КАК Данные
Если при такой структуре у вас возникают проблемы, значит, проблема кроется в настройках группировок или в том, что в выражениях используется функция, которая неверно обрабатывает контекст при сворачивании данных.
Если стандартная сумма не помогает, воспользуемся следующими методами:
LEFT JOIN или нужные группировки), значит, СКД «считает» их лишними.ВычислитьВыражение. Например:
ВычислитьВыражение("Сумма(Показатель)", , "ОбщийИтог")
Ложь для детальных записей. Это позволит СКД сохранить все данные в итоговом запросе, но не выводить их на экран.Если в ваших формулах присутствует деление, обязательно используйте проверку на ноль. Часто при отключении детальных записей количество строк меняется, и если в знаменателе оказывается сумма по пустой выборке, результат может стать некорректным. Используйте конструкцию:
ВЫБОР
КОГДА Сумма(Знаменатель) = 0 ТОГДА 0
ИНАЧЕ Сумма(Числитель) / Сумма(Знаменатель)
КОНЕЦ
Применяя эти методы, мы сможем добиться стабильных и правильных итогов в любом отчете, независимо от того, какие настройки вывода детальных записей мы используем. Всегда помните, что СКД — это мощный инструмент, и при возникновении «странностей» в первую очередь стоит проверять текст запроса, который система формирует «под капотом».