Печатная форма в формате Word из 1С 8.3 и 8.2
Рассмотрим два способа выгрузить данные из программы 1С 8.3 в Word. Эти способы можно использовать в альтернативу стандартных внутренних и внешних печатных форм 1С. Пример обработки, который описывается в статье, можно скачать здесь.
Кстати, в новой версии 1С Бухгалтерия появилась возможность настройки пользовательских шаблонов договоров без программирования.
Выгрузка данных из 1C в шаблон Word (Active document)
Чтобы сформировать документ в формате Word, нужно сначала подготовить шаблон. А точнее, создадим макет с типом «Active document» для примера во внешней обработке:
Затем выбираем объект, например, Microsoft Office Word 97-2003:
Откроется чистый документ Word (причем в конфигураторе).
А в документе Word будем расставлять закладки. С закладками работать приятней и быстрей.
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
Выбираем режим закладок и расставляем:
Прописываем такую процедуру:
//получаем макет из объекта обработки ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); СсылкаМакет = ОбработкаОбъект.ПолучитьМакет("Тест"); Word = СсылкаМакет.Получить(); //открываем и активируем документ СсылкаМакет = Word.Application.Documents(1); СсылкаМакет.Activate(); // в метод Bookmarks передаем название "закладки" Word.Bookmarks("Тест").Select(); //устанавливаем новое значение текста Word.Application.Selection.TypeText("Привет, 1С 8.3! :)"); //включаем видимость приложения СсылкаМакет.Application.Visible = Истина;
После вызова процедуры мы получим открытый документ с таким вот сообщением:
Создание документа Word сразу (Word.Application)
Документ Word можно создать в 1C без использования макета. Напрямую, с помощью COM объекта. Делается это не сложнее.
Пример кода:
// Создание COM Word1C = Новый COMОбъект("Word.Application"); // Установим видимости объекта Word1C.Visible = Истина; // Добавим документ в приложение Word1C.Documents.Add(); // Придаем объекту статус активности ТекущийДокумент = Word1C.ActiveDocument(); //выводим в первый абзац наш текст, выделяем его и делаем шрифт 30 размера ТекущийДокумент.Paragraphs(1).Range.InsertAfter("Этот файл ворд я создал из программы 1С 8.3!"); ТекущийДокумент.Paragraphs(1).Range.Font.Size = 30; ТекущийДокумент.Paragraphs(1).Range.Font.Bold = -1; //активируем документ Word1C.Activate();
После запуска кода мы видим вот такую красивую картину:
Ссылка на скачивание обработки — Выгрузка в Word.
Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
СПРОСИТЕ в комментариях!
Константин:
Первый вариант можно делать не через закладки, а через DocVariable.
Кирилл:
Спасибо за уместный комментарий 🙂
Владимир:
Интересно, как отработает строчка включения видимости Word’а в клиент-серверном варианте..
//включаем видимость приложения
СсылкаМакет.Application.Visible = Истина;
Видимо, где-то на сервере откроется приложение
Кирилл:
Да, так и есть. Откроется на сервере 🙂
Если, конечно, на сервере установлен Ворд 🙂
Виталий:
А можно ли напечатать документ Word минуя открытие самого приложения Word ?
Кирилл:
Можно, посмотрите какая функция выводит на печать.
Проигнорируйте Word1C.Activate();
И в конце закройте ворд, вроде бы функция Close()
Виталий:
Спасибо, разобрался:
.ActiveDocument.PrintOut();
.ActiveDocument.Close(0);
.Quit();
Кирилл:
Спасибо что рассказали как, буду иметь ввиду 🙂
Игорь:
Как создать форму для печати в 1с, договор о добровольном соглашении, со вставкой сотрудника, заказчика и заказа?
Кирилл:
Добрый день!
Если у вас 1С Бухгалтерия 3.0, то можно посмотреть как это сделано в этом видео:
https://www.youtube.com/watch?v=1zcOuCrG7Io
Хотя в других современных программах 1С инструкция аналогичная.
Александр:
Добрый день, у меня не работает первый вариант.
Выдает ошибку: {Форма.Форма.Форма(38)}: Ошибка при вызове метода контекста (Получить)
Word = СсылкаМакет.Получить();
В чем может быть дело? Не работает даже выгруженный готовый пример, ссылка на который дается в начале
Кирилл:
Скорее всего проблема в ворде или в правах системы. Он корректно установлен? Попробуйте другую версию Ворда. Ну или на крайний случай можно проделать это на другой машине.
Аноним:
у меня та же проблема
Андрей:
Три дня мучился, а тут за пол-часа.
Спасибо.
Ещё вопрос, если не сложно: как выделить (или снять выделение) текста в шаблоне? Не весь параграф, а отдельный вставленный фрагмент, фио или дата.
Кирилл:
Что то вроде этого, но это на Си Шарп:
Object begin = 42;
Object end = 49;
Word.Range wordrange = worddocument.Range(ref begin, ref end);
wordrange.Select();
//На Рис.5. Слева выведенный текст на данном этапе
//Меняем характеристики текста выделенного фрагмента
wordrange.Font.Size=12;
wordrange.Font.Color=Word.WdColor.wdColorRed;
wordrange.Text=»Текст который мы выводим в выделенный участок «;
Но тут смысл ясен — нужно выбрать промежуток текста в документе и присвоить ему нужные свойства.
Аноним:
Fnd = Word.ActiveDocument().Range().Find;
Fnd.ClearFormatting();
Fnd.Execute(«{НомерДог}»,,,,,,-1,,, СокрЛП(Номер), 2);
Fnd.Execute(«{ДатаДок}»,,,,,,-1,,, формат(Дата, «Д(0)ДДММММГГГГ»), 2);
Александр:
Подскажите как вывести шаблон на двухстороннюю печать?
Светлана:
А как вывести на такой макет табличную часть документа? Подскажите,если можно.
Михаил:
Есть ещё вариант заполнения на сервере https://infostart.ru/public/675307/
Тигр:
Здравствуйте, такой вопрос:
А, как в первом варианте (с закладками) поменять шрифт?
Аноним:
Джентльмены, Active Document в контексте сервера не доступен-используйте второй вариант, не забывая о том, что нужно программно правильно закрывать приложение.
Тааша:
Доброго дня! А как вывести таблицу из документа в ВПФ Word?