Имя: Пароль:
1C
1С v8
1С + OpenOffice
0 first_may
 
20.08.16
20:49
Добрый вечер.

Подскажите пож, как сформировать печатную форму в OpenOffice, если макет записан как двоичные данные во внешнюю печатную форму.

Создание объекта OpenOffice сделал
        Попытка
            ServiceManager = Новый COMОбъект("com.sun.star.ServiceManager");
            Reflection = ServiceManager.createInstance("com.sun.star.reflection.CoreReflection");
            Desktop = ServiceManager.createInstance("com.sun.star.frame.Desktop");
            Broadcaster = ServiceManager.createInstance("com.sun.star.frame.GlobalEventBroadcaster");
        Исключение
            Сообщить(ОписаниеОшибки(),"!");
        КонецПопытки;


Теперь надо открыть в нем шаблон и сделать замены, допустим #ДокументНомер#, на настоящее значение.

Прошу помощи.
1 Поpyчик-4
 
22.08.16
07:26
Открыть БСП и посмотреть, как сделано там.
2 first_may
 
22.08.16
09:38
(1) Открыть БСП - не совсем понял, что такое БСП?
3 Gary417
 
22.08.16
09:46
4 Поpyчик-4
 
22.08.16
10:19
(2) Что такое БСП - стаж 9 лет.
5 first_may
 
22.08.16
10:40
(4)
- век живи, век учись
- посмотрел то, что там написано.

Но возможно надо было мне сказать, что речь идет о
Управление производственным предприятием, редакция 1.2 (1.2.19.1) на 1С:Предприятие 8.1 (8.1.15.14)
6 Gary417
 
22.08.16
10:49
(5) < надо было мне сказать, что речь идет о >
хорошо хоть не о ПУБ 7.7 и не на 10 странице темы :))
7 first_may
 
22.08.16
14:12
Сам макет договора зашит как active document в саму обработку,  и в Worde нормально открывается. А для Опен Офис так не пройдет, поэтому макет занес через бинарные данные. А вот как дальше можно сделать?
8 Поpyчик-4
 
22.08.16
14:56
(7) Так же, как и в БСП или в гугле ищи.
9 first_may
 
22.08.16
15:20
(8) да я и в БСП ничего не нашел :(..
10 don_Rumata
 
22.08.16
15:29
ServiceManager = Новый COMОбъект("com.sun.star.ServiceManager");
    Desktop        = ServiceManager.createInstance("com.sun.star.frame.Desktop");    
    
    ИмяФайла=ОбработкаФайлаШаблона(ИмяФайлаШаблона);
    Если ИмяФайла = "" Тогда
        Возврат;
    КонецЕсли;              
    
    
    
//Таблица замен — таблица значений с колонками «Что» и «Чем»

Стр=ТаблицаЗамен.Добавить();
Стр.Что="/*ДатаДоговора*/";
Стр.Чем=СсылкаНаОбъект.ДатаДоговора;

    
    
    Scr = Новый COMОбъект("MSScriptControl.ScriptControl");
    Scr.Language="javascript";
    Scr.Eval("Args=new Array()");
    Args = Scr.Eval("Args");
    Scr.AddObject("ServiceManager", ServiceManager);
    
    // Откроем шаблон
    
    ТекстовыйПроцессор = Desktop.LoadComponentFromURL(ПреобразоватьВURL(ИмяФайла), "_blank", 0, Args);
    
    // Заменяем ключевые поля на нужные значения

                            
    Replace = ТекстовыйПроцессор.CreateReplaceDescriptor();
    
    Для Каждого Стр из ТаблицаЗамен Цикл        
        Replace.SearchString  = Стр.Что;
        Replace.ReplaceString = Стр.Чем;        
        ТекстовыйПроцессор.ReplaceAll(Replace);
        
    КонецЦикла;
11 first_may
 
22.08.16
16:33
(10) спасибо...
ПреобразоватьВURL(ИмяФайла) - путь к файлу преобразуется, что бы опен офис понял?
12 don_Rumata
 
22.08.16
16:35
(11) ага, именно
// Функция преобразует Windows имя файла в URL OpenOffice                      
Функция ПреобразоватьВURL(ИмяФайла)  
    
    Возврат "file:///" + СтрЗаменить(ИмяФайла, "\", "/");
    
КонецФункции
13 first_may
 
22.08.16
16:38
(12) ясно, а если макет занес через бинарные данные, то я сначала сохраняю его во временном каталоге например, а затем читаю и заменяю в нем.

спасибо.
14 first_may
 
22.08.16
17:04
(12) а как бороться:

{ВнешняяОбработка.ПечатьДоговораНаОборудование_Word(804)}: Ошибка при вызове метода контекста (LoadComponentFromURL): Произошла исключительная ситуация ([automation bridge] ): com.sun.star.lang.IllegalArgumentException: Unsupported URL <file://C:/Users/TS_BRK_Zharikov/AppData/Local/Temp/2/v8_1402_f6.odt>: "type detection failed"
        ТекстовыйПроцессор = Desktop.LoadComponentFromURL(ПреобразоватьВURL(ИмяВременногоФайла), "_blank", 0, Args);
по причине:
Произошла исключительная ситуация ([automation bridge] ): com.sun.star.lang.IllegalArgumentException: Unsupported URL <file://C:/Users/TS_BRK_Zharikov/AppData/Local/Temp/2/v8_1402_f6.odt>: "type detection failed"




я сделал
        ИмяВременногоФайла = ПолучитьИмяВременногоФайла();
        ИмяВременногоФайла = СтрЗаменить(ИмяВременногоФайла, "tmp", "odt");
        
        Макет = ПолучитьМакет("Макет");
        Макет.Записать(ИмяВременногоФайла);

а затем
ТекстовыйПроцессор = Desktop.LoadComponentFromURL(ПреобразоватьВURL(ИмяВременногоФайла), "_blank", 0, Args);

и вот ошибка
15 Йохохо
 
22.08.16
17:46
(14) это хихи:ИмяВременногоФайла = ПолучитьИмяВременногоФайла();
ИмяВременногоФайла = СтрЗаменить(ИмяВременногоФайла, "tmp", "odt");
ктрл+F1 на ПолучитьИмяВременногоФайла нажмите
16 first_may
 
23.08.16
09:33
(15) прочитал, что можно сделать вот так
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("odt");

но ошибка от этого все равно не ушла, то есть ругается на
ТекстовыйПроцессор = Desktop.LoadComponentFromURL(ПреобразоватьВURL(ИмяВременногоФайла), "_blank", 0, Args);

хотя ПреобразоватьВURL(ИмяВременногоФайла) возвращает

"file://C:/Users/Ivanov/AppData/Local/Temp/2/v8_D817_7d.odt"
17 don_Rumata
 
23.08.16
09:50
(16) может че-то с правами не так? не временный файл читается?
18 first_may
 
23.08.16
10:47
(17) с правами все нормально, сделал так

функция ПреобразоватьВURL(FileName)
    __ = СтрЗаменить(FileName, " ", "%20");
    __ = СтрЗаменить(__, "\", "/");
    
    Возврат "file:/" + "/localhost/" + __;
КонецФункции


В итоге отчет сформировался как надо. Вроде пока все. Спасибо всем!!!
19 don_Rumata
 
23.08.16
11:05
(18) "Однако!"(с) :)
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.