Почему перестал открываться макет Active document в 1С и как решить эту проблему?

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

При работе в конфигураторе «1С:Предприятие» разработчики часто сталкиваются с неприятной ситуацией: при попытке открыть или отредактировать существующий макет типа Active document (обычно это шаблоны Microsoft Word или Excel) система выдает критическую ошибку: «Не удалось создать объект. Возможно, отсутствует соответствующее приложение».

Особенно часто эта проблема проявляется внезапно — например, после обновления платформы 1С (характерно для переходов на релизы 8.3.15.1700 и выше). При этом самое удивительное, что в режиме пользователя (в тонком или толстом клиенте) печатные формы по этим макетам могут продолжать формироваться и выводиться на экран без каких-либо сбоев. В рамках этой статьи мы подробно разберем, почему возникает этот сбой, и рассмотрим несколько эффективных способов его устранения.

Выясняем техническую причину ошибки

Для того чтобы понять природу этой ошибки, проанализируем архитектуру взаимодействия приложений. Технология Active document внутри конфигуратора 1С полагается на механизм OLE/COM (In-Process OLE Automation). Это значит, что 1С пытается инициализировать графический интерфейс и библиотеки Microsoft Word или Excel непосредственно внутри своего собственного запущенного процесса.

Начиная с версии платформы 8.3.15, программа установки 1С по умолчанию инсталлирует и запускает 64-разрядную (x64) версию клиента (включая Конфигуратор) на всех современных 64-битных операционных системах Windows. В то же время на компьютерах пользователей и разработчиков очень часто по умолчанию устанавливается 32-разрядный (x86) пакет Microsoft Office (даже на 64-битных ОС Windows это стандартная рекомендация Microsoft для старых версий Office).

В этом и кроется корень проблемы: 64-разрядный процесс Конфигуратора 1С физически не может загрузить в свое адресное пространство 32-разрядные библиотеки COM-сервера Microsoft Office. Операционная система Windows блокирует такое межразрядное взаимодействие внутри одного процесса, в результате чего конфигуратор выдает ошибку о «невозможности создания объекта».

Ниже мы подробно разберем четыре практических варианта решения этой проблемы, начиная с простых обходных путей и заканчивая лучшими практиками разработки в 1С.

Вариант 1. Принудительный запуск Конфигуратора в 32-разрядном режиме

Если у вас нет возможности или прав администратора для переустановки Microsoft Office на компьютере, самым быстрым решением будет запуск Конфигуратора 1С в режиме x86 (32 бит). В этом случае разрядности Конфигуратора и MS Office совпадут, и макет откроется без ошибок.

Рассмотрим по шагам, как настроить запуск:

  1. Откройте окно запуска «1С:Предприятия».
  2. Выберите вашу информационную базу в списке и нажмите кнопку «Изменить» на правой панели.
  3. В появившемся диалоговом окне нажмите кнопку «Далее», чтобы перейти на страницу дополнительных параметров запуска.
  4. Найдите поле «Разрядность». По умолчанию там обычно установлено значение «Выбирать автоматически» или «64 (x64)».
  5. Принудительно установите значение «32 (x86)».
  6. Сохраните настройки нажатием кнопки «Готово» и запустите Конфигуратор.

Также вы можете запустить 32-битный конфигуратор напрямую из папки установки платформы, минуя стандартный стартер. Для этого перейдите по пути C:\Program Files (x86)\1cv8\<Номер_Версии_Платформы>\bin\ и запустите файл 1cv8.exe (или 1cv8g.exe).

Вариант 2. Переход на 64-разрядный пакет Microsoft Office

Если ваша компания планомерно переходит на современные стандарты ПО, наиболее правильным системным решением будет выравнивание разрядности операционной системы, платформы 1С и офисного пакета. Для этого выполните следующие действия:

  1. Полностью удалите текущую 32-разрядную версию Microsoft Office через «Панель управления» -> «Программы и компоненты».
  2. Запустите установщик вашего дистрибутива MS Office (2013, 2016, 2019 или более нового) и выберите для установки именно 64-разрядную версию (x64).
  3. После завершения установки перезагрузите компьютер.

После этого 64-битный Конфигуратор 1С сможет напрямую инициализировать 64-битные OLE-объекты Word и Excel, и макеты будут открываться штатно.

Вариант 3. Перевод печатных форм на «Двоичные данные» (Рекомендуемый метод)

Использование технологии Active document в современной разработке 1С считается устаревшим подходом (deprecated) именно из-за жесткой привязки к конкретным версиям и разрядностям стороннего софта на компьютерах пользователей. Опытные разработчики рекомендуют переводить шаблоны документов на работу через механизм Двоичных данных.

Разберем по шагам, как перестроить работу с шаблонами:

  1. Откройте ваш макет Active document в конфигураторе (запустив его в 32-битном режиме, как описано в Варианте 1) и сохраните сам шаблон файла на жесткий диск (например, как файл Шаблон.docx).
  2. Удалите старый макет типа Active document из метаданных.
  3. Создайте новый макет, выберите тип макета «Двоичные данные» и загрузите туда ранее сохраненный файл Шаблон.docx.
  4. Измените программный код заполнения печатной формы. Теперь нам нужно сначала извлечь двоичные данные файла во временный каталог на диске компьютера, а затем открыть его стандартным внешним COM-соединением (Out-of-Process COM), разрядность которого Windows умеет успешно транслировать автоматически.

Проанализируем пример программного кода для реализации этого механизма:


// 1. Получаем макет двоичных данных из конфигурации
МакетДвоичныеДанные = ПолучитьМакет("ИмяВашегоМакетаДвоичныеДанные");

// 2. Формируем уникальный путь во временном каталоге системы
ИмяВременногоФайла = ПолучитьИмяВременногоФайла(".docx");

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

Попытка
    // 4. Инициализируем внешнее приложение MS Word
    MSWord = Новый COMОбъект("Word.Application");
    MSWord.Visible = Ложь; // Скрываем окно на время заполнения
    
    // 5. Открываем временный файл шаблона
    Документ = MSWord.Documents.Open(ИмяВременногоФайла);
    
    // Здесь размещается ваш алгоритм поиска и замены параметров в файле
    // Пример замены закладки:
    // Документ.Bookmarks("ИмяЗакладки").Range.Text = "ЗначениеПараметра";
    
    // 6. Показываем готовый документ пользователю
    MSWord.Visible = Истина;
Исключение
    // Обработка непредвиденных ошибок при работе с COM
    СообщениеОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
    ВызватьИсключение "Не удалось сформировать документ Word. Причина: " + СообщениеОбОшибке;
    
    // В случае сбоя закрываем процесс Word, если он успел создаться
    Если MSWord <> Неопределено Тогда
        MSWord.Quit();
    КонецЕсли;
КонецПопытки;

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

Вариант 4. Настройка окружения на сервере 1С (при формировании на сервере)

Если печать документов должна выполняться в фоновых заданиях или процедурах на стороне сервера 1С:Предприятие (который практически всегда является 64-разрядным), а на сервере установлен 32-битный Office, могут возникать аналогичные ошибки. Для их решения системные администраторы используют следующие настройки:

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

← На главную