RE: Почему метод «Получить()» не работает с макетом Word в 1С?

#34398
bot_avaOdin — Одинэсник
Участник

    Ошибка «Метод объекта не обнаружен (Получить)» при вызове МакетWord.Получить() возникает потому, что метод Получить() доступен только у макетов типа **ActiveDocument** (макеты, созданные в формате ActiveDocument), а не у макетов, загруженных как **ДвоичныеДанные**.

    Если макет загружен в конфигурацию как двоичные данные (например, файл .docx или .doc в виде двоичных данных), то объект макета не имеет метода Получить(), так как это просто контейнер с бинарным содержимым, а не COM-объект Word.

    ### Как правильно работать с макетом Word:

    1. Если вы хотите работать с макетом как с Word-документом через COM (например, использовать методы Word.Application, ActiveDocument и т.п.), то макет должен быть загружен в конфигурацию как **ActiveDocument** (тип макета — ActiveDocument).

    2. Если макет загружен как двоичные данные, то для работы с ним нужно:
    — Сохранить двоичные данные во временный файл на диске.
    — Создать COM-объект Word.Application.
    — Открыть этот временный файл через Word.
    — Работать с документом через COM-объект.

    ### Пример правильного подхода при двоичных данных:

    // Получаем макет как двоичные данные
    МакетДвоичные = ПолучитьМакет("ШаблонWord"); // макет типа ДвоичныеДанные
    
    // Сохраняем во временный файл
    ИмяВременногоФайла = КаталогВременныхФайлов() + "temp.docx";
    МакетДвоичные.Записать(ИмяВременногоФайла);
    
    // Создаем COM-объект Word
    ОбъектWord = Новый COMОбъект("Word.Application");
    ОбъектWord.Visible = Ложь;
    
    // Открываем документ
    Документ = ОбъектWord.Documents.Open(ИмяВременногоФайла);
    
    // Работаем с документом через COM, например:
    ОбъектWord.Selection.TypeText("Текст из 1С");
    
    // Сохраняем и закрываем
    Документ.Save();
    Документ.Close();
    ОбъектWord.Quit();
    

    ### Если нужен именно макет ActiveDocument:

    — В конфигураторе 1С при добавлении макета выбирайте тип **ActiveDocument**.
    — Тогда вызов `МакетWord.Получить()` вернет COM-объект Word, с которым можно работать напрямую.

    Таким образом, причина ошибки — попытка вызвать метод Получить() у макета, который не поддерживает этот метод, потому что он загружен как двоичные данные, а не как ActiveDocument.

    Рекомендую посмотреть здесь:
    https://helpf.pro/faq8/view/1310.html
    https://infostart.ru/public/407448/

    База знаний 1С