Почему смещаются поля в отчетах СКД при добавлении группировок и как это исправить?

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

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

Основная причина: "Другие настройки" и "Расположение полей группировок"

Проанализируем ситуацию по шагам. Главный виновник "развалившейся" структуры колонок — это параметры вывода, заданные на вкладке "Настройки" в разделе "Другие настройки". Конкретно нас интересует параметр РасположениеПолейГруппировок.

Часто разработчики или пользователи случайно (или по шаблону) устанавливают значение этой настройки в позицию Отдельно и только в итогах. Посмотрим, как это работает на практике:

  1. Значение новой группировки (например, "Организация") выводится в отдельной колонке.
  2. Но эта колонка заполняется данными только в строке итогов по данной группировке.
  3. В строках с детальными записями (или нижестоящими группировками) эта колонка остается пустой.
  4. Визуально это выглядит так, будто все остальные колонки (детальные записи и ресурсы) физически сдвинулись вправо, образуя "ступеньки" из пустых ячеек под названием организации.

Чтобы исправить эту проблему, перейдем в "Другие настройки" варианта отчета и изменим параметр РасположениеПолейГруппировок. Рассмотрим подробнее доступные варианты:

Дополнительные факторы: почему еще могут "съезжать" поля?

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

1. Расположение реквизитов
Если мы добавляем к группировке дополнительные реквизиты (например, к полю Организация добавляем поле Организация.ИНН), настройка их расположения также может сместить таблицу. Если в "Других настройках" выбрано "Отдельно" или "В отдельной колонке", СКД добавит новые столбцы. Если мы хотим сохранить компактность, выберем вариант "Вместе с владельцем" — тогда реквизит будет выводиться в той же ячейке (обычно через запятую).

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

3. Автопозиция ресурсов
Часто механизм компоновки пытается "угадать", где логичнее выводить показатели, и автоматически сдвигает их ближе к детальным записям. Чтобы жестко зафиксировать колонки ресурсов там, где вы их указали в выбранных полях, попробуем изменить настройку АвтопозицияРесурсов (выбрать "Не использовать"). Для автоматического избавления от пустых колонок также пригодится метод автоматического скрытия неиспользуемых столбцов в СКД.

Способы точного контроля структуры колонок

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

Использование вкладки "Выбранные поля" для конкретной группировки
На вкладке "Настройки" выделим конкретную группировку (например, ту же "Организацию"). Перейдем на нижнюю вкладку "Выбранные поля". По умолчанию там стоит элемент Авто. Снимем галку с авто-заполнения и вручную добавим только те поля и ресурсы, которые должны выводиться именно на этом уровне иерархии. Это позволяет избежать появления пустых ячеек под общими колонками. Для решения аналогичной задачи вывода показателей без лишнего дублирования можно использовать настройку вывода ресурса в СКД только в одной колонке.

Вертикальные и горизонтальные группы полей
Если колонки визуально разъезжаются, мы можем сгруппировать их. На вкладке "Выбранные поля" добавим элемент "Новая группа" (Папка) и поместим поля внутрь нее. В свойствах папки зададим тип расположения: "Горизонтально", "Вертикально" или "Горизонтально и вертикально". Это жестко скрепит нужные колонки вместе в шапке отчета.

Пользовательские макеты оформления
Если стандартными "Другими настройками" не удается добиться нужного вида, воспользуемся вкладкой "Макеты". Здесь мы можем создать собственный макет заголовка группировки или макет поля. В табличном документе макета жестко прорисовывается, в какой ячейке что должно находиться. Это 100% гарантия того, что СКД не "сломает" верстку.

Программная постобработка (для самых сложных случаев)
Иногда структура отчета настолько сложна, что проще выровнять и объединить колонки уже после того, как СКД сформировала результат. Рассмотрим пример программной постобработки в модуле объекта отчета:


Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    // Отключаем стандартный вывод
    СтандартнаяОбработка = Ложь;
    
    // Получаем настройки и формируем отчет программно
    Настройки = КомпоновщикНастроек.ПолучитьНастройки();
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
    
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
    
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);
    
    // Выполняем поиск нужных областей и объединяем или сдвигаем ячейки программно
    // ОбластьПоиска = ДокументРезультат.Область("R1C1:R5C5");
    // ... логика выравнивания макета ...
КонецПроцедуры

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

← На главную