Почему искажается PDF при сохранении или отправке почтой из 1С и как это исправить?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

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

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

Разберем причину: почему на клиенте все хорошо, а на сервере — плохо?

Проанализируем механику работы системы. Когда мы открываем печатную форму на экране, формированием визуального образа занимается клиентское приложение. Оно использует ресурсы локального компьютера: установленные шрифты, настройки экранного масштаба (DPI) и драйверы принтера. Однако при сохранении файла на диск (штатными средствами 1С) или отправке по почте, процесс чаще всего переносится на сторону сервера.

На сервере 1С:Предприятия зачастую отсутствуют необходимые визуальные компоненты. Если сервер не может найти нужный шрифт или «запутывается» в координатах из-за настроек масштабирования, он пытается заменить недостающие данные похожими по его мнению параметрами. В результате метрики символов плывут, и мы получаем искаженный PDF.

Решение 1: Обновление платформы 1С

Как показывает практика и обсуждения специалистов, в ветках платформы 8.3.18 и 8.3.19 наблюдались системные ошибки (например, ошибка №10228743), связанные с некорректным расчетом координат в PDF-движке. Проанализируем ситуацию: если проблема возникла внезапно на ровном месте, скорее всего, вы столкнулись с накопленной ошибкой кэша или специфическим поведением релиза.

Рассмотрим порядок действий:

  1. Проверим текущую версию платформы. Если установлена версия в диапазоне от 8.3.18.1208 до 8.3.18.1300, риск столкнуться с багом крайне высок.
  2. Выполним обновление на более свежий стабильный релиз (например, выше 8.3.18.1334 или актуальные версии 8.3.21+).
  3. После обновления обязательно очистим серверный кэш и перезапустим службу Агент сервера 1С:Предприятия.

Решение 2: Проверка и установка шрифтов на сервере

Выясним, установлены ли в операционной системе сервера шрифты, используемые в макете (обычно это Arial, Times New Roman, Courier New). Если сервер работает под управлением Windows, выполним следующие шаги:

  1. Скопируем необходимые шрифты с клиентской машины.
  2. На сервере нажмем правой кнопкой мыши на файл шрифта и выберем пункт «Установить для всех пользователей» (это критически важно, так как служба 1С работает под своей учетной записью).
  3. Если сервер работает на Linux, воспользуемся командой fc-cache для обновления кэша шрифтов после их копирования в директорию /usr/share/fonts.

Решение 3: Настройка масштабирования (DPI)

Посмотрим на настройки экрана сервера. Алгоритм 1С чувствителен к параметру DPI. Если на сервере установлен масштаб 125% или 150%, виртуальная разметка страницы может рассчитываться неверно.

Рекомендуется зайти под учетной записью, под которой запускается служба сервера 1С, и убедиться, что установлен масштаб 100%. Если доступ к рабочему столу службы ограничен, можно проверить параметры в реестре или системных настройках отображения.

Решение 4: Программное переключение на стандарт PDF/A-3

Иногда стандартный механизм сохранения PDF дает сбой, но использование более строгого стандарта PDF/A помогает «зафиксировать» верстку. В 1С реализована поддержка различных версий PDF. Проанализируем, как это можно реализовать программно, если вы дорабатываете конфигурацию.

Рассмотрим пример кода для сохранения табличного документа с явным указанием стандарта:


// Создаем объект параметров сохранения
ПараметрыСохранения = Новый ПараметрыСохраненияВФорматПДФ();

// Устанавливаем стандарт PDF/A-3, который лучше справляется с внедрением шрифтов
ПараметрыСохранения.Стандарт = СтандартОформленияПДФ.PDFA3;

// Сохраняем табличный документ
ТабДок.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.PDF, ПараметрыСохранения);

Использование СтандартОформленияПДФ.PDFA3 часто решает проблему «съехавших» строк, так как этот формат предъявляет более жесткие требования к хранению визуальной структуры документа.

Решение 5: Настройка принтера по умолчанию на сервере

Система компоновки 1С при расчете макета опирается на метрики принтера по умолчанию. Если на сервере не установлено ни одного принтера, 1С может использовать упрощенный математический движок, который дает погрешности.

Попробуем следующее:

  1. Установим на сервере виртуальный принтер (например, Microsoft Print to PDF).
  2. Сделаем его принтером по умолчанию для пользователя, под которым запущена служба ragent.
  3. Перезапустим службу сервера.

Решение 6: Проверка макета в конфигураторе

Если вышеуказанные способы не помогают, проанализируем сам макет. PDF-конвертер крайне чувствителен к объединенным ячейкам и картинкам, которые выходят за границы строк хотя бы на доли миллиметра.

  1. Проверим, чтобы все логотипы и печати строго вписывались в границы ячеек.
  2. Минимизируем количество вложенных объединений ячеек в проблемных зонах.
  3. Убедимся, что в параметрах печати табличного документа не стоит специфический масштаб (лучше использовать «по ширине страницы» или 100%).

Подводя итог, можно сказать, что в большинстве случаев проблема решается обновлением платформы или рестартом служб сервера. Однако для стабильной работы в будущем крайне важно обеспечить сервер 1С полным набором системных шрифтов и корректными настройками DPI.

← На главную