Как в СКД вывести один ресурс по месяцам, а остальные — только общим итогом?

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

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

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

Способ 1. Управление составом выбранных полей для конкретных группировок

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

Рассмотрим по шагам, как это реализовать:

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

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

Способ 2. Ограничение расчета ресурса по группировкам

Иногда требуется более жесткое управление на уровне метаданных отчета. Мы можем указать системе, в каких именно разрезах (группировках) разрешено вычислять тот или иной показатель. Это делается на вкладке Ресурсы в конфигураторе.

Разберем этот метод подробнее:

  1. Откроем вкладку Ресурсы.
  2. Найдем поле Сумма. В колонке Рассчитывать по... по умолчанию пусто (это значит — везде). Нажмем на кнопку выбора и укажем только те группировки, где этот ресурс должен отображаться (например, Номенклатура и ОстатокИтого).
  3. Важно не выбирать в этом списке группировку Месяц.
  4. Повторим аналогичные действия для всех ресурсов, которые не должны «разворачиваться» по горизонтали.

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

Способ 3. Использование механизма условного оформления для скрытия полей

Если структура отчета сложная и предыдущие методы не дают желаемого визуального эффекта (например, остаются пустые заголовки колонок), можно воспользоваться Условным оформлением. Этот метод позволяет «затереть» ненужные данные в определенных контекстах.

Выполним следующие действия:

  1. В настройках отчета перейдем на вкладку Условное оформление.
  2. Добавим новый элемент оформления.
  3. В области Оформление выберем параметр Текст и установим ему значение — пустая строка (просто ничего не пишем).
  4. В области Условие добавим условие: Месяц Заполнено. Это будет означать, что оформление применяется только в тех ячейках, которые относятся к детализации по месяцам.
  5. В области Оформляемые поля выберем те ресурсы, которые мы хотим скрыть из месячной детализации (например, Ресурс1, Ресурс2).

Таким образом, в итоговых колонках (где поле Месяц не заполнено) значения будут видны, а в развороте по периодам — скрыты. Это отличный способ быстро поправить визуальную часть без изменения логики запросов.

Способ 4. Структура с двумя таблицами в одном отчете

Как упоминалось в обсуждении на форуме (сообщение 9), иногда проще всего разделить отчет на две логические части, следующие друг за другом. Это полезно, если ресурсы имеют принципиально разную природу и их сложно объединить в одну таблицу.

Для реализации этого подхода выполним такие действия:

  1. В корне настроек отчета (в самом верху дерева) добавим две Группировки (или две Таблицы).
  2. В первой таблице настроим вывод Номенклатуры и общих ресурсов (Сумма, Вал).
  3. Во второй таблице, которая будет располагаться ниже (или правее, если использовать группировку «Группа колонок»), настроим вывод Номенклатуры и Количества по месяцам.

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

Способ 5. Использование вычисляемых полей и системных функций

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

Например, в выражении ресурса можно использовать конструкцию:


Выбор 
    Когда &ПериодВывода = "Месяц" Тогда 0 
    Иначе Сумма(СуммаОборот) 
Конец

Однако стоит помнить, что СКД не всегда позволяет напрямую обращаться к именам текущих группировок в выражениях ресурсов. Чаще используется проверка через системные поля, такие как СистемныеПоля.НомерВГруппировке. Если НомерВГруппировке для горизонтальной группировки больше 0, значит, мы находимся внутри колонки периода, и значение ресурса можно обнулить.

Резюме

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

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

← На главную