Как настроить сохранение печатных форм и таблиц в Excel (XLS) по умолчанию в 1С:Предприятие 7.7?

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

При ежедневной работе в платформе «1С:Предприятие 7.7» пользователи часто сохраняют отчеты и печатные формы документов для дальнейшей обработки в Microsoft Excel. Однако стандартный диалог «Файл — Сохранить как...» всегда предлагает в качестве формата по умолчанию внутренний формат 1С — .mxl. Пользователю приходится каждый раз вручную переключать тип файла на .xls.

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

Почему 1С 7.7 по умолчанию сохраняет в MXL и почему не работает простой код

В платформе 1С 7.7 список форматов сохранения и порядок фильтров жестко зашиты в системные библиотеки. Штатными средствами конфигуратора или настройками пользователя изменить порядок типов файлов в системном диалоге сохранения невозможно.

Часто разработчики пытаются создать универсальную внешнюю обработку или кнопку на панели инструментов с кодом следующего вида:


Процедура ПриОткрытии()
    ТаблДок = СоздатьОбъект("Таблица");
    Каталог = "C:\Temp\"; 
    ИмяФайла = Каталог + "Документ.xls"; 
    ТаблДок.Записать(ИмяФайла, 1);
    Форма.Закрыть();
КонецПроцедуры

Проанализируем эту ситуацию. В результате выполнения такого кода на диске создается совершенно пустой файл Excel. Причина в том, что функция СоздатьОбъект("Таблица") создает новый, чистый экземпляр таблицы в оперативной памяти. Она никак не связана с той печатной формой, которая уже сформирована и отображается на экране пользователя. Штатный встроенный язык 1С 7.7 не предоставляет методов для прямой адресации к произвольному активному окну таблицы.

Синтаксис метода Записать() для табличного документа

Если табличный документ формируется программно в модуле отчета или обработки, для его прямой выгрузки в файл используется метод Записать(). Посмотрим на синтаксис данного метода:

Синтаксис: Записать(<ИмяФайла>, <ТипФайла>)

Параметр <ТипФайла> определяет формат выгружаемого документа:

  1. 0, "MXL" или отсутствует — собственный формат 1C;
  2. 1 или "XLS" — формат Microsoft Excel (Excel 95/97);
  3. 2, "HTM" или "HTML" — формат веб-страницы HTML;
  4. 3 или "TXT" — текстовый документ.

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


Функция глСохранитьТаблицуВExcel(ТаблДок, ИмяФайлаПоУмолчанию) Экспорт
    Перем Каталог, ИмяФайла, Заглавие, Фильтр;
    
    Каталог = ВосстановитьЗначение("КаталогСохраненияОтчетов");
    ИмяФайла = ИмяФайлаПоУмолчанию + ".xls";
    Заглавие = "Сохранение таблицы в Excel:";
    Фильтр = "Файлы Excel (*.xls)|*.xls|Все файлы (*.*)|*.*";
    
    Если ФС.ВыбратьФайл(1, ИмяФайла, Каталог, Заглавие, Фильтр) = 1 Тогда
        ТаблДок.Записать(Каталог + ИмяФайла, 1);
        СохранитьЗначение("КаталогСохраненияОтчетов", Каталог);
        Возврат 1;
    КонецЕсли;
    
    Возврат 0;
КонецФункции

Способ 1. Использование внешней компоненты FormEx для универсальной кнопки

Чтобы сделать универсальную кнопку на главной панели инструментов, которая сможет сохранять любое активное табличное окно (включая печатные формы документов и стандартные отчеты), воспользуемся внешней компонентой FormEx.

Компонента расширяет объектную модель 1С 7.7 и позволяет получать доступ к списку открытых окон и активному контексту. Разберем алгоритм решения:

  1. Подключаем внешнюю компоненту FormEx.dll при старте системы в процедуре ПриНачалеРаботыСистемы() глобального модуля.
  2. Создаем служебную обработку экспорта и добавляем кнопку для ее вызова на панель инструментов пользовательского интерфейса в Конфигураторе.
  3. В коде обработки получаем активный контекст через объекты FormEx. Если активным окном является табличный документ, вызываем его сохранение в формате XLS с помощью метода Записать(ПутьКФайлу, "XLS").

Способ 2. Автоматизация диалога через AutoIt или WSH

Если конфигурацию изменять нельзя или установка внешних компонент ограничена политиками безопасности, рассмотрим вариант автоматизации на уровне операционной системы с помощью утилиты AutoIt.

Скрипт перехватывает комбинацию горячих клавиш (например, Ctrl + S) или клик по пункту сохранения в среде 1С, автоматически открывает диалог сохранения, выбирает в выпадающем списке типов файлов строку с расширением .xls и передает управление пользователю для подтверждения имени файла.

Способ 3. Использование библиотек быстрой выгрузки (Йоксель / 1С++)

Штатный механизм выгрузки 1С 7.7 в формат Excel имеет технические ограничения: он формирует файлы в формате Excel 95/97, медленно обрабатывает большие таблицы и ограничен 65 536 строками. Для быстрого экспорта со сложным форматированием и объединением ячеек применяются специализированные компоненты, такие как Йоксель (в составе 1С++).

Данные библиотеки перехватывают интерактивное сохранение таблиц и формируют корректные файлы Excel нативно, значительно ускоряя экспорт объемных реестров и отчетов.

← На главную