bdd2

Программное изменение текста в надписях Word

Опубликовал Анна Шнипова (АннаШ) в раздел Печать - Печатные формы документов

Печатная форма договора в шаблоне Word. Реквизиты в 1С.
Заполнение шаблона реквизитами: все стандартно, но в надписях долго получалось.
Получилось :)
Может кому пригодится.
// формируем файл

мWord = СоздатьОбъект("Word.Application");

мWord.Visible = 0; 

мNewDoc = мWord.Documents;

мДок = мNewDoc.Add("D:\1С\БД клиентов\КС\1Сv7\Db\Договора\Шаблоны\Типовой_КуплиПродажи_1.dot", 0, 0, 1);   

мОбъект = мДок.Content;

// подставляем значения по тексту договора - признак замены []

мОбъект.Find.Execute("[ПечНомерДоговора]",0,0,,,,,,,НомерДоговора,2); 

мОбъект.Find.Execute("[ПечДатаДоговора]",0,0,,,,,,,Нрег(СокрЛП(мДатаДоговора)),2); 

мОбъект.Find.Execute("[ПечПокупатель]",0,0,,,,,,,СокрЛП(мПокупатель),2); 

мОбъект.Find.Execute("[ПечРуководитель]",0,0,,,,,,,мПечОтветственноеЛицо,2); 

мОбъект.Find.Execute("[ПечОснование]",0,0,,,,,,,СокрЛП(Основание),2);      

// подставляем значения в реквизиты покупателя: надпись, признак замены []

СчетчикЦикла = 0;

КолВоНадписей = мДок.Shapes.Count;

Для СчетчикЦикла = 1 По КолВоНадписей Цикл 

    мНашли = мДок.Shapes.Item(СчетчикЦикла).Select(); 

    Если Число(мДок.Application.Selection.ShapeRange.Type) = 17 Тогда

        мДок.Application.Selection.Range.Find.Execute("[ПечПокупательРеквизиты]",0,0,,,,,,,СокрЛП(мПокупатель),2);

        мДок.Application.Selection.Range.Find.Execute("[ПечЮрАдресПокупателя]",0,0,,,,,,,СокрЛП(мЮрАдресПокупателя),2);

        мДок.Application.Selection.Range.Find.Execute("[ПечПочтАдресПокупателя]",0,0,,,,,,,СокрЛП(мПочтПокупателя),2);

        мДок.Application.Selection.Range.Find.Execute("[ПечТелефонПокупателя]",0,0,,,,,,,СокрЛП(мТелефонПокупателя),2);

        мДок.Application.Selection.Range.Find.Execute("[ПечИННПокупателя]",0,0,,,,,,,СокрЛП(мИННПокупателя),2);

        мДок.Application.Selection.Range.Find.Execute("[ПечКПППокупателя]",0,0,,,,,,,СокрЛП(мКПППокупателя),2);

        мДок.Application.Selection.Range.Find.Execute("[ПечРСПокупателя]",0,0,,,,,,,СокрЛП(мРСчетПокупателя),2);

        мДок.Application.Selection.Range.Find.Execute("[ПечБанкПокупателя]",0,0,,,,,,,СокрЛП(мБанкПокупателя),2);

        мДок.Application.Selection.Range.Find.Execute("[ПечКСПокупателя]",0,0,,,,,,,СокрЛП(мКСчетПокупателя),2);

        мДок.Application.Selection.Range.Find.Execute("[ПечБИКБанкаПокупателя]",0,0,,,,,,,СокрЛП(мБИКПокупателя),2);

        мДок.Application.Selection.Range.Find.Execute("[ПечПокупательПодпись]",0,0,,,,,,,СокрЛП(ПодписьОтветственногоЛица),2);

    КонецЕсли;

КонецЦикла;

// записываем файл

мДок.SaveAs(мИмяФайла);

См. также

Добавить вознаграждение
Комментарии
1. Анна Шнипова (АннаШ) 95 07.12.10 13:36 Сейчас в теме
Вчера вечером наткнулась: у меня надпись + линии (для красоты). Так вот, если надпись с линиями сгруппирована - не работает, а как разгруппируешь - все о`кей.
Может еще у кого какие проблемы вылезли - делитесь :)
2. Nicholas Mikuslas (Nicholas) 692 13.12.10 11:08 Сейчас в теме
Покажите, пожалуйста, файл шаблона для примера.
3. Анна Шнипова (АннаШ) 95 13.12.10 12:39 Сейчас в теме
Пожалуйста!
Все, что в [] заменяется программно. Наши реквизиты подставляются в сам шаблон и сохраняются.
Прикрепленные файлы:
Шаблон_Поставки.dot
4. Nicholas Mikuslas (Nicholas) 692 13.12.10 14:45 Сейчас в теме
Спасибо. Случайно не в курсе как можно подобным образом сделать табличку с изменяемым количеством строк?
5. Анна Шнипова (АннаШ) 95 14.12.10 09:15 Сейчас в теме
Пока не пробовала. Если что-то получится - отпишусь.
6. Андрей Григорьев (Borisych) 500 14.12.10 22:54 Сейчас в теме
у меня есть пример, напишите на почту grigorievab@list.ru завтра, вышлю
7. Nicholas Mikuslas (Nicholas) 692 15.12.10 08:30 Сейчас в теме
Да я уже и сам разобрался. Прикольно, кстати, получилось.
8. ba2000 (ba2000) 13 08.03.11 21:55 Сейчас в теме
:?: Подскажите пожалуйста, подобная автозамена не хочет работать, если шаблон в колонтитуле. С этим как то можно справиться?
9. Serg Serg (berserjk) 07.08.15 09:39 Сейчас в теме
// рисуем колонтитулы
//вЕРХНИЕ
Fnd2 = Word.ActiveDocument.Sections(1).Headers(1).Range().Find;
Fnd2.ClearFormatting();
Fnd2.Forward = -1;
// Номер договора
поле="{401}";лЗначение=ПолучитьНомерДоговораДляПечати();
Если Fnd2.Execute(СокрЛП(лПоле),,,,,,,,,СокрЛП(лЗначение),2)=-1 Тогда КонецЕсли;
//дата договора
лполе="{402}";лЗначение=формат(Объект.Дата,"ДЛФ=DD");
Если Fnd2.Execute(СокрЛП(лПоле),,,,,,,,,СокрЛП(лЗначение),2)=-1 Тогда КонецЕсли;
//Нинжние
Fnd3= Word.ActiveDocument.Sections(1).Footers(1).Range().Find;
//аналагична