Как вывести промежуточные итоги по колонкам в СКД 1С?

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

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

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

Вариант 1. Настройка структуры колонок с использованием отборов (Решение «по красоте»)

Этот способ является наиболее гибким, так как он не требует изменения схемы данных или написания сложного кода в запросе. Вся логика реализуется исключительно в настройках структуры отчета в конфигураторе или в режиме «1С:Предприятие».

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

  1. Отключение стандартных итогов: По умолчанию СКД выводит общий итог в самом конце горизонтальной группировки. Так как мы будем формировать структуру итогов вручную, стандартный общий итог нам будет мешать. Перейдем на вкладку «Настройки», выберем вкладку «Другие настройки» и установим параметр «Расположение общих итогов по горизонтали» в значение «Нет».
  2. Создание структуры колонок таблицы: Перейдем в окно конструирования структуры отчета. В секции «Колонки» нам необходимо создать цепочку последовательных (соседних) группировок на одном уровне вложенности.
    1. Группировка «Избранные покупатели»: Добавим группировку по полю Покупатель. Перейдем в настройки этой конкретной группировки на вкладку «Отбор» и установим условие: Покупатель В (&Избранные). Здесь &Избранные — это параметр отчета типа «Список значений», в который пользователь будет подбирать нужных контрагентов.
    2. Промежуточный итог по избранным: Добавим рядом (на том же уровне, а не внутрь!) новую группировку. Поле группировки указывать не нужно — оставим ее пустой (детальные записи).
      • В настройках этой группировки перейдем на вкладку «Отбор» и укажем точно такое же условие: Покупатель В (&Избранные).
      • Перейдем на вкладку «Выбранные поля», снимем флажок «Авто» и добавим только ресурс Количество.
      • Чтобы колонка в отчете имела понятное название, в свойствах выбранного поля или через «Условное оформление» зададим тексту заголовка значение «Итого по избранным».
    3. Группировка «Остальные покупатели»: Добавим третью группировку на том же уровне по полю Покупатель. В ее настройках отбора зададим противоположное условие: НЕ Покупатель В (&Избранные). В эту группу попадут все контрагенты, не вошедшие в список избранных.
    4. Промежуточный итог по остальным: Создадим четвертую пустую группировку (детальные записи) на том же уровне.
      • Наложим отбор: НЕ Покупатель В (&Избранные).
      • В «Выбранных полях» оставим только ресурс Количество.
      • Зададим заголовок колонки: «Итого по прочим».
    5. Общий итог таблицы: Создадим пятую пустую группировку на том же уровне. Накладывать отборы на нее не нужно. В выбранных полях укажем только ресурс Количество, а заголовок переименуем в «Общий итог».

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

Вариант 2. Динамическая категоризация через «Вычисляемые поля»

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

Разберем данный метод по шагам:

  1. Перейдем на вкладку «Вычисляемые поля» в конструкторе схемы компоновки данных.
  2. Добавим новую строку со следующими параметрами:
    • Путь к данным: КатегорияПокупателя
    • Заголовок: Категория покупателя
    • Выражение:
      
      ВЫБОР КОГДА Покупатель В (&Избранные) ТОГДА "Избранные покупатели" ИНАЧЕ "Другие покупатели" КОНЕЦ
      
  3. Перейдем на вкладку «Настройки». В структуре колонок таблицы добавим группировку по нашему вычисляемому полю КатегорияПокупателя.
  4. Внутрь созданной группировки (как подчиненную) добавим группировку по полю Покупатель.
  5. Для родительской группировки КатегорияПокупателя в окне «Другие настройки» укажем параметр «Расположение итогов» в значение «После» (или «Конец»).

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

Вариант 3. Настройка пользовательских полей в режиме «1С:Предприятие»

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

Выясним, как настроить аналогичные промежуточные итоги самостоятельно:

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

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

Вариант 4. Реализация логики разделения в запросе (Вариант «в лоб»)

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

Рассмотрим пример реализации такого запроса:


ВЫБРАТЬ
    Продажи.Товар КАК Товар,
    Продажи.Покупатель КАК Покупатель,
    ВЫБОР
        КОГДА Продажи.Покупатель В (&Избранные)
            ТОГДА Продажи.Количество
        ИНАЧЕ 0
    КОНЕЦ КАК КоличествоИзбранные,
    ВЫБОР
        КОГДА Продажи.Покупатель В (&Избранные)
            ТОГДА 0
        ИНАЧЕ Продажи.Количество
    КОНЕЦ КАК КоличествоПрочие
ИЗ
    РегистрНакопления.Продажи КАК Продажи

После этого на вкладке «Ресурсы» мы определяем два новых ресурса: Сумма(КоличествоИзбранные) и Сумма(КоличествоПрочие). В структуре отчета мы выводим детальные записи, где колонками будут являться непосредственно эти два ресурса.

Важное предостережение: Несмотря на простоту реализации, этот метод имеет существенный недостаток. Пользователи не увидят детальные колонки по конкретным покупателям в горизонтальном разрезе — они увидят лишь две сводные колонки («Продажи избранным» и «Продажи прочим»). Если бизнес-требование звучит как «показать детально каждого покупателя + итоги по группам», данный вариант категорически не подходит, так как избалованные пользователи откажутся от такого интерфейса.

Особенности расчета сложных ресурсов («Рассчитывать по...»)

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

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

Правильная настройка вкладки «Ресурсы» гарантирует, что и промежуточные итоги по группам, и финальный общий итог по горизонтали будут математически верными при любых схемах группировки данных.

← На главную