Имя: Пароль:
1C
 
Формирование отчетов в MS Word
Ø
0 Олень1
 
04.09.06
15:38
Проблема в следующем: есть шаблон в формате MS Word AKT.dot.
Необходимо данные из формы документа перенести в этот шаблон. Вот пример кода:
Процедура Печать()
    w = СоздатьОбъект("Word.Application");
    w.Documents.Open("D:\WORK\Test\ExtForms\AKT.DOT");
    w.Selection.Find.Text = "STROKA";
    w.Selection.Find.Replacement.Text = Строка(ДокументОснованиеПров);
    w.Selection.Find.Execute();
    w.Visible = 1;
КлнецПроцедуры
При этом никакой замены не происходит. Что делаю не так??? Помогите Плиз...
1 pit
 
04.09.06
20:48
Направильно делаешь ... Все работает нормально...
3 Олень1
 
05.09.06
14:01
Людиииииииииииииииииии!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Помогите же......................
4 Макс 1С
 
05.09.06
14:02
Итак, про вывод данных в MS Word. Понятно, что технологию OLE можно использовать не только для обмена данными между двумя экземплярами 1С и работы с MS Excel. Word в этом смысле ничем не хуже. Особенно, когда почему-либо необходимо создавать в нем типовые документы (Приказ, Договор, Счет etc).
Для начала можно скачать пример работы такой связки. А я, между тем, расскажу в двух словах, как это работает.
Прежде всего, надо создать шаблон документа (.DOT), в котором определить именованные поля.
Именованные поля вставляются так: Засветите панель инструментов Формы. На ней есть кнопочка "текстовое поле" - при нажатии на нее рядом с курсором будет вставлено именованное поле. Если на той же панели нажать кнопку "Параметры поля формы", откроется окно свойств поля, в котором можно задать его имя, тип, формат, макисмальную длину и значение по умолчанию.
Дальше уже в 1С делаем так:
1. Создаем объект Word.Basic и с его помощью создаем файл на основе нашего шаблона:
Word = CreateObject("Word.Basic");
Word.FileNew(Переменная_с_путем_к_шаблону);
2. Заполняем определенные нами поля нужными значениями:
Word.SetFormResult("MyFieldName", Нужное_значение);
3. Делаем Word видимым:
Word.AppShow();
Вот, собственно, и все. Просто, быстро и надежно.
Я же, со своей стороны, хотел бы напомнить, что в Word можно выводить и произвольный текст, произвольно его при этом форматируя. Попробуем вывести в Word небольшой текст, при этом первый абзац будет жирным и выравненным по центру, а второй - выравнен по левому краю, а цифры выделены красным. При этом "Директор", "Сумма" и "Валюта" - это поля на форме обработки:
Word = CreateObject("Word.Application");
Word.Documents.Add();
Word.Documents(1).Content.InsertAfter("Уважаемый "+СокрЛП(Директор)+"!");
MyRange = Word.Documents(1).paragraphs.last.range;
MyRange.Bold = 1;
Word.Documents(1).paragraphs.last.Alignment = 1; //center
Word.Documents(1).Content.InsertParagraphAfter();
Word.Documents(1).Content.InsertAfter("Вы нам должны "+Сумма);
Word.Documents(1).Content.InsertAfter(" "+СокрЛП(Валюта));
Word.Documents(1).paragraphs.last.range.Bold = 0;
Word.Documents(1).paragraphs.last.Alignment = 0; //left
Цифирь = Word.Documents(1).range
       (Word.ActiveDocument.paragraphs.last.range.End - 1 -СтрДлина(Строка(СокрЛП(Сумма)))-1-СтрДлина(Строка(СокрЛП(Валюта))),
        Word.ActiveDocument.paragraphs.last.range.End - 1 -СтрДлина(Строка(СокрЛП(Валюта))));
Цифирь.Font.ColorIndex = 6; //wdRed
// показываем полученнй текст
Word.Visible = 1;
Есть несколько тонкостей, на которые следует обратить внимание:
• вызывается объект "Word.Application";
• нельзя передавать константы Word в качестве параметров функций - только их численные значения. А чтобы быстро узнать их значения, достаточно создать макрос в Word, а в нем воспользоваться процедурой MsgBox(). Например, если передать ей wdRed в качестве параметра, то получим 6 - значение константы;
• вместо True и False надо использовать 1 и 0;
• "Documents(1)" указывает на первый из открытых документов. Надежнее использовать "ActiveDocument" (ведь если Word уже был запущен, то ваш документ может оказаться не первым) - пример просто показывает, что работают оба варианта;
• обратите внимание, что объектом "Range" может быть как весь объект другого вида (слово, абзац, документ), так и конкретная область (ср. "MyRange" и "Цифирь").
Основным источником информации на эту тему является файл справки по VBA для MS Word (VBAWRD8.HLP - для Word97).
взято из Будень девятый. 14/03/01
5 Uho
 
05.09.06
14:02
а я делаю так:
Документ.Bookmarks(Закладка).Select();
Ворд.Selection.TypeText("бла-бла-бла");
6 pit
 
05.09.06
14:19
Ну ты и нашел рухлядь....
Есть и новее примеры...
К тому же там с закладками не совсем удобно работать для документов производльной структуры...
7 Макс 1С
 
05.09.06
14:22
(6) ну что было под рукой...
8 Олень1
 
05.09.06
15:27
(6) Приведи пример. А то только критикуешь...
9 dmsob
 
05.09.06
15:35
  FullNameFile=СокрЛП(КаталогИБ()+"Шаблоны\dogovor.dot");
  OLE = СоздатьОбъект("WORD.Application");
    OleBasic = СоздатьОбъект("WORD.Basic");
    OLE.Documents.Add(FullNameFile,0,0,1);
    OleBasic.SetFormResult("Klient","Криматорий Солнышко");
    //OleBasic.
    OLE.Visible=1; /// видимость - True
    OLE.ActiveDocument.Activate(); /// активизировать!!!
    OLE=""; /// ссылочку прибить
10 dmsob
 
05.09.06
15:37
+(9) а в ворде делаешь элемент формы "текстовое поле" с именем Klient
11 Uho
 
05.09.06
15:39
+9 КрЕматорий
12 dmsob
 
05.09.06
15:40
(11) зИнаю
13 Олень1
 
06.09.06
08:21
Всем спасибо.
Сделал так. Создал в документе текстовое поле.
w = СоздатьОбъект("Word.Application");
Док = w.Documents.Add(КаталогИБ() + "ExtForms\MyDoc.dot");
Док.FormFields("ТекстовоеПоле1").Result = СокрЛП(МоеЗначение);
// и т.д.
w.Visible = 1;
14 pit
 
06.09.06
08:47
(13) это подходит только для документов с жесткой структурой...
15 Ferrum
 
06.09.06
10:06
2(14) Ага. а вот когда я столкнулся с тем что мне необходимо было в Word рисовать рисунки из 1с произвольной структуры и добавлять надписи, оказалось что я могу использовать только 1 параметр сразу при выводе, например хочу вставить текст. так вот. либо я вставляю текст, либо я убираю чёрную рамочку вокруг текста. Нельзя программно потом выделить этот объект, чтоб задать его параметры. и как обойти то не знаю
16 Доктор
 
06.09.06
11:05
Товарищ Олень №1!
Все уже сделано за вас, причем очень давно. Отчет формируется обычным образом в родном формате mxl, после чего сохраняется в файл. Затем открывается форма внешней обработки, которой в качестве параметра передается имя файла сохраненного отчета. Обработка конвертирует таблицу mxl в файл MS Word.
Остается добавить, что обработка с названием "Конвертация в Word" уже больше года лежит на проклубе.
17 Олень1
 
06.09.06
11:21
(16) Дело в том, что мне дают готовые шаблоны в формате MS WORD. Раньше я все это рисовал в табличном редакторе, но формы начали менять слишком часто и мне это надоело. Поэтому я и решил формировать отчеты в Word-е. 5 минут на расстановку текстовых полей и 10 строк кода - и все готово.
Спасибо всем кто откликнулся...
18 Путевый лист
 
06.09.06
11:27
Программа для учета договоров на Центральном рынке (порядка 2000 договоров) по 4 организациям, кроме того, есть договоры по аренде мест, а есть по аренде помещений. Вначале делал все в MXL, но при бесконечнйо переделке шаблонов договоров (юристы что-нибудь найдут) пришел к тому, что надо пользоваться шаблонами WORD (включая в них нужные названия полей там где это надо). Воспользовался библиотекой DOREP для VFP и пользователи теперь счастливы и я тоже, т.к. не надо из-за каждой фигни менять MXL
19 Олень1
 
06.09.06
11:33
>>Воспользовался библиотекой DOREP для VFP
Это что за библиотека? Какое отношение она имеет к 1С?
20 USSR
 
06.09.06
11:36
(16)Очень спорная рекомендация. А форматирование, а различные шрифты. Бодаться в 1с писать нормальным образом текст договора, а потом еще как-то сообщать Ворду как эту кашу форматировать. Это поистине решение через одно место. OLE и придумали для более-менее человеческого взаимодействия приложений
21 Путевый лист
 
06.09.06
12:19
Да нет. Текст договора пишется в WORD (RTF с расширением SAB).Оперделенным способом (через угловые и квадратные скобки) указывается имя ДБФ и поля, а вот ДБФ формируется в 1С.
22 Путевый лист
 
06.09.06
12:20
А дальше из 1С вызывается программа DOREP.EXE c параметром (тем самым шаблоном SAB)
23 Бист
 
11.09.06
08:15
Максимально какой длины строку можно передать из 1С в Ворд?
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший