Почему при создании макета Active Document из Excel возникает ошибка неизвестный формат файла?

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

При разработке и сопровождении печатных форм или обработок в среде «1С:Предприятие» разработчики нередко используют макеты типа ActiveDocument. Однако в некоторых случаях при попытке загрузить файл Excel в конфигураторе появляется сообщение «неизвестный формат файла», а уже существующие макеты при попытке открытия выдают системное предупреждение: «Не удалось создать объект. Возможно, отсутствует соответствующее приложение». Разберем детально, почему это происходит и как исправить ошибку.

Причины возникновения ошибки

Проанализируем технические особенности работы макетов ActiveDocument в платформе «1С:Предприятие»:

  1. Несовпадение разрядности платформы 1С и Microsoft Office. Механизм Active Document построен на технологии внутрипроцессного встраивания OLE-контейнера (OLE In-Place Activation). Если клиентское приложение или Конфигуратор 1С имеет разрядность x86 (32 бита), а офисный пакет установлен как x64 (или наоборот), встроить документ в единое адресное пространство невозможно. В отличие от стандартного COM-соединения, которое умеет маршалировать вызовы между процессами разной разрядности через системные суррогаты, встраивание визуального OLE-документа жестко требует совпадения битности.
  2. Специфика формата XLSX. Старый формат .xls представляет собой составной файл структурированного хранилища OLE (Structured Storage). Формат .xlsx является OpenXML-контейнером (архивом ZIP с XML-документами внутри). Если в операционной системе повреждены или не сопоставлены OLE-провайдеры для работы с OpenXML, платформа пытается прочитать ZIP-архив как классическое OLE-хранилище и сообщает, что формат файла неизвестен.
  3. Повреждение OLE-регистрации Excel в реестре Windows. Довольно часто подобный сбой возникает после переустановки операционной системы, контроллера домена или самого офисного пакета. Даже если в Проводнике Windows ассоциации файлов настроены правильно и таблицы открываются двойным кликом мыши, системные ключи OLE Document Server могут отсутствовать или указывать на несуществующие библиотеки.
  4. Особенности установки Click-to-Run (Office 365). При установке через виртуализованные контейнеры Microsoft многие COM- и OLE-интерфейсы не регистрируются в стандартном разделе HKEY_CLASSES_ROOT, из-за чего сторонние контейнеры не могут взаимодействовать с приложением в режиме визуального внедрения.

Способ 1. Программный обход через сохранение во временный файл и COM-объект

Если проблему необходимо устранить быстро, не вмешиваясь в настройки операционной системы рабочих станций и серверов, рассмотрим программный обход. Вместо прямого вызова внедренного документа методом Макет.Получить() мы можем сохранить макет на диск во временный файл и передать управление COM-серверу Excel.Application.

Посмотрим на пример практической реализации данного подхода:


МакетEXCEL = ПолучитьМакет("Макет");
ПолноеИмяФайлаДокумента = ПолучитьИмяВременногоФайла("xls");

// Записываем внедренный макет во временный каталог на диске
МакетEXCEL.Записать(ПолноеИмяФайлаДокумента);

Попытка
    Эксель = Новый COMОбъект("Excel.Application");
Исключение
    Сообщить("Не удалось запустить Excel: " + ОписаниеОшибки());
    Возврат;
КонецПопытки;

// Открываем сохраненный файл как отдельную книгу
MSExcel = Эксель.WorkBooks.Open(ПолноеИмяФайлаДокумента);
Эксель.Visible = Истина;

Разберем по шагам, почему этот вариант работает даже тогда, когда макет выдает ошибку внедрения:

  1. Метод Записать() объекта макета выгружает исходные двоичные данные файла напрямую в файловую систему, не инициализируя визуальный OLE-контейнер внутри 1С.
  2. Вызов Новый COMОбъект("Excel.Application") запускает Microsoft Excel как независимый внешний процесс, что обходит ограничения адресного пространства внутри 1С.

Способ 2. Восстановление и регистрация OLE-сервера в операционной системе

Если требуется восстановить штатную работу конфигуратора и открывать макеты непосредственно внутри окон 1С, выполним системные настройки:

  1. Перерегистрация сервера Excel. Запустим командную строку Windows от имени администратора и выполним принудительную перерегистрацию компонентов Microsoft Excel. Команда выглядит следующим образом (путь зависит от версии и разрядности MS Office):

    "C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE" /regserver

    Параметр /regserver перезаписывает все необходимые ключи OLE и ProgID в системном реестре.
  2. Синхронизация разрядностей. Проверим разрядность запускаемого клиента «1С:Предприятие» и Microsoft Office. Если используется 32-разрядная платформа 1С, офисный пакет также должен быть 32-разрядным. При переходе на 64-разрядный клиент 1С убедимся, что установлен 64-разрядный Microsoft Office.
  3. Восстановление установки Office. Перейдем в Панель управления -> Программы и компоненты, выберем установленный пакет Microsoft Office, нажмем Изменить и запустим процедуру быстрого или сетевого восстановления.

Способ 3. Переход на альтернативные механизмы хранения и обработки

Технология ActiveDocument считается устаревающей и платформозависимой (она полностью неработоспособна на клиентах под управлением Linux, macOS и в веб-клиенте). Рассмотрим более современные и надежные альтернативы:

  1. Использование макета с типом «Двоичные данные». Загрузим файл шаблона Excel в макет как двоичные данные. В коде такой макет извлекается через метод ПолучитьМакет(), сбрасывается во временный файл и открывается внешними библиотеками или COM-сервером. Это гарантирует отсутствие конфликтов внутри Конфигуратора.
  2. Использование встроенного табличного документа. Платформа 1С умеет напрямую открывать файлы Excel без стороннего ПО. Для этого достаточно создать макет типа ТабличныйДокумент и загрузить данные туда, либо прочитать готовый файл прямо из кода, используя метод ТабличныйДокумент.Прочитать(ИмяФайла). Данный метод не требует установленного Microsoft Excel на рабочем месте пользователя и работает кроссплатформенно.
← На главную