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