|
|
|
Формирование отчетов в 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С в Ворд?
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |