Вход | Регистрация



1С + LibreOffice

1С + LibreOffice
Я
   Данияр
 
24.12.17 - 18:57
"Управление торговлей", редакция 10.3 (10.3.12.3) 
1С:Предприятие 8.3 (8.3.10.2466)


Коллеги вопрос, загружаю из LibreOffice в 1с, после загрузки
заркывает все открытое LibreOffice.

как сделать чтобы закрывал только то что прочитал в базу
 
 
   nordbox
 
1 - 24.12.17 - 19:10
(0) а чо ты туда читаешь?
   nordbox
 
2 - 24.12.17 - 19:10
и как?
   Данияр
 
3 - 24.12.17 - 19:25
(2)

                
Лист = ОбщийМодульБителКлиент.ПрочитатьExcel(ФайлДляЗагрузки, НомерЛиста, ServiceManager, Desktop, Book);

//LibreOffice

Функция ПрочитатьExcel(ФайлДляЗагрузки, НомерЛиста, ServiceManager, Desktop, Book)Экспорт 
    
    Попытка
        
        ServiceManager = ПолучитьLOServiceManager();
        Desktop = ПолучитьLODesktop(ServiceManager);
        Book = ПолучитьLOBook(ServiceManager, Desktop, ФайлДляЗагрузки);
        ЛистName = ПолучитьСписокЛистов(ФайлДляЗагрузки);
        
        Sheet = ПолучитьLOSheet(Book, ФайлДляЗагрузки, ЛистName, НомерЛиста);
        
    Исключение
        
        Сообщить(ОписаниеОшибки());
        
    КонецПопытки;
    
    Возврат Sheet//лист

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

Функция ПолучитьLOServiceManager()
    
    Попытка
        // Инициализация основного СОМОбъекта типа com.sun.star.ServiceManager (LibreOffice/OpenOffice).            

        ServiceManager = Новый COMОбъект("com.sun.star.ServiceManager");
    Исключение
        ServiceManager = Неопределено;
    КонецПопытки;
    
    Возврат ServiceManager;
    
КонецФункции

Функция ПолучитьLODesktop(ServiceManager)
    
    Попытка
        // Инициализация дочернего объекта Desktop.

        Desktop = ServiceManager.CreateInstance("com.sun.star.frame.Desktop");
    Исключение
        Desktop = Неопределено;
    КонецПопытки;
    
    Возврат Desktop;
    
КонецФункции

Функция ПолучитьLOBook(ServiceManager, Desktop, Знач ФайлEXCEL)
    
    Попытка
        // Объявление свойств и аргументов.

        Properties1 = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue");
        Properties1.Name  = "AsFile";            // Свойство "КАК ФАЙЛ", альтернатива "AsTemplate" - "КАК ШАБЛОН".

        Properties1.Value = Истина;
        
        Properties2 = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue");
        Properties2.Name  = "Hidden";            // Запускать скрытно. Реализовано в LibreOffice 3.6.

        Properties2.Value = Истина;
        
        Arguments = Новый COMSafeArray("VT_VARIANT", 2);
        Arguments.SetValue(0, Properties1);
        Arguments.SetValue(1, Properties2);
        
        // Дочерний объект Desktop-а: Книга EXCEL.

        Book = Desktop.LoadComponentFromURL(ConvertToURL(ФайлEXCEL), "_blank", 0, Arguments);
    Исключение
        Book = Неопределено;
    КонецПопытки;
    
    Возврат Book;
    
КонецФункции    

Функция ПолучитьLOSheet(Book, Знач ФайлEXCEL, Знач ФайлИмяЛиста, Знач ФайлНомерЛиста)
    
    // Дочерний объект Book-а: Листы EXCEL.

    Sheets = Book.getSheets(); 
    ВсегоЛистов = Sheets.getCount();

    // Инициализация дочернего объекта Книги типа Лист EXCEL.

    Если Лев(ФайлИмяЛиста, 1) = "'" И Прав(ФайлИмяЛиста, 1) = "'" Тогда
        ФайлИмяЛиста = УдалитьКавычки(ФайлИмяЛиста, "'");
    КонецЕсли;
    
    Если Прав(ФайлИмяЛиста, 1) = "$" Тогда
        УдалитьПоследнийСимволВСтроке(ФайлИмяЛиста, 1);
    КонецЕсли;
    
    Попытка
        Sheet = Sheets.getByName(ФайлИмяЛиста); 
    Исключение
        Sheet = Неопределено;
        Сообщить("Некорректное имя листа: " + ФайлИмяЛиста + ".");
    КонецПопытки;
    
    Возврат Sheet;
    
КонецФункции

