Letysite.ru

IT Новости с интернет пространства
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

1с com word

Как в 1C загрузить из Word текст?

Как в 1C из Microsoft Office Word 2007 внести текст?

Код получения текста из файла word:
Код 1C v 8.х

Рассмотрим приёмы получения статистической информации о документе, его составе и т.д.:
‘получить общее количество символов в активном документе
‘ (буквы, цифры, пробелы, переход на новую строку и т.д)
WordApp.ActiveDocument.Characters.Count

‘получить символ по его индексу
WordApp.ActiveDocument.Characters(14).Text
‘изменить символ по его индексу
WordApp.ActiveDocument.Characters(14).Text=»е» ‘можно несколько «еёе»

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

‘получаем количество слов в документе
‘(переход на новую строку считается словом)
DocWord.Words.Count

‘получить слово по его индексу
DocWord.Words(2).Text
‘изменить слово по его индексу
DocWord.Words(2).Text=»текст» ‘можно несколько слов «Новый текст»

‘получить количество параграфов (абзацев) в документе
WordApp.ActiveDocument.Paragraphs.Count

‘получить текст параграфа по его индексу
WordApp.ActiveDocument.Paragraphs(2).Range.Text
‘изменить текст параграфа по его индексу
WordApp.ActiveDocument.Paragraphs(2).Range.Text=»Много текста. Много » & _
» предложений. И так далее!»

‘получить количество предложений в документе
WordApp.ActiveDocument.Sentences.Count

‘получить текст предложения по его индексу
WordApp.ActiveDocument.Sentences(1).Text

‘получить количество предложений во втором параграфе
WordApp.ActiveDocument.Paragraphs(2).Range.Sentences.Count

‘получить текст предложения 1 в параграфе 2
WordApp.ActiveDocument.Paragraphs(2).Range.Sentences(1).Text

‘получить текст слова 2, в предложении 1,в параграфе 2
WordApp.ActiveDocument.Paragraphs(2).Range.Sentences(1).Words(2).Text

‘добавить новую секцию (раздел)
‘создаёт новый раздел на новом листе
DocWord.Sections.Add
‘создаёт новый раздел на текущем листе
DocWord.Application.S_election.I_nsertBreak (wdSectionBreakContinuous) ‘(3)

‘получить количество секций в документе
DocWord.Sections.Count

‘получить текст слова 2, в предложении 1,в параграфе 2, в секции 1.
DocWord.Sections(1).Range.Paragraphs(1).Range.Sentences(1).Words(2).Text

Используя Встроенные_Свойства_Документа получаем его статистические данные.

‘получаем количество страниц (листов) в документе
WordApp.ActiveDocument.BuiltInDocumentProperties(wdPropertyPages) ‘(14)

‘получаем количество строк в документе
WordApp.ActiveDocument.BuiltInDocumentProperties(wdPropertyLines) ‘(23)

‘получаем количество слов в документе
WordApp.ActiveDocument.BuiltInDocumentProperties(wdPropertyWords) ‘(15)

‘получаем количество параграфов (абзацев) в документе
WordApp.ActiveDocument.BuiltInDocumentProperties(wdPropertyParas) ‘(24)
‘и т.д.

Рассмотрим примеры кода для передвижения по документу, а также поиска и замены текста.
Метод .GoTo (перейти к) позволяет вам переместиться на нужную позицию в документе. Он при прямом вызове возвращает новую позицию курсора.

‘переход на лист с именем «1»
‘если не указать в конце .S_elect, то код просто выдаст положение курсора
DocWord.Application.S_election.GoTo(wdGoToPage, , , «1»).S_elect

wdGoToSection (0) — перейти к секции ; wdGoToPage (1) — перейти к листу ;
wdGoToTable (2) — перейти к таблице ; wdGoToLine (3) — перейти к строке ;
wdGoToFootnote (4) — перейти к сноске ; wdGoToEndnote (5) — к примечанию ;
wdGoToComment (6) — к комментарию ; wdGoToField (7) — к полю ;
wdGoToHeading (11) — к заголовку ;
wdGoToSpellingError (13) — к орфографической ошибке ;
wdGoToGrammaticalError (14) — к грамматической ошибке.

‘переход на лист с индексом 1
DocWord.Application.S_election.GoTo(3, , 1, «»).S_elect

