В процессе эксплуатации высоконагруженных систем на базе 1С:Предприятие 8.3 часто возникает специфическая проблема: при программном сохранении отчетов или печатных форм в формате PDF результирующий файл оказывается «пустым». В нем могут отображаться рамки таблиц, логотипы или линии (векторная графика), но полностью отсутствует текстовая информация. Особенно часто эта проблема проявляется на современных операционных системах, таких как Windows Server 2022, при массовом формировании документов (от 50 000 документов в сутки).
Рассмотрим подробно причины возникновения этой ошибки и разберем пошаговые методы ее устранения, опираясь на технические особенности взаимодействия платформы 1С с графической подсистемой Windows.
Проанализируем ситуацию: когда выполняется команда ТабДокумент.Записать(АдресФайла, ТипФайлаТабличногоДокумента.PDF), платформа 1С использует внутренний движок рендеринга, который обращается к системным шрифтам и библиотекам отрисовки (GDI/GDI+). Если в момент формирования файла система не может корректно прочитать дескрипторы шрифтов или достучаться до кэша шрифтов, текстовый слой просто не включается в PDF-контейнер. При этом ошибка на уровне кода 1С не выбрасывается, так как формально файл создается успешно.
Выясним причину, связанную с системным кэшем. Кэш шрифтов Windows живет в специальных файлах во временных директориях сервисного профиля. При интенсивной нагрузке или после некорректного завершения работы сервера (внеплановая перезагрузка) файлы кэша могут повредиться. 1С пытается получить начертание шрифта Arial или Calibri, получает отказ от подсистемы FontCache и выводит пустоту.
Для решения этой проблемы выполним следующие действия:
%WinDir%\ServiceProfiles\LocalService\AppData\Local\FontCache..dat из этой папки.FNTCACHE.DAT в папке %WinDir%\System32 (если он присутствует).Важный момент: если проблема повторяется регулярно, можно настроить регламентное задание на сервере, которое будет выполнять очистку кэша шрифтов в периоды минимальной нагрузки.
Разберем ситуацию с ресурсами. Каждый процесс в Windows (в нашем случае это rphost) имеет жесткое ограничение на количество дескрипторов GDI (GDI Objects). По умолчанию этот лимит составляет 10 000 объектов. При массовой печати тысяч документов в одном сеансе 1С может исчерпать этот лимит, что приведет к невозможности отрисовки текста.
Проверим количество GDI-объектов через Диспетчер задач (вкладка «Подробности», колонка «Объекты GDI»). Если значения приближаются к максимуму, необходимо увеличить лимит через реестр:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows.GDIProcessHandleQuota.15000 или 20000 (в десятичной системе).Проанализируем особенности Windows Server 2022. В этой ОС усилена изоляция сессий. Служба 1С работает в «Сессии 0». Если шрифты, используемые в макетах 1С, были установлены обычным копированием в папку Fonts или установлены только для конкретного пользователя-администратора, служба 1С может их «не видеть» под своей учетной записью.
Посмотрим на алгоритм исправления:
При формировании PDF платформа 1С активно использует системную папку Temp. При огромном потоке документов (100 000 в день) папка может переполняться или блокироваться антивирусом. Если 1С не может записать временный файл шрифта для встраивания в PDF, текст пропадет.
Рассмотрим шаги по оптимизации:
USR1CV8), есть права «Полный доступ» на папку C:\Windows\Temp.ragent.exe, rmngr.exe и rphost.exe в исключения антивируса (сканирование на лету создаваемых PDF может вызывать блокировки).v8_*, которые 1С не всегда удаляет при интенсивной работе.Если штатный метод Записать() продолжает сбоить из-за особенностей релиза платформы (например, на бажных релизах типа 8.3.17.1549), мы можем применить программный обходной путь. Рассмотрим пример кода, который принудительно устанавливает параметры сохранения:
ТабДок = Новый ТабличныйДокумент;
// ... заполнение табдока ...
ПараметрыПечати = Новый ПараметрыПечатиPDF;
ПараметрыПечати.ВключатьШрифты = Истина; // Гарантирует встраивание шрифтов в контейнер
ПараметрыПечати.КачествоПечати = 300;
Попытка
ТабДок.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.PDF);
Исключение
ЗаписьЖурналаРегистрации("ОшибкаПечати", УровеньЖурналаРегистрации.Ошибка, , , ПодробноеОписаниеОшибки());
КонецПопытки;
Обратите внимание: в некоторых случаях помогает предварительная установка принтера по умолчанию на сервере. Даже если печать идет «в файл», 1С может обращаться к настройкам дефолтного принтера для определения параметров страницы и разрешения шрифтов. Рекомендуется установить виртуальный принтер (например, Microsoft Print to PDF) в качестве принтера по умолчанию для пользователя службы 1С.
Подводя итог, можно сказать, что проблема «пустых PDF» — это комплексный сбой взаимодействия 1С и Windows Server. Наиболее эффективным методом является **комбинация очистки кэша шрифтов и увеличения лимитов GDI**. Если ситуация повторяется ежедневно, лучшим решением станет автоматизация перезапуска рабочих процессов 1С через консоль администрирования или планировщик задач в часы наименьшей активности, что позволит сбрасывать накопленные ошибки графической подсистемы.