Разберем частую ситуацию, с которой сталкиваются разработчики и пользователи при работе с Системой компоновки данных (СКД) в 1С. Допустим, у нас есть рабочий отчет, в который возникла необходимость добавить новую группировку — например, в разрезе организаций. Однако при формировании отчета с новой группировкой мы видим, что поля с данными (такие как километраж, простой или суммы) непонятным образом "смещаются" вправо. Структура таблицы визуально нарушается, появляются пустые ячейки в строках детальных записей. Выясним причину такого поведения и подробно рассмотрим способы решения этой проблемы.
Проанализируем ситуацию по шагам. Главный виновник "развалившейся" структуры колонок — это параметры вывода, заданные на вкладке "Настройки" в разделе "Другие настройки". Конкретно нас интересует параметр РасположениеПолейГруппировок.
Часто разработчики или пользователи случайно (или по шаблону) устанавливают значение этой настройки в позицию Отдельно и только в итогах. Посмотрим, как это работает на практике:
Чтобы исправить эту проблему, перейдем в "Другие настройки" варианта отчета и изменим параметр РасположениеПолейГруппировок. Рассмотрим подробнее доступные варианты:
Если настройка группировок выставлена корректно, но колонки все равно выглядят не так, как ожидалось, проанализируем другие популярные причины смещения в СКД.
1. Расположение реквизитов
Если мы добавляем к группировке дополнительные реквизиты (например, к полю Организация добавляем поле Организация.ИНН), настройка их расположения также может сместить таблицу. Если в "Других настройках" выбрано "Отдельно" или "В отдельной колонке", СКД добавит новые столбцы. Если мы хотим сохранить компактность, выберем вариант "Вместе с владельцем" — тогда реквизит будет выводиться в той же ячейке (обычно через запятую).
2. Расположение ресурсов
Если в отчете много показателей (ресурсов), СКД может менять их отображение. По умолчанию стоит "Горизонтально". Если изменить настройку на "Вертикально", ресурсы начнут выстраиваться друг под другом в строках, а не в колонках. Это полностью перестроит шапку таблицы и может создать эффект "смещения" данных.
3. Автопозиция ресурсов
Часто механизм компоновки пытается "угадать", где логичнее выводить показатели, и автоматически сдвигает их ближе к детальным записям. Чтобы жестко зафиксировать колонки ресурсов там, где вы их указали в выбранных полях, попробуем изменить настройку АвтопозицияРесурсов (выбрать "Не использовать"). Для автоматического избавления от пустых колонок также пригодится метод автоматического скрытия неиспользуемых столбцов в СКД.
Разберем продвинутые методы настройки, если нам требуется жесткий контроль над тем, чтобы ничего никуда не смещалось.
Использование вкладки "Выбранные поля" для конкретной группировки
На вкладке "Настройки" выделим конкретную группировку (например, ту же "Организацию"). Перейдем на нижнюю вкладку "Выбранные поля". По умолчанию там стоит элемент Авто. Снимем галку с авто-заполнения и вручную добавим только те поля и ресурсы, которые должны выводиться именно на этом уровне иерархии. Это позволяет избежать появления пустых ячеек под общими колонками. Для решения аналогичной задачи вывода показателей без лишнего дублирования можно использовать настройку вывода ресурса в СКД только в одной колонке.
Вертикальные и горизонтальные группы полей
Если колонки визуально разъезжаются, мы можем сгруппировать их. На вкладке "Выбранные поля" добавим элемент "Новая группа" (Папка) и поместим поля внутрь нее. В свойствах папки зададим тип расположения: "Горизонтально", "Вертикально" или "Горизонтально и вертикально". Это жестко скрепит нужные колонки вместе в шапке отчета.
Пользовательские макеты оформления
Если стандартными "Другими настройками" не удается добиться нужного вида, воспользуемся вкладкой "Макеты". Здесь мы можем создать собственный макет заголовка группировки или макет поля. В табличном документе макета жестко прорисовывается, в какой ячейке что должно находиться. Это 100% гарантия того, что СКД не "сломает" верстку.
Программная постобработка (для самых сложных случаев)
Иногда структура отчета настолько сложна, что проще выровнять и объединить колонки уже после того, как СКД сформировала результат. Рассмотрим пример программной постобработки в модуле объекта отчета:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
// Отключаем стандартный вывод
СтандартнаяОбработка = Ложь;
// Получаем настройки и формируем отчет программно
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
// Выполняем поиск нужных областей и объединяем или сдвигаем ячейки программно
// ОбластьПоиска = ДокументРезультат.Область("R1C1:R5C5");
// ... логика выравнивания макета ...
КонецПроцедуры
Применяя эти настройки и подходы, мы всегда сможем добиться идеального внешнего вида отчета в СКД и забыть о проблеме непредсказуемого смещения полей и группировок.