helpf.pro
Регистрация
 +11 
Распечатать

Как сформировать документ в Word из 1С? (Active Document)


ВНИМАНИЕ! При использовании кодов описанных ниже, уберите символ _

Давайте рассмотрим на примерах как это делается! =) Мне известно 2 способа:
1. Путем замены шаблонного текста в макете Wordа.
2. Путем вставки текста с помощью закладок в Wordе,

В первом случае сразу скажу, что длина строки передаваемая в функцию замены, довольно небольшая  255 символов, да и расстановка шаблонных выражений в макете Word занимает довольно много времени. Через процедуру Content.Find.Execute.

Во втором случае длина, насколько мне известно неограниченна, также воськаться с закладками намного быстрее и удобнее, чем расставлять шаблонный текст. Используя Bookmarks().S_elect(). Поэтому давайте на коде рассмотрим второй пример.

И так, для начала необходимо добавить Word макет к документу. Добавляем макет с помощью конструктора макетов указав Active document и выбрав соответствующий макет.

Называем его Акт. Открываем макет в 1Ске, ставим курсор в нужном месте, переходим в меню Вставка закладка нажимаем добавить закладку к примеру у меня это НарушенияТекст

Теперь кидаем на форму документа кнопку Сформировать и по нажатию на нее пишем код который открывает наш макет Word ищем закладку по имени и вставляет туда текст:
Код 1C v 8.х
 //инициализация часть 1
СсылкаМакет = ПолучитьМакет(Акт);
MSWord = СсылкаМакет.Получить();
Попытка
СсылкаМакет = MSWord.Application.Documents(1);
СсылкаМакет.Activate(); 
//выгружаем табличную часть с нарушениями в строку часть 2
str = Новый COMОбъект(ADODB.Stream);
str.Open();
СтрочкаТаблицы = ЭлементыФормы.Нарушения.ТекущиеДанные;
Для Каждого СтрочкаТаблицы Из Нарушения Цикл
str.WriteText( + СтрочкаТаблицы.Описание +  Нарушены требования СНИПФЗГОСТ:  + СтрочкаТаблицы.СНИПФЗГОСТ  +  Статья:  + СтрочкаТаблицы.ЧастьСтатья  + Символ(13),0);
КонецЦикла;
str.Position = 0;
НарушенияТекст = str.readText();

//вставляем в закладку текст с нарушениями часть 3
MSWord.Bookmarks(НарушенияТекст).S_elect();
MSWord.Application.S_election.TypeText(НарушенияТекст);

//открыть Word часть 4
СсылкаМакет.Application.Visible = Истина;

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

Это пример вывода множества строчек из табличной части  одной строкой, если нужно просто выгрузить какой-то реквизит то можно пропустить часть 2 и перейти к части 3.

Для выгрузки табличной части в форме таблицы можно использовать функцию автоформата, примеру код выгрузки табличной части документа Предписание:
Код 1C v 8.х
 Word = MSWord.Application;
Документ = Word.ActiveDocument();
//Переместиться вниз на 22 строк
Word.S_election.MoveDown(,22);
Документ.Paragraphs.Add();
//подготовка таблицы:
Rng = Word.S_election.Range;
//Формируем заголовок:
Rng.I_nsertAfter(№ п/п*Установленные нарушения и меры по их устранению*Основания); 
Rng.I_nsertParagraphAfter();
//сама таблица
СтрочкаТаблицы = ЭлементыФормы.НарушенияПредписание.ТекущиеДанные;
Для Каждого СтрочкаТаблицы из НарушенияПредписание Цикл 
Rng.I_nsertAfter(Строка(СтрочкаТаблицы.НомерСтроки)+*+СтрочкаТаблицы.Описание + ;  + СтрочкаТаблицы.Предписание +* + СтрочкаТаблицы.СНИПФЗГОСТ +   + СтрочкаТаблицы.ЧастьСтатья);
Rng.I_nsertParagraphAfter(); 
КонецЦикла; 
Rng.ConvertToTable(*);
Документ.Tables(1).AutoFormat(17); //номер таблицы в шаблоне
Word.Visible = Истина;   

Ну вот и все =)
Автор: saylolpls


Еще способ Active document
В Конфигураторе Макеты - правый клик - Добавить
Тип макета: Active document
Создать новый - Документ Microsoft Word

Меню Вставка - Поле - Автоматизация - DocVariable
Написать имя поля в графе "Новое имя:" ДатаПриказа

В модуле формы документа создаем кнопку, и в ее обработчике пишем:
Код 1C v 8.х
 Процедура ОсновныеДействияФормыWord(Кнопка)
   АктивныйДокумент = ПолучитьМакет("Макет");
   КомОбъект = АктивныйДокумент.Получить();
   
   КомОбъект.Application.Visible=1;
   КомОбъект.Variables.Item("ДатаПриказа").Value="24.01.2007";
   КомОбъект.Fields.UpDate();

   КомОбъект.PrintOut(); //распечатать документ

   //Ожидание окончания отправки на печать...
   Пока objWord.Application.BackgroundPrintingStatus<>0 Цикл
     Предупреждение("Ожидание",1);
   КонецЦикла;  

   КомОбъект.Application.Quit(); //закрыть Word
   КомОбъект = 0;
