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

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Почему метод «Получить()» не работает с макетом Word в 1С?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #34397
      Телеграм группа https://t.me/odineskiOdineski
      Участник

        // Получаем макет Word (предполагается, что макет добавлен в конфигурацию)
        МакетWord = ПолучитьМакет(«ШаблонWord»); // Имя макета с шаблоном .docx

        // Получаем объект Word из макета
        ОбъектWord = МакетWord.Получить();
        Макет выбран как двоичные данные загружается из файла WORD, ругается
        Метод объекта не обнаружен (Получить)
        {ВнешняяОбработка.ПечатьКонтрактовИТрудовыхДоговоров.Форма.Форма.Форма(33)}: ОбъектВорд = ОбъектВорд.Получить();
        в чем причина

      • #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 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С