Имя: Пароль:
1C
1С v8
Помогите с макетом Active Document. Управляемое приложение.
, ,
0 Erschalaim
 
27.02.12
15:27
У документа есть макет с типом "ActiveDocument" и выбраным шаблоном ворда.

В файловом варианте с директивой &НаСервере это выполяется без проблем:
Договор = ПолучитьМакет("МакетДоговора"); //ОболочкаActiveDocument
// Получить объект из макета.
MSWord = Договор.Получить(); //получаем OLE объект ворда

В клиент серверном варианте выскакивает ошибка:
{Документ.ДоговорБронирования.МодульМенеджера(8)}: Ошибка при вызове метода контекста (Получить)

Все выполняется на одной и той же машине.
1 aleks-id
 
27.02.12
15:28
получай олю на клиенте
2 Erschalaim
 
27.02.12
15:29
(1) а как это сделать?
3 DexterMorgan
 
27.02.12
15:30
(0) Я делал по-другому, создай файлик вордовский и загрузи как двоичные данные в макет. На сервере получаешь и передаешь на клиент. А на клиенте уже через ком объект открываешь и заполняешь как тебе нужно, мб на сервере ворда нет... да и не должно бытть
4 aleks-id
 
27.02.12
15:31
(2) как-как. на сервере получай макет и возвращай макет на клиента. а на клиенте уже открывай
5 Erschalaim
 
27.02.12
15:32
(3) стоит ворд на сервере
6 DexterMorgan
 
27.02.12
15:33
(5) Ну млин, кароче как хочешь, я тебе просто вариант предложил, не люблю я Active Document
7 aleks-id
 
27.02.12
15:34
&НаСервере
Функция ПолучитьМакетВорд(ИмяМакета)
возврат ПолучитьМакет(ИмяМакета);
конецФункции

&НаКлиенте
Процедура ТрамПаПам()
МакетДоговора
MSWord = ПолучитьМакетВорд("МакетДоговора");
Оля = MSWord.Получить();
...
8 DexterMorgan
 
27.02.12
15:36
(7) без временного хранилища не взлетит
9 Erschalaim
 
27.02.12
15:37
(7) а где узнать какие объекты можно получать с сервера на клиент?
10 aleks-id
 
27.02.12
15:37
в СП
11 DexterMorgan
 
27.02.12
15:38
(9) в СП =)
12 Erschalaim
 
27.02.12
15:38
(7) это не взлетит на тонком
13 Erschalaim
 
27.02.12
15:39
(11) буду благодарен, если путь в СП подскажете
14 Erschalaim
 
27.02.12
15:39
Непонятен сам нюанс, почему (0) не выполняется в клиент-серверном вариантЕ?
15 Erschalaim
 
27.02.12
15:41
Обалдеть, такой крутой форум, мне его друзья рекомендовали и никто не может подсказать как решить проблему (0)?
16 aleks-id
 
27.02.12
15:43
потому что в файловом варианте у тебя запускается как бы сервер на твоей локальной машине, а в клиент серверном сервак может стоять непойми где. и как ты на нем откроешь ворд?
17 DexterMorgan
 
27.02.12
15:43
&НаКлиенте
Процедура ЗаказПоставщикуExcel(Команда)
       
   //Путь для сохраняемого файла:
   ПутьКФайлуНаКлиенте = "С:\ЗаказПоставщику.xls";
   
   //Получаем форму оплаты и сам экселевский файл:
   СтруктураДанных = ПолучитьСтруктуруДанных();

   ФайлЕксель = ПолучитьИзВременногоХранилища(АдресФайлаЕксельВХранилище);
       ФайлЕксель.Записать(ПутьКФайлуНаКлиенте);
   
   
   Попытка
       Эксель = Новый COMОбъект("Excel.Application");  
   Исключение
       Сообщить("Установи Excel..");
       Возврат;
   КонецПопытки;
   
   Книга = Эксель.WorkBooks.Open(ПутьКФайлуНаКлиенте);
       Лист = Книга.WorkSheets(1);

   БЛА БЛА БЛА
   
   Книга.Save();
   
   Эксель.Application.Quit();
   Эксель = Неопределено;
   
   ЗапуститьПриложение(ПутьКФайлуНаКлиенте);
   
КонецПроцедуры

&НаСервере
Функция  ПолучитьСтруктуруДанных()
   
   ФайлЕксель = ПолучитьМакет("КакойТамУТебяМакет");  
   АдресФайлаЕксельВХранилище = ПоместитьВоВременноеХранилище(ФайлЕксель);
   
   Возврат АдресФайлаЕксельВХранилище;
   
КонецФункции
18 DexterMorgan
 
27.02.12
15:44
Кароче это для двоичных данных
19 DexterMorgan
 
27.02.12
15:45
Млин у меня там больше было написано - я там еще кой че возвращал и не удалил, ну принцип такой =)
20 Erschalaim
 
27.02.12
15:50
(19) спасибо большое
21 DexterMorgan
 
27.02.12
15:58
(20)Кстати с активным документом - хз: макет с сервера на клиент не передашь, комобъект тоже не передашь, я вижу вариант только сам файл передавать и вообще это правильнее, имхо
22 Erschalaim
 
27.02.12
16:17
(19) Не работает, макет не может существовать на клиенте

{Документ.ДоговорБронирования.Команда.ДоговорБронирования.МодульКоманды(9)}: Ошибка при вызове метода контекста (ПолучитьИзВременногоХранилища)
   ФайлВорд = ПолучитьИзВременногоХранилища(АдресФайлаВХранилище);
по причине:
Ошибка получения значение из временного хранилища
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства 'response':
   форма: Элемент
   имя: {http://v8.1c.ru/8.2/mngsrv/ws}response
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа 'ОболочкаActiveDocument'

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
   
   ИмяФайлаНаКлиенте = ПолучитьИмяВременногоФайла();
   
   АдресФайлаВХранилище = ПолучитьСсылкуНаВременноеХранилище();
   
   ФайлВорд = ПолучитьИзВременногоХранилища(АдресФайлаВХранилище);
   
КонецПроцедуры

&НаСервере
Функция ПолучитьСсылкуНаВременноеХранилище()
   Возврат Документы.ДоговорБронирования.ПоместитьМакетВоВременноеХранилище();
КонецФункции

&НаСервере
Функция ПоместитьМакетВоВременноеХранилище() Экспорт
   
   ФайлWord = ПолучитьМакет("ДоговорБронирования");  
   
   АдресФайлаWordВХранилище = ПоместитьВоВременноеХранилище(ФайлWord);
   
   Возврат АдресФайлаWordВХранилище;

КонецФункции

Получается, что макет по-любому надо сохранять в файл ворда на сервере, а потом уже передавать.
Проблема не решена. Помогите!
23 DexterMorgan
 
27.02.12
16:19
(22) Я ПИШУ ТЕБЕ ЭТО ДЛЯ ДВОИЧНЫХ ДАННЫХ
24 DexterMorgan
 
27.02.12
16:20
(22) Макет - двоичные данные - туда грузишь файл ворд
25 Erschalaim
 
27.02.12
16:22
(24) по-другому никак нельзя? Чтобы макет был ActiveDocument Ворда?
26 DexterMorgan
 
27.02.12
16:25
(25) Скажи зачем? Честно, сам не знаю, написал в (21)
27 DexterMorgan
 
27.02.12
16:26
(25) Какая разница какой у тебя макет - сам файл ворда в виде двоичных данных или твой ActiveDocument ??
28 Erschalaim
 
27.02.12
16:30
(27)
1.ActiveDocument я могу интерактивно редактировать и сохранять конфу.
2.Двоичные данные надо выгружать из макета и помнить их принадлежность.
3. Вопрос принципа, что за ерунда в (0), которая описана в документации, но не работает?
29 Erschalaim
 
27.02.12
16:41
(27) Реализовал через двоичные данные, раз по другому нельзя :( Спасибо за помощь.
30 DexterMorgan
 
27.02.12
16:44
(28) Ну да лишнее действие по выгрузке..все. по 2. давай названия ясные. Ну вообще есть идея получать на сервере макет твоего любимого активного документа сохранять во временный файл и этот файл передавать на клиент. Другое дело что тут куча проблем начиная с неустановленого ворда, ограничение прав: на комобъект, на запись файла и т.д.