Каталог решений - Пример работы с шаблоном Word через ole (клиент — сервер, тонкий клиент) — установка значений и заполнение таблицы

Пример работы с шаблоном Word через ole (клиент — сервер, тонкий клиент) — установка значений и заполнение таблицы

Пример работы с шаблоном Word через ole (клиент — сервер, тонкий клиент) — установка значений и заполнение таблицы

В наличии

В примере показывается заполнение строк готовой таблицы, добавление новой таблицы, объединение ячеек, установка значений в «параметр».

Категория:

Описание

Встала задача — заполнение договора в ворде и таблицы.

Решил не делать программное форматирование шапки таблицы, а заполнять готовый шаблон:

№

руб.

Поле4

Поле1

Поле2

Поле3

{ГрафикНачало}

 

 

 

 

 

ИТОГО:

 

 

 

 В итоге должна получиться вот такая таблица:

№

руб.

Поле4

Поле1

Поле2

Поле3

1

qwe

12

45

01.01.2016

2

asd

34

67

03.01.2016

3

zxc

1

5

04.01.2016

4

rty

8

33

10.01.2016

 

ИТОГО:

55

 

 

 

В клиент-серверном варианте управляемой конфигурации, сработал только такой вариант — создание OLE из файла.

Получить данные из макета можно только "на сервере", а в управляемой конфигурации с сервера на клиент, без ошибки, передаются только "двоичные данные".

Ниже функция возвращает двоичные данные, на клиента:

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

 Следующая процедура находит и заменяет все вхождения в документе: 

Имя — имя параметра

Значение  — значение параметра

&НаКлиенте
Процедура УстановитьЗначениеВорд(Doc,Имя,Значение) // найти и заменить текст
            Replace = Doc.Content.Find;
            Replace.Execute(Имя,Ложь,Истина,Ложь,,,Истина,,Ложь,Значение);   
КонецПроцедуры

 Эта функция находит текст и возвращает его диапазон, далее через диапазон можно получить таблицу в которой он находится, или вставить новую в этот диапазон, а также изменить формат и прочее…

&НаКлиенте
Функция GetRange(Doc,Имя) //находит текст и возвращает его диапазон
            Range = Doc.Application.Selection.Range;
            Range.Find.Execute(Имя);
            Возврат Range;
КонецФункции

 Основная процедура, создает "ком" из файла и заполняет таблицу:

&НаКлиенте
Процедура ВставитьГрафикВорд()
           
            Макет = ПолучитьМакетНаСервере("Договор_жп");
            Попытка
                        Макет.Записать(КаталогВременныхФайлов()+"Договор_жп.dot"); //файл ".dot" сохраняется во временную папку пользователя
            Исключение
                        Сообщить(ОписаниеОшибки());
            КонецПопытки;
           
                        Попытка
                       
       MSWord = ПолучитьCOMОбъект(КаталогВременныхФайлов()+"Договор_жп.dot");
                        Doc = MSWord.Application.Documents(1);
                        Doc.Activate();        
                       
                        //УстановитьЗначениеВорд(Doc,"{ГрафикНачало}","895"); //процедура находит и заменяет все значения {ГрафикНачало} в документе, на "895"
                       
                        Range = GetRange(Doc,"{ГрафикНачало}"); //получить диапазон текста {ГрафикНачало}
                        Table = Range.Tables(1); //получить таблицу в которую входит диапазон
                       
                        НомСтр = 2;
                        Ном = 0;
                        Для Каждого СтрокаГрафика Из Объект.График Цикл
                                   НомСтр = НомСтр + 1;
                                   Ном = Ном + 1;
                                   Если НЕ Ном = Объект.График.Количество() Тогда
                                               Table.Rows.Add(Table.Cell(НомСтр,1)); //добавить новую строку перед текущей (для последней строки не добавляем)
                                   КонецЕсли;
                                   Table.Cell(НомСтр,1).Range.Text = СтрокаГрафика.НомерСтроки; // установить текст в ячейку таблицы
                                   Table.Cell(НомСтр,2).Range.Text = Формат(СтрокаГрафика.Поле1,"ЧДЦ=2; ЧРГ=' '");
                                   Table.Cell(НомСтр,3).Range.Text = Формат(СтрокаГрафика.Поле2,"ЧДЦ=2; ЧРГ=' '");
                                   Table.Cell(НомСтр,4).Range.Text = Формат(СтрокаГрафика.Поле3,"ЧДЦ=2; ЧРГ=' '");
                                   Table.Cell(НомСтр,5).Range.Text = Формат(СтрокаГрафика.Поле4,"ДФ=dd.MM.yyyy");
                        КонецЦикла;
                        Table.Cell(НомСтр+1,3).Range.Text = Формат(Объект.График.Итог("Поле2"),"ЧДЦ=2; ЧРГ=' '"); //вывод итога
                       
                        // вставить таблицу вместо {График}
                        Range = GetRange(Doc,"{График}");  //получить диапазон текста {График}
                        Table = Doc.Tables.Add(Range,3,5,1,2); //добавить таблицу в диапазоне
                        Row=Table.Rows(1);// получить строку 1
                        Row.Cells(2).Merge(Row.Cells(4)); //объединить ячейки
                        Row.Cells(2).Range.Text="руб."; // установить текст в ячейку строки
                        Row=Table.Rows(2);
                        Row.Cells(1).Range.Text="№";
                        Row.Cells(2).Range.Text="Поле1";
                        Row.Cells(3).Range.Text="Поле2";
                        Row.Cells(4).Range.Text="Поле3";
                        Row.Cells(5).Range.Text="Поле4";
                       
        MSWord.Application.Visible = Истина;
        MSWord.Activate();
    Исключение
        Сообщить(ОписаниеОшибки());
        MSWord.Application.Visible = Истина;
        MSWord.Application.Quit();   
    КонецПопытки;   
           
КонецПроцедуры

 

has been added to your cart:
Оформление заказа