При программном формировании отчетов на базе системы компоновки данных (СКД) и их последующем сохранении в форматы Excel (XLSX) или PDF разработчики нередко сталкиваются с визуальными искажениями: «ломается» сетка ячеек, сбиваются шрифты, появляются непредвиденные переносы строк или пустые поля. Разберем основные причины такого поведения платформы 1С и рассмотрим пошаговые методы исправления результирующего табличного документа.
Для начала проанализируем базовый алгоритм программного формирования отчета через СКД с последующей выгрузкой в файл:
Результат = Новый ТабличныйДокумент;
// Инициализируем процессор вывода
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(Результат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
// Сохранение в требуемый формат
Результат.Записать("E:\reports\Report.xlsx", ТипФайлаТабличногоДокумента.XLSX);
Результат.Записать("E:\reports\Report.pdf", ТипФайлаТабличногоДокумента.PDF);
Если результат на экране или в файле выглядит некорректно, выполним последовательную диагностику возможных причин.
Одной из наиболее частых скрытых причин искажения макета является условное оформление. Если в схеме компоновки данных или в настройках отчета заданы правила оформления ячеек (например, изменение шрифта, объединение, перенос текста, минимальная или максимальная ширина/высота), они могут вступать в конфликт с общей сеткой документа.
Выясним, на что следует обратить внимание в схеме СКД:
Шрифт, Высота, МинимальнаяШирина, МаксимальнаяШирина или Размещение.Если отчет формируется в контексте пользовательского сеанса или информационной базы, платформа может автоматически применять сохраненные параметры отображения и печати из системных хранилищ настроек. Это приводит к тому, что документ генерируется с устаревшими или поврежденными параметрами страницы.
Для устранения влияния сохраненных параметров выполним следующие действия:
ТабличныйДокумент без считывания настроек печати пользователя.СКД по умолчанию выводит поля вложенных группировок в единую таблицу, создавая большое количество объединенных ячеек разной ширины. При экспорте в XLSX такой документ крайне неудобен для работы.
Для получения ровной сетки колонок настроим параметры структуры в СКД:
При экспорте в PDF или выводе на печать широкий табличный документ может разбиваться на множество страниц по горизонтали. Чтобы отчет корректно умещался на листе, зададим параметры страницы программно перед сохранением:
// Включаем автоподгонку по ширине листа
Результат.АвтоМасштаб = Истина;
// Устанавливаем ландшафтную ориентацию для широких таблиц
Результат.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
// Отключаем фиксацию строк и колонок, если она смещает сетку при экспорте
Результат.ФиксацияСверху = 0;
Результат.ФиксацияСлева = 0;
Если регламентное задание формирует отчет на сервере под управлением ОС Linux, отсутствие стандартных шрифтов (например, пакета msttcorefonts или liberation-fonts) приводит к ошибкам расчета метрик строк. Платформа 1С не может корректно рассчитать размеры ячеек, из-за чего текст обрезается или перекрывает соседние области.
Решением является установка базовых TrueType-шрифтов в операционную систему сервера 1С:Предприятия и обновление кэша шрифтов.
Если стандартный вывод через ПроцессорВывода.Вывести() не позволяет добиться нужного форматирования, используем поэлементный вывод. Это дает возможность управлять каждой строкой до ее помещения в документ:
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(Результат);
ПроцессорВывода.НачатьВывод();
Пока Истина Цикл
ЭлементРезультата = ПроцессорКомпоновкиДанных.СледующийЭлемент();
Если ЭлементРезультата = Неопределено Тогда
Прервать;
КонецЕсли;
// Выводим элемент в табличный документ
ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
КонецЦикла;
ПроцессорВывода.ЗакончитьВывод();
Комплексная проверка настроек условного оформления, параметров страницы и структуры группировок позволяет гарантировать корректное отображение отчетов СКД при выгрузке в любые офисные форматы.