‘переход в начало строки с индексом 1
DocWord.Application.S_election.GoTo(3, , 1, «»).S_elect

‘переход в начало следующей строки (аналогично текущий_индекс+1)
DocWord.Application.S_election.GoTo(3, wdGoToNext, 1, «»).S_elect

wdGoToNext (2) — на следующий ; wdGoToPrevious (3) — на предыдущий.

Поиск и замена:
‘находим первое вхождение текста и выделяем его
WordApp.Application.S_election.Find.Text = «строка»
WordApp.Application.S_election.Find.Execute

‘находим первое вхождение текста
WordApp.Application.S_election.Find.Text = «строка»
‘ и заменяем только его
WordApp.Application.S_election.Find.Replacement.Text = «1 строчка»
WordApp.Application.S_election.Find.Wrap = wdFindContinue
WordApp.Application.S_election.Find.Execute Replace:= wdReplaceOne ‘(1)

‘или тоже самое, но другим способом (при повторном выполнении кода, заменится следующее слово)
WordApp.ActiveDocument.Content.Find.Execute _
FindText:=»текста», ReplaceWith:=»hello», Replace:= wdReplaceOne ‘(1)

Для замены всех вхождений текста применяйте wdReplaceAll (2).

Благин Константин

Программирование как созидательный процесс.

Использование шаблонов Word в 1С

Использование шаблонов Word в 1С

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

В данном примере будет показано, как используя механизмы 1С и документа Word в качестве шаблона, можно создать печатную форму для вывода данных, пользователям программы 1С.

Создадим шаблон на основе документа Word для 1С. Сначала необходимо включить показ закладок для более удобной работы с документом:

Использование шаблонов Word в 1С

Использование шаблонов Word в 1С

Далее необходимо в файл шаблона для 1С, добавить текст и пару закладок. Закладка добавляется через меню «Вставка» — «Закладка». Нужно выделить текст закладки, скопировать его, открыть меню «Вставка — Закладка», вставить скопированный текст закладки и нажать «Добавить»:

Установка закладки, шаблон Word для 1С

В результат запуска внешней обработки 1С по формированию печатной формы на основе шаблона в виде файла Word, мы получим следующий результат:

Результат использования шаблонов Word в 1С

Информацию по методам COM объекта Word, а так же дополнительные данные можно узнать из MSDN.

Дополнение к заметке Использование шаблонов Word в 1С

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

1. А как поменять размер шрифта во вставляемом тексте?
Достаточно изменить размер шрифта закладки, в шаблоне. А вот, если необходимо динамически менять размерность, тогда:

2. Картинки есть возможность выгружать в шаблон?
Да, конечно. Примеры для C# и VB описаны по ссылке: https://msdn.microsoft.com/ru-ru/library/ms178792.aspx, а для 1С код будет следующий:

3. При выполнении кода: ОбъектВорд.Documents.Add(«C:/Шаблон.docx») (туда я поместил Ваш документ) получаю ошибку : «Ошибка при вызове метода контекста (Add)» в чем может быть причина?
Может попробовать изменить путь на: «C:Шаблон.docx».

4. Подскажите пожалуйста еще почему при сохранении макета типа active document в файл word кодом:

Читать еще:  Что такое сноска в редакторе word

Я получаю вместо нормального документа вот такой http://prntscr.com/eshgjk
Предполагаю, что метод Записать( , ) по умолчанию, записывает файл в формате MXL. Попробуйте вторым параметром установить значение: ТипФайлаТабличногоДокумента.DOCX, более подробно описано в «Синтакс-помощнике».

5. У меня в документе есть ссылки на файлы которые расположены на сетевом диске. Как в шаблоне сделать гиперссылку на эти файлы?
Интересный вопрос, если попробовать сделать запись макроса и посмотреть результат, то в Visual Basic добавление гиперссылки будет выглядеть следующим образом:

Соответственно код для 1С следующий:

Навигация по записям

Использование шаблонов Word в 1С : 29 комментариев

А как поменять размер шрифта во вставляемом тексте?

  1. Благин Константин Автор записи 27.11.2016 в 16:02

Достаточно изменить размер шрифта закладки, в шаблоне. А вот, если необходимо динамически менять размерность, тогда:

Добрый день, подскажите, пожалуйста, картинки есть возможность выгружать в шаблон?

  1. Благин Константин Автор записи 30.11.2016 в 15:03

Да, конечно. Примеры для C# и VB описаны по ссылке: https://msdn.microsoft.com/ru-ru/library/ms178792.aspx, а для 1С код будет следующий:

Спасибо, будем пробовать.

Снова, здравствуйте.
Вопрос по шаблонам. Попросили перенести шаблоны, написанные в Word из ЗиК 1.0 в ЗиК 3.0.
Как я понял — не перенесутся, нужно новые писать. Поскольку, учусь, то это даже на руку. За образец решил взять Ваш и начать разбираться. Но Ваш НЕ ГРУЗИТСЯ. Пишет:
Невозможно подключить дополнительную обработку из файла.
Возможно, она не подходит для этой версии программы.

Метод объекта не обнаружен (СведенияОВнешнейОбработке)
Кстати, когда пытаюсь загрузить шаблоны из 1.0, то пишет тоже самое.
Можете что-нибудь посоветовать?

  1. Благин Константин Автор записи 04.12.2016 в 15:29

Данная ошибка, появляется, потому что обработка создана просто как внешняя, без возможности подключения к 1С. Если вы хотите подключить какую либо обработку, в режиме «1С:Предприятие», тогда в модуле обработки необходимо вставить определенный код, более подробно описано по следующим ссылкам:
Добавление дополнительных отчетов и обработок в тонком клиенте.
Создание нового отчета или обработки
youtube: Создание внешней обработки

А насчет переноса могу посоветовать, проанализировать, как в ЗиК 1.0 производилось заполнение шаблона. Найти участки кода, которые за это отвечают, попробовать сначала перенести их во внешнюю обработку, для тестирования. Как вариант, сам шаблон можно положить в макеты (тип макета «Active document») этой обработки и уже оттуда загружать его.

Здесь есть несколько нюансов, механизм заполнения шаблонов и сами шаблоны, типовые, доработанные или самописные? Объекты которые используются для заполнения в ЗиК 1.0 могут отсутствовать в ЗиК 3.0 или иметь другое наименование. Плюс ко всему, необходимо еще учесть, что ЗиК 1.0 это обычное приложение, использующее толстый клиент, а ЗиК 3.0 управляемое приложение, использующее тонкий клиент, соответственно здесь тоже присутствует своя специфика работы.

Да и еще, в ЗиК 3.0 как мне кажется должен быть свой механизм шаблонов, к сожалению, не работал с этими конфигурациями, но вероятно там уже есть механизм аналогичный ЗиК 1.0. Так что может, будет достаточно только добавить шаблон.

Спасибо за быстрый и подробный ответ.
Попробую разобраться.
Шаблоны у нас самописные.
Про собственный механизм шаблонов, даже не слышал. Попробую поискать в сети.

Ваша ссылка помогла.
Добавил две функции и одну процедуру, и Ваша обработка заработала.
Свою, похоже , придётся рисовать с нуля.

При выполнении кода: ОбъектВорд.Documents.Add(«C:/Шаблон.docx») (туда я поместил Ваш документ) получаю ошибку : «Ошибка при вызове метода контекста (Add)» в чем может быть причина?

  1. Благин Константин Автор записи 05.04.2017 в 07:59

Может попробовать изменить путь на: «C:Шаблон.docx»

Помогло. Спасибо.
Подскажите пожалуйста еще почему при сохранении макета типа active document в файл word кодом:

ОбработкаОбъект = РеквизитФормыВЗначение(«Объект»);
Макет = ОбработкаОбъект.ПолучитьМакет(«ШаблонПисьмаПросрочка»);
ИмяФайла = КаталогВременныхФайлов() + «»файл.doc»;
Макет.Записать(ИмяФайла);

Я получаю вместо нормального документа вот такой http://prntscr.com/eshgjk

  1. Благин Константин Автор записи 05.04.2017 в 19:56

Предполагаю, что метод Записать( , ) по умолчанию, записывает файл в формате MXL. Попробуйте вторым параметром установить значение: ТипФайлаТабличногоДокумента.DOCX, более подробно описано в «Синтакс-помощнике».

Константин,
У меня в документе есть ссылки на файлы которые расположены на сетевом диске.
Как в шаблоне сделать гиперссылку на эти файлы?

  1. Благин Константин Автор записи 31.07.2017 в 21:27

