ВНИМАНИЕ! При использовании кодов описанных ниже, уберите символ _
Давайте рассмотрим на примерах как это делается! =) Мне известно 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;
КонецФункции
Выгрузка данных из 1C в шаблон Word (Active document)
Выгрузка данных из 1C в шаблон Word (Active document)
Чтобы сформировать документ в формате Word, нужно сначала подготовить шаблон. А точнее, создадим макет с типом «Active document» для примера во внешней обработке:
Затем выбираем объект, например, Microsoft Office Word 97-2003:
Откроется чистый документ Word (причем в конфигураторе).
А в документе Word будем расставлять закладки. С закладками работать приятней и быстрей.
Выбираем режим закладок и расставляем:
Прописываем такую процедуру:
//получаем макет из объекта обработки ОбработкаОбъект = РеквизитФормыВЗначение(«Объект»); СсылкаМакет = ОбработкаОбъект.ПолучитьМакет(«Тест»); Word = СсылкаМакет.Получить();//открываем и активируем документ СсылкаМакет = Word.Application.Documents(1); СсылкаМакет.Activate();// в метод Bookmarks передаем название «закладки» Word.Bookmarks(«Тест»).Select();//устанавливаем новое значение текста Word.Application.Selection.TypeText(«Привет, 1С 8.3! :)»);//включаем видимость приложения СсылкаМакет.Application.Visible = Истина;
После вызова процедуры мы получим открытый документ с таким вот сообщением:
Как сформировать новый договор на основании файла Microsoft Word?
Как сформировать новый договор на основании файла Microsoft Word?
Договор = ПолучитьМакет(«Тест»); // Получить объект из макета. MSWord = Договор.Получить(); НаименованиеКонтрагента = «ООО Торгуем всем»; Попытка Документ = MSWord.Application.Documents(1); Документ.Activate(); // Получить объект, который будем использовать для поиска и замены. Замена = Документ.Content.Find; // Заменить заранее определенные ключевые конструкции на требуемый текст. Замена.Execute(«<НазваниеКомпании>», Ложь, Истина, Ложь, , , Истина, , Ложь, НаименованиеКонтрагента); // Далее аналогично для остальных ключевых конструкций. // Делаем видимым приложение и активизируем его. MSWord.Application.Visible = Истина; MSWord.Activate(); Исключение // Если произойдет ошибка выводятся данные об ошибке и объект закрывается. Сообщить(ОписаниеОшибки()); MSWord.Application.Quit(); КонецПопытки;
МакетDOCX = ПолучитьМакет(«МакетWORD»); MSWord = МакетDOCX.Получить(); Попытка СсылкаМакет = MSWord.Application.Documents(1); //открыть Word //СсылкаМакет.Application.Visible = Истина; //СсылкаМакет.Activate(); MSWord.saveas(«C:tempТест.doc»,0); // (FullPatah, WdSaveFormat)
Исключение //если ошибка Сообщить(ОписаниеОшибки()); КонецПопытки; MSWord.Application.quit();
Перечисление WdSaveFormat (Word)
Перечисление WdSaveFormat (Word)
https://docs.microsoft.com/en-us/office/vba/api/word.wdsaveformat
Задает формат, используемый при сохранении документа.
Технология ActiveDocument предназначена для редактирования документов внешними по отношению к 1С:Предприятию 8 редакторами.
Эта технология позволяет редактировать документы визуально (например, Word или Excel) непосредственно в окне 1С:Предприятия 8, при этом элементы пользовательского интерфейса (меню, панели команд и т. д.) заменяются на предоставляемые редактором. Документы могут быть предварительно отредактированы и сохранены в макетах конфигурации, а затем макеты могут использоваться пользователями как основы для создания окончательных версий документов.
Следует заметить, что использование макетов ActiveDocument в режиме Предприятия осуществляется только программно — визуальное редактирование возможно только на этапе создания и редактирования конфигурации.
Эта технология применяется в случае, когда в конфигурации необходимо хранить данные, редактируемые другим приложением — такие, например, как шаблоны для факсов или деловых писем, созданные в Microsoft Word, или шаблоны прайс-листов в Microsoft Excel. Такая необходимость возникает, как правило, при регламентировании формата документов (как во внутреннем документообороте, так и при обмене документами со сторонними организациями и клиентами), однако при отсутствии ограничений на формат документа рекомендуется использовать существующие в 1С:Предприятии 8 возможности по оформлению электронных и печатных документов.
(Здесь действие происходит в модуле формы)
&НаСервере
Функция ЗаполнитьМакетНаСервере()
ОбработкаОб = РеквизитФормыВЗначение("Объект");
АктивныйДокумент = ОбработкаОб.ПолучитьМакет("МакетДоговораActiveDocument"); //ОболочкаActiveDocument
КомОбъект = АктивныйДокумент.Получить(); //метод работает на сервере
////////////ПЕРВЫЙ ВАРИАНТ ЗАПОЛНЕНИЯ ПАРАМЕТРОВ////////////
//инициализируем переменные, чтобы если какие-то из них окажутся незаполненными, то не отображалась текстовая ошибка в документе
КомОбъект.Variables("ДатаПриема").Value = " ";
КомОбъект.Variables("Организация").Value = " ";
КомОбъект.Variables("ЮрАдрес").Value = " ";
КомОбъект.Variables("Должность").Value = " ";
КомОбъект.Variables("ИНН_КПП_ОГРН").Value = " ";
КомОбъект.Variables("Адрес").Value = " ";
КомОбъект.Variables("ФИОСотрудника").Value = " ";
//заполнение переменных реальными значениями
КомОбъект.Variables("ДатаПриема").Value = "22 сентября 2017г";
КомОбъект.Variables("Организация").Value = "Миросса";
КомОбъект.Variables("ЮрАдрес").Value = "Санкт Петербург, Невский пр, д. 102";
КомОбъект.Variables("Должность").Value = "Генеральный директор";
КомОбъект.Variables("Адрес").Value = "Санкт Петербург, Невский пр, д. 102";
КомОбъект.Variables("ФИОСотрудника").Value = "Сергей Петрович";
//Книга.ActiveWindow.Visible = Истина; //?
//Книга.Activate(); //?
КомОбъект.Fields.Update();
////////////ВТОРОЙ ВАРИАНТ ЗАПОЛНЕНИЯ ПАРАМЕТРОВ////////////
Replace = КомОбъект.Content.Find;
FindText = "<<ФиоСокр>>"; // что искать - имя_шаблона
MatchCase = Ложь; // использовать регулярные выражения
MatchWholeWord = Истина; // искать слово целиком
MatchWildcards = Ложь; // испоьзовать регулярные выражения
MatchSoundsLike = Неопределено; // искать созвучные
MatchAllWordForms = Неопределено; // искать все формы слова
Forward = Истина; // искать вперед
Wrap = Неопределено; // что должен вернуть Find-объект
Format_ = Ложь; // использовать форматирование
ReplaceWith = "С.П."; // текст, на который надо заменить имя_шаблона
//Replace.Execute(FindText,Ложь,Истина,Ложь,,,Истина,,Ложь,ReplaceWith );
Replace.Execute(
FindText,
MatchCase,
MatchWholeWord,
MatchWildcards,
MatchSoundsLike,
MatchAllWordForms,
Forward,
Wrap,
Format_,
ReplaceWith );
Replace = КомОбъект.Content.Find; //перед каждым вызовом Execute()
Replace.Execute(
"<<ИНН_КПП_ОГРН>>",
MatchCase,
MatchWholeWord,
MatchWildcards,
MatchSoundsLike,
MatchAllWordForms,
Forward,
Wrap,
Format_,
"7802022" );
имяФ = ПолучитьИмяВременногоФайла("doc");
КомОбъект.SaveAS(имяФ); //здесь возможна ошибка (http://infostart.me/public/568913/)
Двоичные = новый ДвоичныеДанные(имяФ);
//в web клиенте Двоичные.Записать() не работает, поэтому
//Адрес = новый ХранилищеЗначения(Двоичные);
//возврат Адрес;
//а затем на клиенте:
//ПолучитьФайл(Адрес, "ИмяФайла.doc", Истина); //файл скачивается в браузере
КомОбъект.Application.Quit(); //закрыть Word
КомОбъект = 0;
Возврат Двоичные;
КонецФункции
&НаКлиенте
Процедура ЗапускПриложения(КодВозврата, ДополнительныйПараметр) Экспорт
КонецПроцедуры
&НаКлиенте
Процедура Печать(Команда)
//Попытка
// Ворд = Новый COMОбъект("Word.Application");
//Исключение
// Сообщить("Установи Word..");
// Возврат;
//КонецПопытки;
Двоичные = ЗаполнитьМакетНаСервере();
имяФ = ПолучитьИмяВременногоФайла("doc"); //в web клиенте не работает
Двоичные.Записать(имяФ); //в web клиенте не работает
//ЗапуститьПриложение(имяФ); //error Использование синхронных методов на клиенте запрещено!
Оповещение = Новый ОписаниеОповещения("ЗапускПриложения", ЭтотОбъект);
НачатьЗапускПриложения(Оповещение, имяФ,, Ложь); //ложь - не дожидаемся завершения приложения (в процедуру ЗапускПриложения всё равно заходим, сразу же
КонецПроцедуры
Пример использования ActiveDocument _Word.
Как создать поля-параметры в Word
1 Выбираем участок(кусок текста) для параметра, например: «Организация»(на первой картинке она уже скрыта) , а можно удалить его и спозиционироваться на этом месте.
2 В меню Word, переходим на «Вставка», далее «Экспресс-блоки», далее «Поле»
3 В открывшемся диалоговом окне, выбираем тип «DocVariable»
4 Назначаем имя, в моем случае «NomerDogovora»
5. Жмем «Ок», когда окно закроется, вы скорей всего не увидите изменений, так как скрыт «Word kod», нажмите Alt+F9, что бы открыть код.
6. Таким образом создаете все нужные Вам параметры
Ссылки: http://www.modber.ru/catalog/item3340.html, http://j008.ru/ps/027_ActiveDocument
WordОвские файлы *doc, *docx — это ZIP-архивы ((*xls и *xlsx тоже)). Меняем расширение docx на zip и распаковываем архив. Получим структуру папокфайлов. Текст файлов в формате XML. Удобно редактировать текст, менять картинки(папка wordmedia). И собираем обратно, архивируем.
СоздатьКаталог(«C:времКаткат01»);
Архив = Новый ЧтениеZipФайла();
Архив.Открыть(«C:времКаткат01наименование.zip»);
Архив.ИзвлечьВсе(«C:времКаткат01Unpacked», РежимВосстановленияПутейФайловZIP.Восстанавливать);
Архив.Закрыть();
// что-то делаем
//ПутьИзменяемыйФайл = «C:времКаткат01Unpackedwordmediaimage1.png»; //для docx
//файл = новый файл(ПутьИзменяемыйФайл);
//Если НЕ Файл.Существует() Тогда
//
//КонецЕсли;
Архиватор = Новый ЗаписьZipФайла(«C:времКаткат01наименование2.zip», «», «»);
Архиватор.Добавить(«C:времКаткат01Unpacked*.*», РежимСохраненияПутейZIP.СохранятьОтносительныеПути, РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно);
Архиватор.Записать();
УдалитьФайлы(«C:времКаткат01»);
В работе программиста 1С, данный функционал требуется крайне редко, хотя благодаря нему можно решать довольно сложные задачи с динамическими и не постоянными печатными формами. При реализации данной задачи, работа по созданию шаблонов Word и расстановке закладок в шаблоне Word возлагается на пользователей 1C.
В данном примере будет показано, как используя механизмы 1С и документа Word в качестве шаблона, можно создать печатную форму для вывода данных, пользователям программы 1С.
Создадим шаблон на основе документа Word для 1С. Сначала необходимо включить показ закладок для более удобной работы с документом:
Использование шаблонов Word в 1С
Использование шаблонов Word в 1С
Далее необходимо в файл шаблона для 1С, добавить текст и пару закладок. Закладка добавляется через меню «Вставка» — «Закладка». Нужно выделить текст закладки, скопировать его, открыть меню «Вставка — Закладка», вставить скопированный текст закладки и нажать «Добавить»:
Установка закладки, шаблон Word для 1С
Когда файл шаблона Word готов, создаем новую внешнею обработку в 1С, добавляем форму и в модуле формы вставляем следующий код:
&НаКлиенте Процедура ПриОткрытии(Отказ) ЗаполнитьШаблонВорд(); КонецПроцедуры &НаКлиенте Функция ЗаполнитьШаблонВорд() //Попытка создать COM объект Попытка ОбъектВорд = Новый COMОбъект("Word.Application"); Исключение Сообщить("Ошибка при запуске Microsoft Word: " + ОписаниеОшибки(), СтатусСообщения.Внимание); Возврат Неопределено; КонецПопытки; //Путь к шаблону ОбъектВорд.Documents.Add("C:UsersКонстантинDesktopШаблон.docx"); ШаблонВорд = ОбъектВорд.ActiveDocument; //Получаем все закладки из шаблона Для каждого ЗакладкаВорд Из ШаблонВорд.Bookmarks Цикл Сообщить(ЗакладкаВорд.Name); КонецЦикла; //Заменяем закладку1 на текст ШаблонВорд.Bookmarks("Закладка1").Select(); ШаблонВорд.Application.Selection.TypeText("Текст для закладки №1."); //Заменяем закладку2 на текст ШаблонВорд.Bookmarks("Закладка2").Select(); ШаблонВорд.Application.Selection.TypeText("Текст для закладки №2."); //Заменяем закладку3 на текущую дату ШаблонВорд.Bookmarks("Закладка3").Select(); ШаблонВорд.Application.Selection.TypeText(ТекущаяДата()); ОбъектВорд.Application.Visible = Истина; ОбъектВорд.Activate(); //Закрытие документа //ОбъектВорд.Application.Quit(); КонецФункции
В результат запуска внешней обработки 1С по формированию печатной формы на основе шаблона в виде файла Word, мы получим следующий результат:
Результат использования шаблонов Word в 1С
Информацию по методам COM объекта Word, а так же дополнительные данные можно узнать из MSDN.
Скачать файл обработки 1С и шаблона Word.
Дополнение к заметке Использование шаблонов Word в 1С
Выражаю благодарность, всем тем, кто комментирует запись, благодаря вам, материал дополняется новыми данными и будет полезен более широкому кругу посетителей.
1. А как поменять размер шрифта во вставляемом тексте?
Достаточно изменить размер шрифта закладки, в шаблоне. А вот, если необходимо динамически менять размерность, тогда:
//Заменяем закладку3 на текущую дату ШаблонВорд.Bookmarks("Закладка3").Select(); ШаблонВорд.Application.Selection.Font.Bold = 1; ШаблонВорд.Application.Selection.Font.Size = 20; ШаблонВорд.Application.Selection.TypeText(ТекущаяДата());
2. Картинки есть возможность выгружать в шаблон?
Да, конечно. Примеры для C# и VB описаны по ссылке: https://msdn.microsoft.com/ru-ru/library/ms178792.aspx, а для 1С код будет следующий:
// Вставка изображения ШаблонВорд.Bookmarks("Закладка3").Select(); ШаблонВорд.Application.Selection.InlineShapes.AddPicture("C:UsersКонстантинDesktoplogo_1c.png");
3. При выполнении кода: ОбъектВорд.Documents.Add(«C:/Шаблон.docx») (туда я поместил Ваш документ) получаю ошибку : «Ошибка при вызове метода контекста (Add)» в чем может быть причина?
Может попробовать изменить путь на: «C:Шаблон.docx».
4. Подскажите пожалуйста еще почему при сохранении макета типа active document в файл word кодом:
ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); Макет = ОбработкаОбъект.ПолучитьМакет("ШаблонПисьмаПросрочка"); ИмяФайла = КаталогВременныхФайлов() + ""файл.doc"; Макет.Записать(ИмяФайла);
Я получаю вместо нормального документа вот такой http://prntscr.com/eshgjk
Предполагаю, что метод Записать(< ИмяФайла>, < ТипФайлаТаблицы>) по умолчанию, записывает файл в формате MXL. Попробуйте вторым параметром установить значение: ТипФайлаТабличногоДокумента.DOCX, более подробно описано в «Синтакс-помощнике».
5. У меня в документе есть ссылки на файлы которые расположены на сетевом диске. Как в шаблоне сделать гиперссылку на эти файлы?
Интересный вопрос, если попробовать сделать запись макроса и посмотреть результат, то в Visual Basic добавление гиперссылки будет выглядеть следующим образом:
Sub Макрос1() ' ' Макрос1 Макрос ' ' Selection.MoveLeft Unit:=wdCharacter, Count:=15, Extend:=wdExtend ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, Address:= _ "C:UsersКонстантинDesktopТест.txt", SubAddress:="", ScreenTip:="", _ TextToDisplay:="ТестоваяСсылка" End Sub
Описание метода добавления в MSDN: https://msdn.microsoft.com/en-us/vba/word-vba/articles/hyperlinks-add-method-word
Соответственно код для 1С следующий:
Функция ЗаполнитьШаблонВорд() //Попытка создать COM объект Попытка ОбъектВорд = Новый COMОбъект("Word.Application"); Исключение Сообщить("Ошибка при запуске Microsoft Word: " + ОписаниеОшибки(), СтатусСообщения.Внимание); Возврат Неопределено; КонецПопытки; //Путь к шаблону ОбъектВорд.Documents.Add("C:Usersk.blaginDesktopШаблон.docx"); ШаблонВорд = ОбъектВорд.ActiveDocument; //Получаем все ссылки из шаблона Для каждого ЗакладкаВорд Из ШаблонВорд.Hyperlinks Цикл Сообщить(ЗакладкаВорд.Name); КонецЦикла; //Меняем адрес уже существующей ссылки ШаблонВорд.Hyperlinks("Logs.zip").Address = "C:Usersk.blaginDesktopMemory.zip"; //Заменяем закладку на ссылку ОбъектЗакладка = ШаблонВорд.Bookmarks("Закладка3"); ШаблонВорд.Hyperlinks.Add(ОбъектЗакладка.Range, "C:Usersk.blaginDesktopШаблон.docx", "", "Шаблон.docx", "C:Usersk.blaginDesktopШаблон.docx"); ОбъектВорд.Application.Visible = Истина; ОбъектВорд.Activate(); //Закрытие документа //ОбъектВорд.Application.Quit(); КонецФункции
Ключевые слова: Word, Active Document, ActiveDocument, Application, заполнение, поле
В Конфигураторе
Макеты — правый клик — Добавить
Тип макета: Active document
Создать новый — Документ Microsoft Word
Меню Вставка — Поле — Автоматизация — DocVariable
Написать имя поля в графе «Новое имя:» ДатаПриказа
В модуле формы документа создаем кнопку, и в ее обработчике пишем:
Процедура ОсновныеДействияФормыWord(Кнопка) АктивныйДокумент = ПолучитьМакет("Макет"); КомОбъект = АктивныйДокумент.Получить(); КомОбъект.Application.Visible=1; КомОбъект.Variables.Item("ДатаПриказа").Value="24.01.2007"; КомОбъект.Fields.UpDate(); КомОбъект.PrintOut(); //распечатать документ //Ожидание окончания отправки на печать... Пока objWord.Application.BackgroundPrintingStatus<>0 Цикл Предупреждение("Ожидание",1); КонецЦикла; КомОбъект.Application.Quit(); //закрыть Word КомОбъект = 0; КонецПроцедуры
Другой вариант: добавляем не поле, а Закладку
http://itland.ru/forum/index.php?showtopic=5238
Меню Вставка-Закладка… Задаем ее имя («КуКу»).
Процедура ОсновныеДействияФормыWord(Кнопка) АктивныйДокумент = ПолучитьМакет("Макет"); КомОбъект = АктивныйДокумент.Получить(); КомОбъект.Application.Visible=1; КомОбъект.Bookmarks(СокрЛП("КуКу")).Select(); КомОбъект.Application.Selection.TypeText(СокрЛП("крокодил")); КонецПроцедуры
В этой статье мы разберем с Вами следующую задачу, нам потребуется вывести данные в макет 1с (на примере Word), в 1с это макет на базе «Active Document». Подстановку в Word документ мы будем делать с помощью закладок, чтобы установить закладку в документе Word Вам необходимо сделать следующие действия:
- Откройте Word документ.
- Найдите нужное место в тексте куда Вы хотите делать подстановку, щелкните туда курсор мышки, после этого переходим Вставка —> Закладка.
- Даем закладке имя и нажимаем вставить.
- Расставляем нужное количество закладок в макете 1с (документ Word)
После того как мы расставили все закладки в документе, мы приступаем к созданию макета. Для этого в 1с выбираем веточку «Макеты», кликаем правой кнопкой мыши и добавляем макет, появится список возможных макетов выбираем «Active Document», затем указываем путь к Word файлу. Теперь чтобы вместо закладок поставить необходимый текст и вывести данные в макет 1с Word мы сделаем следующие действия, напишем код приведенный ниже:
На этом все, вот такой простой способ, без лишних заморочек и неудобств. Очень рекомендуем пользоваться подобным методом.
Наши программисты оказывают полный спектр услуг 1с.
Похожие вопросы по 1С
На данный момент новостей нет.