Почему 1С долго формирует и экспортирует документы в формат PDF и как это исправить

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

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

Выясним основную причину: влияние драйвера принтера

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

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

Рассмотрим решение через настройку локального принтера:

  1. Перейдем в «Панель управления» — «Устройства и принтеры».
  2. Найдем виртуальный принтер, например, Microsoft Print to PDF или PDFCreator.
  3. Нажмем правой кнопкой мыши и выберем пункт «Использовать по умолчанию».
  4. Если используется терминальный сервер, убедимся, что у пользователя в сессии по умолчанию не подтягивается медленный проброшенный принтер с локального ПК.

Как показывает практика, простая смена сетевого принтера на локальный «виртуальный» ускоряет формирование PDF в несколько раз, так как задержки связи с драйвером исчезают.

Проблема записи на сетевые ресурсы и протокол SMB

Разберем более сложный случай, описанный опытными специалистами. Бывает так, что сохранение PDF на локальный диск «C:» происходит за 5 секунд, а на сетевой диск «Z:» — за 40-60 секунд. При этом обычное копирование уже готового файла через проводник выполняется мгновенно.

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

Разберем программный способ обхода этой проблемы (костыль, который работает):

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

Рассмотрим пример кода на языке 1С:


// Определяем путь во временном каталоге локального компьютера
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("pdf");

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

// Копируем уже готовый файл на медленный сетевой ресурс
ПутьНаСервере = "\\Server\Share\Docs\СчетНаОплату.pdf";
Попытка
    КопироватьФайл(ИмяВременногоФайла, ПутьНаСервере);
    УдалитьФайлы(ИмяВременногоФайла);
Исключение
    Сообщить("Ошибка при копировании файла: " + ОписаниеОшибки());
КонецПопытки;

В данном сценарии мы сначала используем все ресурсы локальной дисковой подсистемы для формирования сложной структуры PDF, а затем одной операцией передаем весь объем данных по сети, что нивелирует задержки протокола SMB.

Оптимизация размера файла и содержимого

Проанализируем, почему PDF-файл получается значительно тяжелее Excel-файла (600 КБ против 70 КБ). Основная причина — внедрение шрифтов (Font Embedding) и обработка графики.

Разберем шаги по уменьшению размера и ускорению обработки:

  1. Логотипы и печати: Если в макете используется логотип компании в формате PNG с прозрачностью или в очень высоком разрешении, 1С может тратить значительное время на его пересчет для PDF. Попробуйте заменить картинку на оптимизированный JPG или BMP с разрешением 96-150 DPI. Это существенно облегчит итоговый документ.
  2. Использование стандартных шрифтов: Старайтесь использовать в макетах стандартные шрифты (Arial, Times New Roman, Courier New). Если вы используете экзотический корпоративный шрифт, 1С будет вынуждена включить описание этого шрифта в каждый создаваемый PDF-файл, что увеличит его вес и время формирования.
  3. Настройки платформы: В современных релизах 1С:Предприятие 8.3 появилась возможность управлять качеством печати. Проверьте параметры объекта ТабличныйДокумент перед сохранением.

Влияние антивирусного ПО и защитных систем

Не стоит забывать и о программной среде. При сохранении PDF 1С активно работает с временными файлами в директории %TEMP%. Многие антивирусы настроены на проверку каждого нового файла в реальном времени.

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

Рекомендация: Добавьте расширение .pdf и рабочие папки 1С (включая временные папки пользователя) в список исключений вашего антивируса или защитника Windows. Это безопасная мера, если вы доверяете источнику формирования документов.

Использование внешних компонент и Native PDF

Начиная с версии 8.3.10, в 1С появился встроенный механизм работы с PDF, который работает значительно лучше старых методов. Однако, если стандартный метод ТабДок.Записать() продолжает работать медленно, системные администраторы часто прибегают к использованию внешних PDF-принтеров, таких как PDFCreator.

В этом случае вместо программного метода Записать() используется метод Напечатать(), где в качестве принтера программно подставляется виртуальный PDF-принтер. Такие специализированные решения часто имеют более оптимизированные алгоритмы сжатия и записи, чем встроенный движок платформы.

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

← На главную