Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Заполнение документа Word из 1С 7.7

v7: Заполнение документа Word из 1С 7.7
Я
   zenon46
 
19.03.21 - 16:18
Доброго дня! Не могу побороть проблемку, пытаюсь реализовать заполнение документа Word из 1С 7.7, создал документ, добавил туда закладку https://prnt.sc/10pyx50.
В СЗ добавил необходимый параметр и его значение. Далее вот такой код, перебирает СЗ и ищет в документе закладки и ПО ИДЕЕ должен заменить закладку на значение, а получается что вставляется значение и закладка сдвигается https://prnt.sc/10pyznq. Что я делаю не так ?

    // Формируем договор
    Word.Documents.Add(пШаблон);
    Документ = Word.ActiveDocument;
    
    // Заменяем параметры
    КоличествоПараметров = пПараметры.РазмерСписка();
    Для Счетчик = 1 По КоличествоПараметров Цикл
        СтрЗамены = пПараметры.ПолучитьЗначение(Счетчик,СтрПоиска);
        Попытка
            Документ.Bookmarks(СтрПоиска).Select();
            Документ.Application.Selection.TypeText(СтрЗамены);                
        Исключение    
            Сообщить("Не найдена закладка " + СтрПоиска);
        КонецПопытки;
    КонецЦикла;
   Злопчинский
 
1 - 19.03.21 - 16:25
я делл проще. без всяких закладок. просто фнкцией найти и заменить. а в тектсе договора писал
тралалая %ФИО%
   zenon46
 
2 - 19.03.21 - 16:33
(1) есть пример ?
   Масянька
 
3 - 19.03.21 - 16:34
(1) Поддерживаю предыдущего оратора.
В тексте Word нужные параметры отделяются - [Параметр] (например). И поиском меняются на нужные.
   Масянька
 
4 - 19.03.21 - 16:35
(2) м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);
   zenon46
 
5 - 19.03.21 - 16:37
(4) выходит обязательно иметь dot, получается.
   Kigo_Kigo
 
6 - 19.03.21 - 16:39
(5) не, не обязательно, но работать не будет :)))))
   Масянька
 
7 - 19.03.21 - 16:40
(5) А как собираетесь сохранять?
   zenon46
 
8 - 19.03.21 - 16:52
Сделал так, без dot файла. Вроде работает. 
    // Инициализация Microsoft Word

    Попытка
        WordApp=СоздатьОбъект("Word.Application");
        NewDoc=WordApp.Documents;
    Исключение
        Сообщить("Не удалось установить связь с Microsoft Word !!!");
        Возврат;
    КонецПопытки;    
    
    Док=NewDoc.Add(пШаблон);
    
    //Заполнение текстового поля

    Fnd = WordApp.ActiveDocument.Range().Find;
    Fnd.ClearFormatting();
    Fnd.Forward = -1;    
    
    // Заменяем параметры

    КоличествоПараметров = пПараметры.РазмерСписка();
    Для Счетчик = 1 По КоличествоПараметров Цикл
        СтрЗамены = пПараметры.ПолучитьЗначение(Счетчик,СтрПоиска);
        Попытка
            Fnd.Execute("["+СтрПоиска+"]",,,,,,,,,СтрЗамены,2); 
        Исключение    
            Сообщить("Не найдена закладка " + СтрПоиска);
        КонецПопытки;
    КонецЦикла;
    
    // Показываем договор

    WordApp.Visible = 1;
    WordApp.Activate();
   Злопчинский
 
9 - 19.03.21 - 17:03
(8) а при чем здесь dot
обычный файл с обычным текстом
открыл заменой заменил, записал куда надо.
   Масянька
 
10 - 19.03.21 - 17:07
(8) (9) У меня задача была - договора. Создание, хранение.
Есесьно, шаблон договора, а заполнение и хранение - файл.
   Злопчинский
 
11 - 19.03.21 - 19:09
(10) ну, простой вордовский обычный _доковский_ файл. где тексте стоит последовательность символов %НОМЕРДОГОВОРА% - это faqk играет роль шаблона. из 1Сины открыли, командами поиска и замены макровордовскими заменили строку %НОМЕРДОК% на нужный номер и сохранили под именем нужным (контрагента, номера договора итд). Без всяких dot шаблонов и закладок. я делал так, тупо и примитивно. вроде работало.
   tgu82
 
12 - 19.03.21 - 19:10
(9,10) Ну так и есть. Там же "поле" есть. Пишешь в нем имяполя и потом через ОЛЕ из 1С его подставляешь. Сначала делаешь шаблонный файл для все уже есть только вместо значения Поля а потом из 1С присваиваешь значения этим полям и все сохраняешь готовый документ. Я так и делал в договорах при приеме на работу: сотрудники руководитель должность и т.д.
   alyuev
 
13 - 23.03.21 - 16:43
Я делал так:

Книга.Bookmarks(ИмяЗакладки).Range().Text=ТекстЗакладки
   alyuev
 
14 - 23.03.21 - 16:46
А текст заменял через 

Финд = Word.Selection.Find

и далее

Финд.Execute(ИмяПерем,,,,,,,,,ВсеЧасти,2);


но там заморочка с длинными строками более 255 символов. Приходилось резать по кусочкам.

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.