функция ConvertToURL(ФайлEXCEL)
    
    ФайлEXCEL = СтрЗаменить(ФайлEXCEL," ","%20");
    ФайлEXCEL = СтрЗаменить(ФайлEXCEL,"\","/");
    
    Возврат "file:/" + "/localhost/" + ФайлEXCEL;
    
Конецфункции

Функция УдалитьКавычки(Знач Строка, Кавычка = """")
    
    Пока Лев(Строка, 1) = Кавычка Цикл
        Строка = Сред(Строка, 2); 
    КонецЦикла; 
    
    Пока Прав(Строка, 1) = Кавычка Цикл
        Строка = Лев(Строка, СтрДлина(Строка) - 1);
    КонецЦикла;
    
    Возврат Строка;
    
КонецФункции 

Процедура УдалитьПоследнийСимволВСтроке(Текст, ЧислоСимволов)
    
    Текст = Лев(Текст, СтрДлина(Текст) - ЧислоСимволов);
    
КонецПроцедуры 

Функция ПолучитьСписокЛистов(Знач ФайлEXCEL)
    
    ТабличныйДокумент = Новый ТабличныйДокумент;
    
    Попытка
        // Выполняется долго на больших файлах.

        ТабличныйДокумент.Прочитать(ФайлEXCEL);
    Исключение
        Сообщить(ОписаниеОшибки(), СтатусСообщения.Внимание);
        Возврат Неопределено;
    КонецПопытки;
    
    Возврат ТабличныйДокумент.Области[0].Имя;
    
КонецФункции
//LibreOffice


            //Определяем число строк и колонок

            oCell = Лист.GetCellbyPosition(0, 0);
            oCursor = Лист.createCursorByRange(oCell);
            oCursor.GotoEndOfUsedArea(Истина);
            aAddress = oCursor.RangeAddress;
            ВсегоКолонок = aAddress.EndColumn;
            ВсегоСтрок = aAddress.EndRow;

дальше хочу просто заруть этот файд а не все что открыто на компе
   nordbox
 
4 - 24.12.17 - 19:33
А зачем ты эти функции тут показываешь??
ну прочитал, заменил там что тебе надо
а дальше то что??
где он закрывает?
   nordbox
 
5 - 24.12.17 - 19:36
Вот, развлекайся
http://catalog.mista.ru/public/398279/
   Данияр
 
6 - 24.12.17 - 19:37
(4)     
Book.Close(Истина);
Desktop.Terminate();
Desktop = Неопределено;
ServiceManager = Неопределено;
   Данияр
 
7 - 24.12.17 - 19:37
(5) читай внимательнее у меня LibreOffice
   nordbox
 
8 - 24.12.17 - 19:46
Ну тогда смотри функции другие, у меня справочника нет
Смотри внимательно
Book.Close(Истина);//Согласен )

  
Desktop.Terminate();//?????
   arsik
 
9 - 24.12.17 - 19:48
(7) Через 1С можно читать таблицы без всякого офиса.
   nordbox
 
10 - 24.12.17 - 19:49
(9) Ты не понимаешь, это из серии "МНЕ ТАК НАДО" )
 
 Рекламное место пустует
   Данияр
 
11 - 24.12.17 - 19:50
(10) если есть чем помочь, буду благодарен, 

а просто писать не стоит, другим потом много перечитывать
   Данияр
 
12 - 24.12.17 - 19:51
(8) Book.Close(Истина)//Согласен ) не зарывает


Desktop.Terminate(); закрывает
   nordbox
 
13 - 24.12.17 - 19:55
(12) Так закрывает Книгу (Book)  с чего ты взял что он ее не закрыл???
1С для себя закрыл, а не для тебя
то что ты там у себя на компе делаешь, для 1с глубоко побаробану.
   nordbox
 
14 - 24.12.17 - 20:03
+13
// Инициализация дочернего объекта Desktop.


        Desktop = ServiceManager.CreateInstance("com.sun.star.frame.Desktop");
Ну и????
   nordbox
 
15 - 24.12.17 - 20:04
Ты его убиваешь, причем в особо жестокой форме
   nordbox
 
16 - 24.12.17 - 20:06
Ты его запускаешь
ServiceManager = ПолучитьLOServiceManager();
а потом грохнул ВЕСЬ сервис терминатор блин
   Данияр
 
17 - 24.12.17 - 20:09
(13) в диспетчере висит
   nordbox
 
18 - 24.12.17 - 20:10
(17) и чо??
ты только этим руководствуешься??
это еще не критерий )
   Данияр
 
19 - 24.12.17 - 20:13
(18) а что критерий тогда?
   nordbox
 
20 - 24.12.17 - 20:13
открой хром или вообще пофиг чего, наоткрывай окон побольше, а потом в диспетчере сделай завершить задачу и посмотри что будет.
   Данияр
 
21 - 24.12.17 - 20:16
(20) по моему ты бред пишешь)

при повторном считывании этой же книги, он пишет что он уже занят, и это по твоему 1с сама у себя зарула и пофиг чо там на компе?
   nordbox
 
22 - 24.12.17 - 20:20
(21) Я вот тебе еще раз говорю что у меня справочника под рукой нет и он мне нах.. не нужен
а вот в екселе делается
Excel.Quit();
   h-sp
 
23 - 24.12.17 - 20:21
(21) копируй во временный файл, после этого уже запускай чтение в 1с.
   nordbox
 
24 - 24.12.17 - 20:23
(23) Да неее, это ему не поможет, он убивает все
Desktop.Terminate();
   nordbox
 
25 - 24.12.17 - 20:24
(21)сделай
Desktop.Quit();
может проглотит ))
   nordbox
 
26 - 24.12.17 - 20:31
(21) Ты вообще про дискриптор открытого файла слышал???
   nordbox
 
27 - 24.12.17 - 20:33
+26 я тебе больше еще скажу, даже если на экране усе зарыто, то это не значит что виндовоз или другое приложение уже  его освободило.
   Данияр
 
28 - 24.12.17 - 20:33
(25) висит в диспетчере все равно
   nordbox
 
29 - 24.12.17 - 20:43
Ну попробуй 
Desktop.Ехiт();
ну или еще чо там у него есть,  
я то не знаю, а с этим никогда не работал, ОпенОфис, нормально себя ведет, и таких парнографическийх вариантов как отрыть кучу файлов екселя, и потом в 1с что то пытаться читать....
ты уж определись что тебе надо, грузить из екселя или работать в нем.
Нельзя есть бутерброд одной рукой, а другой ...
короче я спать, у меня бортовое время 22:40


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует