![]() |
1С:Предприятие
:: 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 | |||
Злопчинский 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 символов. Приходилось резать по кусочкам. |
|
Список тем форума |