Здравствуйте, Руслан.
Интересный вопрос, если попробовать сделать запись макроса и посмотреть результат, то в Visual Basic добавление гиперссылки будет выглядеть следующим образом:

Соответственно код для 1С следующий:

я хочу заполнить шаблон с помощью заполнения пользовательской формы. как получить значение,выбранное из списка, если тип поля СправочникСсылка.НазваниеСправочника?

  1. Благин Константин Автор записи 07.06.2018 в 19:03

Предполагаю заполнение производите на стороне клиента, тогда можете сразу обратиться к элементу формы или объекта.

Здравствуйте. Попросили обновить шаблоны договоров для печати. Обновила, но теперь при печати выводит ошибку, что не удалось сформировать элемент управления ActiveX. С чем это может быть связано?

  1. Благин Константин Автор записи 28.06.2018 в 11:30

Ирина, для ответа необходима дополнительная информация:
1. Какая конфигурация используется?
2. Каким образом происходило обновление шаблонов?
3. Ошибка выходит при формировании документа на основе данных и шаблона или при отправке на печать?

Доброго дня. Прошу помочь с задачей вставки в документ Word, ранее записанного файла HTML (из 1С сохранил на диск, браузером файл открывается нормально — отображается НЕ как текст)., а в документе Word формируется как текст не конвертированный.
Вставляю так
Word = ПечатнаяФорма.COMСоединение;
Select = Word.Selection;
Docum = Word.Application.Documents(1);
Select.InsertFile(«C:Temp1.html»);

  1. Благин Константин Автор записи 19.07.2019 в 13:32
Читать еще:  Элемент управления содержимым word

В данный момент не пользуюсь Office, попробуйте использовать Selection.PasteAndFormat как было подсказано здесь: https://toster.ru/q/164995

Добрый день. Все бы хорошо, но, как сделать не обработку а печатную форму?
Я сделал внешнюю печатную форму с шаблоном типа Active Document, добавил пока одну закладку на пробу, подключил, чтобы при нажатии кнопки «Печать» из справочника «договоры» выполнялось. Открывается Word, все работает, но, в базе возникает окно где написано : Печать. Печатная форма недоступна. Как сделать чтобы окно не вылезало? Обработка не подходит потому что она не падает в меню кнопки «Печать»

  1. Благин Константин Автор записи 08.09.2019 в 11:48

1. Конфигурация какая?
2. Нужен скриншот ошибки.
3. Нужен код модуля для анализа.

Скажите пожалуйста а можно шаблон word в обработку вставить, чтобы он в конфигурации был

  1. Благин Константин Автор записи 02.12.2019 в 20:54

Добрый день, подскажите, пожалуйста, как сделать так, чтобы подобный документ создавался при нажатии на кнопку на форме . Я создала команду «Документ», но не понимаю, что нужно вписать в ее обработчик. У меня имеется документ «ПриемНаРаботу» в виде списка, я заполняю форму (фио, паспорт, должность, оклад). А после могу нажать на кнопку «Документ», чтобы увидеть тот самый шаблон word.Как это можно сделать?

  1. Благин Константин Автор записи 15.12.2019 в 14:07

Ирина, вы можете воспользоватся примером из обработки, ссылку на которую находится внизу заметки.
1. Подготовить шаблон Word, расставив в нем закладки;
2. В код команды добавить заполнение файла и его вывод.

Добрый день, а как можно вставить в колонтитул на разных листах в ворде номера бланков взятых из 1С( 1 лист бланк — №0089 ,2 лист бланк — №0090 и …)

  1. Благин Константин Автор записи 02.02.2020 в 14:46

https://infostart.ru/public/488556/
Цитата:
Каждая страница Word разделена на несколько областей:

Верхний колонтитул
Основной текст
Нижний колонтитул
Нужно заметить, что в каждом разделе может быть уникальный колонтитул для первой страницы.

Пример работы с Word через ActiveDocument. Два варианта заполнения параметров.

(Здесь действие происходит в модуле формы)

КомОбъект = АктивныйДокумент.Получить(); //метод работает на сервере

