СКД: почему итог не равен сумме строк и как это проверить
Иван Недомолков · Опубликовано:
Итог в СКД может вычисляться в контексте группы, поэтому его расхождение с суммой видимых строк не всегда означает ошибку сложения. Сначала определите бизнес-правило: итог должен складывать результаты строк или заново вычислять показатель по группе. Для процентов и условных отклонений эти варианты часто расходятся.
Запишите ожидаемый результат вручную
Сделайте маленький набор с двумя товарами и двумя периодами. Например, в учебном наборе количество первого товара меняется с 10 до 14, второго со 100 до 100. При правиле “сложить абсолютные изменения по товарам” ожидается 4. Эти числа нужны только для проверки алгоритма, это не показатели проекта.
Добавьте позицию без предыдущего периода и отдельно позицию с нулём. Опишите, должен ли такой товар давать прирост, ноль или исключаться. Пустое значение и числовой ноль нельзя случайно объединять одной подстановкой: сначала согласуйте смысл.
Разделите вложенное выражение
Если ресурс содержит вычисление по группировке, временно выведите промежуточный результат. Для массива посмотрите элементы до внешнего суммирования. Сравните результат на строке товара, на категории и на пересечении с колонкой периода.
Повторяющееся значение для разных товаров подсказывает, что внутреннее выражение могло получить более широкий контекст. Это гипотеза для конкретной схемы. Проверьте имена группировок, оси кросс-таблицы, роли полей и настройки варианта. Из одного случая нельзя делать вывод, что все вложенные функции СКД работают неправильно.
Проверьте неполный набор сочетаний
Реальные данные редко содержат каждую пару “товар и год”. При сравнении с предыдущим периодом пропуски меняют результат соединения и смещения. Подготовьте случаи с новым товаром, исчезнувшим товаром и несколькими категориями.
Когда логику переносят в запрос, сначала определяют полный набор нужных ключей. Затем присоединяют данные сравниваемых периодов и явно обрабатывают отсутствие строки. Простое внутреннее соединение может выбросить новые или исчезнувшие позиции и сделать итог правдоподобным, но неполным.
Когда вынести расчёт из ресурса
Если показатель должен складываться из результатов по каждому товару, удобнее заранее получить эти результаты на нужной детализации и агрегировать их отдельно. Но сначала убедитесь, что это действительно правило отчёта. Средний процент по строкам и отношение общих сумм обозначают разные показатели.
При изменении выражения сохраните исходный вариант и контрольные результаты. Программно собранную схему проверьте отдельно от варианта, введённого в конфигураторе: ошибки кавычек и сериализации могут возникнуть ещё до вычисления. Разбор похожего расхождения между данными и итоговым показателем есть в статье “Показатель, которого нет вне отчёта”.
Приёмка исправления
Проверьте детализацию, промежуточные группы и общий итог на одном наборе. Повторите формирование с отбором по категории и с другим периодом. Если результат зависит от прав пользователя, добавьте прогон под рабочей ролью: ограничения доступа к полю могут менять результат СКД.
Успешное формирование отчёта проверяет только возможность выполнения. Приёмка требует совпадения с заранее рассчитанным результатом. При доработке отчётов 1С такой набор остаётся рядом с реализацией и используется после обновлений.