Имя: Пароль:
1C
 
Word & 1C
Ø
0 TIREX
 
01.11.05
10:28
Народ, обращаюсь из 1с к ворду, в ворде есть TextBox, как его заполнить значением из 1с?
инет рыл, кругом только по ексел или 1с с 1с, а как подставлять значения именно в ворде
1 Uho
 
01.11.05
10:30
Универсальный механизм - написать макрос и перенести его в 1С
2 Денис2
 
01.11.05
10:30
А что такое этот ТекстБокс?
3 TIREX
 
01.11.05
11:15
up
4 dronis
 
01.11.05
11:17
а ты используй FormFields в Ворде ..
FormFields.Result="вапвап";
в самом Ворде "поле формы" называется ..
5 TIREX
 
01.11.05
11:18
4) сенкс, счас попробую
6 Макс 1С
 
01.11.05
11:18
Итак, про вывод данных в 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). (C)
7 TIREX
 
01.11.05
11:27
6) ух ты! спасибо друг!
8 Uho
 
01.11.05
11:38
+6 можно работать с закладками - не знаю кому как удобно
    
Документ.Bookmarks("FullName").Select();
Ворд.Selection.Font.Underline=1; //и тому подобное
Ворд.Selection.TypeText(Контрагент.ПолнНаименование);
  
PS. Закладки вставляются в шаблон (Вставка-Закладка)
9 Wasya
 
01.11.05
11:52
Список всех методов и атрибутов можно получить: Запустить Word нажать alt/F11 затем F2.
10 TIREX
 
01.11.05
12:27
6) вот что у меня получилось:
Word = CreateObject("Word.Basic");
Word.FileOpen("c:\temp\Договор.dot"); \\открываю существующий шаблон
Word.SetFormResult("ТекстовоеПоле1", "Значение поля");
Word.AppShow();
до сих пор всё ок, как потом документ распечатать и закрыть ворд?
Word.PrintOut("c:\temp\Договор.dot"); // ????
Word.Quit(); // ????
11 Gloom
 
01.11.05
12:41
(10)PrintOut и Quit это методы из VBA for Word. Для Word.Basic нужно FilePrint и FileClose юзать
12 TIREX
 
01.11.05
13:12
6,11,all) спасибо, заработало!