Доброго времени суток!

Ребята подскажите пожалуйста как мне вот эту функцию работающею с объектом Документ Word (ДокументВорд = ОбъектВорд.ActiveDocument;), написать так чтобы она могла работать с COM-объектом Word (ОбъектВорд = Новый COMОбъект("Word.Application"); ):

```1c
    Функция ВыполнитьЗамену(знач Object, Параметр, Значение)
    СтрокаПоиска = "{" + Параметр + "}";
    СтрокаЗамены = Строка(Значение);
    //Необходимо выделить областей, в которой мы осуществляем замену
    Object.Select();
    //Получаем выделенную область
    Selection = Object.Application.Selection;
    //Найдем все вхождения параметра и заменим его на нужное нам значение
    FindObject = Selection.Find;
    FindObject.ClearFormatting();
    Пока FindObject.Execute(СтрокаПоиска) Цикл
    Если ПустаяСтрока(СтрокаЗамены) Тогда
    Selection.Delete();
    Иначе
    Selection.TypeText(СтрокаЗамены);
    КонецЕсли;
    КонецЦикла;
    //Отменим выделение
    Selection.Collapse();

    Возврат Object;
    КонецФункции
```

Она работает, если в неё отправить объект преобразованный:

```1c
    //Создаем COM-объект для работы с Word
    ОбъектВорд = Новый COMОбъект("Word.Application");
    ОбъектВорд.Documents.Add(ИмяФайла,,, Истина);
    ОбъектВорд.ActiveWindow.Caption = Макет.Наименование;

    Object = ОбъектВорд.ActiveDocument;
    ВыполнитьЗамену(знач Object, Параметр, Значение)
```

А если отправить просто COMОбъект, то она уже не находит у него нужные функции

```1c
    ОбъектВорд = Новый COMОбъект("Word.Application");
    ОбъектВорд.Documents.Add(ИмяФайла,,, Истина);
    ВыполнитьЗамену(ОбъектВорд, Параметр, Значение)
```

А мне по задачи нужно редактировать COMОбъект, а в документ Word преобразовывать его уже перед просмотром и печатью.
---
перемудрили, так должно работать

```1c
    //Создаем COM-объект для работы с Word
    ОбъектВорд = Новый COMОбъект("Word.Application");
    ОбъектВорд.Documents.Add(ИмяФайла,,, Истина);
    ОбъектВорд.ActiveWindow.Caption = Макет.Наименование;

    ВыполнитьЗамену(ОбъектВорд, Выборка.Представление, Результат);
    ВыполнитьЗамену(ОбъектВорд, Выборка.Представление, Результат);

    Функция ВыполнитьЗамену(Object, Параметр, Значение)
    СтрокаПоиска = "{" + Параметр + "}";
    СтрокаЗамены = Строка(Значение);
    //Необходимо выделить областей, в которой мы осуществляем замену
    Object.ActiveDocument.Select();
    //Получаем выделенную область
    Selection = Object.Selection;
    //Найдем все вхождения параметра и заменим его на нужное нам значение
    FindObject = Selection.Find;
    FindObject.ClearFormatting();
    Пока FindObject.Execute(СтрокаПоиска) Цикл
    Если ПустаяСтрока(СтрокаЗамены) Тогда
    Selection.Delete();
    Иначе
    Selection.TypeText(СтрокаЗамены);
    КонецЕсли;
    КонецЦикла;
    //Отменим выделение
    Selection.Collapse();

    Возврат Object;
    КонецФункции
```
---
Может быть не стоит делать замену именно в COM объекте? Можно вытянуть текст (если он уже там) или взять исходный текст, сделать все необходимые замены и потом вернуть назад.
---
Может быть не стоит делать замену именно в COM объекте? Можно вытянуть текст (если он уже там) или взять исходный текст, сделать все необходимые замены и потом вернуть назад.

Т.е. принять документ, сделать все изменения, а потом как его преобразовать обратно в COMОбъект?
---
Так?

