Как избежать задвоения строк при выводе данных из двух табличных частей документа в одном наборе данных СКД?

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

При попытке вывести данные из двух разных табличных частей одного документа (например, Продукция и Материалы) в одном запросе СКД, мы часто сталкиваемся с проблемой декартова произведения. Поскольку в запросе используется ЛЕВОЕ СОЕДИНЕНИЕ, каждая строка продукции дублируется столько раз, сколько строк материалов ей соответствует. Давайте разберем, как решить эту задачу изящно, не прибегая к сложным объединениям наборов данных.

Решение 1: Использование агрегатной функции Максимум в ресурсах

Самый простой способ борьбы с «лишними» числами — это настройка ресурсов СКД. Когда СКД пытается просуммировать данные после соединения, она суммирует каждое повторение. Чтобы получить корректное количество продукции, достаточно изменить метод агрегации.

  1. Перейдите на вкладку Ресурсы в настройках схемы компоновки данных.
  2. В поле Выражение для ресурса КоличествоПродукции укажите функцию Максимум(КоличествоПродукции).
  3. Теперь при выводе отчета система вместо суммирования всех дубликатов возьмет максимальное значение для каждой группы. Это избавит отчет от визуального задвоения данных.

Важное примечание: Будьте внимательны при использовании этого метода, если вам необходимы общие итоги по отчету. Метод Максимум отлично подходит для детальных записей, но может исказить общую сумму, если логика построения отчета сложная.

Решение 2: Использование функции ВычислитьВыражениеСГруппировкойМассив

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

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

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


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

Рассмотрим, что здесь происходит:

Анализ ситуации: почему это работает?

Проблема «задвоения» возникает на уровне SQL-запроса, когда количество строк увеличивается из-за соединения. СКД видит таблицу-результат как плоский список. Когда мы указываем Максимум в ресурсах, мы говорим системе: «не суммируй эти повторяющиеся числа, а покажи только одно, самое большое».

Если же мы используем ВычислитьВыражениеСГруппировкойМассив, мы переходим на уровень выше — мы работаем не с сырыми данными запроса, а с объектами группировок СКД. Это более профессиональный и надежный подход для сложных отчетов, так как он сохраняет математическую корректность отчета при расчете общих итогов.

Практический совет: Если вы столкнулись с тем, что отчет все равно выдает странные результаты, проверьте настройки иерархии группировок. Вынесение Продукции в верхний уровень, а Материалов в нижний, также помогает СКД «понять», что эти данные относятся к разным уровням иерархии, что снижает вероятность ошибок при отображении показателей.

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

← На главную