Штатный механизм сохранения печатных форм в формат PDF через метод Записать объекта ТабличныйДокумент с параметром ТипФайлаТабличногоДокумента.PDF является удобным инструментом для отправки счетов, накладных и актов по электронной почте. Однако на практике разработчики нередко сталкиваются с ситуацией, когда при попытке экспорта платформа 1С аварийно закрывается с записью аварийного дампа памяти или выдает критическую ошибку модуля moxell.dll. Разберем основные причины такого поведения и рассмотрим надежные способы устранения неполадок.
Одной из наиболее частых причин вылета платформы является обработка областей с логотипами, факсимильными подписями и печатями. Если в макете или печатной форме присутствует объект типа «Рисунок», но в процессе формирования печатной формы изображение в него не передается (например, у организации не загружена подпись бухгалтера или факсимиле директора), движок экспорта платформы дает критический сбой при попытке растеризации пустой ссылки.
Рассмотрим несколько вариантов решения этой проблемы в зависимости от архитектуры вашей печатной формы:
Картинка в коде модуля формирования печатной формы:
Если КартинкаПодписи = Неопределено Тогда
ОбластьМакета.Рисунки.ПодписьБухгалтера.Картинка = Новый Картинка;
Иначе
ОбластьМакета.Рисунки.ПодписьБухгалтера.Картинка = КартинкаПодписи;
КонецЕсли;
РисунокПодписи = ТабДок.Рисунки.Найти("ПодписьБухгалтера");
Если РисунокПодписи <> Неопределено И Не ЗначениеЗаполнено(РисунокПодписи.Картинка) Тогда
ТабДок.Рисунки.Удалить(РисунокПодписи);
КонецЕсли;
Платформа 1С накладывает жесткие ограничения на графические форматы при экспорте в PDF. Проанализируем требования к графике внутри макетов:
moxell.dll. Заменим все векторные метафайлы на стандартные растровые форматы PNG или JPEG.При генерации PDF-файла платформа производит внедрение подмножества символов (font subsetting) формата TrueType (TTF). Если в макете используются специфические символьные шрифты (например, Webdings, Wingdings) или некоторые шрифты для формирования штрихкодов (например, Free 3 of 9), модуль формирования документа завершает работу аварийно из-за невозможности корректно разобрать структуру глифов.
Для устранения конфликтов шрифтов выполним следующие действия:
Free 3 of 9 на проверенный аналог Ccode39 (ContactCode39), который стабильно обрабатывается встроенным генератором PDF.Arial, Times New Roman, Tahoma.Даже при программном сохранении в файл движок 1С обращается к системному диспетчеру печати (Windows Print Spooler) и текущему принтеру по умолчанию для расчета метрик, переноса строк и пагинации. Если принтер по умолчанию недоступен (сетевой принтер отключен), драйвер поврежден или служба печати остановлена, процесс 1С падает с созданием дампа.
Разберем порядок настройки рабочего места или сервера:
ТабДок.АвтоМасштаб = Истина;
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
ТабДок.ПолеСлева = 10;
ТабДок.ПолеСправа = 10;
ТабДок.ПолеСверху = 10;
ТабДок.ПолеСнизу = 10;
ТабДок.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.PDF);
Формирование больших отчетов с графикой в 32-разрядных версиях платформы часто упирается в лимит адресного пространства процесса (2 ГБ). Если перед сохранением выполняется повторная очистка или перестроение тяжелого документа, платформа может завершить работу с ошибкой недостаточно памяти.
Для предотвращения утечек памяти при массовой выгрузке документов рекомендуется выносить экспорт в фоновые задания на 64-разрядном сервере 1С, а также избегать лишних вызовов очистки полей табличного документа в обработчиках событий форм, если документ уже сформирован в оперативной памяти.