Многие пользователи и администраторы 1С сталкиваются с парадоксальной ситуацией: экспорт огромного отчета в формат Excel происходит мгновенно, в то время как небольшая печатная форма счета или акта при сохранении в PDF «замораживает» программу на полминуты или даже дольше. При этом итоговый файл PDF весит в разы больше, чем аналогичный в формате XLS. В этой статье мы подробно разберем причины такого поведения платформы и рассмотрим пошаговые инструкции по оптимизации этого процесса.
Первое, что нам необходимо понять: движок 1С при формировании табличного документа (объект ТабличныйДокумент) неразрывно связан с подсистемой печати Windows. Даже если мы не собираемся отправлять документ на физическое устройство, а просто нажимаем «Сохранить как PDF», 1С обращается к принтеру по умолчанию.
Проанализируем ситуацию: зачем 1С нужен принтер для сохранения файла? Платформа использует драйвер принтера для расчета метрик: границ областей, межстрочных интервалов, отрисовки шрифтов и корректного разбиения на страницы. Если в системе принтером по умолчанию назначен сетевой принтер, который в данный момент недоступен, находится в спящем режиме или перегружен, 1С будет ожидать ответа от драйвера на каждом этапе формирования макета.
Рассмотрим решение через настройку локального принтера:
Как показывает практика, простая смена сетевого принтера на локальный «виртуальный» ускоряет формирование PDF в несколько раз, так как задержки связи с драйвером исчезают.
Разберем более сложный случай, описанный опытными специалистами. Бывает так, что сохранение 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С:Предприятие 8.3 появилась возможность управлять качеством печати. Проверьте параметры объекта ТабличныйДокумент перед сохранением.Не стоит забывать и о программной среде. При сохранении PDF 1С активно работает с временными файлами в директории %TEMP%. Многие антивирусы настроены на проверку каждого нового файла в реальном времени.
Посмотрим на ситуацию со стороны системы: 1С пишет маленькие кусочки данных, а антивирус каждый раз блокирует доступ к файлу, чтобы проверить этот кусочек на наличие угроз. На сетевых дисках этот эффект усиливается кратно.
Рекомендация: Добавьте расширение .pdf и рабочие папки 1С (включая временные папки пользователя) в список исключений вашего антивируса или защитника Windows. Это безопасная мера, если вы доверяете источнику формирования документов.
Начиная с версии 8.3.10, в 1С появился встроенный механизм работы с PDF, который работает значительно лучше старых методов. Однако, если стандартный метод ТабДок.Записать() продолжает работать медленно, системные администраторы часто прибегают к использованию внешних PDF-принтеров, таких как PDFCreator.
В этом случае вместо программного метода Записать() используется метод Напечатать(), где в качестве принтера программно подставляется виртуальный PDF-принтер. Такие специализированные решения часто имеют более оптимизированные алгоритмы сжатия и записи, чем встроенный движок платформы.
Подведем итог: проблема долгого формирования PDF почти всегда кроется либо в недоступности принтера по умолчанию, либо в особенностях записи мелких буферов данных на сетевые диски. Проверьте эти два фактора в первую очередь, и скорость работы ваших сотрудников заметно вырастет.