////////////ПЕРВЫЙ ВАРИАНТ ЗАПОЛНЕНИЯ ПАРАМЕТРОВ////////////
//инициализируем переменные, чтобы если какие-то из них окажутся незаполненными, то не отображалась текстовая ошибка в документе
КомОбъект.Variables(«ДатаПриема»).Value = » «;
КомОбъект.Variables(«Организация»).Value = » «;
КомОбъект.Variables(«ЮрАдрес»).Value = » «;
КомОбъект.Variables(«Должность»).Value = » «;
КомОбъект.Variables(«ИНН_КПП_ОГРН»).Value = » «;
КомОбъект.Variables(«Адрес»).Value = » «;
КомОбъект.Variables(«ФИОСотрудника»).Value = » «;

//заполнение переменных реальными значениями
КомОбъект.Variables(«ДатаПриема»).Value = «22 сентября 2017г»;
КомОбъект.Variables(«Организация»).Value = «Миросса»;
КомОбъект.Variables(«ЮрАдрес»).Value = «Санкт Петербург, Невский пр, д. 102»;
КомОбъект.Variables(«Должность»).Value = «Генеральный директор»;
КомОбъект.Variables(«Адрес»).Value = «Санкт Петербург, Невский пр, д. 102»;
КомОбъект.Variables(«ФИОСотрудника»).Value = «Сергей Петрович»;

//Книга.ActiveWindow.Visible = Истина; //?
//Книга.Activate(); //?
КомОбъект.Fields.Update();
////////////ВТОРОЙ ВАРИАНТ ЗАПОЛНЕНИЯ ПАРАМЕТРОВ////////////
Replace = КомОбъект.Content.Find;

FindText = » >»; // что искать — имя_шаблона
MatchCase = Ложь; // использовать регулярные выражения
MatchWholeWord = Истина; // искать слово целиком
MatchWildcards = Ложь; // испоьзовать регулярные выражения
MatchSoundsLike = Неопределено; // искать созвучные
MatchAllWordForms = Неопределено; // искать все формы слова
Forward = Истина; // искать вперед
Wrap = Неопределено; // что должен вернуть Find-объект
Format_ = Ложь; // использовать форматирование
ReplaceWith = «С.П.»; // текст, на который надо заменить имя_шаблона

Replace.Execute(
FindText,
MatchCase,
MatchWholeWord,
MatchWildcards,
MatchSoundsLike,
MatchAllWordForms,
Forward,
Wrap,
Format_,
ReplaceWith );
Replace = КомОбъект.Content.Find; //перед каждым вызовом Execute()
Replace.Execute(
» >»,
MatchCase,
MatchWholeWord,
MatchWildcards,
MatchSoundsLike,
MatchAllWordForms,
Forward,
Wrap,
Format_,
«7802022» );

имяФ = ПолучитьИмяВременногоФайла(«doc»);
КомОбъект.SaveAS(имяФ); //здесь возможна ошибка (http://infostart.me/public/568913/)
Двоичные = новый ДвоичныеДанные(имяФ);

//в web клиенте Двоичные.Записать() не работает, поэтому
//Адрес = новый ХранилищеЗначения(Двоичные);
//возврат Адрес;
//а затем на клиенте:
//ПолучитьФайл(Адрес, «ИмяФайла.doc», Истина); //файл скачивается в браузере

КомОбъект.Application.Quit(); //закрыть Word
КомОбъект = 0;
Возврат Двоичные;

&НаКлиенте
Процедура ЗапускПриложения(КодВозврата, ДополнительныйПараметр) Экспорт

Двоичные = ЗаполнитьМакетНаСервере();
имяФ = ПолучитьИмяВременногоФайла(«doc»); //в web клиенте не работает
Двоичные.Записать(имяФ); //в web клиенте не работает
//ЗапуститьПриложение(имяФ); //error Использование синхронных методов на клиенте запрещено!

Оповещение = Новый ОписаниеОповещения(«ЗапускПриложения», ЭтотОбъект);
НачатьЗапускПриложения(Оповещение, имяФ,, Ложь); //ложь — не дожидаемся завершения приложения (в процедуру ЗапускПриложения всё равно заходим, сразу же

Как создать поля-параметры в Word

1 Выбираем участок(кусок текста) для параметра, например: «Организация»(на первой картинке она уже скрыта) , а можно удалить его и спозиционироваться на этом месте.

2 В меню Word, переходим на «Вставка», далее «Экспресс-блоки», далее «Поле»

3 В открывшемся диалоговом окне, выбираем тип «DocVariable»

