Часто при разработке отчетов в 1С на Системе Компоновки Данных (СКД) возникает задача максимально точно воспроизвести внешний вид отчета, предоставленного заказчиком. Одна из таких нетривиальных задач — отображение данных из разных полей в одной колонке на разных уровнях группировки. Например, на верхнем уровне в колонке отображается "Вид расходов" (например, "ТМЦ", "Услуги"), а на вложенном уровне в этой же колонке — "Аналитика" (например, "Ведро", "Работа1").
Стандартное поведение СКД предлагает либо выводить вложенную группировку с отступом в той же колонке, либо размещать каждую группировку в своей собственной, отдельной колонке. Рассмотрим несколько способов, как обойти эти ограничения и добиться нужного результата.
Этот метод основан на гибком использовании свойства РасположениеПолейГруппировки на разных уровнях настроек отчета. Идея заключается в том, чтобы сначала задать общее правило для всех группировок, а затем переопределить его для конкретной вложенной группировки.
Разберем по шагам:
РасположениеПолейГруппировки значение "Отдельно". Это заставит СКД по умолчанию создавать для каждой новой группировки отдельную колонку.РасположениеПолейГруппировки установите значение "Вместе". Это действие отменит общее правило для данной конкретной группировки и заставит СКД разместить ее поле в той же колонке, что и родительское поле ("ВидРасходов").В результате поле "ВидРасходов" будет выведено в своей колонке, а поле "Аналитика" будет выведено в той же колонке, но на уровень ниже, как и требовалось. Однако у этого способа есть недостаток: если в отчете есть другие колонки (например, ресурсы), то в строках с группировкой "ВидРасходов" ячейки под колонкой "Аналитика" (если бы она была отдельной) и другими последующими полями могут остаться пустыми. Это может быть критично при выгрузке отчета в Excel, если требуется сплошное заполнение таблицы.
Посмотрим на пример структуры отчета в формате XML, который реализует этот подход:
<settings>
<selection>
<item xsi:type="SelectedItemField">
<field>Сумма</field>
</item>
</selection>
<settingsVariant>
<dcsset:groupingPositionsPlacement>Separately</dcsset:groupingPositionsPlacement>
<dcsset:structure>
<dcsset:item xsi:type="dcsset:Grouping">
<dcsset:field>ОбъектВвода</dcsset:field>
<dcsset:item xsi:type="dcsset:Grouping">
<dcsset:field>ВидРасходов</dcsset:field>
<dcsset:item xsi:type="dcsset:Grouping">
<dcsset:groupingPositionsPlacement>Together</dcsset:groupingPositionsPlacement> <!-- Вот ключевая настройка -->
<dcsset:field>Аналитика</dcsset:field>
</dcsset:item>
</dcsset:item>
</dcsset:item>
</dcsset:structure>
</settingsVariant>
</settings>
Если требуется абсолютный контроль над внешним видом, включая заголовки и расположение данных, самым мощным инструментом являются макеты СКД. Этот способ сложнее в настройке, но позволяет реализовать практически любой дизайн.
Работа с макетами требует больше времени, но она снимает практически все ограничения стандартного вывода СКД.
Это элегантный способ "подменить" выводимый текст в зависимости от условий, не меняя кардинально структуру отчета. Условное оформление может не только менять цвет и шрифт, но и сам отображаемый текст.
Разберем по шагам:
ВЫБОР КОГДА Аналитика = NULL ТОГДА ВидРасходов ИНАЧЕ Аналитика КОНЕЦ.Этот метод позволяет сохранить логичную структуру группировок, но при этом управлять тем, что именно видит пользователь в ячейке.
В самых сложных случаях, когда требуется идеальный результат для печати или выгрузки в Excel, можно вмешаться в процесс формирования отчета программно.
Порядок действий:
ПриКомпоновкеРезультата.СтандартнаяОбработка = Ложь;, чтобы отменить стандартный вывод отчета на экран.ТабличныйДокумент.Этот метод является наиболее трудоемким, но предоставляет неограниченный контроль над итоговым представлением отчета.