При автоматизации документооборота в системе 1С:Предприятие 7.7 часто возникает необходимость отправки печатных форм по электронной почте в формате PDF. Однако штатные средства 1С 7.7 не позволяют сохранять табличные документы в PDF напрямую с высоким качеством. Сторонние библиотеки, такие как Yoksel, формируют PDF путем преобразования страниц в растровые картинки, из-за чего теряется качество шрифтов, возникают сложности с масштабированием и разбиением на страницы.
В платформе 1С:Предприятие 8 реализована встроенная поддержка сохранения табличных документов в формат PDF с векторным сохранением текста. Рассмотрим, как настроить автоматическую конвертацию файлов .mxl из 1С 7.7 с помощью 1С 8 и альтернативных инструментов.
Рассмотрим вариант, когда 1С 7.7 сохраняет сформированный документ .mxl в общую сетевую папку, а сеанс 1С 8 считывает его и преобразует в .pdf. Для работы с файлами используется объект ТабличныйДокумент и его метод Прочитать().
Разберем пример кода на языке 1С 8 для обработки всех файлов .mxl в заданной директории:
Функция ОбработатьФайл(псИмяФайла, псИмяФайлаПдф)
вФайл2 = Новый Файл(псИмяФайлаПдф);
Если Не вФайл2.Существует() Тогда
вТабла = Новый ТабличныйДокумент;
вТабла.Прочитать(псИмяФайла);
вТабла.АвтоМасштаб = Истина;
вТабла.Записать(псИмяФайлаПдф, ТипФайлаТабличногоДокумента.PDF);
КонецЕсли;
Возврат вФайл2.Существует();
КонецФункции
Функция ЗапускКонвертера() Экспорт
вМассивФайлов = НайтиФайлы(глКаталогИБКонвертации, "*.mxl", Ложь);
Для Каждого вФайл Из вМассивФайлов Цикл
вПдфИмя = вФайл.Путь + вФайл.ИмяБезРасширения + ".pdf";
ОбработатьФайл(вФайл.ПолноеИмя, вПдфИмя);
КонецЦикла;
Возврат Истина;
КонецФункции
При использовании этого метода обратите внимание на следующие нюансы:
.mxl в 7.7 и 8 отличается. При прочтении файла 7.7 через ТабличныйДокумент.Прочитать() свойства страницы (ориентация, поля, масштаб) могут сбрасываться. Перед вызовом метода Записать() рекомендуется явно задавать свойства АвтоМасштаб = Истина или регулировать параметры печати.Чтобы избежать задержек при разборе каталога и не ожидать выполнения регламентного задания, разберем подход с использованием COM-соединителя. В этом случае 1С 7.7 напрямую вызывает функцию базы 1С 8 и мгновенно получает готовый файл.
Проанализируем порядок действий:
.mxl.v8 = СоздатьОбъект("V83.COMConnector");.ТабличныйДокумент.Записать(..., ТипФайлаТабличногоДокумента.PDF) и возвращает статус выполнения.Этот способ экономит ресурсы сервера, так как COM-соединение не запускает полноценный клиентский интерфейс 1С 8.
Если базы 1С 7.7 и 1С 8 находятся в разных сегментах сети или на разных серверах, наиболее универсальным решением будет публикация SOAP или REST веб-сервиса на стороне 1С 8.
Пример схемы взаимодействия:
WinHttp.WinHttpRequest.5.1) на веб-сервис 1С 8, передавая тело файла .mxl в виде двоичных данных или строки Base64.ТабличныйДокумент, выполняет запись в PDF и возвращает готовый документ в ответе.Если поднимать и поддерживать базу 1С 8 нецелесообразно, проанализируем вариант с использованием специализированных программных PDF-принтеров (PDFCreator, Bullzip PDF Printer, doPDF).
Основные преимущества такого решения:
PDFCreator.JobQueue или com.bullzip.PdfSettings) можно отключить показ диалоговых окон. Принтер автоматически сохранит печатную форму в указанную папку с заданным именем.\\Server\PDFPrinter.