При формировании объёмных документов, таких как прайс-листы с фотографиями товаров, пользователи часто сталкиваются с нетипичным поведением программы: созданный файл PDF содержит сотни или тысячи пустых листов, а сам документ разрастается до огромных размеров в несколько гигабайт. При попытке сохранить такой прайс в Excel программа либо зависает, либо сгенерированный файл отказывается открываться в сторонних офисных пакетах.
В этой статье мы разберем причины возникновения данной проблемы и пошагово рассмотрим, как правильно настроить макет табличного документа и параметры печати, чтобы избавиться от пустых страниц и оптимизировать размер итогового файла.
Выясним причины возникновения пустых страниц
Появление чередующихся пустых листов при сохранении табличного документа из 1С в формат PDF или отправке на виртуальный принтер связано с тем, как платформа разбивает печатные формы на страницы. Проанализируем основные факторы:
Выход ширины макета за физическую границу печатной страницы. Если суммарная ширина столбцов или выводимых графических элементов (картинок товаров) превышает ширину области печати хотя бы на один пиксель, 1С автоматически разбивает документ по горизонтали. В результате первая страница содержит левую часть таблицы, вторая — правую (которая часто оказывается пустой или содержит только краевую рамку ячейки), третья — продолжение таблицы снизу и так далее.
Скрытое форматирование крайних колонок. Наличие фоновой заливки, рамки, пробелов или случайно измененных ячеек в столбцах справа от основной таблицы заставляет платформу считать эти колонки частью печатного документа.
Использование полноразмерных исходных фото. При выгрузке прайс-листа с изображениями товаров 1С вставляет в файл оригиналы картинок без предварительного сжатия. Если в базе хранится 15–20 тысяч номенклатурных позиций с фотографиями по 2–5 МБ каждая, итоговый документ достигает размера 1.5 ГБ в PDF или десятков мегабайт в Excel, что вызывает зависание программ LibreOffice и Microsoft Excel при попытке построить дерево элементов таблицы.
Проанализируем режим просмотра страниц в 1С
Чтобы убедиться, что проблема именно в съехавших разделителях страниц, воспользуемся встроенным инструментом визуализации печатных областей платформы 1С.
Перед формированием всего массива данных на 20 000 позиций настоятельно рекомендуется выполнить тестовую выгрузку на 20–100 товаров. Это позволит оперативно увидеть разметку и внести необходимые правки в макет.
Для диагностики сформированного табличного документа выполним следующие шаги:
Сформируем табличный документ с небольшой выборкой товаров.
В главном меню 1С перейдем по пути: Таблица — Вид — Режим просмотра страниц.
Проанализируем синие пунктирные и сплошные линии, показывающие физическое разбиение документа на листы.
Если в этом режиме справа от таблицы видна широкая пустая полоса, пересекаемая вертикальной линией границы страницы, это означает, что правая граница макета вылазит за пределы листа. Именно эта полоса и генерирует 50% пустых страниц в PDF.
Разберем алгоритм исправления макета и параметров печати
Рассмотрим по шагам действия, необходимые для устранения разделительных багов и нормализации вывода страниц.
Шаг 1. Очистка неиспользуемых колонок в конфигураторе или обработке
Если прайс-лист выводится из внешней обработки или печатной формы, откроем макет табличного документа:
Выделим несколько столбцов справа от основной таблицы (например, от последней заполненной колонки и далее вправо).
Нажмем правой кнопкой мыши и выберем пункт Удалить, чтобы полностью очистить скрытое форматирование.
Проверим ячейки, в которых выводятся рисунки и фотографии товаров. Границы объекта типа «Рисунок» должны строго находиться внутри рамок предназначенной для него колонки и не пересекать правую сплошную линию.
Шаг 2. Настройка автомасштабирования и параметров страницы
Чтобы платформа автоматически подгоняла ширину таблицы под один лист бумаги, необходимо настроить параметры печати табличного документа:
В меню открытого табличного документа выберем Файл — Параметры страницы...
Установим переключатель Масштаб в положение По ширине страницы (или поставим флаг Автомасштаб).
При необходимости изменим ориентацию страницы на Ландшафт, если прайс содержит много колонок (код, артикул, наименование, серия, цена, фото).
Сохраним настройки печати.
Шаг 3. Программная фиксация настроек в коде 1С
Если выгрузка прайс-листа происходит программно (например, через регламентное задание или кнопку «Сохранить в PDF»), настройки страницы нужно явно задать в исходном коде перед сохранением файла. Рассмотрим пример кода на языке 1С:
// Создаем или получаем табличный документ прайс-листа
ТабДок = Новый ТабличныйДокумент;
// Заполняем документ данными...
// Включаем автомасштабирование по ширине страницы
ТабДок.АвтоМасштаб = Истина;
// При необходимости устанавливаем альбомную ориентацию
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
// Ограничиваем область печати только нужными колонками и строками
ТабДок.ОбластьПечати = ТабДок.Область(1, 1, ТабДок.ВысотаТаблицы, ТабДок.ШиринаТаблицы);
// Сохраняем итоговый документ в PDF
ТабДок.Записать("C:\PriceList.pdf", ТипФайлаТабличногоДокумента.PDF);
Свойство АвтоМасштаб = Истина гарантирует, что платформа пропорционально уменьшит вывод таблицы, устраняя горизонтальный перенос и предотвращая появление дублирующих пустых листов.
Как уменьшить гигантский размер файла с картинками
Даже после исправления пустых страниц прайс-лист на 20 000 товаров с фото будет весить сотни мегабайт. Ни один клиент не сможет комфортно работать с PDF-файлом размером 1.5 ГБ или открывать XLS-файл на 60 МБ с тысячью встроенных графических объектов. Рассмотрим практические пути решения этой проблемы:
Программное сжатие изображений перед вставкой. Не следует вставлять оригиналы фотографий из базы данных в ячейки табличного документа. Перед выводом картинки в макет необходимо программно уменьшать ее разрешение (например, до 100х100 или 150х150 пикселей) и снижать качество JPEG. Это снизит итоговый объем файла в десятки раз — с 1.5 ГБ до 30–50 МБ.
Использование формата XLSX вместо XLS. Устаревший формат XLS (BIFF8) ограничен 65 536 строками и крайне нестабильно работает с большим количеством рисунков. При сохранении в Excel используйте современный тип файла ТипФайлаТабличногоДокумента.XLSX.
Замена изображений на веб-ссылки. Вместо внедрения бинарных картинок внутрь документа выводите в прайс-лист текстовые гиперссылки на фотографии, расположенные на сервере или сайте компании. Это делает файл невесомым и удобным для рассылки по электронной почте.
Формирование прайса в формате HTML. Формат HTML (`ТипФайлаТабличногоДокумента.HTML`) не имеет жесткого деления на печатные листы, благодаря чему проблема пустых страниц отсутствует в нем принципиально, а изображения хранятся отдельным каталогом.
Пакетная выгрузка по категориям. Разделите один гигантский прайс-лист на несколько файлов по категориям или брендам (по 500–1000 позиций). Это упростит работу с документами как для менеджеров, так и для клиентов.