При работе с системой 1С 7.7 часто возникает необходимость сохранения документов в формате PDF. Штатными средствами 1С 7.7 напрямую сохранить документ в PDF невозможно, так как она поддерживает лишь несколько форматов: .mxl (собственный формат 1С), .xls (Excel), .htm/.html и .txt. Однако, существует несколько эффективных подходов для решения этой задачи, которые мы подробно рассмотрим. Авторы темы столкнулись с проблемой при попытке сохранения документа Word в PDF через виртуальный принтер Bullzip, и мы разберем различные варианты, которые помогут не только решить эту конкретную проблему, но и дадут более широкое понимание процесса.
Один из самых распространенных и универсальных способов сохранения документов в PDF из 1С 7.7 — это использование виртуальных PDF-принтеров. Эти программы имитируют обычный принтер, но вместо печати на бумаге они создают файл PDF. Мы рассмотрим подробнее, как это работает и какие виртуальные принтеры можно использовать.
Виртуальный PDF-принтер устанавливается в операционную систему как обычный принтер. При отправке документа на печать, вместо выбора физического принтера, вы выбираете виртуальный PDF-принтер. После этого принтер обрабатывает печатную форму и сохраняет ее в указанном вами месте в формате PDF.
Для автоматизации этого процесса, особенно при программной печати из 1С 7.7, необходимо настроить виртуальный принтер таким образом, чтобы он не запрашивал подтверждение имени файла и пути сохранения каждый раз. Многие виртуальные принтеры, такие как Bullzip PDF Printer или PDFCreator, предоставляют такие настройки, позволяя программно задавать имя и путь для файла PDF.
Если вы столкнулись с проблемой, когда Bullzip не сохраняет файл, как в исходном сообщении, это может быть связано с несколькими причинами. Мы проанализируем возможные решения:
Application.ActivePrinter для объекта Word.Посмотрим на пример кода, который может помочь: перед вызовом метода PrintOut для документа Word, вставьте строку для установки активного принтера.
ActDoc.Application.ActivePrinter = "ИмяВиртуальногоПринтера"; // Например, "Bullzip PDF Printer"
// Затем вызываем метод печати
ActDoc.PrintOut();
Здесь ActDoc — это COM-объект, представляющий ваш документ Word, а "ИмяВиртуальногоПринтера" должно соответствовать точному имени вашего установленного PDF-принтера, как оно отображается в системе.
Для устранения этой проблемы попробуйте использовать короткие имена директорий и файлов. Например, сохраняйте файл в директорию типа D:\1\ с именем файла 1.pdf вместо D:\МоиДокументы\ОтчетыПоПродажам\Отчет_за_месяц.pdf.
Помимо Bullzip, существует множество других виртуальных PDF-принтеров, которые могут быть полезны:
Если исходный документ, который вы хотите сохранить в PDF, уже является документом Word, открытым через COM-объект из 1С 7.7, вы можете использовать встроенные возможности Word для сохранения в PDF. Этот метод является одним из наиболее прямых и эффективных для документов Word.
Мы используем COM-объект Microsoft Word, чтобы открыть или создать документ, внести в него необходимые изменения, а затем вызвать метод сохранения, который поддерживает формат PDF. Для этого нам потребуется установленный Microsoft Office на компьютере, где выполняется код 1С 7.7.
Для сохранения активного документа Word в формате PDF, используем метод SaveAs объекта ActiveDocument с соответствующим параметром формата.
Разберем пример:
Перем _Word;
Перем _ДокументWord;
Попытка
_Word = СоздатьОбъект("Word.Application");
_Word.Visible = Ложь; // Можем скрыть Word, если не хотим показывать его пользователю
// Открываем существующий документ Word или создаем новый
// Пример открытия существующего:
// _ДокументWord = _Word.Documents.Open("C:\Путь\К\Вашему\Документу.doc");
// Или, если вы уже получили документ ранее, например, из табличного документа 1С
// ActDoc = ... (полученный COM-объект документа Word)
// Предполагаем, что у нас уже есть активный документ ActDoc, как в исходном вопросе
// Или используем _Word.ActiveDocument, если Word уже открыт и документ активен
// Определяем полный путь для сохранения PDF
ПолныйПутьPDF = "D:\Путь\К\Файлу\МойДокумент.pdf";
// Сохраняем документ Word в формат PDF
// Параметр 17 соответствует формату wdExportFormatPDF
_Word.ActiveDocument.SaveAs(ПолныйПутьPDF, 17);
// Закрываем документ Word без сохранения изменений, если он был создан/открыт для временных целей
// _Word.ActiveDocument.Close(0); // 0 - wdDoNotSaveChanges
// Закрываем приложение Word
_Word.Quit();
Исключение
Сообщить("Ошибка при сохранении документа Word в PDF: " + ОписаниеОшибки());
Если _Word <> Неопределено Тогда
_Word.Quit();
КонецЕсли;
КонецПопытки;
В этом коде _Word.ActiveDocument.SaveAs(ПолныйПутьPDF, 17); является ключевой строкой. Параметр 17 указывает на формат PDF (константа wdFormatPDF в библиотеке объектов Word). Если требуется сохранить в формате PDF/A (для долгосрочного хранения), можно использовать метод ExportAsFixedFormat с соответствующими параметрами, но SaveAs с параметром 17 является более простым и распространенным решением.
Для сохранения табличных документов 1С 7.7 в PDF существует специализированная внешняя компонента под названием Йоксель (Yoksel). Она значительно расширяет возможности работы с табличными документами, включая их экспорт в различные форматы, в том числе PDF.
Йоксель предоставляет дополнительные методы для объекта "ТабличныйДокумент" 1С 7.7, позволяя более гибко управлять его выводом и сохранением. Вместо того чтобы имитировать печать, Йоксель напрямую конвертирует содержимое табличного документа в PDF.
При использовании Йокселя могут возникать определенные нюансы, особенно в отношении разбивки на страницы:
Для достижения адекватного сохранения в Йоксель, чтобы результат был максимально приближен к штатной печати, необходимо предпринимать определенные ухищрения. Мы выясним, как это сделать:
Йоксель.ГрафическийКонвертер.PDF: Эта часть компоненты Йоксель предоставляет функционал для конвертации. Убедитесь, что вы используете правильные методы и параметры для управления выводом.Например, после формирования табличного документа, вы можете обратиться к методам Йокселя для экспорта:
ТабДок = СоздатьОбъект("ТабличныйДокумент");
// ... Здесь формируем ТабДок ...
// Загружаем внешнюю компоненту Йоксель
Если ЗагрузитьВнешнююКомпоненту("Йоксель") = 0 Тогда
Сообщить("Не удалось загрузить компоненту Йоксель!");
Возврат;
КонецЕсли;
Йоксель = СоздатьОбъект("AddIn.Йоксель");
// Параметры для сохранения в PDF через Йоксель
ПутьКPDF = "D:\Путь\К\Файлу\МойОтчетЙоксель.pdf";
// Устанавливаем настройки страницы, если это необходимо
// Например, ориентацию, поля, масштабирование, исходя из расчетов ТабДок
// Йоксель.УстановитьПараметрыСтраницы(...);
// Сохраняем табличный документ в PDF
Йоксель.ТабличныйДокумент.СохранитьВPDF(ТабДок, ПутьКPDF);
Сообщить("Документ успешно сохранен в PDF через Йоксель.");
Этот пример демонстрирует базовый вызов. Для решения специфических проблем с разбивкой на страницы потребуется более глубокая работа с параметрами Йокселя и предварительный расчет размеров. Этот метод особенно полезен, когда вам нужно сохранить именно табличный документ 1С, а не внешний документ Word.
Рассмотрим дополнительные варианты и важные моменты, которые могут быть полезны при работе с 1С 7.7 и PDF.
Если вам не подходят предыдущие варианты, мы можем использовать обходной путь через Microsoft Excel. Этап состоит из двух шагов:
ТабДок = СоздатьОбъект("ТабличныйДокумент");
// ... Заполнение ТабДок ...
ТабДок.Записать("D:\Путь\К\Файлу\МойДокумент.xls");
Мы проанализируем пример кода с использованием COM-объекта Excel:
Перем Excel;
Перем Книга;
Перем Лист;
Попытка
Excel = СоздатьОбъект("Excel.Application");
Excel.Visible = Ложь; // Скрываем Excel
ПолныйПутьXLS = "D:\Путь\К\Файлу\МойДокумент.xls";
ПолныйПутьPDF = "D:\Путь\К\Файлу\МойДокументИзExcel.pdf";
Книга = Excel.Workbooks.Open(ПолныйПутьXLS);
Лист = Книга.Worksheets(1); // Берем первый лист
// Сохраняем лист в PDF
Лист.ExportAsFixedFormat(0, ПолныйПутьPDF, 0, 1, 0, 0, 0, Ложь, Ложь, Ложь);
// Параметры:
// 0 (xlTypePDF) - тип файла PDF
// ПолныйПутьPDF - путь к файлу
// 0 (xlQualityStandard) - качество
// 1 (True) - включить/выключить стандартные свойства (пропуск)
// 0 (False) - включить/выключить игнорирование областей печати
// 0 - начало страницы
// 0 - конец страницы
// Ложь - включить/выключить открывание файла после публикации
// Ложь - включить/выключить игнорирование областей печати
// Ложь - включить/выключить сохранение изменений
Книга.Close(0); // Закрываем книгу без сохранения изменений
Excel.Quit(); // Закрываем Excel
Исключение
Сообщить("Ошибка при сохранении XLS в PDF через Excel: " + ОписаниеОшибки());
Если Excel <> Неопределено Тогда
Excel.Quit();
КонецЕсли;
КонецПопытки;
Этот подход также требует наличия установленного Microsoft Excel.
Для клиентов, у которых есть доступ к 1С 8.х, существует интересный обходной путь: сохранить табличный документ 1С 7.7 сначала в формат .mxl (родной формат 1С), а затем использовать 1С 8.х, запущенную через командную строку, для конвертации .mxl в PDF. Этот метод может быть полезен в смешанных средах, где одновременно используются обе платформы.
Некоторые готовые внешние печатные формы и обработки для 1С 7.7 уже включают в себя функционал для сохранения документов в PDF или их отправки по электронной почте в этом формате. Такие решения часто используют внутренние компоненты, подобные Йокселю, или работают с виртуальными принтерами. Если вы не хотите самостоятельно разрабатывать функционал, мы рекомендуем поискать готовые решения на специализированных ресурсах.
Мы рассмотрели несколько действенных способов сохранения документов в PDF из 1С 7.7. Выбор конкретного метода зависит от типа документа (Word или табличный документ 1С), наличия установленного Microsoft Office, требований к автоматизации и особенностей рабочей среды (например, терминальный режим).
_Word.ActiveDocument.SaveAs(ПолныйПуть, 17). Однако помним про рекомендации Microsoft по автоматизации Office.Выбрав подходящий способ и тщательно следуя рекомендациям по настройке и использованию кода, вы сможете успешно реализовать функционал сохранения документов в PDF из 1С 7.7.