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

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

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

Выясним причину, почему платформа 1С по умолчанию ведет себя иначе. В классической архитектуре СКД поля группировок строк формируют левую часть таблицы, поля группировок колонок образуют горизонтальную динамическую шапку, а любые поля, объявленные на вкладке Ресурсы, платформа автоматически выводит строго на пересечении измерений строк и колонок, а также в секциях итогов. Штатным перемещением полей внутри настроек строки поместить ресурс внутрь заголовков строк невозможно. Параметр Авто позиция ресурсов со значением Не использовать помогает только в простых отчетах типа «Список», но игнорируется внутри кросс-таблиц.

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

Способ 1. Вывод цены через соседнюю группировку колонок (когда цена является ресурсом)

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

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

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

При таком подходе платформа формирует единую кросс-таблицу, в которой слева выводится номенклатура, затем идет фиксированная колонка с рассчитанным ресурсом Цена, а правее разворачиваются динамические колонки измерений с остальными числовыми показателями.

Способ 2. Вывод цены в шапку строк (когда агрегация цены не требуется)

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

Разберем по шагам настройку отчета:

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

В результате поле Цена будет выводиться отдельной колонкой в левой части отчета, непосредственно в блоке строк, а в динамической части таблицы останутся только показатели на пересечении колонок.

Способ 3. Применение пользовательского макета группировки

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

  1. Перейдем на вкладку Макеты схемы компоновки данных.
  2. Добавим Макет группировки для группировки строк с номенклатурой.
  3. Нарисуем область ячеек строки группировки, добавив дополнительную ячейку для вывода цены.
  4. В свойствах ячейки укажем тип заполнения Параметр и свяжем ее с полем Цена.

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

← На главную