Имя: Пароль:
1C
1С v8
V8 управляемые формы active document Проблемма
0 ИУБиПовиц
 
17.01.13
17:04
Здравствуйте. Имеется конфигурация на управляемых формах в клиент-серверном варианте, в ней есть некий документ, из него должен открываться вордовский файл. Сделал вот как:
&НаКлиенте
Процедура ПечатьСогласования()    // Вставить содержимое обработчика.
   ТабДокСПарам = Новый ТабличныйДокумент;
   Списокмакетов = Новый СписокЗначений;
   СсылкаНаОбъект = Объект.Ссылка;/
   
   СтруктураДанных = ВызовОбертки();

   Макет = ПолучитьИзВременногоХранилища(СтруктураДанных);    
   ОбъектВорд = Макет.Получить();

   
   // Документ из объекта и его активация
   
   Документ = ОбъектВорд.Application.Documents(1);
   Документ.Activate();
   
   //тут различный код, пока его не трогаю
   
   // Вывод документа
   
   ОбъектВорд.Application.Visible = Истина;
   ОбъектВорд.Activate();

КонецПроцедуры

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


Говорит что метод не доступен "получить". ОбъектВорд = Макет.Получить(); ну сдругой стороны это ж не макет, а двоичные данные, с чего бы там чему то быть.. как можно реализовать открытие документа ворд из двоичных данных БЕЗ созданий временных файлов, потому что непонятно какоё это пользователь, и какие папки ему будет доступны..!
1 Лефмихалыч
 
17.01.13
17:13
(0) без временных файлов - ни как. А любому пользователю доступен тэмп
2 ИУБиПовиц
 
17.01.13
18:04
ну хорошо, с временными так с временными. только один фиг не получается. Выдает вот это Отсутствует отображение для типа 'COMОбъект'.
труктураДанных = ВызовОбертки();

   ФайлВорд = ПолучитьИзВременногоХранилища(СтруктураДанных);
   ПутьКФайлуНаКлиенте = "temp.doc";    
       
   Попытка
       ОбъектВорд = Новый COMОбъект("WORD.Application");  
   Исключение
       Сообщить("Установи WORD..");
       Возврат;
   КонецПопытки;
   
   ПолноеНаименование = КаталогВременныхФайлов() + ПутьКФайлуНаКлиенте;
   
       
   Документ = ОбъектВорд.Application.Documents.Add(ПолноеНаименование);
                   
   ТаблицаПараметров // формирование таблицы в которой параметры которые нужно заменить в ворде          
   
   для каждого стр из ТаблицаПараметров цикл
         ДобавитьПараметр(стр.Имя,Стр.Значение,Документ);
   КонецЦикла;
   
   
   ФайлВорд.Записать(ПолноеНаименование);

   //// Документ из объекта и его активация
   //
   
   // запускаем приложение
   ЗапуститьПриложение(ПолноеНаименование);

Процедура ДобавитьПараметр(Имя,имяЗнч,Документ)
   Замена = Документ.Content.Find;
   попытка
       РезультатЗамены = Замена.Execute("[" + имя+ "]", , , , , , , , , ?(имяЗнч = Неопределено,"",имяЗнч), );
       пока РезультатЗамены = Истина цикл
           Замена = Документ.Content.Find;  
           РезультатЗамены = Замена.Execute("[" + имя + "]", , , , , , , , , ?(имяЗнч = Неопределено,"",имяЗнч), );
       КонецЦикла;                    
   исключение
       Сообщить("не могу вывести " +  "[" + имя + "]" +  имяЗнч);
   КонецПопытки;

КонецПроцедуры
3 ИУБиПовиц
 
17.01.13
18:08
ТО есть у меня проблемма в том, я из двоичных данных макет получил, и могу его показать, но вот изменить данные вида [Номер], содержащиеся в этом макете не получается..
4 ИУБиПовиц
 
18.01.13
11:11
Сейчас у меня получилось вот что, но есть проблемма раз открылся док, потом уже не открывается пишет что произошла исключительная ситуация при открытии, при перезапуске 1с все работет.

   СтруктураДанных = ВызовОбертки();//помещаю в хранилище    
   ФайлВорд = ПолучитьИзВременногоХранилища(СтруктураДанных);
   ПутьКФайлуНаКлиенте = "temp" + СокрЛП(ПолучитьНомер()) + ".doc";
   
   
   Попытка
       ОбъектВорд = Новый COMОбъект("WORD.Application");  
   Исключение
       Сообщить("Установи WORD..");
       Возврат;
   КонецПопытки;
   
   попытка
       ПолноеНаименование = КаталогВременныхФайлов() + ПутьКФайлуНаКлиенте;
       ФайлВорд.Записать(ПолноеНаименование);          
       Документ = ОбъектВорд.Documents.Open(ПолноеНаименование);;
       Документ.Activate();
       ТаблицаПараметров =Формированиетаблицыпараметров(СсылкаНаОбъект);
       
       

       для каждого стр из ТаблицаПараметров цикл
           //ДобавитьПараметр(стр.Имя,Стр.Значение,Документ);
           Имя = Стр.Имя;
           ИмяЗнч = Стр.Значение;
           Замена = Документ.Content.Find;
           попытка
               РезультатЗамены = Замена.Execute("[" + имя+ "]", , , , , , , , , ?(имяЗнч = Неопределено,"",имяЗнч), );
               пока РезультатЗамены = Истина цикл
                   Замена = Документ.Content.Find;  
                   РезультатЗамены = Замена.Execute("[" + имя + "]", , , , , , , , , ?(имяЗнч = Неопределено,"",имяЗнч), );
               КонецЦикла;                    
           исключение
               Сообщить("не могу вывести " +  "[" + имя + "]" +  имяЗнч);
           КонецПопытки;
           
           
       КонецЦикла;
       
       ДругоеНаим = КаталогВременныхФайлов() +"t1_" + ПутьКФайлуНаКлиенте;
       
       ОбъектВорд.Application.Visible = Истина;

       ОбъектВорд.Activate();
       
   Исключение
       ОбъектВорд = Неопределено;
       ФайлВорд = Неопределено;
       Документ = Неопределено;
       //ОбъектВорд.Application.Quit();

       Сообщить(ОписаниеОшибки());
   КонецПопытки;
   
   попытка    
       ФайлВорд = Неопределено;
       Если не ОбъектВорд = Неопределено тогда
           //ОбъектВорд.Quit();
           //ОбъектВорд = Неопределено;
       КонецЕсли;        

   Исключение
       Сообщить(ОписаниеОшибки());
   КонецПопытки;
2 + 2 = 3.9999999999999999999999999999999...