Почему криво сохраняется табличный документ СКД в Excel и PDF и как это исправить?

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

При программном формировании отчетов на базе системы компоновки данных (СКД) и их последующем сохранении в форматы Excel (XLSX) или PDF разработчики нередко сталкиваются с визуальными искажениями: «ломается» сетка ячеек, сбиваются шрифты, появляются непредвиденные переносы строк или пустые поля. Разберем основные причины такого поведения платформы 1С и рассмотрим пошаговые методы исправления результирующего табличного документа.

Программный вывод отчета в табличный документ

Для начала проанализируем базовый алгоритм программного формирования отчета через СКД с последующей выгрузкой в файл:


Результат = Новый ТабличныйДокумент;

// Инициализируем процессор вывода
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(Результат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);

// Сохранение в требуемый формат
Результат.Записать("E:\reports\Report.xlsx", ТипФайлаТабличногоДокумента.XLSX);
Результат.Записать("E:\reports\Report.pdf", ТипФайлаТабличногоДокумента.PDF);

Если результат на экране или в файле выглядит некорректно, выполним последовательную диагностику возможных причин.

Причина 1. Избыточное или некорректное условное оформление в СКД

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

Выясним, на что следует обратить внимание в схеме СКД:

  1. Откроем схему компоновки данных и перейдем на вкладку «Настройки», затем в раздел «Условное оформление».
  2. Проверим наличие правил, переопределяющих параметры Шрифт, Высота, МинимальнаяШирина, МаксимальнаяШирина или Размещение.
  3. Если оформление задано на уровне всего отчета, но применяется к отдельным полям группировок, это может приводить к разрыву колонок. Отключим подозрительные правила и повторно сформируем документ.

Причина 2. Сохраненные настройки пользователя и параметры печати

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

Для устранения влияния сохраненных параметров выполним следующие действия:

  1. Очистим сохраненные настройки формы и отчета для текущего пользователя через раздел администрирования информационной базы (Хранилище настроек).
  2. При программном формировании явно инициализируем чистый экземпляр объекта ТабличныйДокумент без считывания настроек печати пользователя.

Причина 3. Особенности компоновки сетки колонок («лесенка» в Excel)

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

Для получения ровной сетки колонок настроим параметры структуры в СКД:

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

Причина 4. Параметры страницы и автомасштабирование

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


// Включаем автоподгонку по ширине листа
Результат.АвтоМасштаб = Истина;

// Устанавливаем ландшафтную ориентацию для широких таблиц
Результат.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;

// Отключаем фиксацию строк и колонок, если она смещает сетку при экспорте
Результат.ФиксацияСверху = 0;
Результат.ФиксацияСлева = 0;

Причина 5. Отсутствие шрифтов на сервере (Linux)

Если регламентное задание формирует отчет на сервере под управлением ОС Linux, отсутствие стандартных шрифтов (например, пакета msttcorefonts или liberation-fonts) приводит к ошибкам расчета метрик строк. Платформа 1С не может корректно рассчитать размеры ячеек, из-за чего текст обрезается или перекрывает соседние области.

Решением является установка базовых TrueType-шрифтов в операционную систему сервера 1С:Предприятия и обновление кэша шрифтов.

Поэлементный вывод для точного контроля структуры

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


ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(Результат);

ПроцессорВывода.НачатьВывод();

Пока Истина Цикл
    ЭлементРезультата = ПроцессорКомпоновкиДанных.СледующийЭлемент();
    Если ЭлементРезультата = Неопределено Тогда
        Прервать;
    КонецЕсли;
    
    // Выводим элемент в табличный документ
    ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
КонецЦикла;

ПроцессорВывода.ЗакончитьВывод();

Комплексная проверка настроек условного оформления, параметров страницы и структуры группировок позволяет гарантировать корректное отображение отчетов СКД при выгрузке в любые офисные форматы.

← На главную