Имя: Пароль:
1C
 
v8: MS Word: Сделать картинку за текстом
0 psa247
 
11.02.10
18:31
Доброго !

Вот, пытаюсь перетащить картинку !

       Word = Новый COMОбъект("Word.Application");    
       Word.Visible = ИСТИНА;
       Word.Documents.Open(Путь+"\"+ИмяДок);
   //ThisDocument.Shapes.AddPicture FileName:="C:\Picture.jpg", Left:=250, Top:=50
   //'ActiveDocument.Shapes.AddPicture FileName:="C:\Picture.jpg", Left:=250, Top:=50
   //ActiveDocument.Shapes(ActiveDocument.Shapes.Count) .Select
   //Selection.ShapeRange.Left = 250
   //Selection.ShapeRange.Top = 250
       ФИОДляКартинки = СокрЛП(ПодписалДок.Наименование);
       Если ТипЗнч(ПодписалДок)=Тип("СправочникСсылка.Руководители") Тогда
           ФИОДляКартинки = СокрЛП(ПодписалДок.Сотрудник.Наименование);
       КонецЕсли;                
       Пикчер = Word.Selection.InlineShapes.AddPicture(Константы.ЦентральноеХранилище.Получить()+"\Подписи\"+ОбщийМодуль4.Инициалы(ФИОДляКартинки, ИСТИНА, ИСТИНА, 8)+"JPG");
Word.ActiveDocument.Shapes.Item(Word.ActiveDocument.Shapes.count).Select;
Word.ActiveDocument.Shapes.Item(Word.ActiveDocument.Shapes.count).ZOrderPosition(5);

Управляет позицией рисунка ZOrder
Но как этой конструкцией управлять - не знаю :(
Присвоить значение равное 5 не получается, как правильно ??
1 psa247
 
11.02.10
20:22
А вабще, было б прикольно заставить 1С выводить на бланки.
2 psa247
 
12.02.10
14:20
Кто с ВБА-более-менее знаком ?
Как это правильно в 1С будет ?
3 psa247
 
13.02.10
11:59
попробую еще разок
4 Живой Ископаемый
 
13.02.10
12:08
Шаблоны никак не катят?
5 psa247
 
13.02.10
13:11
(4) на основе шаблонов будет. Но, не в этом случае. Здесь, заранее, не известно, кто подписывает документ, собственно, какую картинку вставить выбирается в реальном времени :)
6 dk
 
13.02.10
13:17
а что не получается?
ошибка или нет результата?
как макрос сказал делать?
7 psa247
 
13.02.10
13:44
Вот пример макроса:

ThisDocument.Shapes.AddPicture FileName:="C:\Picture.jpg", Left:=250, Top:=50
АctiveDocument.Shapes.AddPicture FileName:="C:\Picture.jpg", Left:=250, Top:=50
ActiveDocument.Shapes(ActiveDocument.Shapes.Count) .Select
Selection.ShapeRange.Left = 250
Selection.ShapeRange.Top = 250
Word.ActiveDocument.Shapes.Item(Word.ActiveDocument.Shapes.count).ZOrderPosition(5);

Переделал для себя:

Word = Новый COMОбъект("Word.Application");    
Word.Visible = ИСТИНА;
Word.Documents.Open(Путь+"\"+ИмяДок);
ФИОДляКартинки = СокрЛП(ПодписалДок.Наименование);
Если ТипЗнч(ПодписалДок)=Тип("СправочникСсылка.Руководители") Тогда
    ФИОДляКартинки = СокрЛП(ПодписалДок.Сотрудник.Наименование);
КонецЕсли;                
Пикчер = Word.Selection.InlineShapes.AddPicture(Константы.ЦентральноеХранилище.Получить()+"\Подписи\"+ОбщийМодуль4.Инициалы(ФИОДляКартинки, ИСТИНА, ИСТИНА, 8)+"JPG");
Сел = Word.ActiveDocument.Shapes.Item(Word.ActiveDocument.Shapes.count).Select;
Сел.ZOrderPosition = 5;

Ругается на:
'ZOrderPosition' не является методом
8 psa247
 
13.02.10
13:46
Есть еще и так:

With WordDoc.Shapes(1)
       .Top = 200    'position verticale de l'image dans le document
       .Left = 150    'position horizontale de l'image dans le document
       .ZOrder msoBringInFrontOfText    'image au premier plan devant le texte
       '.ZOrder msoSendBehindText 'option pour image en arriere plan derriere le texte
End With

Скорее всего, msoSendBehindText - константа и равна 5. Описания не нашел
9 psa247
 
13.02.10
15:22
о_О
10 dk
 
13.02.10
15:29
Word.ActiveDocument.Shapes.Item(Word.ActiveDocument.Shapes.count).ZOrderPosition(5);
Сел.ZOrderPosition(5);
11 psa247
 
13.02.10
15:52
(10) Если по первой строке тогда 'ZOrderPosition' не является методом
Если вместо ZOrderPosition поставить ZOrder тогда ошибки нет, но ничего не происходит
12 psa247
 
13.02.10
15:52
Сел = Word.ActiveDocument.Shapes.Item(Word.ActiveDocument.Shapes.count).Select;
ругается, что нет свойства Селект :(
13 dk
 
13.02.10
15:53
Word.ActiveDocument.Shapes.Item(Word.ActiveDocument.Shapes.count).Select();
14 dk
 
13.02.10
15:55
не надо путать методы Select() и свойства Count, хотя ехель обычно терпимо к этому относится
15 Shandor777
 
13.02.10
15:55
(1) Если я правильно понял, есть желание выводить данные отчета на готовый бланк. Я как-то делал вывод на форму MS Access данных справки 2НДФЛ из DBF файла "подложив" готовый бланк как объект Exel. А в нужных местах поверх расположил поля с данными.
Заодно попробовал "подложить" бланк как объект в таблицу 1С, насколько я помню, это получилось без проблем. А вот в Visuel FoxPro не получилось. Только как картинку удалось разместить, а это мне не понравилось. Пришлось использовать Access, хоть я его и не люблю.
16 psa247
 
13.02.10
16:03
Если делать так:
Сел = Word.ActiveDocument.Shapes(Word.ActiveDocument.Shapes.Count).Select();
Сел.ZOrderPosition(5)

Ругается:
Значение не является значением объектного типа (ZOrderPosition)

А если вот так:
Word.ActiveDocument.Shapes(Word.ActiveDocument.Shapes.Count).ZOrderPosition(5)
то вообще:
Ошибка при вызове метода контекста (ZOrderPosition): Неизвестная ошибка
17 psa247
 
13.02.10
16:03
в верхнем случае Сел=Неопределено, т.е. не позиционируется
18 psa247
 
13.02.10
16:22
Работает так:

Пикчер = Word.Selection.InlineShapes.AddPicture(Константы.ЦентральноеХранилище.Получить()+"\Подписи\"+ОбщийМодуль4.Инициалы(ФИОДляКартинки, ИСТИНА, ИСТИНА, 8)+"JPG");
Сел = Word.ActiveDocument.Shapes(Word.ActiveDocument.Shapes.Count).ZOrder(1);

// 1 - перед текстом
// 5 - за текстом.

Спасибо огромное !