КонецПроцедуры
   


2) добавляем не поле, а Закладку
Меню Вставка - Закладка и далее указываем ее имя ("ИмяЗакл")
Код 1C v 8.х
 Процедура ОсновныеДействияФормыWord(Кнопка)
   АктивныйДокумент = ПолучитьМакет("Макет");
   КомОбъект = АктивныйДокумент.Получить();
   КомОбъект.Application.Visible=1;
   КомОбъект.Bookmarks(СокрЛП("ИмяЗакл")).S_elect();
   КомОбъект.Application.S_election.TypeText(СокрЛП("тест проверка"));
КонецПроцедуры   



Код 1C v 8.2 УП
 // Параметры договора обозначены в тексте переменными вида "[%НомерДоговора%]"
Функция ПечатьДокумента() Экспорт
     
    Договор = ПолучитьМакет("ActiveDocument_ДоговорПоставки"); // получим макет-ActiveDocument 
    MSWord = Договор.Получить();  
    Попытка
	Doc = MSWord.Application.Documents(1);
        Doc.Activate();         
        Replace = Doc.Content.Find;    
        
        FindText = "{НомерДоговора}";     // что искать - имя_шаблона
        MatchCase = Ложь;                 // использовать регулярные выражения        
        MatchWholeWord = Истина;          // искать слово целиком
        MatchWildcards = Ложь;            // испоьзовать регулярные выражения 
        MatchSoundsLike = Неопределено;   // искать созвучные 
        MatchAllWordForms = Неопределено; // искать все формы слова
        Forward = Истина;                 // искать вперед
        Wrap = Неопределено;              // что должен вернуть Find-объект 
        Format_ = Ложь;                   // использовать форматирование
        ReplaceWith = "N777";             // текст, на который надо заменить имя_шаблона
        
        // кратко:        
        //Replace.Execute(FindText,Ложь,Истина,Ложь,,,Истина,,Ложь,НомерДоговора);        
        
        Replace.Execute(
            FindText, 
            MatchCase, 
            MatchWholeWord, 
            MatchWildcards, 
            MatchSoundsLike, 
            MatchAllWordForms, 
            Forward,
            Wrap,
            Format_,
            НомерДоговора);
            
        MSWord.Application.Visible = Истина;
        MSWord.Activate();
    Исключение
        Сообщить(ОписаниеОшибки());
        MSWord.Application.Quit();    
    КонецПопытки;    
 
    возврат 0;

КонецФункции   
Разместил:   Версии: | 8.x | 8.2 УП |  Дата:   Прочитано: 129960
 +11 
Распечатать
Возможно, вас также заинтересует
Cодержимое указанного ниже веб-сайта в этом приложении блокируется... Aboutsecurity_1cv8c.exe 2
Проблема: После обновления на 1С:Бухгалтерию предприятия 3-й версии, при нажатии на закладку командного интерфейса 1С:предприятие, выскакивает ошибка: Aboutsecurity_1cv8c.exe или Aboutsecurity_1cv8.exe «Содержимое указанного ниже веб-узла в э
Google maps : вывод точек на карту и режим панорамы 9
В отличие от яндекс карт в GMaps можно использовать панорамы - за что им большой плюс! Надеюсь в яндексе прочитают этот пост и тоже когда-нибудь это сделают! Для клиента нужно было сделать вывод объектов на карту С возможностью просмотра панора
QR код в 1С 21
Столкнулся с интересной задачей реализации генерации QR-кода в 1С 8.2 ( QR-код — матричный код (двухмерный штрихкод) ) Для генерации было использовано api от google (http://chart.apis.google.com/chart). Вот сайт , который работает с ним. После тог
SMTP greeting failure: 421 SMTP connection broken (reply) 8
Опи­са­ние ошиб­ки: С сен­тяб­ря 2014 Ян­декс.Почта, Mail.ru пе­ре­шли на про­то­кол SSL, что сде­ла­ло их еще более без­опас­ны­ми. Чтобы и даль­ше ра­бо­тать с пись­ма­ми через 1С, Вам нужно из­ме­нить их на­строй­ки и вне­сти до­ра­бот­ки в код
Автоматическая архивация баз 1С 8.х для файлового и клиент-серверного варианта 6
Данный способ архивации подходит для файловых и SQL версий баз 1С: И так: 1. Создаем скрипт vbs и сохраняем его в C:BackupZUP.vbs Set WshShell = CreateObject(" WScript.Shell" ) dim d,m,y d = day(date()) if d 10 then d = " 0" d end
Посмотреть все результаты поиска похожих
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.
Загрузка... Дождитесь завершения!