gifts2017

Вывод несколько раз макета ActiveDocument в один документ Word

Опубликовал Алек4сандр Ершов (sanja) в раздел Программирование - Практика программирования

Текст кода для вывода шаблона  несколько раз в один документ Ворд.

Случилось, что понадобилось вывести шаблон справки к продукции для каждой строки ТЧ товары документа. Создаем макет печ. формы с типом ActiveDocument и загружаем туда наш шаблон. Далее все стандартно по созданию внешней печ. формы + код ниже

    ТабДокумент  = Новый ТабличныйДокумент;
   
ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_РеализацияТоваровУслуг_Справка";

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

    Попытка

       
Word = КомОбъект.Application;
       
Док=Word.Documents(1);
       
// Отключим проверку грамматики и вывод информации о грамматических ошибках.
       
Док.GrammarChecked=0;
       
Док.ShowGrammaticalErrors=0;

       
Док.Activate();
       
Файл = КаталогВременныхФайлов() + "файл" + Выборка.Номер + ".doc";
       
Word.Selection.WholeStory();
       
Word.Selection.Copy();

       
Счетчик = 1;
        Для каждого
Строка Из СсылкаНаОбъект.Товары Цикл

           
Замена = Док.Content.Find;
           
НомерДокумента = ОбщегоНазначения.ПолучитьНомерНаПечать(СсылкаНаОбъект);
           
Замена.Execute("[Номер]",  Ложь, Истина, Ложь, , , Истина, , Ложь, НомерДокумента);
           
Замена = Док.Content.Find;
           
Замена.Execute("[Дата]",  Ложь, Истина, Ложь, , , Истина, , Ложь, Формат(Выборка.Дата, "ДЛФ = ДДММГГ"));
           
Замена = Док.Content.Find;
           
Замена.Execute("[Наименование]",  Ложь, Истина, Ложь, , , Истина, , Ложь, Строка(Строка.Номенклатура));
           
Замена = Док.Content.Find;
           
Замена.Execute("[Количество]",  Ложь, Истина, Ложь, , , Истина, , Ложь, Строка(Строка.Количество));
           
Замена = Док.Content.Find;
           
Замена.Execute("[Декларация]", Ложь, Истина, Ложь, , , Истина, , Ложь, РегНомерДекларации);
           
Замена = Док.Content.Find;
           
СведенияОПоставщике = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Выборка.Организация, Выборка.Дата,,);
           
ФактАдрес = ФормированиеПечатныхФормСервер.ОписаниеОрганизации(СведенияОПоставщике, "ФактическийАдрес");
           
Производитель = Выборка.ОрганизацияНаименованиеСокращенное + ", " + Выборка.ФактАдресОрганизации;
           
Замена.Execute("[Производитель]",  Ложь, Истина, Ложь, , , Истина, , Ложь, Производитель);

           
Word.Selection.EndKey(6);

            Если
Счетчик < СсылкаНаОбъект.Товары.Количество() тогда
               
Word.Selection.InsertBreak(7);
               
Word.Selection.Paste();
            КонецЕсли;
           
Счетчик = Счетчик + 1;
        КонецЦикла;

       
Док.SaveAs(Файл);
       
Док.Close(0);

       
ЗапуститьПриложение("""" + Файл + """");

    Исключение
       
Сообщить(ОписаниеОшибки());
       
Word.Quit();
    КонецПопытки;

См. также

Подписаться Добавить вознаграждение

Комментарии

1. bobank (bobank) 10.08.12 13:49
Как это реализовать на управляемой форме? На клиенте макет получить нельзя, а при получении с сервера возникает ошибка. Просьба подсказать. Спасибо.
2. Алек4сандр Ершов (sanja) 10.08.12 14:03
Печать().Показать() не работает?
Сам не делал на УФ.
Могу посоветовать http://infostart.ru/public/85589/
3. Mr. Alf Garcia (mip128) 10.04.14 18:46
Спасибо, воспользовался)
4. Алек4сандр Ершов (sanja) 21.04.14 02:19
5. Елена (milana5) 24.09.14 10:03
6. Ян Шевенда (robix) 25.07.16 14:00
Работает то работает, но вот неплохо бы объяснить как оно работает. Например что значить цифра 6 в параметре тут Word.Selection.EndKey(6);
И цифра 7 тут Word.Selection.InsertBreak(7);
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа