Как убрать лишние объединенные ячейки и раздваивание шапки в отчете СКД при выгрузке в Excel?

Программист 1С v8.3 (Обычные формы) 1C:Бухгалтерия Бухгалтерский учет
← На главную

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

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

Почему происходит "раздваивание" шапки?

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

Решение 1: Использование собственных макетов группировок

Рассмотрим основной метод борьбы со сложной структурой шапки — назначение имен группировкам и создание для них индивидуальных макетов. Это позволяет жестко задать структуру ячеек, которую СКД не будет пытаться "оптимизировать" самостоятельно.

Для реализации этого метода выполним следующие шаги:

  1. В схеме компоновки данных выберем нужную группировку колонок.
  2. В свойствах группировки установим Имя (например, АнализГруппаНачислений).
  3. Перейдем на закладку Макеты и добавим Макет группировки.
  4. Укажем имя нашей группировки и тип макета (Заголовок).
  5. В макете нарисуем нужную область, объединим ячейки так, как они должны выглядеть в итоге, и назначим параметры для вывода текста.

Использование макетов заставляет систему использовать предопределенную сетку ячеек, что значительно упрощает структуру итогового документа.

Решение 2: Программная обработка в ПриКомпоновкеРезультата

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

Разберем по шагам код, который позволяет принудительно "схлопнуть" лишние объединения:


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

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

Решение 3: Оптимизация "Других настроек" СКД

Рассмотрим подробнее дополнительные параметры на вкладке Другие настройки, которые влияют на формирование структуры таблицы:

  1. Расположение полей группировок: Попробуйте установить значение Отдельно или Отдельно и только в итоге. Это предотвращает создание сложных иерархических "лестниц" в шапке.
  2. Авто отступ: Установите значение Не использовать. Это уберет резервирование места под иерархические сдвиги внутри ячеек, что делает таблицу более линейной.
  3. Расположение реквизитов: Если в группировках используются реквизиты (например, Код и Наименование), установите значение Отдельно. Если выбрано Вместе с группировкой, СКД создаст внутри одной ячейки сложную структуру с переносом, которая в Excel часто превращается в две строки.

Решение 4: Проблема итоговых колонок (Всего)

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

Также полезно программно установить фиксированную высоту строк для области шапки после вывода:


Для НомерСтроки = 1 По ВысотаШапки Цикл
    СтрокаШапки = ДокументРезультат.Область(НомерСтроки, , НомерСтроки, );
    СтрокаШапки.АвтоВысотаСтроки = Ложь;
    СтрокаШапки.ВысотаСтроки = 15; // Установка фиксированной высоты
КонецЦикла;

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

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

← На главную