Имя: Пароль:
1C
 
Взаимодействие 1С и OpenOffice Calc
0 elister
 
20.07.09
14:46
Есть вот такой код:

//Подключение к серверу автоматизации OpenOffice
Попытка
           ServiceManager    = Новый COMОбъект("com.sun.star.ServiceManager");
       Исключение
           Предупреждение(ОписаниеОшибки() + Символы.ПС + "программа OpenOffice не установлена на данном компьютере!");
           Возврат;
       КонецПопытки;

//загрузка из файла документа OpenOffice Calc

Desktop            = ServiceManager.createInstance("com.sun.star.frame.Desktop");
   
   Свойства = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue");
   Свойства.Name = "AsTemplate";
   Свойства.Value = Истина;

   Args = Новый COMSafeArray("VT_VARIANT", 2);
   Args.SetValue(0, Свойства);
   
   Свойства1 = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue");
   Свойства1.Name = "Hidden";
   Свойства1.Value = Истина;
   
   Args.SetValue(1, Свойства1);

   ДокументOF    = Desktop.LoadComponentFromURL(ConvertToURL(ПутьДляВыгрузки), "_blank", 0, Args);

//открытие документа
Если Не (ServiceManager = Неопределено) Тогда
       Если ОткрыватьЗаявкуПередВыгрузкой Тогда
           Предупреждение("ВНИМАНИЕ: Пока открыто окно OpenOffice, письмо не будет отправлено!");
           ДокументOF.GetCurrentController().GetFrame().GetContainerWindow().SetVisible(Истина);

Пока <...проверка состояния документа...>                // Ждем пока документ будет закрыт, чтобы избежать ошибок доступа к файлу...
           КонецЦикла;
       Иначе
           ДокументOF.dispose();
           ДокументOF = Неопределено;
       КонецЕсли;
       Desktop = Неопределено; // Удаляем COM-объект
       ServiceManager = Неопределено;
   КонецЕсли;

На месте блока <...проверка состояния документа...> должен быть какой-то метод, наподобие такого:
ДокументOF.GetCurrentController().GetFrame().GetContainerWindow().GetVisible() = Истина
Но метод GetVisible() для интерфейса XWindow отсутствует. Можно ли каким-либо способом проконтролировать закрытие документа OpenOffice из 1С?
1 ТелепатБот
 
гуру
20.07.09
14:46
2 defor
 
18.08.09
16:34
Простой "деревянный" способ, проконтролировать когда будет освобожден файл.

ИмяВременногоФайла = ПолучитьИмяВременногоФайла();
           
//    Ожидаем закрытие документа
Пока Истина Цикл
   Предупреждение("Идет изменение файла", 2, "Ожидание закрытия файла...");
   Попытка
       ПереместитьФайл(ПутьДляВыгрузки, ИмяВременногоФайла);
       прервать;
   Исключение
   КонецПопытки;
КонецЦикла;