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

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

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

Причины искажения параметров страницы при конвертации

Выясним причину, почему прямой перенос таблицы через компоненту не всегда сохраняет разметку печати:

  1. Ограничения встроенного языка 1С 7.7: Объект Таблица не предоставляет разработчику штатных методов для чтения параметров уже сформированного табличного документа (полей, ориентации, масштабирования «по ширине листа»). Метод ПараметрыСтраницы() позволяет только задавать свойства перед выводом, но не считывать их из открытого окна.
  2. Поведение конвертера PDF: При загрузке структуры ячеек компонент Yoksel транслирует визуальное оформление таблицы, однако параметры итогового листа PDF по умолчанию инициализируются стандартными значениями (книжная ориентация формата A4 со стандартными отступами).
  3. Отсутствие автоматической подгонки: В отличие от драйвера принтера Windows, алгоритм экспорта не выполняет автоматическое масштабирование документа под физический лист без предварительного явного вычисления размеров.

Способ 1. Использование виртуального PDF-принтера с программным управлением

Проанализируем наиболее надежный и универсальный вариант. При отправке таблицы на печать штатным методом платформы Таблица.Напечатать(0) 1С 7.7 самостоятельно передает драйверу принтера все установленные параметры: ориентацию, поля и масштаб. Чтобы сформировать файл PDF в фоновом режиме без вывода диалоговых окон, используются виртуальные принтеры с COM-интерфейсом (например, PDFCreator версий 1.x или BullZip PDF Printer).

Рассмотрим по шагам логику настройки такого процесса:

  1. Через COM-объект виртуального принтера задаются настройки автосохранения: целевой каталог, формат (PDF) и результирующее имя файла.
  2. В 1С 7.7 табличная форма отправляется на печать на созданный виртуальный принтер.
  3. Программа ожидает завершения формирования файла в очереди печати и возвращает готовый путь к файлу.

Посмотрим на пример управления очередью печати через COM-объект PDFCreator.clsPDFCreator:


// Инициализация COM-объекта принтера
PDFApp = СоздатьОбъект("PDFCreator.clsPDFCreator");
Если PDFApp.cStart("/NoProcessingAtStartup") = 0 Тогда
    Предупреждение("Не удалось инициализировать PDFCreator");
    Возврат;
КонецЕсли;

ИмяФайла = "Document_" + НомерДок + ".pdf";
КаталогВыгрузки = "C:\PDF_Export\";

// Настройка параметров автоматического сохранения
PDFApp.cOption("UseAutosave") = 1;
PDFApp.cOption("UseAutosaveDirectory") = 1;
PDFApp.cOption("AutosaveDirectory") = КаталогВыгрузки;
PDFApp.cOption("AutosaveFilename") = ИмяФайла;
PDFApp.cOption("AutosaveFormat") = 0; // 0 - формат PDF
PDFApp.cClearCache();

// Печать таблицы 1С на установленный виртуальный принтер
Таб.ПараметрыСтраницы(,,,,"PDFCreator");
Таб.Напечатать(0);

// Запуск обработки очереди и ожидание готовности файла
PDFApp.cPrinterStop = 0;
ВремяОжидания = 0;
Пока (PDFApp.cOutputFilename = "") И (ВремяОжидания < 30) Цикл
    PDFApp.cSleep(500);
    ВремяОжидания = ВремяОжидания + 1;
КонецЦикла;

PDFApp.cClose();

Способ 2. Программный расчет размеров и ориентации в Yoksel

Если требуется формировать документы строго внутри процесса без использования служб печати, разберем подход с ручным расчетом геометрии через методы компоненты ТабличныйДокумент.

Для корректного размещения таблицы на листе выполним расчет физических габаритов выводимой области:

  1. Загружаем таблицу 1С в объект табличного документа компоненты.
  2. Вызываем метод РассчитатьРазмеры(Ширина, Высота) для рабочей области. Метод возвращает габариты таблицы в твипах (1 мм ≈ 56.7 твипа).
  3. Анализируем соотношение сторон: если ширина превышает высоту либо не помещается в стандартную печатную область формата A4 (портрет), программно переключаем свойство Ориентация (1 — книжная, 2 — альбомная).
  4. При необходимости вычисляем коэффициент масштаба и задаем размеры полей документа.

// Пример настройки параметров страницы перед экспортом
ТабДок = СоздатьОбъект("ТабличныйДокумент");
ТабДок.ЗагрузитьИзТаблицы(Таб);

Ширина = 0;
Высота = 0;
ТабДок.Область().РассчитатьРазмеры(Ширина, Высота);

// Если ширина таблицы превышает стандартный размер листа А4 за вычетом полей
Если Ширина > 10500 Тогда 
    // Устанавливаем альбомную ориентацию
    ТабДок.ПараметрыСтраницы.Ориентация = 2;
Иначе
    ТабДок.ПараметрыСтраницы.Ориентация = 1;
КонецЕсли;

// Конвертация в PDF
Конвертер = СоздатьОбъект("КонвертерТабличногоДокументаВPDF");
Конвертер.ТабличныйДокумент = ТабДок;
Конвертер.ЗаписатьВФайл(КаталогВыгрузки + ИмяФайла);

Способ 3. Перехват параметров через TableDoc или системный реестр

Рассмотрим случай, когда табличные формы уже открыты пользователем на экране, а параметры печати были изменены интерактивно. Для чтения сохраненных параметров страницы можно использовать два пути:

  1. Внешняя компонента TableDoc / FormEx: Позволяет программно получить дескриптор открытого окна табличного документа и извлечь свойства печати (поля, ориентацию, масштаб), после чего применить их к объекту экспорта.
  2. Чтение настроек из системного реестра: Платформа 1С 7.7 сохраняет индивидуальные настройки печати для каждой таблицы конфигурации в ветке HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\<ИмяБазы>\.... Прочитав эти ключи через WScript.Shell, можно восстановить оригинальные параметры страницы перед конвертацией.

Способ 4. Конвертация файлов через утилиту «1С:Работа с файлами»

Разберем еще один альтернативный вариант, исключающий необходимость тонкой настройки драйверов принтеров. Табличный документ сохраняется из 1С 7.7 в файл формата .mxl. Далее отдельная утилита «1С:Предприятие — Работа с файлами» запускается из командной строки в пакетном режиме, открывает файл и сохраняет его в PDF с полным сохранением геометрии и разметки страниц.

Таким образом, выбор метода зависит от архитектуры решения: для массовой фоновой выгрузки оптимально использовать связку с COM-объектом PDF-принтера, а для работы исключительно внутри памяти 1С — расчет габаритов в твипах средствами Yoksel.

← На главную