При построении кросс-таблиц в системе компоновки данных (СКД) разработчики часто сталкиваются с типовой задачей: необходимо вывести отчет в виде матрицы (например, строки — номенклатура, колонки — склады или подразделения, на пересечении — количество и сумма), но при этом поле Цена требуется показать отдельной фиксированной колонкой, не дублируя его для каждого склада.
Выясним причину, почему платформа 1С по умолчанию ведет себя иначе. В классической архитектуре СКД поля группировок строк формируют левую часть таблицы, поля группировок колонок образуют горизонтальную динамическую шапку, а любые поля, объявленные на вкладке Ресурсы, платформа автоматически выводит строго на пересечении измерений строк и колонок, а также в секциях итогов. Штатным перемещением полей внутри настроек строки поместить ресурс внутрь заголовков строк невозможно. Параметр Авто позиция ресурсов со значением Не использовать помогает только в простых отчетах типа «Список», но игнорируется внутри кросс-таблиц.
Разберем практические способы решения этой задачи в зависимости от того, должна ли цена рассчитываться как агрегируемый ресурс или она представляет собой обычный реквизит номенклатуры.
Проанализируем ситуацию, когда поле Цена обязательно должно оставаться на вкладке Ресурсы (например, по нему рассчитывается формула Среднее(Цена) или Максимум(Цена)). Чтобы ресурс выводился обособленно и не попадал под динамическую группировку, необходимо разделить шапку колонок таблицы на две независимые ветки верхнего уровня.
Разберем по шагам порядок настройки структуры отчета на вкладке Настройки:
Цена. Данная ветка сформирует фиксированную вертикальную колонку.Количество и Сумма).При таком подходе платформа формирует единую кросс-таблицу, в которой слева выводится номенклатура, затем идет фиксированная колонка с рассчитанным ресурсом Цена, а правее разворачиваются динамические колонки измерений с остальными числовыми показателями.
Рассмотрим подробнее альтернативный вариант. Если цена однозначно привязана к номенклатуре в разрезе строки отчета и агрегировать ее формулами СКД не требуется, делать ее ресурсом избыточно. В этом случае цена переводится в разряд обычных полей группировки или реквизитов.
Разберем по шагам настройку отчета:
Цена из списка рассчитываемых ресурсов. Оставим там только истинные суммовые показатели (Количество, Сумма).Номенклатура и Цена.Цена в состав полей группировки вместе с номенклатурой, указав для цены тип Дополнительная информация или Без иерархии.В результате поле Цена будет выводиться отдельной колонкой в левой части отчета, непосредственно в блоке строк, а в динамической части таблицы останутся только показатели на пересечении колонок.
Если стандартное позиционирование через структуру колонок не позволяет добиться нужного визуального оформления, рассмотрим вариант с переопределением макета.
Цена.Использование пользовательского макета позволяет жестко спозиционировать ячейку с ценой в единой строке с наименованием номенклатуры, полностью обойдя стандартный механизм матричного вывода ресурсов кросс-таблицы.