Многие технические специалисты сталкиваются с неприятной ситуацией: при выводе на экран печатная форма (например, УПД или Счет-фактура) в 1С выглядит идеально, но стоит нажать кнопку «Сохранить как PDF» или отправить документ по почте, как итоговый файл превращается в «кашу». Колонки сдвигаются, текст накладывается друг на друга, а данные становятся нечитаемыми. Примечательно, что если печатать тот же документ через виртуальный принтер, проблема исчезает. Чтобы избежать искажения макета из-за картинок и факсимиле в ячейках, можно использовать альтернативный подход и накладывать их поверх готового файла с помощью инструмента для добавления штампов в PDF средствами 1С.
В этой статье мы подробно разберем причины возникновения этой ошибки, выясним, почему она проявляется именно при серверных вызовах, и рассмотрим пошаговые инструкции по ее устранению.
Проанализируем механику работы системы. Когда мы открываем печатную форму на экране, формированием визуального образа занимается клиентское приложение. Оно использует ресурсы локального компьютера: установленные шрифты, настройки экранного масштаба (DPI) и драйверы принтера. Однако при сохранении файла на диск (штатными средствами 1С) или отправке по почте, процесс чаще всего переносится на сторону сервера.
На сервере 1С:Предприятия зачастую отсутствуют необходимые визуальные компоненты. Если сервер не может найти нужный шрифт или «запутывается» в координатах из-за настроек масштабирования, он пытается заменить недостающие данные похожими по его мнению параметрами. В результате метрики символов плывут, и мы получаем искаженный PDF.
Как показывает практика и обсуждения специалистов, в ветках платформы 8.3.18 и 8.3.19 наблюдались системные ошибки (например, ошибка №10228743), связанные с некорректным расчетом координат в PDF-движке. Проанализируем ситуацию: если проблема возникла внезапно на ровном месте, скорее всего, вы столкнулись с накопленной ошибкой кэша или специфическим поведением релиза.
Рассмотрим порядок действий:
Агент сервера 1С:Предприятия.Выясним, установлены ли в операционной системе сервера шрифты, используемые в макете (обычно это Arial, Times New Roman, Courier New). Если сервер работает под управлением Windows, выполним следующие шаги:
fc-cache для обновления кэша шрифтов после их копирования в директорию /usr/share/fonts.Посмотрим на настройки экрана сервера. Алгоритм 1С чувствителен к параметру DPI. Если на сервере установлен масштаб 125% или 150%, виртуальная разметка страницы может рассчитываться неверно.
Рекомендуется зайти под учетной записью, под которой запускается служба сервера 1С, и убедиться, что установлен масштаб 100%. Если доступ к рабочему столу службы ограничен, можно проверить параметры в реестре или системных настройках отображения.
Иногда стандартный механизм сохранения PDF дает сбой, но использование более строгого стандарта PDF/A помогает «зафиксировать» верстку. В 1С реализована поддержка различных версий PDF. Проанализируем, как это можно реализовать программно, если вы дорабатываете конфигурацию.
Рассмотрим пример кода для сохранения табличного документа с явным указанием стандарта:
// Создаем объект параметров сохранения
ПараметрыСохранения = Новый ПараметрыСохраненияВФорматПДФ();
// Устанавливаем стандарт PDF/A-3, который лучше справляется с внедрением шрифтов
ПараметрыСохранения.Стандарт = СтандартОформленияПДФ.PDFA3;
// Сохраняем табличный документ
ТабДок.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.PDF, ПараметрыСохранения);
Использование СтандартОформленияПДФ.PDFA3 часто решает проблему «съехавших» строк, так как этот формат предъявляет более жесткие требования к хранению визуальной структуры документа.
Система компоновки 1С при расчете макета опирается на метрики принтера по умолчанию. Если на сервере не установлено ни одного принтера, 1С может использовать упрощенный математический движок, который дает погрешности.
Попробуем следующее:
ragent.Если вышеуказанные способы не помогают, проанализируем сам макет. PDF-конвертер крайне чувствителен к объединенным ячейкам и картинкам, которые выходят за границы строк хотя бы на доли миллиметра.
Подводя итог, можно сказать, что в большинстве случаев проблема решается обновлением платформы или рестартом служб сервера. Однако для стабильной работы в будущем крайне важно обеспечить сервер 1С полным набором системных шрифтов и корректными настройками DPI.