Про вывод данных в MS Word

Используется технология OLE:
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.

Комментарии | опубликовано: 25 Июль 2007, 17:24

Процедуры Сообщить() и Предупреждение(). В чем разница?

Главное различие между ними заключается в том, что Предупреждение() вызывает модальное окно, останавливающее работу до реакции пользователя.
Так вот, если разработчик предполагает, что он должен сообщить что-то пользователю, а процедура должна продолжить свою работу, то не надо выдавать Предупреждение! Или, если это почему-либо важно, надо пользоваться параметром Таймаут, чтобы модальное окно само закрывалось. Особенно это важно в процедурах и функциях, вызываемых при проведении документа, т.к. до момента закрытия окна предупреждения остальные пользователи сталкиваются с блокировкой проведения документов.

Комментарии | опубликовано: 23 Июль 2007, 19:47

Программа запускается, выбираем базу и ... все. Нет ни 1С, ни сообщения об ошибке...

Так ведет себя программа, когда натыкается на файлы Read only – только для чтения. Чаще всего это бывает, если каталог с базой данных был переписан с компакт диска или имеет место попытка использования информационной базы, находящейся на сетевом ресурсе. Необходимо снять этот атрибут со всех файлов информационной базы, в том числе и тех, которые находятся в подкаталогах (Syslog, New_Stru, Usrdef, каталогах пользователей и др.).

Комментарии | опубликовано: 23 Июль 2007, 19:46


<--- Предыдущая страница Следующая страница --->