Как в отчете на СКД жестко задать порядок полей при группировке по нескольким измерениям?

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

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

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

Понимание работы механизма «Автополе»

Разберем ситуацию: почему поля в отчете встают не так, как нам хочется? Чаще всего причина кроется в элементе Автополе. По умолчанию, когда мы создаем новую группировку в настройках СКД, в списке «Выбранные поля» этой группировки уже находится этот элемент.

Проанализируем его поведение: Автополе — это своего рода заглушка, которая приказывает системе вывести все поля, указанные на вкладке «Поля группировки» (в верхней части настроек), в том порядке, который СКД посчитает оптимальным. Если мы хотим «железного» порядка, нам нужно отказаться от автоматики.

Алгоритм действий для фиксации порядка:

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

Настройка расположения полей группировок

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

Рассмотрим параметр Расположение полей группировок. Он находится на вкладке Другие настройки (на уровне всего отчета или конкретной группировки). У этого параметра есть несколько важных значений:

Выберем значение Отдельно, чтобы получить полный контроль над каждой колонкой.

Управление позицией ресурсов (числовых показателей)

Часто порядок нарушается из-за ресурсов (Сумма, Количество). По умолчанию СКД стремится вынести все ресурсы в правую часть отчета. Если нам нужно вставить текстовое поле между двумя суммами или сохранить строгий порядок «Поле 1 — Ресурс 1 — Поле 2», стандартное поведение системы будет нам мешать.

Проанализируем настройку Автопозиция ресурсов в «Других настройках»:

По умолчанию там установлено значение Использовать. Это заставляет систему группировать все ресурсы вместе. Чтобы управлять порядком ресурсов вручную наравне с обычными полями, установим значение Не использовать. После этого ресурсы в списке «Выбранные поля» станут вести себя как обычные элементы, и их можно будет перемещать вверх и вниз, определяя их точное место среди колонок.

Использование детальных записей как контейнера

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

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

Влияние ролей полей в наборе данных

Если визуальные настройки не помогают, стоит заглянуть «под капот» — на вкладку Наборы данных. У каждого поля есть свойство Роль. Рассмотрим, как это влияет на порядок:

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

Программное управление порядком полей

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


// Получаем настройки компоновщика
Настройки = Отчет.КомпоновщикНастроек.Настройки;

// Находим нужную группировку (например, первую в списке)
Группировка = Настройки.Структура[0];

// Очищаем текущие выбранные поля группировки (удаляем Автополе)
Группировка.ВыбранныеПоля.Элементы.Очистить();

// Добавляем поля в строгом порядке
НовоеПоле = Группировка.ВыбранныеПоля.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
НовоеПоле.Поле = Новый ПолеКомпоновкиДанных("Склад");
НовоеПоле.Использование = Истина;

НовоеПоле = Группировка.ВыбранныеПоля.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
НовоеПоle.Поле = Новый ПолеКомпоновкиДанных("Ответственный");
НовоеПоле.Использование = Истина;

// Не забываем добавить ресурсы, если они нужны в этой группировке
НовоеПоле = Группировка.ВыбранныеПоля.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
НовоеПоле.Поле = Новый ПолеКомпоновкиДанных("СуммаОборот");
НовоеПоле.Использование = Истина;

Этот метод гарантирует, что никакие интерактивные действия пользователя в режиме 1С:Предприятие (кроме изменения самого кода) не нарушат структуру колонок.

Заблуждение о системном поле «НомерПоПорядку»

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

Итоги настройки

Выясним краткий чеклист, который поможет всегда держать колонки под контролем:

  1. Удаляем Автополе из выбранных полей группировки.
  2. Добавляем поля вручную в нужном порядке.
  3. В «Других настройках» устанавливаем Расположение полей группировок в значение Отдельно.
  4. Устанавливаем Автопозиция ресурсов в значение Не использовать.
  5. При необходимости используем «Детальные записи» для вывода плоской таблицы под иерархией.

Следуя этим правилам, мы добьемся того, что отчет будет выглядеть именно так, как требует техническое задание, а колонки перестанут «прыгать» при изменении состава группировок.

← На главную