Понадобилось мне срочно создать несколько форм договоров для ЗУП, пошарил по интырнету ничего похожего не нашел — очень удивился, «наверно плохой из меня искатель», подумал я и решил быстро написать сам. Идея следующая:
Есть документ (договор, например) в формате MS Word
-выделяем в нем «переменные поля»;
-берем консоль запроса пишем запрос по получению данных для заполнения документа;
-добавляем текстовый макет в обработку с именем «ТекстЗапроса+Идентификатор документа» из которого будет печататься форма, вставляем в него текст запроса;
-в файле формата MS Word заменяем переменные поля на «параметры» типа %НазваниеОрганизации% и т.д.
-запускаем обработку указываем путь где лежит наш шаблон и «Печатаем»…
Таким образом основная работа по созданию печатной формы сводится к двум действиям «написать запрос» и «создать шаблон».
Обработка подойдет для любой конфигурации, любого документа. Сейчас она была создана для ЗУП, документов Прием на работу и Кадровое перемещение, для использования в других документах, необходимо изменить тип реквизита «СсылкаНаОбъект»;
В качестве примера с обработкой идет файл шаблон «Дополнительного соглашения» печатается из Кадрового перемещения, ну что бы понятно было, что к чему.
полно вариантов на инфостартеhttp://infostart.ru/catalog/?q=Word&sa=%CD%E0%E9%F2%E8
(1) ну будет еще одна, с заявкой на «универсальность» — пролистав первые 5 страниц, я так и не нашел ничего подобного. идея этой обработки — сродни идеи СКД — создать печатную форму не написав ни одной строчки кода…
идея отличная
На универсальность в данном вопросе всегда кладется в угоду особенностей каждой задачи… В целом конечно все ок. А вот чего не хватает так это возможности вставить уникальный штрих код на каждой странице…
Вместо поиска и замены строк вида %параметр78% можно использовать переменные. Скорость не замерял, но интуиция подсказывает, что будет эффективнее.
Заполнять переменные вот так:
Для каждого кз Из Параметры Цикл
ОбъектВорд.Variables.Add(кз.Ключ).Value = кз.Значение;
КонецЦикла;
ОбъектВорд.Fields.Update();
И тут можно почитать:http://support.microsoft.com/kb/306281
(5)да я рассматривал этот вариант, мне не понравилось то, что один и тот же параметр в разных местах надо называть по разному, т.о. его придется дублировать при заполнении «СтруктурыДанных», т.е. если в договоре встречается 22споловиной раза имя работника, то нужно создать 22споловиной уникальных ключа — мне это показалось излишне геморно… и для создателя «шаблона» и для создателя «набора данных»…
(6) видать о разных вещах говорим. Сейчас попробовал — вставлять можно сколько угодно.
Вставка — экспрес блок — поле — docVariable. Задаешь имя, например: НаименованиеОрганизации
Потом в еще в нескольких местах такое же проделываешь.
Далее выполняешь макрос:
Sub УстановитьПерем()
Dim fName As String
fName = «прироги и копыта»
ActiveDocument.Variables.Add Name:=»НаименованиеОрганизации», Value:=fName
MsgBox ActiveDocument.Variables(«ad»).Value
End Sub
Если нужно изменить значение, то:
Sub Изменить()
ActiveDocument.Variables(«НаименованиеОрганизации»).Value = «Рюмашка»
Selection.WholeStory
Selection.Fields.Update
End Sub
Простите за мой VB
А зачем выкладывать двумя файлами?
(8) Один файл обработка, один для пимера как «создавать шаблон»…
примерчик выходного документа бы
Идея отличная. Еще бы в колонтитулах замена работала — было бы совсем хорошо