Всем привет. Необходимо ораганизовать вывод печатной формы документа посредством создания объекта ActivX, чтобы читать шаблон из Word.

Не могу найти информацию по теме - возможноли как в таб. документе организовать повторение в документе Word при печати некотрых облатей ?? Кто сталкивался?
 Начинаю так:

```1c
    Word = ПолучитьCOMОбъект(", "Word.Application");
    СОМОбъектWord = Word.Documents.ADD(ФайлWord);

    РабочаяОбластьПечати = СОМОбъектWord.Application.Documents(1);
    РабочаяОбластьПечати.Activate();

    // Получить объект, который будем использовать для поиска и замены.
    // Заменить заранее определенные ключевые конструкции на требуемый текст.
    Замена1 = РабочаяОбластьПечати.Content.Find;
    Замена1.Execute("[ФамилияИмяОтчество]", Ложь, Истина, Ложь, , , Истина, , Ложь, СтуктураИнформации.ФамилияИмяОтчество);

    Замена2 = РабочаяОбластьПечати.Content.Find;
    Замена2.Execute("[Число]", Ложь, Истина, Ложь, , , Истина, , Ложь, СтуктураИнформации.Число);

    Замена3 = РабочаяОбластьПечати.Content.Find;
    Замена3.Execute("[Месяц]", Ложь, Истина, Ложь, , , Истина, , Ложь, СтуктураИнформации.Месяц);

    Замена4 = РабочаяОбластьПечати.Content.Find;
    Замена4.Execute("[Год]", Ложь, Истина, Ложь, , , Истина, , Ложь, СтуктураИнформации.Год);

    СОМОбъектWord.Application.Visible = Истина;
    СОМОбъектWord.Activate();
```
---
```1c
    Sub Выделить()
    With ActiveDocument.Content.Find
    .ClearFormatting
    .MatchWildcards = False
    .Text = "Мэра"
    Do While .Execute() = True
    With .Parent
    .StartOf Unit:=wdParagraph, Extend:=wdMove
    .InsertAfter "{НачалоШапки}"
    .MoveEndUntil Cset:=vbCr, Count:=wdForward
    .InsertAfter "{КонецШапки}"
    .Move Unit:=wdParagraph, Count:=1
    End With
    Loop
    End With
    Selection.Paragraphs(1).Range.Select
    p = Selection ' переменная выделенный абзац
    Selection.Copy
    Selection.InsertAfter p
    End Sub
```

копирует выделенный абзац и вставляет после текущего
---
Manticor, добрый день, подробнее можно ?
---
kare, эти действия нужны с целью установить особое форматирование текста, а именно выделить некоторые слова в печ. форме жирным. Как известно - в макете ТабДока нельзя выделить отдельные слова жирным в блоке текста.
Поэтому было решено попробовать сделать данный текст как шаблон word и через тамошние параметры подставлять значение, например ФИО, дата рожденяи и прочее.
Тоесть если брать таблиный документ, то для повторения областей все просто:
В цикле

```1c
    Макет = ПолучитьМакет("ТабличныйМакет");
    ОбластьШапки = Макет.ПолучитьОбласть("Шапка");
    ТабДок.Вывести(ОбластьШапки);
```

А как быть, если нужно повторить эту шапку несколько раз но в макете wоrd?
Файл шаблона Word подключаю через ActiveX:

```1c
    АктивныйДокумент = РеквизитФормыВЗначение("Объект").ПолучитьМакет("СлужебныйКонтрактНовый");
```

Еще есть проблема с дружбой web клиента с этим ActiveX объектом, поскольку работа будет вестись исклбчително через web клиент. Например в IE пишет не подклчена компонента для работы с файлами. А Fire Fox - вообще не умеет работать с com (ActiveX)(((
http://v8.1c.ru/small.biz/online/settings.htm?printversion=1
---
Manticor, на выходе что у Вас должно получиться есть пример? что касается выделить жирным то можно изначально выделить в макете жирным параметры которые заменяются , а потом подгрузить в макет через Активный документ и при поиске подставлять с сохранение исходного форматирования(Format_ = False;). либо через .Bold = True или если я Вас правильно понимаю и заведомо известно солько раз шапка должна повторяться , в шаблоне создать параметры ФИО ФИО1 ФИО3 (или указать при поиске и подстановке "MatchAllWordForms = False" и он заменит все ФИО которые найдет)

```1c
    FindText = "1C_DATA"; // что искать - имя_шаблона
    MatchCase = False; // использовать регулярные выражения
    MatchWholeWord = True; // искать слово целиком
    MatchWildcards = False; // испоьзовать регулярные выражения
    MatchSoundsLike = False; // искать созвучные
    MatchAllWordForms = False; // искать все формы слова
    Forward = True; // искать вперед
    Wrap = 1; // что должен вернуть Find-объект
    Format_ = False;
    Replace.Execute(FindText,MatchCase,MatchWholeWord,MatchWildcards,MatchSoundsLike,MatchAllWordForms,Forward,Wrap,Format_,Дата2,2);
```

что касается веб клиента не пробовал но на управляемых формах можно так

Вставить элемент activex через HTML докумет с помощью тегов <OB JECT>
В 1с получить контент документа по id
далее с ним можно работать как с обычным activex
---
kare, что касается выделить жирным то можно изначально выделить в макете жирным параметры которые заменяются
Привел пример - как нужно, чтобы формировался документ word.
Как я понимаю конструкция
```1c
    Replace.Execute(FindText,MatchCase,MatchWholeWord,MatchWildcards,MatchSoundsLike,MatchAllWordForms,Forward,Wrap,Format_,Дата2,2);
```
 лишь ищети заменяет нужный параметр. А есть что то для повторения области?

```1c
    Вставить элемент activex через HTML докумет с помощью тегов <OB JECT>
    В 1с получить контент документа по id
    далее с ним можно работать как с обычным activex
```

Это нужно для работы в браузерах так обращаться к activex, чтобы получить объект, минуя ошибку "устновите компоненту для работы с файлами?"
---
Manticor,

Я когда не знаю, что написать на VB, чтобы что-то сделать записываю макрос, а потом смотрю на код и подгоняю под себя =)
---
maxkisa, а каким образом макросом можно из 1с это сделать?
---
Manticor,

Как вызывать макросы уже не помню, как то давно это делал. Я обычно анализировал текст макроса и переносил его в 1С. Никто же не запрещает писать на VB в 1С только нужно ставить "префикс" в виде переменной ком объекта ну и скобочки ставить на процедуры/функции в соответствии с синтаксисом 1С =)
---
```1c
    Sub Выделить()
    With ActiveDocument.Content.Find
    .ClearFormatting
    .MatchWildcards = False
    .Text = "Мэра"
    Do While .Execute() = True
    With .Parent
    .StartOf Unit:=wdParagraph, Extend:=wdMove
    .InsertAfter "{НачалоШапки}"
    .MoveEndUntil Cset:=vbCr, Count:=wdForward
    .InsertAfter "{КонецШапки}"
    .Move Unit:=wdParagraph, Count:=1
    End With
    Loop
    End With
    Selection.Paragraphs(1).Range.Select
    p = Selection ' переменная выделенный абзац
    Selection.Copy
    Selection.InsertAfter p
    End Sub
```

копирует выделенный абзац и вставляет после текущего
---
еще здесь http://infostart.ru/public/61064/ описывал вариант работы (ActiveX) компонентов в тонком клиенте уважаемый Душелов, царство ему небесное.
---
Мне кажется для установить особое форматирование текста, а именно выделить некоторые слова в печ. форме жирным.
проще сделать макетом чем подключать компоненты и делать велосипед на vba.
---
1. Делаем в шаблоне ворда {НачалоШапки} и {КонецШапки}, переменные шапки оформляем как {ПеременнаяШапки}.
2. Из 1С находим {НачалоШапки} и {КонецШапки}, делаем Select, потом Copy для полученного Selection.
3. Заменяем переменные {ПеременнаяШапки} нужными значениями.
4. Делаем Paste после {КонецШапки}, заменяем переменные {ПеременнаяШапки} новыми значениями и т.д.
---
monsta, как вариант, {НачалоШапки} текст {КонецШапки} можно ставить автоматически по поиску метки(определенного слова например Мэра)

```1c
    Sub Определить абзац()
    With ActiveDocument.Content.Find
    .ClearFormatting
    .MatchWildcards = False
    .Text = "Мэра"
    Do While .Execute() = True
    With .Parent
    .StartOf Unit:=wdParagraph, Extend:=wdMove
    .InsertAfter "{НачалоШапки}"
    .MoveEndUntil Cset:=vbCr, Count:=wdForward
    .InsertAfter "{КонецШапки}"
    .Move Unit:=wdParagraph, Count:=1
    End With
    Loop
    End With
    End Sub
```
---
видимо не актуально уже
---
еще как вариант в шаблоне оформить все в таблице с невидимыми краями и копировать таблицу
---
kare, спасибо за помощь, не отвечал ввиду загрузки).
Примерно ясен ход решения по областям. Однако, есть парочка нюансов по части работы браузеров, поскольку предполагается исключительно работа через web клиент. С com объектами (ActiveX) работает только IE, Mozilla например не жеает работать с com говоря что не установлено расширения для рабоыт с файлами. Chrome тоже капризный на эту тему. Поэтому сейчас занимаюсь совсем не 1с-ими делами - изучаю Open xml word (дабы выгрузка в word работала под всеми браузерами). Хочу при помощи

```1c
    ПостоительДОМ = Новый ПостроительDOM;
    ДокументДОМ = ПостоительДОМ.Прочитать(ЧтениеXMLФайла);
```

обратиться к распакованому вордовскому файлу - дабы формат docx это архив и там уже по заготовленным заранее параметрам подставить значения. Вообе весь этот изврат делается ради выделения жирным курсивом. 1с еще пока не умеет в одной ячейке красить некоторые слова(/

kare, а Вам известен еще какой либо способ работы с com? Вы пишите:

```1c
    Вставить элемент activex через HTML докумет с помощью тегов <OB JECT>
    В 1с получить контент документа по id
    далее с ним можно работать как с обычным activex
```
 Можно по подробнее об этом? Как я понимаю с этой фичей Mozilla будет работать.
---
Manticor, добрый день, спасибо за добавку ) ВОТ ТУТ есть обсуждение по вставке activex на примере wmp