Как сделать макет ворд 1с

Обновлено: 07.07.2024

Конфигурации: Все конфигурации Кому пригодится, буду рад )) Много сталкаивался с необходимостью печатать тот или иной документ с использованием и заполнением 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(имяВременногоФайла); СтруктураДоверенности = ПолучитьДанныеДоверенности(СсылкаНаОбъект.Менеджер); НомерДатаДоверенности = "№ " + СтруктураДоверенности.Номер + " от " + СтруктураДоверенности.Дата; ///////////// Установка значений параметров Word ТекДок.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 2013, 1С 8.3

оказывается все вставляется, только в ворде надо вручную выделить поле с параметром, и нажать правой кнопкой мыши и "Обновить поле!" нажать, только после этих действий показывается заполненное поле.
Как сделать, чтобы в ворде автоматически пользователю показывалось заполненное поле?

Зачастую при выводе на печать из 1С требуется выводить информацию не в стандартный формат 1С — *.mxl, а в документ Word.
В этой статье будет рассмотрено создание и использование шаблонов Word для печати из 1С.
Приступим.

Первым делом создадим шаблон документа Word. Создаем новый файл и набираем текст документа.
Параметры заключаем в квадратные скобки (скобки использовать не обязательно, просто чтобы как-то выделить параметры из основного текста).
Для своего тестового файла я буду использовать текст следующего содержания:

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

ШаблонВорд_ВЗ


Получившийся файл сохраню под именем D:\musor\Test.docx.

Подключаться к шаблону будем с использованием COM соединения
и далее подменять текст закладок (параметров) на нужный нам с использованием свойств и методов VBA приложения Word.
Создадим новую обработку (для толстого клиента), добавим форму и вставим в модуль формы следующий код:

В общем то все достаточно просто. Подмена параметров на нужный нам текст осуществляется в процедуре ВставитьТекстВОбластьДокумента()

После выполнения данного кода у нас откроется вновь созданный документ Word следующего содержания:

Результат_ВЗ

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

Для заключения договоров с контрагентами был разработан договор в Word, который менеджеры заполняли вручную. Была поставлена задача автоматизировать этот процесс.
Для начала потребовалось создать шаблон из документа договора, проще говоря – сохранить уже существующий договор с расширением “Шаблон Word 97-2003 (*.dot)”. В местах, где необходима подстановка указываем параметры. Например:

Где [Организация], [ФИОДиректора], [Заказчик] и [ФИОДиректораЗаказчика] это и есть наши параметры. Параметры можно указывать любым удобным нам способом, например можно вместо [] использовать <> или <>.
Оформленный таким образом документ загружаем в 1С в качестве макета с типом макета – Active document.

Далее в соответствующем обработчике события (например, в обработчике нажатия на кнопку Создать договор) размещается следующий код:

[php]
Процедура ПечатьДоговора()
Договор = ПолучитьМакет("МакетШаблонаWord");
// Получить объект из макета.
MSWord = Договор.Получить();

Попытка
Документ = MSWord.Application.Documents(1);
Документ.Activate();

//Определим имена
Организация = "ООО Шпаргалка"
ФИОДиректора = "Иванов Иван Иванович";
Заказчик = СокрЛП(Контрагент.НаименованиеПолное);
ФИОДиректораЗаказчика = "Васин Василий Васильевич";

//Получить объект, который будем использовать для поиска и замены.
Замена = Документ.Content.Find;

//Заменить заранее определенные ключевые конструкции на требуемый текст.
Замена.Execute("[Организация ]", Ложь, Истина, Ложь, , , Истина, , Ложь, Заказчик, 2);
Замена.Execute("[ФИОДиректора]", Ложь, Истина, Ложь, , , Истина, , Ложь, ФИОДиректора, 2);
Замена.Execute("[Заказчик]", Ложь, Истина, Ложь, , , Истина, , Ложь, Заказчик, 2);
Замена.Execute("[ФИОДиректораЗаказчика ]", Ложь, Истина, Ложь, , , Истина, , Ложь, ФИОДиректораЗаказчика, 2);

Рейтинг: 253

Шаблон в Word, управляемые формы. Создание заполнение документа Word (docx -> zip -> xml) по шаблону на сервере без использования MS Office. Предусмотрен вывод табличных частей.

Обработать шаблон документа Word на сервере это проблема, с которой уверен сталкивались многие. Библиотека стандартных подсистем делает обработку шаблона на клиенте, а это исключает веб интерфейс и рабочие места, где нет MS Office. При попытке в Word открыть шаблон файла под серверным пользователем, возникают проблемы с доступом. Не отрицаю существования таких настроек на сервере, при которых это возможно, но в моем случае речь шла о массовом продукте.

Чтобы избавиться от всех прелестей этой прекрасной пары 1с+Word, решил отказаться от Word, хотя над первым может тоже стоило подумать?

Формат MS Word (docx) - это по сути zip архив с набором xml файлов ( Office Open XML ). Меняя определенные файлы xml, можно добиться заполнения своего шаблона.

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

Результатом решения стал общий модуль осуществляющий всю работу по заполнению шаблона.

Общий модуль, для простоты скачивания поместил в модуль обработки.

Процедура ответственная за заполнение шаблона:

ОбработатьФайл Docx (ФайлШаблона,ПараметрыЗаполнения, ШаблоныКЗамене)

  • ФайлШаблона - (тип: "Строка") Путь к файлу шаблону.
  • ПараметрыЗаполнения - (тип: "Структура") содежащую символ начала, окончания шаблона.
  • ШаблоныКЗамене - (тип: "Таблица значений") с параметрами, содержащую колонки: ИмяПараметраВWord - строка с именем шаблона который будет заменен. Результат - Содержит значение на которое будет заменен шаблон.

ШаблоныКЗамене имеет строки:

Пример шаблона в таблице word :

Значение 1 массив 1

Значение 1 массив 2

Значение 2 массив 1

Значение 2 массив 2

Значение 3 массив 2

ШаблоныКЗамене имеет строку:

Шаблон:

Результат:

Прохоров Сергей Петрович

Петров Адрей Федорович

Смирнов Антон Викторович

Жду ваших комментариев и предложений.

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

Читайте также: