Как программно сохранить масштабированную печатную форму в PDF в 1С 7.7?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

При работе с платформой 1С 7.7 часто возникает задача экспортных операций, связанных с сохранением печатных форм в формат PDF. Главное сложность заключается в том, чтобы сформированная таблица гарантированно помещалась на один лист по высоте и ширине. Разберем ограничения платформы 1С 7.7 и рассмотрим практические варианты решения этой задачи с использованием доступных механизмов и сторонних библиотек.

Ограничения штатного механизма 1С 7.7

Проанализируем работу метода ПараметрыСтраницы таблицы 1С 7.7. Метод содержит параметр Автомасштаб (10-й параметр), однако в платформе 7.7 он работает только для подгона по ширине листа. Автоматического штатного режима «уместить на 1 страницу по высоте» в 1С 7.7 не предусмотрено.

Однако мы можем задать явный процент масштабирования во 2-м параметре метода ПараметрыСтраницы:


// Выключение автомасштаба по ширине и установка явного масштаба 75%
Таб.ПараметрыСтраницы(1, 75, , , , , , , , 0);

Обратим внимание, что настройки страницы в 1С 7.7 сохраняются в системном реестре Windows для текущего пользователя. Поэтому перед выводом печатной формы всегда следует явным образом переопределять или сбрасывать параметры таблицы в коде.

Вариант 1. Использование библиотеки Yoksel

Одним из наиболее эффективных решений в 1С 7.7 является использование внешнего компонента Yoksel. Он позволяет конвертировать табличные документы в PDF с произвольным управлением размерами страницы.

Рассмотрим алгоритм решения с помощью Yoksel по шагам:

  1. Преобразуем исходную таблицу 1С 7.7 в ТабличныйДокумент Yoksel.
  2. Рассчитываем суммарную высоту и ширину печатной формы, используя методы ВысотаСтроки() и ШиринаСтолбца().
  3. Настраиваем объект Йоксель.ГрафическийКонвертер.PDF и вычисляем размеры страницы в твипах пропорционально полученной ширине и высоте.
  4. Сохраняем документ в итоговый PDF-файл.

// Пример логики работы с компонентом Yoksel
Йоксель = СоздатьОбъект("Йоксель.ГрафическийКонвертер.PDF");
// Пересчитываем твипы под размеры сформированной таблицы
// и сохраняем ТабличныйДокумент в файл

Вариант 2. Использование виртуального PDF-принтера

Выясним, как настроить фоновую (тихую) печать на виртуальный PDF-принтер без показа диалоговых окон пользователю. Для этого подходят виртуальные принтеры с поддержкой программного управления (Bullzip PDF Printer, PDFCreator, PDFill PDF Writer).

Рассмотрим пример настройки сохранения через Bullzip PDF Printer:

  1. Перед печатью из 1С 7.7 обращаемся к COM-объекту управления принтером Bullzip.PDFPrinterSettings.
  2. Передаем целевой путь к файлу в ключ output и отключаем вызов диалоговых окон (ShowSaveAS = "never", ShowProgress = "no", ShowPDF = "no").
  3. В 1С 7.7 задаем масштаб и имя виртуального принтера в методе ПараметрыСтраницы.
  4. Вызываем печать без диалога через Таблица.Напечатать(0).

// Настройка Bullzip через COM
ПринтерСеттингс = СоздатьОбъект("Bullzip.PDFPrinterSettings");
ПринтерСеттингс.SetValue("output", "C:\Reports\Document.pdf");
ПринтерСеттингс.SetValue("ShowSaveAS", "never");
ПринтерСеттингс.SetValue("ShowProgress", "no");
ПринтерСеттингс.SetValue("ShowPDF", "no");
ПринтерСеттингс.SetValue("ConfirmOverwrite", "no");
ПринтерСеттингс.WriteSettings(1);

// Вывод из 1С 7.7 с фиксированным масштабом
Таб.ПараметрыСтраницы(1, 70, , , , , , , , 0, , "Bullzip PDF Printer");
Таб.Напечатать(0);

Вариант 3. Двухэтапная конвертация через 1С 8.х

Если в инфраструктуре предприятия параллельно используется платформа 1С 8.х, мы можем применить ее развитые функции масштабирования табличных документов.

Посмотрим, как реализовать эту схему:

  1. Из 1С 7.7 сохраняем печатную форму в файл MXL: Таблица.Записать(ИмяФайла, "MXL").
  2. Из 1С 7.7 подключаемся к 1С 8.х через COM-соединение (например, V83.COMConnector).
  3. Открываем файл в 1С 8.х, выставляем у табличного документа свойства АвтоМасштаб = Истина и ПоШиринеСтраницы = Истина.
  4. Вызываем метод Записать(ИмяФайла, ТипФайлаТабличногоДокумента.PDF).

Важные особенности при выборе решения

При выборе подходящего метода проанализируем содержимое печатных форм:

← На главную