Почему в отчете на СКД неверно считаются общие итоги и как работает калькулятор 1С со свернутыми группировками?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При разработке отчетов на базе системы компоновки данных (СКД) разработчики нередко сталкиваются с ситуацией, когда детальные строки отчета выводятся корректно, однако строка Общий итог выдает неверное значение. Дополнительное недоумение вызывает проверка значений с помощью встроенного калькулятора 1С (кнопка M+ или автосумма), когда ручное сложение видимых строк дает результат, не совпадающий ни с СКД, ни с реальной суммой. Разберем по шагам причины такого поведения платформы и способы устранения обеих проблем.

Причина 1: Не задана роль «Измерение» для аналитических полей в СКД

Проанализируем, как компоновщик макета и процессор компоновки данных рассчитывают агрегатные значения. В схеме компоновки данных на вкладке Наборы данных для каждого поля можно настроить его роль (колонка Роль). По умолчанию платформа пытается определить роли автоматически, но при сложных запросах, обращении к документам или левых соединениях таблиц флаг Измерение может не установиться.

Если поле группировки (например, Организация или Контрагент) не помечено как измерение, СКД применяет базовые правила агрегации записей. В случае получения данных из документов или нереляционных выборок строки набора данных могут дублироваться на уровне выборки. Без признака измерения СКД не может однозначно определить границы уникальности записей для расчета итогов и начинает просто складывать все строки или некорректно рассчитывать остатки.

Решение проблемы с расчетом итогов в схеме компоновки

Разберем последовательность действий для исправления схемы компоновки данных:

  1. Откроем схему компоновки данных в конфигураторе или в обработке редактирования настроек.
  2. Перейдем на закладку Наборы данных и выберем нужный набор данных (запрос или объект).
  3. В табличной части со списком полей найдем поле группировки, по которому искажаются итоги (например, Организация).
  4. В колонке Роль нажмем кнопку выбора и в открывшемся окне установим флаг Измерение.
  5. Если в отчете используются поля-остатки или реквизиты других измерений (например, Договор.Контрагент), укажем в свойстве Родитель соответствующее базовое измерение.
  6. Сохраним схему и выполним повторное формирование отчета.

После установки роли Измерение система компоновки данных начинает корректно учитывать группировку при расчете итоговых значений, и строка Общий итог рассчитывается правильно как с отбором, так и без него.

Альтернативная настройка формул расчета ресурсов

Если структура данных содержит сложную многоуровневую иерархию и стандартное суммирование через Сумма(Поле) дает задвоение на уровне общих итогов, перейдем на вкладку Ресурсы. Для поля ресурса можно переопределить формулу расчета для группировки Общий итог, используя специализированные функции СКД:

Сумма(ВычислитьВыражениеСГруппировкойМассив("СуммаОборот", "Организация"))

Данное выражение вычисляет массив значений ресурса СуммаОборот на уровне уникальных записей группировки Организация и затем суммирует их, исключая дубли на детальном уровне.

Причина 2: Особенность работы встроенного калькулятора 1С со свернутыми строками

Выясним причину, по которой встроенный калькулятор 1С выдает завышенную сумму при попытке сложить строки отчета. Пользователи часто сворачивают отчет до верхнего уровня группировок и выделяют диапазон ячеек мышью или с помощью клавиши Shift, после чего нажимают клавишу M+ (добавить в калькулятор) или смотрят на автосумму в строке состояния.

В табличном документе 1С свернутые строки не удаляются из таблицы — они лишь физически скрываются (высота строк становится равной нулю или скрывается группировкой). Когда пользователь выделяет непрерывный диапазон ячеек через протяжку мыши сверху вниз по свернутым строкам, в область выделения попадает прямоугольный массив ячеек, включающий все скрытые дочерние строки.

В результате встроенный калькулятор суммирует:

  1. Сумму самой строки группировки (которая уже содержит сумму всех своих подчиненных строк).
  2. Все детальные строки, скрытые внутри этой группировки.

Это приводит к ровному задвоению (или многократному увеличению) расчетной суммы в калькуляторе.

Как правильно складывать значения в отчетах со структурой

Для корректного получения суммы через встроенный калькулятор или строку состояния применимы следующие подходы:

  1. Выделение с зажатой клавишей Ctrl: Если отчет свернут, выделим первую ячейку группировки, зажмем клавишу Ctrl и кликнем мышью по второй ячейке группировки. При таком выделении формируется список несмежных областей, куда скрытые строки не включаются, и калькулятор складывает только видимые числа.
  2. Сложение на развернутом отчете: Полностью развернем группировки отчета и выделим только детальные строки (без строк заголовков группировок), после чего нажмем M+.
  3. Копирование в отдельный табличный документ: Скопируем свернутые строки в новый документ без структуры, где скрытые строки не переносятся, и выполним суммирование стандартным способом.

Рекомендации по проектированию запросов в СКД

Чтобы избежать ошибок расчета итогов и упростить проверку отчетов пользователями, придерживаемся следующих правил:

  1. Использование регистров вместо документов: Для получения оборотов и остатков всегда обращаемся к виртуальным таблицам регистров накопления (Обороты, ОстаткиИОбороты), а не к табличным частям документов. Регистры уже содержат подготовленные измерения и корректно индексированы.
  2. Разделение наборов данных: Если необходимо объединить разнородные данные (например, фактические продажи из регистра и плановые показатели из документа), предпочтительно создавать два отдельных набора данных-запроса и настраивать связь между ними на закладке Связи наборов данных, а не использовать конструкции ЛЕВОЕ СОЕДИНЕНИЕ внутри одного запроса.
← На главную