```1c
    Функция ВыполнитьЗамену(знач Object, Параметр, Значение)
    СтрокаПоиска = "{" + Параметр + "}";
    СтрокаЗамены = Строка(Значение);
    //Необходимо выделить областей, в которой мы осуществляем замену
    Object.ActiveDocument.Select();
    //Получаем выделенную область
    Selection = Object.Selection;
    //Найдем все вхождения параметра и заменим его на нужное нам значение
    FindObject = Selection.Find;
    FindObject.ClearFormatting();
    Пока FindObject.Execute(СтрокаПоиска) Цикл
    Если ПустаяСтрока(СтрокаЗамены) Тогда
    Selection.Delete();
    Иначе
    Selection.TypeText(СтрокаЗамены);
    КонецЕсли;
    КонецЦикла;
    //Отменим выделение
    Selection.Collapse();

    Возврат Object;
    КонецФункции
```

Если Возврат Object; заменить на Object.ActiveDocument то вернёт тоже самое что и исходная функция иначе вернёт Application
---
У меня дальше после этой функции идёт другая функция, которая принимает COMобъект.
Преобразование Возврат Object.ActiveDocument вернет COMобъект с изменениями, которые были внесены в функции?

Если , да, то мне это подойдет
---
Когда 2-ой раз пытаюсь отправить данный объект в функцию выдает ошибку:

{Обработка.CRM_ПечатьMicrosoftWord.МодульОбъекта(995)}: Ошибка при получении значения атрибута контекста (ActiveDocument)
 Object.ActiveDocument.Select();
по причине:
Неизвестная ошибка

```1c
    ОбъектВорд=ВыполнитьЗамену(ОбъектВорд, Выборка.Представление, Результат);
    ОбъектВорд=ВыполнитьЗамену(ОбъектВорд, Выборка.Представление, Результат);

    Функция ВыполнитьЗамену(Object, Параметр, Значение)
    СтрокаПоиска = "{" + Параметр + "}";
    СтрокаЗамены = Строка(Значение);
    //Необходимо выделить областей, в которой мы осуществляем замену
    // Object.Select();
    Object.ActiveDocument.Select();
    //Получаем выделенную область
    // Selection = Object.Application.Selection;
    Selection = Object.Selection;
    //Найдем все вхождения параметра и заменим его на нужное нам значение
    FindObject = Selection.Find;
    FindObject.ClearFormatting();
    Пока FindObject.Execute(СтрокаПоиска) Цикл
    Если ПустаяСтрока(СтрокаЗамены) Тогда
    Selection.Delete();
    Иначе
    Selection.TypeText(СтрокаЗамены);
    КонецЕсли;
    КонецЦикла;
    //Отменим выделение
    Selection.Collapse();

    Возврат Object;
    КонецФункции
```
---
перемудрили, так должно работать

```1c
    //Создаем COM-объект для работы с Word
    ОбъектВорд = Новый COMОбъект("Word.Application");
    ОбъектВорд.Documents.Add(ИмяФайла,,, Истина);
    ОбъектВорд.ActiveWindow.Caption = Макет.Наименование;

    ВыполнитьЗамену(ОбъектВорд, Выборка.Представление, Результат);
    ВыполнитьЗамену(ОбъектВорд, Выборка.Представление, Результат);

    Функция ВыполнитьЗамену(Object, Параметр, Значение)
    СтрокаПоиска = "{" + Параметр + "}";
    СтрокаЗамены = Строка(Значение);
    //Необходимо выделить областей, в которой мы осуществляем замену
    Object.ActiveDocument.Select();
    //Получаем выделенную область
    Selection = Object.Selection;
    //Найдем все вхождения параметра и заменим его на нужное нам значение
    FindObject = Selection.Find;
    FindObject.ClearFormatting();
    Пока FindObject.Execute(СтрокаПоиска) Цикл
    Если ПустаяСтрока(СтрокаЗамены) Тогда
    Selection.Delete();
    Иначе
    Selection.TypeText(СтрокаЗамены);
    КонецЕсли;
    КонецЦикла;
    //Отменим выделение
    Selection.Collapse();

    Возврат Object;
    КонецФункции
```
---
Спасибо!