|
1С + LibreOffice | ☑ | ||
---|---|---|---|---|
0
Данияр
24.12.17
✎
18:57
|
"Управление торговлей", редакция 10.3 (10.3.12.3)
1С:Предприятие 8.3 (8.3.10.2466) Коллеги вопрос, загружаю из LibreOffice в 1с, после загрузки заркывает все открытое LibreOffice. как сделать чтобы закрывал только то что прочитал в базу |
|||
1
nordbox
24.12.17
✎
19:10
|
(0) а чо ты туда читаешь?
|
|||
2
nordbox
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; дальше хочу просто заруть этот файд а не все что открыто на компе |
|||
4
nordbox
24.12.17
✎
19:33
|
А зачем ты эти функции тут показываешь??
ну прочитал, заменил там что тебе надо а дальше то что?? где он закрывает? |
|||
5
nordbox
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
|
|||
8
nordbox
24.12.17
✎
19:46
|
Ну тогда смотри функции другие, у меня справочника нет
Смотри внимательно Book.Close(Истина); //Согласен ) Desktop.Terminate(); //????? |
|||
9
arsik
гуру
24.12.17
✎
19:48
|
(7) Через 1С можно читать таблицы без всякого офиса.
|
|||
10
nordbox
24.12.17
✎
19:49
|
(9) Ты не понимаешь, это из серии "МНЕ ТАК НАДО" )
|
|||
11
Данияр
24.12.17
✎
19:50
|
(10) если есть чем помочь, буду благодарен,
а просто писать не стоит, другим потом много перечитывать |
|||
12
Данияр
24.12.17
✎
19:51
|
(8) Book.Close(Истина);//Согласен ) не зарывает
Desktop.Terminate(); закрывает |
|||
13
nordbox
24.12.17
✎
19:55
|
(12) Так закрывает Книгу (Book) с чего ты взял что он ее не закрыл???
1С для себя закрыл, а не для тебя то что ты там у себя на компе делаешь, для 1с глубоко побаробану. |
|||
14
nordbox
24.12.17
✎
20:03
|
+13
// Инициализация дочернего объекта Desktop. Desktop = ServiceManager.CreateInstance("com.sun.star.frame.Desktop"); Ну и???? |
|||
15
nordbox
24.12.17
✎
20:04
|
Ты его убиваешь, причем в особо жестокой форме
|
|||
16
nordbox
24.12.17
✎
20:06
|
Ты его запускаешь
ServiceManager = ПолучитьLOServiceManager(); а потом грохнул ВЕСЬ сервис терминатор блин |
|||
17
Данияр
24.12.17
✎
20:09
|
(13) в диспетчере висит
|
|||
18
nordbox
24.12.17
✎
20:10
|
(17) и чо??
ты только этим руководствуешься?? это еще не критерий ) |
|||
19
Данияр
24.12.17
✎
20:13
|
(18) а что критерий тогда?
|
|||
20
nordbox
24.12.17
✎
20:13
|
открой хром или вообще пофиг чего, наоткрывай окон побольше, а потом в диспетчере сделай завершить задачу и посмотри что будет.
|
|||
21
Данияр
24.12.17
✎
20:16
|
(20) по моему ты бред пишешь)
при повторном считывании этой же книги, он пишет что он уже занят, и это по твоему 1с сама у себя зарула и пофиг чо там на компе? |
|||
22
nordbox
24.12.17
✎
20:20
|
(21) Я вот тебе еще раз говорю что у меня справочника под рукой нет и он мне нах.. не нужен
а вот в екселе делается Excel.Quit(); |
|||
23
h-sp
24.12.17
✎
20:21
|
(21) копируй во временный файл, после этого уже запускай чтение в 1с.
|
|||
24
nordbox
24.12.17
✎
20:23
|
(23) Да неее, это ему не поможет, он убивает все
Desktop.Terminate(); |
|||
25
nordbox
24.12.17
✎
20:24
|
(21)сделай
Desktop.Quit(); может проглотит )) |
|||
26
nordbox
24.12.17
✎
20:31
|
(21) Ты вообще про дискриптор открытого файла слышал???
|
|||
27
nordbox
24.12.17
✎
20:33
|
+26 я тебе больше еще скажу, даже если на экране усе зарыто, то это не значит что виндовоз или другое приложение уже его освободило.
|
|||
28
Данияр
24.12.17
✎
20:33
|
(25) висит в диспетчере все равно
|
|||
29
nordbox
24.12.17
✎
20:43
|
Ну попробуй
Desktop.Ехiт(); ну или еще чо там у него есть, я то не знаю, а с этим никогда не работал, ОпенОфис, нормально себя ведет, и таких парнографическийх вариантов как отрыть кучу файлов екселя, и потом в 1с что то пытаться читать.... ты уж определись что тебе надо, грузить из екселя или работать в нем. Нельзя есть бутерброд одной рукой, а другой ... короче я спать, у меня бортовое время 22:40 |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |