При ежедневной работе в платформе «1С:Предприятие 7.7» пользователи часто сохраняют отчеты и печатные формы документов для дальнейшей обработки в Microsoft Excel. Однако стандартный диалог «Файл — Сохранить как...» всегда предлагает в качестве формата по умолчанию внутренний формат 1С — .mxl. Пользователю приходится каждый раз вручную переключать тип файла на .xls.
Разберем, почему возникает такое поведение, с какими ограничениями платформы сталкиваются разработчики и какие существуют практические способы решения этой задачи.
В платформе 1С 7.7 список форматов сохранения и порядок фильтров жестко зашиты в системные библиотеки. Штатными средствами конфигуратора или настройками пользователя изменить порядок типов файлов в системном диалоге сохранения невозможно.
Часто разработчики пытаются создать универсальную внешнюю обработку или кнопку на панели инструментов с кодом следующего вида:
Процедура ПриОткрытии()
ТаблДок = СоздатьОбъект("Таблица");
Каталог = "C:\Temp\";
ИмяФайла = Каталог + "Документ.xls";
ТаблДок.Записать(ИмяФайла, 1);
Форма.Закрыть();
КонецПроцедуры
Проанализируем эту ситуацию. В результате выполнения такого кода на диске создается совершенно пустой файл Excel. Причина в том, что функция СоздатьОбъект("Таблица") создает новый, чистый экземпляр таблицы в оперативной памяти. Она никак не связана с той печатной формой, которая уже сформирована и отображается на экране пользователя. Штатный встроенный язык 1С 7.7 не предоставляет методов для прямой адресации к произвольному активному окну таблицы.
Если табличный документ формируется программно в модуле отчета или обработки, для его прямой выгрузки в файл используется метод Записать(). Посмотрим на синтаксис данного метода:
Синтаксис: Записать(<ИмяФайла>, <ТипФайла>)
Параметр <ТипФайла> определяет формат выгружаемого документа:
0, "MXL" или отсутствует — собственный формат 1C;1 или "XLS" — формат Microsoft Excel (Excel 95/97);2, "HTM" или "HTML" — формат веб-страницы HTML;3 или "TXT" — текстовый документ.Пример программного сохранения сформированного отчета с выбором пути через стандартный диалог файловой системы:
Функция глСохранитьТаблицуВExcel(ТаблДок, ИмяФайлаПоУмолчанию) Экспорт
Перем Каталог, ИмяФайла, Заглавие, Фильтр;
Каталог = ВосстановитьЗначение("КаталогСохраненияОтчетов");
ИмяФайла = ИмяФайлаПоУмолчанию + ".xls";
Заглавие = "Сохранение таблицы в Excel:";
Фильтр = "Файлы Excel (*.xls)|*.xls|Все файлы (*.*)|*.*";
Если ФС.ВыбратьФайл(1, ИмяФайла, Каталог, Заглавие, Фильтр) = 1 Тогда
ТаблДок.Записать(Каталог + ИмяФайла, 1);
СохранитьЗначение("КаталогСохраненияОтчетов", Каталог);
Возврат 1;
КонецЕсли;
Возврат 0;
КонецФункции
Чтобы сделать универсальную кнопку на главной панели инструментов, которая сможет сохранять любое активное табличное окно (включая печатные формы документов и стандартные отчеты), воспользуемся внешней компонентой FormEx.
Компонента расширяет объектную модель 1С 7.7 и позволяет получать доступ к списку открытых окон и активному контексту. Разберем алгоритм решения:
FormEx.dll при старте системы в процедуре ПриНачалеРаботыСистемы() глобального модуля.FormEx. Если активным окном является табличный документ, вызываем его сохранение в формате XLS с помощью метода Записать(ПутьКФайлу, "XLS").Если конфигурацию изменять нельзя или установка внешних компонент ограничена политиками безопасности, рассмотрим вариант автоматизации на уровне операционной системы с помощью утилиты AutoIt.
Скрипт перехватывает комбинацию горячих клавиш (например, Ctrl + S) или клик по пункту сохранения в среде 1С, автоматически открывает диалог сохранения, выбирает в выпадающем списке типов файлов строку с расширением .xls и передает управление пользователю для подтверждения имени файла.
Штатный механизм выгрузки 1С 7.7 в формат Excel имеет технические ограничения: он формирует файлы в формате Excel 95/97, медленно обрабатывает большие таблицы и ограничен 65 536 строками. Для быстрого экспорта со сложным форматированием и объединением ячеек применяются специализированные компоненты, такие как Йоксель (в составе 1С++).
Данные библиотеки перехватывают интерактивное сохранение таблиц и формируют корректные файлы Excel нативно, значительно ускоряя экспорт объемных реестров и отчетов.