Как исправить ошибку «Неизвестный формат файла» или «Значение не является значением объектного типа (Application)» при работе с макетами ActiveDocument в Word на платформе 8.3.15.1830?

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

При переходе на определенные релизы платформы 1С:Предприятие 8.3 (в частности, ветку 8.3.15.1830) многие технические специалисты столкнулись с неприятной проблемой: привычные макеты типа ActiveDocument, содержащие файлы Microsoft Word, перестают корректно инициализироваться. Ошибка может проявляться двояко: либо на этапе загрузки макета в конфигураторе («Неизвестный формат файла»), либо в коде при попытке обращения к объекту Application («Значение не является значением объектного типа»). Рассмотрим подробно, почему это происходит и как решить задачу несколькими способами.

Анализ причины возникновения ошибки

Проанализируем ситуацию: чаще всего проблема возникает в клиент-серверном варианте работы или при использовании файловой базы, расположенной на серверной ОС (например, Windows Server 2019). Основная причина кроется в сочетании двух факторов:

  1. Особенности релиза платформы: В версии 8.3.15 были изменены механизмы работы внутреннего OLE-контейнера. При вызове метода Получить() для макета ActiveDocument, платформа пытается инициализировать COM-соединение с Word. Если в системе есть хотя бы малейшее несоответствие прав или настроек окружения, COM-сервер не возвращает управление 1С, и объект остается пустым (Неопределено).
  2. Окружение Windows Server: Для работы Microsoft Word через COM-интерфейс в интерактивном или фоновом режиме требуются специфические системные директории, которые часто отсутствуют в серверных редакциях Windows по умолчанию.

Выясним, какие шаги помогут нам восстановить работоспособность печати документов.

Решение №1: Использование макетов типа «Двоичные данные» (Рекомендуемое)

Как показывает практика и советы опытных разработчиков, использование ActiveDocument в 1С — механизм довольно капризный. Самый надежный способ обойти ошибки платформы — это хранить файл Word как Двоичные данные. В этом случае 1С не пытается «разобрать» структуру файла при получении макета, а просто отдает массив байтов.

Разберем по шагам, как переделать макет:

  1. Создайте в объекте новый макет с типом Двоичные данные.
  2. Загрузите в него ваш файл .doc или .docx.
  3. Используйте следующий алгоритм для вывода документа на клиенте:

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


&НаСервере
Функция ПолучитьМакетДвоичныеДанныеНаСервере()
    // Получаем макет как двоичные данные
    ПолныйМакет = РеквизитФормыВЗначение("Объект").ПолучитьМакет("МойВордМакет");
    // Помещаем во временное хранилище, чтобы передать на клиент
    Возврат ПоместитьВоВременноеХранилище(ПолныйМакет);
КонецФункции

&НаКлиенте
Процедура ВыполнитьПечатьВWord(Команда)
    // 1. Создаем объект Word на клиенте
    Попытка
        WordApp = Новый COMОбъект("Word.Application");
    Исключение
        Сообщить("MS Word не установлен на данном компьютере!");
        Возврат;
    КонецПопытки;

    // 2. Получаем данные из хранилища
    АдресХранилища = ПолучитьМакетДвоичныеДанныеНаСервере();
    ДвоичныеДанныеМакета = ПолучитьИзВременногоХранилища(АдресХранилища);

    // 3. Сохраняем во временный файл
    ПутьКФайлу = ПолучитьИмяВременногоФайла("doc");
    ДвоичныеДанныеМакета.Записать(ПутьКФайлу);

    // 4. Открываем файл в Word
    НовыйДокумент = WordApp.Documents.Add(ПутьКФайлу);
    WordApp.Visible = Истина;
    
    // Далее выполняем заполнение параметров...
КонецПроцедуры

Этот метод хорош тем, что он полностью исключает зависимость от платформенного баба при работе с типом ActiveDocument. Программа просто работает с файлом напрямую через COM-объект Microsoft Word.

Решение №2: Настройка системных профилей Windows Server

Если вы все же хотите продолжить использовать ActiveDocument, проанализируем настройки сервера. Часто COM-объекты Microsoft Office падают с ошибкой, если в профиле системной учетной записи отсутствуют папки Desktop. Это «древняя» особенность взаимодействия Windows и Office, которая часто проявляется именно на серверных ОС.

Попробуем создать следующие директории вручную:

После создания папок необходимо дать на них полные права пользователю, под которым запускается служба 1C:Enterprise 8.3 Server Agent (обычно это USR1CV8). После этих манипуляций сервер иногда начинает корректно инициализировать ActiveDocument.

Решение №3: Проверка разрядности платформы и Office

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

Рекомендация: Убедитесь, что разрядность клиента 1С и пакета Microsoft Office совпадает. Если вы работаете в терминальном режиме на сервере, проверьте, какой именно клиент 1С запускают пользователи.

Решение №4: Настройка прав DCOM

Если ошибка «Значение не является значением объектного типа (Application)» сохраняется, стоит проверить настройки компонентов DCOM. Выясним, есть ли у пользователя права на запуск Word как COM-сервера:

  1. Нажмите Win + R, введите dcomcnfg и нажмите Enter.
  2. Перейдите в Службы компонентов -> Компьютеры -> Мой компьютер -> Настройка DCOM.
  3. Найдите в списке Microsoft Word Document (или Microsoft Word Application).
  4. В свойствах на вкладке «Безопасность» проверьте, что в разделах «Разрешения на запуск и активацию» добавлены права для пользователя, под которым работает 1С.
  5. На вкладке «Удостоверение» убедитесь, что выбрано «Запускающий пользователь» или «Интерактивный пользователь».

Решение №5: Переход на табличный документ

Рассмотрим альтернативный вариант, который предложили участники обсуждения. Если разработка находится на начальном этапе или макет не слишком сложный, проще всего заменить Word-макет на стандартный Табличный документ 1С. Это избавит вас от необходимости устанавливать Microsoft Office на сервере или рабочих станциях, а также решит проблемы с совместимостью раз и навсегда. Современные возможности 1С позволяют создавать в табличных документах достаточно сложные печатные формы, которые по качеству оформления не уступают документам Word.

Резюме: Ошибка платформы 8.3.15.1830 в работе с ActiveDocument — это известный факт. Если обновление платформы до более стабильной версии (например, финальных сборок 8.3.15 или перехода на 8.3.18+) невозможно, используйте хранение макетов в виде двоичных данных. Это самый стабильный и профессиональный подход, который минимизирует риски возникновения ошибок при взаимодействии с внешними приложениями через COM-интерфейс.

← На главную