Почему при сохранении печатной формы из 1С 7.7 в Excel теряются параметры страницы и как это исправить?

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

Многие специалисты, поддерживающие базы на платформе 1С:Предприятие 7.7, сталкиваются с неприятной проблемой: при сохранении сформированной печатной формы в формат Excel сбиваются параметры страницы. Заданные в макете значения полей, ориентация страницы и масштаб попросту игнорируются, а в самом Excel подставляются настройки по умолчанию (например, задали поле слева 5, а открывается 1.9). Если документов много и их необходимо отправлять по почте в утвержденном виде, ручная корректировка каждого файла становится критичной.

Рассмотрим, почему возникает эта проблема. Штатный механизм платформы 1С 7.7 при выгрузке табличного документа использует очень старый формат Excel 95 (BIFF5). Из-за ограниченной совместимости внутренней библиотеки 1С (Moxel.dll) с современными версиями табличных процессоров (начиная с Office 2007 и новее), формат физически не может корректно передать новые атрибуты масштабирования, колонтитулы и точные размеры полей в сантиметрах. Кроме того, сохранение объемных таблиц (от 5000 строк) средствами 1С 7.7 часто вызывает долгое зависание программы со 100% загрузкой процессора. Также могут искажаться числа из-за различий в региональных настройках (точки и запятые).

Разберем подробнее рабочие способы решения этой задачи, которые помогут автоматизировать процесс и избавиться от рутины.

Способ 1: Пост-обработка файла через COM-объект (OLE)

Самое разумное программное решение, если требуется получить именно редактируемый файл Excel — сразу после стандартного сохранения файла из 1С вызывать Excel через COM-соединение, открывать только что сохраненный документ, принудительно задавать ему нужные параметры страницы и пересохранять.

Проанализируем специфическую проблему, с которой сталкиваются программисты при реализации этого метода в 1С 7.7. Для того чтобы таблица автоматически сжималась по ширине листа (свойства FitToPagesWide и FitToPagesTall), в Excel требуется отключить фиксированный масштаб, установив свойству Zoom значение False. Однако прямая попытка сделать это из 1С 7.7 приведет к ошибке: «Нельзя установить свойство Zoom класса PageSetup». Это связано с тем, что свойство ожидает тип данных Variant/Boolean, который устаревшая платформа 1С передать не умеет.

Обойдем эту ошибку с помощью вспомогательного COM-объекта MSScriptControl.ScriptControl. Мы можем передать в него объект параметров страницы и выполнить присвоение через VBScript или JavaScript:


// Открываем сохраненный файл
ExcelApp = СоздатьОбъект("Excel.Application");
Workbook = ExcelApp.Workbooks.Open(ПутьКФайлу);
Sheet = Workbook.ActiveSheet;

// Настраиваем поля и ориентацию
Sheet.PageSetup.LeftMargin = ExcelApp.CentimetersToPoints(5);
Sheet.PageSetup.Orientation = 2; // xlLandscape

// Обходим ошибку свойства Zoom через ScriptControl
ScriptCtrl = СоздатьОбъект("MSScriptControl.ScriptControl");
ScriptCtrl.Language = "VBScript";
ScriptCtrl.AddObject("PageSetup", Sheet.PageSetup);
ScriptCtrl.Eval("PageSetup.Zoom = False");

// Задаем размещение на 1 страницу в ширину
Sheet.PageSetup.FitToPagesWide = 1;
Sheet.PageSetup.FitToPagesTall = False;

// Сохраняем и закрываем
Workbook.Save();
ExcelApp.Quit();

Способ 2: Сохранение через стороннюю компоненту «Йоксель»

Если в базе генерируется большое количество сложных отчетов, отличным выходом станет использование специализированной внешней компоненты «Йоксель» (Yoksel). Этот инструмент специально разрабатывался для расширения возможностей работы с табличными документами в 1С 7.7.

Посмотрим на ее преимущества в контексте нашей задачи:

  1. Компонента использует собственные, более современные алгоритмы конвертации, благодаря чему форматирование, рамки, шрифты и параметры страницы при выгрузке не теряются.
  2. Сохранение происходит значительно быстрее, а большие документы больше не «вешают» платформу намертво.
  3. Для работы достаточно загрузить библиотеку компоненты при старте системы и перевести вывод печатных форм на объекты компоненты.

Способ 3: Печать на виртуальный PDF-принтер

Если конечная цель заключается лишь в том, чтобы отправить документы клиентам или руководству по электронной почте, и их дальнейшее редактирование в Excel не предполагается, то использование формата XLS не оправдано. Гораздо надежнее и проще перевести документооборот на PDF-формат.

Для этого в системе устанавливается виртуальный PDF-принтер (например, CutePDF, doPDF или PDFCreator версий 1.7.X). Вывод настраивается следующим образом: вместо сохранения табличного документа из 1С в файл, вызывается печать на этот виртуальный принтер. PDF-документ полностью и до миллиметра сохранит внешний вид, разбивку по страницам и шрифты, которые вы видите на экране в 1С.

Способ 4: Прямая запись в XLSX через ADO

Рассмотрим современную альтернативу, которая позволяет полностью избавиться от проблем штатного экспорта — формирование документа в формате .xlsx (Excel 2007+) напрямую, минуя визуальный табличный документ 1С.

Данный подход реализуется с помощью технологии ADO. Вы можете создать пустой шаблон Excel, подключаться к нему из 1С через ADO-провайдер и с помощью SQL-запросов (INSERT INTO) вставлять данные напрямую в ячейки или листы. При этом шаблон в Excel уже будет содержать все необходимые корпоративные стили, логотипы, правильные поля и колонтитулы. Этот способ работает мгновенно даже на десятках тысяч строк и исключает зависания платформы.

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

← На главную