4 Назначаем имя, в моем случае «NomerDogovora»

5. Жмем «Ок», когда окно закроется, вы скорей всего не увидите изменений, так как скрыт «Word kod», нажмите Alt+F9, что бы открыть код.
6. Таким образом создаете все нужные Вам параметры

Ссылки: http://www.modber.ru/catalog/item3340.html, http://j008.ru/ps/027_ActiveDocument

WordОвские файлы *doc, *docx — это ZIP-архивы ((*xls и *xlsx тоже)). Меняем расширение docx на zip и распаковываем архив. Получим структуру папокфайлов. Текст файлов в формате XML. Удобно редактировать текст, менять картинки(папка wordmedia). И собираем обратно, архивируем.

Архив = Новый ЧтениеZipФайла();
Архив.Открыть(«C:времКаткат01наименование.zip»);
Архив.ИзвлечьВсе(«C:времКаткат01Unpacked», РежимВосстановленияПутейФайловZIP.Восстанавливать);
Архив.Закрыть();

// что-то делаем
//ПутьИзменяемыйФайл = «C:времКаткат01Unpackedwordmediaimage1.png»; //для docx
//файл = новый файл(ПутьИзменяемыйФайл);
//Если НЕ Файл.Существует() Тогда
//
//КонецЕсли;

Архиватор = Новый ЗаписьZipФайла(«C:времКаткат01наименование2.zip», «», «»);
Архиватор.Добавить(«C:времКаткат01Unpacked*.*», РежимСохраненияПутейZIP.СохранятьОтносительныеПути, РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно);
Архиватор.Записать();

Evgeniy Korshunov

Этот блог — мой персональный сетевой помощник + коллекция ссылок

среда, 11 июля 2012 г.

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

Если есть шаблон .dot в файле FullNameFile, то:

Через закладки не понравилось — до заполнения не видно, как будет выглядеть форматирование документа.

Ворд = СоздатьОбъект ( » Word . Application» ) ; Ворд . Visible = 1 ; ДокВорд = Ворд . documents ; ТекДокВорд = ДокВорд . Open ( СокрЛП ( ПутьШаблона ) ) ; //путь к шаблону (dot) Содержание = ТекДокВорд . Content ; Содержание . Find . Execute ( «[НомерДок]» , 0 , 0 , , , , , , , Строка ( СокрЛП ( НомерДок ) ) , 1 ) ; Содержание = ТекДокВорд . Content ; // это каждый раз! Содержание . Find . Execute ( «[ФИО]» , 0 , 0 , , , , , , , Строка ( СокрЛП ( ФИО ) ) , 1 ) ;
ТекДокВорд . SaveAs ( ПодКакимИменемСохранитьФайл +».doc»);

С 2003 офисом точно работает, под другими не пробовал.

UPD. 10.03.2017
В 2013 офисе тоже работает, проверено :).
Для замены всех встречающихся значений шаблона в тексте, необходимо установить последний параметр в 2.
Содержание . Find . Execute ( «[ФИО]» , 0 , 0 , , , , , , , Строка ( СокрЛП ( ФИО ) ) , 2 ) ;
Описание здесь и здесь.
Параметр — wdReplaceAll = 2;

18 комментариев:

В Word 2007 работает на ура

номердок=»роророророр»;
Ворд=СоздатьОбъект(«Word.Application»);
Ворд.Visible=1;
ДокВорд=Ворд.documents;
путьшаблона=»d:dogovor.dot»;
ТекДокВорд=ДокВорд.Open(СокрЛП(ПутьШаблона)); //путь к шаблону (dot)
Содержание=ТекДокВорд.Content;
Ворд=СоздатьОбъект(«Word.Application»);
Ворд.Visible=1;
ДокВорд=Ворд.documents;
ТекДокВорд=ДокВорд.Open(СокрЛП(ПутьШаблона)); //путь к шаблону (dot)
Содержание=ТекДокВорд.Content;
Содержание.Find.Execute(«[nom_dog]»,0,0. «номердок»,2);
//Рез = текдокворд.Bookmarks.Exists(«nom_dog»);
// сообщить(рез);
Содержание=ТекДокВорд.Content; // это каждый раз!
фио=»фиофио»;
Содержание.Find.Execute(«[fio]»,0,0. «фио фио»,2);
//Содержание=ТекДокВорд.Content;
ПодКакимИменемСохранитьФайл=»d:dog» ;
ТекДокВорд.SaveAs(ПодКакимИменемСохранитьФайл+».doc»);

