Как сделать макет ворд 1с
Конфигурации: Все конфигурации Кому пригодится, буду рад )) Много сталкаивался с необходимостью печатать тот или иной документ с использованием и заполнением 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
ШаблоныКЗамене имеет строку:
Шаблон:
Результат:
Прохоров Сергей Петрович
Петров Адрей Федорович
Смирнов Антон Викторович
Жду ваших комментариев и предложений.
Модуль можете использовать для коммерческого использования, однако прошу не удалять ссылку на мои реквизиты.
Читайте также: