Обработка с открытым кодом. В обработке имеется шаблон (в виде макета) MS Office Word 2010 с таблицей, эта таблица в макете имеет одну строку данных и итоговую строку, при обходе результата запроса в эту таблицу добавляются новые строки данных перед итогами. Так же - пример вставки картинки в конец документа.
В шаблоне MS Office Word 2010 использованы ключевые параметры типа #Период#, которые ищутся и заменяются.
Вариант 2:
Здесь представлю вариант передачи заменяемых параметров через макрос.
Внимание:
- при использовании данного варианта необходимо зайти в word включить работу vba (word 2010) см. картинку //infostart.ru/upload/iblock/560/dddd.png.
- а также у переменной в коде "ТекстДляЗамены" длина не может превышать 255 знаков
Word = Новый COMОбъект("Word.Application");
Doc=Word.Documents.Add(ИмяФайла,0, 0);
Fnd = Word.ActiveDocument.Range().Find;
// Вставляем комментарий в котором укажем номер сделки и печатной формы
Попытка
ФормаПроцесса.НадписьСостоянияПрогрессора = "Вывод примечания в шаблоне MS Word с информацией по печатной форме";
ФормаПроцесса.Обновить();
Документ_актив = Word.ActiveDocument();
м_Selection = Word.Selection.Range;
мКоммент = Документ_актив.Comments.Add(м_Selection);
//мКоммент.ShowTip = Истина;
мКоммент.Author = "Сысоев Павел";// строка (назначает автора примечанию, чтобы можно было делать отбор примечаний по автору. Автор всегда будет выводится, а здесь задается его представление)
//мКоммент.Date = ТекущаяДата(); // дата
мКоммент.Initial = "Сысоев ПС"; // строка (выводит текст в шапке примечания, ограничение 9 знаков)
мКоммент.Range.Text = НазваниеПечатнойФормы + ДопИнформация;
Исключение
КонецПопытки;
ПримерМакроса = "Sub UPN_FormSdelki()";
СтруктураПечатнойФормы = Новый Структура;
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| КурсыВалют.Период КАК Период,
| КурсыВалют.Курс КАК Курс
|ИЗ
| РегистрСведений.КурсыВалют КАК КурсыВалют
|ГДЕ
| КурсыВалют.Валюта В(&Валюта)
| И КурсыВалют.Период МЕЖДУ &НачПериод И &КонПериод
|
|УПОРЯДОЧИТЬ ПО
| Период";
МВалюта = Новый Массив;
МВалюта.Добавить(Справочники.Валюты.НайтиПоКоду("840"));
Запрос.УстановитьПараметр("Валюта", МВалюта);
Запрос.УстановитьПараметр("НачПериод", НачалоДня(НачПериода));
Запрос.УстановитьПараметр("КонПериод", КонецДня(КонПериода));
Результат = Запрос.Выполнить().Выбрать();
СумммаИтог = 0;
сч=1;
Пока Результат.Следующий() Цикл
СтруктураПечатнойФормы.Вставить("Период"+сч);
СтруктураПечатнойФормы.Вставить("Курс"+сч);
СтруктураПечатнойФормы.Вставить("КурсПрописью"+сч);
СтруктураПечатнойФормы.Вставить("ИтогКурс");
СтруктураПечатнойФормы.Вставить("ИтогКурсПрописью");
СтруктураПечатнойФормы["Период"+сч] = Формат(Результат.Период,"ДФ=dd.MM.yyyy");
СтруктураПечатнойФормы["Курс"+сч] = Результат.Курс;
СтруктураПечатнойФормы["КурсПрописью"+сч] = ЧислоПрописью(Результат.Курс,?(Результат.Курс=Окр(Результат.Курс),"Л = ru_RU; НД=Ложь ДП=Ложь","Л = ru_RU; ДП=Истина"),"рубль ,рубля,рублей,м,копейка,копейки,копеек,м,2");
КонецЦикла;
ПримерМакроса = ПримерМакроса + Символы.ПС +
"
| ' выводим примечание с информацией по сделке и печатной форме
| '
| '
| ActiveWindow.ActivePane.VerticalPercentScrolled = 0
| Selection.Comments.Add Range:=Selection.Range
| Selection.TypeText Text:= """ + "Номер сделки: Сделка " + """
| Selection.TypeParagraph
| Selection.TypeText Text:= """ + "Код печатной формы: 1" + """
| Selection.TypeParagraph
| Selection.TypeText Text:= """ + "Название печатной формы: сделка" + """
| Selection.TypeParagraph
| Selection.TypeParagraph
| Selection.TypeParagraph
| Selection.TypeText Text:= ""Для того чтобы не печатать это примечание:""
| Selection.TypeParagraph
| Selection.TypeText Text:= ""Просто удалите его (щелкнув на нем правой клавишей мышки и выбрать """"удалить примечание"""")""
| Selection.TypeParagraph
|
| ' перейдем с примечания к тексту
| '
| Selection.EscapeKey
|
|";
КолвоПараметров = СтруктураПечатнойФормы.Количество();
ТекНомерПараметра = 0;
Для Каждого Реквизит из СтруктураПечатнойФормы Цикл
ТекНомерПараметра = ТекНомерПараметра + 1;
Если НЕ ТипЗнч(Реквизит.Значение) = Тип("Картинка") Тогда
ТекстДляЗамены = СокрЛП(Реквизит.Значение);
КолВоВхожденийПереносаСтроки = СтрЧислоВхождений(СокрЛП(Реквизит.Значение), Символы.ПС); // обрабатываем текст как (ОАО "СБЕРБАНК РОССИИ")
Если КолВоВхожденийПереносаСтроки > 0 Тогда
ТекстДляЗамены = СтрЗаменить(ТексДляЗамены, Символы.ПС, "^p"); //"^l"
КонецЕсли;
КолВоВхожденийКавычек = СтрЧислоВхождений(СокрЛП(Реквизит.Значение),""""); // обрабатываем текст как (ОАО "СБЕРБАНК РОССИИ")
Если КолВоВхожденийКавычек > 0 Тогда
ТекстДляЗамены = СтрЗаменить(ТекстДляЗамены, """", """""");
КонецЕсли;
ПримерМакроса = ПримерМакроса + Символы.ПС +
"
|Selection.Find.ClearFormatting
| Selection.Find.Replacement.ClearFormatting
| With Selection.Find
| .Text = """ + "#"+Реквизит.Ключ+"#" + """
| .Replacement.Text = """ + ТекстДляЗамены + """
| .Forward = True
| .Wrap = wdFindContinue
| .Format = False
| .MatchCase = False
| .MatchWholeWord = False
| .MatchWildcards = False
| .MatchSoundsLike = False
| .MatchAllWordForms = False
| End With
| Selection.Find.Execute Replace:=wdReplaceAll
| ";
////КонецЕсли;
Иначе
ИмяФайлаКартинки = ПолучитьИмяВременногоФайла();
Картинка =Реквизит.Значение;
Картинка.Записать(ИмяФайлаКартинки);
ПримерМакроса = ПримерМакроса + Символы.ПС +
"
|'
|' Вставяем картинку объекта
|'
|'
|Selection.Find.ClearFormatting
|With Selection.Find
| .Text = ""#КартинкаПланОбъекта#""
| .Replacement.Text = ""
| .Forward = True
| .Wrap = wdFindContinue
| .Format = False
| .MatchCase = False
| .MatchWholeWord = False
| .MatchWildcards = False
| .MatchSoundsLike = False
| .MatchAllWordForms = False
|End With
|Selection.Find.Execute
|Selection.InlineShapes.AddPicture FileName:= _
|""" + ИмяФайлаКартинки + """, LinkToFile:=False, _
| SaveWithDocument:=True
|ActiveWindow.ActivePane.HorizontalPercentScrolled = 6
|
|";
КонецЕсли;
КонецЦикла;
ТекстМакроса = ПримерМакроса + Символы.ПС + "End Sub";
VBComponents = Word.ActiveDocument.VBProject.VBComponents;
Count = VBComponents.Count();
VBComponents.Add(1);
VBComponents.Item(Count + 1).CodeModule.InsertLines(1, ТекстМакроса);
Word.Application.Run("UPN_FormSdelki");
Word.Caption = " " + Строка(Сделка) + " - (" + УправлениеСделками.УдалениеЛидирующихНулейВНомере(Сделка.ОбъектСтроительства.МакетыПечатныхФорм.Найти(GUID,"GUID").МодульПечатнойФормы.Код) + ") " + Сделка.ОбъектСтроительства.МакетыПечатныхФорм.Найти(GUID,"GUID").МодульПечатнойФормы.Наименование; //ActiveDocument.FullName
//Word.PrintOut(); // распечатать док
Word.Visible = 1;
Word.Activate();
Word.WindowState = 2; // wdWindowStateMinimize (с) статья _http://forum.foxclub.ru/read.php?32,177182,258927
Word.WindowState = 1; // wdWindowStateMaximize