Как отключить расчет ресурсов в общих итогах СКД при отсутствии группировок

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

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

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

Метод 1. Использование условного оформления

Рассмотрим самый простой визуальный способ, который не требует изменения структуры запроса или сложной настройки ресурсов. Мы можем оставить расчет итогов как есть, но просто скрыть результат от пользователя.

Для этого выполним следующие шаги:

  1. Перейдем на вкладку Настройки, а затем на закладку Условное оформление.
  2. Добавим новый элемент оформления.
  3. В поле Оформление установим параметр Текст и оставим значение пустым (или введем пробел).
  4. В Оформляемых полях выберем наше поле (например, Адрес), которое не должно отображаться в итогах.
  5. В Условии ничего не указываем, если хотим применить это ко всем итогам.
  6. Перейдем на вкладку Область использования. Это критически важный шаг: снимем все флажки и оставим активным только В общем итоге.

Этот метод хорош тем, что он «безопасен»: вы не сломаете логику компоновки, а просто очистите визуальное представление отчета.

Метод 2. Настройка области расчета в ресурсах

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

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


// В первой строке для поля "Адрес"
Выражение: СоединитьСтроки(Адрес)
Рассчитывать по: [Здесь укажите все ваши группировки, кроме Общего итога]

// Во второй строке для того же поля "Адрес"
Выражение: "" (пустая строка)
Рассчитывать по: ОбщийИтог

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

Метод 3. Замена «Детальных записей» на полноценную группировку

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

Посмотрим на алгоритм действий:

  1. В настройках отчета удалим элемент Детальные записи.
  2. Вместо него создадим новую группировку (без указания поля группировки — «пустая» группировка).
  3. В Выбранных полях этой группировки укажем все необходимые поля документа.
  4. Теперь на вкладке Ресурсы для поля Адрес в колонке Рассчитывать по... мы сможем выбрать нашу новую группировку.
  5. При этом для Общего итога расчет производиться не будет, если мы не укажем его в списке.

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

Метод 4. Вынос логики объединения в запрос

Рассмотрим ситуацию, когда использование ресурсов вообще не является обязательным. Часто программисты делают поле ресурсом только ради функции СоединитьСтроки. Мы можем реализовать аналогичную логику непосредственно в тексте запроса или использовать временные таблицы.

Если данные попадают в СКД уже подготовленными (строка адресов сформирована заранее в коде или вложенным запросом), нам достаточно вывести это поле как обычное поле набора данных. В этом случае:

Метод 5. Использование пустых выражений для Общего итога

Проанализируем продвинутый способ манипуляции выражениями. На закладке Ресурсы можно добавить две записи для одного и того же поля:

  1. Первая запись: выражение СоединитьСтроки(Адрес), поле Рассчитывать по оставить пустым (это значит рассчитывать везде).
  2. Вторая запись: выражение "" (пустые кавычки), поле Рассчитывать по установить в значение ОбщийИтог.

Важно: СКД приоритезирует более специфичные правила расчета. Правило для ОбщийИтог является более узким, чем общее правило, поэтому в подвале отчета система выведет пустую строку, проигнорировав основную формулу агрегации.

Метод 6. Управление через роли полей

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

Попробуем проверить вкладку Набор данных:

Метод 7. Отключение итогов в настройках вывода

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

Разберем шаги:

  1. Перейдем в Настройки — Другие настройки.
  2. Найдем параметр Расположение общих итогов по вертикали (и по горизонтали, если нужно).
  3. Установим значение Нет.

В этом случае строка итогов просто исчезнет из выходной формы, и проблема с суммированием строк перестанет быть актуальной.

Резюме: Для большинства задач оптимальным является Метод 1 (Условное оформление) благодаря своей простоте, либо Метод 5 (Пустое выражение для итогов), если вы хотите решить задачу на уровне логики ресурсов, не меняя визуальные настройки оформления.

← На главную