Пожалуйста, подскажите.
воспользовалась вашим кодом. Документ находит. Закладки документа находит. Но почему то не заполняет нужными реквизитами. То есть закладки fio и nom_dog остаются пустыми. Буду очень благодарна за помощь.

Сократил код по минимуму, попробовал на 2016 Word-е.

Ворд=СоздатьОбъект(«Word.Application»);
Ворд.Visible=1;
ДокВорд=Ворд.documents;
ТекДокВорд=ДокВорд.Open(«e:dog.dotx»);
Содержание=ТекДокВорд.Content;
Содержание.Find.Execute(«[ФИО]»,0,0. «Иванов»,2);
ТекДокВорд.SaveAs(«e:dog.doc»);

Всё отработало как положено, было [ФИО], стало Иванов
Попробуйте ещё раз, только имя диска поправьте.

P.S. Это код не для использования закладок, а обычная автозамена текста.
Чтобы исключить случайные замены — текст взят в квадратные скобки.

А если нужно вывести таблицу в договоре каков алгоритм?

Тогда надо смотреть вот сюда 🙂

Я сам с заполнением таблиц не работал, не было таких задач.

Как сделать цикл чтобы печатал по шаблону заявления сотрудников из списка

Собственно, точно также, всю конструкцию поместить в цикл по сотрудникам.

Создание объекта Word > заполнение > печать или сохранение > закрытие.

Если сотрудников не пара тысяч — проблем быть не должно.

день добрый. Помогите «чайнику», никак не подставляются нужные значения. Что не так?

Ворд=СоздатьОбъект(«Word.Application»);
Ворд.Visible=1;
ДокВорд=Ворд.documents;
ТекДокВорд=ДокВорд.Open(СокрЛП(«C:UsersгмгDesktop»+»договор.dotm»)); //путь к шаблону (dot)
Содержание=ТекДокВорд.Content;
//вариант1
Содержание.Find.Execute(«[НомерДок]»,0,0. Строка(СокрЛП(Код)),2);
Содержание=ТекДокВорд.Content; // это каждый раз!
//вариант2
Содержание.Find.Execute(«[ФИО]»,0,0. «иванов вася»,2);
ТекДокВорд.SaveAs(«C:UsersгмгDesktop»+»договор1.doc»);

Нужно шаблон договора заполнить нужными реквизитами.

Решено!
В шаблоне не ставил квадратные скобки. Все работает. Спасибо за информацию.

Я бухгалтер и нужно напечатать заявление на открытие банковской карты на каждого сотрудника. Могли бы вы прислать структуру кода при написании модуля при подборе сотрудников из списка. Всё необходимые реквизиты есть в справочнике Сотрудники.

Самый простой перебор, например — https://helpf.pro/faq7/view/303.html или https://1c77progr.ru/article/obkhod-elementov-spravochnika-pereborom

А уже внутри цикла — вставляем код, который работает с Word.

Спр = СоздатьОбъект(«Справочник.Справочник»);
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент() = 1 Цикл

Ворд=СоздатьОбъект(«Word.Application»);
Ворд.Visible=1;
ДокВорд=Ворд.documents;
ТекДокВорд=ДокВорд.Open(«C:UsersКотDesktopMS_WordMS_WordШАБЛОНЫДокумент.doc»);
Содержание=ТекДокВорд.Content;

Содержание.Find.Execute(«[ФИО]»,0,0. а+в+с,2);
Содержание=ТекДокВорд.Content;
Содержание.Find.Execute(«[Фамилия]»,0,0. а,2);
Содержание=ТекДокВорд.Content;
Содержание.Find.Execute(«[Имя]»,0,0. в,2);
Содержание=ТекДокВорд.Content;
Содержание.Find.Execute(«[Отчество]»,0,0. с,2);
Содержание=ТекДокВорд.Content;

Подскажите как сделать чтобы созданный документ Word после замены переменный и сохранения закрывался, чтобы не плодить много открытых документов.Спасибо

Как сделать закрытие созданного документа чтобы начался создаваться очередной. Чтобы не закрывать потом вручную 100 с лишним заявлений.

Интернет подсказал такое решение, надо пробовать:

Ворд.Application.DisplayAlerts =-1;
Ворд.ActiveDocument.saveas(ПутькФайлу);
Ворд.Application.quit();

При переходе на следующая запись выдаёт Ошибку
ДокВорд=ворд.documents;
Поле агрегатного обьекта не обнаружено (documents)

Печатные формы и печать в целом с макетом Word-документа

Много сталкаивался с необходимостью печатать тот или иной документ с использованием и заполнением Word. Но использую наиболее распространенный механизм «замены» текста, с которым многие знакомы, сталкивался с различными ошибками, из-за которых ничего не получалось (хотя код написан 100% верно).

Раскажу о методе заполнения нужных нам Параметров в документе с использованием Параметров Word.

Я думаю программисты пойму, поэтому не буду размусоливать. Смотрите скрин — что мы видим, текст и «непонятные» вставки… поясняю — эти вставки и есть параметры Word документа. Для того что бы их получить и заполнить делаем следующее:

1. Создаем документ Word, заполняем его так, как нам надо, в моем случае был такой вот «Агентский договор».

2. Определяем нужные нам для заполнения «места». На скриншоте — это Номер(NomerDogovora), Дата(DataDok), Организация(Organization), Менеджер(Menager), Контрагент(Principal)

3.Собственно сама замена (на примере Номера Документа):

3.1 Выбираем участок для параметра, например: «АГЕНТСКИЙ ДОГОВОР №0101010101», в качестве участка нам нужно выделить сам номер, или удалить его и спозиционироваться на его месте.

3.2 В меню Word, переходим на «Вставка», далее «Экспресс-блоки», далее «Поле»

3.3 В открывшемся диалоговом окне, выбираем тип «DocVariable»

3.4 Назначаем имя, в моем случае «NomerDogovora»

3.5 Жмем «Ок», когда окно закроется, вы скорей всего не увидите изменений, так как скрыт «Word kod», нажмите Alt+F9, что бы открыть код.

4. Таким образом создаете все нужные Вам параметры.

5. После того как все параметры готовы, сохраняем и закрываем докмент Word.

ПЕРЕХОДИМ К 1С

1. В нашем нужном объекте конфигурации (ВН форма, ВН отчет и т.д.) добавляем макет, устанавливаем тип «Двоичные данные», и выбираем из файла наш созданный документ Word.

2. Программный код выглядит вот так:

Функция ПолучитьМакетСервер()
Возврат ПолучитьМакет(«Макет1»);
КонецФункции

ПРоцедура НапечататьДокумент(Объект)

Word = Новый COMОбъект(«Word.Application»);
Макет = ПолучитьМакетСервер();
временныйПуть = КаталогВременныхФайлов();
имяВременногоФайла = временныйПуть + «gph.doc»;
Макет.Записать(имяВременногоФайла);
ТекДок = Word.Documents.ADD(имяВременногоФайла);

СтруктураДоверенности = ПолучитьДанныеДоверенности(СсылкаНаОбъект.Менеджер);
НомерДатаДоверенности = «№ » + СтруктураДоверенности.Номер + » от » + СтруктураДоверенности.Дата;

ТекДок.Variables(«NomerDogovora»).Value=СокрЛП(Строка(СсылкаНаОбъект.Номер));
ТекДок.Variables(«DateDok»).Value=Строка(Формат(СсылкаНаОбъект.Дата,»ДЛФ = ДД»));
ТекДок.Variables(«Organization»).Value=СокрЛП(СсылкаНаОбъект.Организация.НаименованиеПолное);
ТекДок.Variables(«Menager»).Value=Строка(СсылкаНаОбъект.Менеджер);
ТекДок.Variables(«NDateDov»).Value=Строка(НомерДатаДоверенности);
ТекДок.Variables(«Principal»).Value=Строка(СсылкаНаОбъект.Контрагент);

ТекДок.Fields.Update();
Word.ActiveWindow.View.ShowFieldCodes = False;
Word.Visible=Истина;
КонецПроцедуры

Заключение: Вот таким образом получаем наш макет Word, с заполненными параметрами. Когда я этому научился ) очень помогло, а то до этого возился, возился… все ошибки лезли при «замене текста».

Ссылка на основную публикацию
Adblock
detector