|
OpenOffice + 1C | ☑ | ||
---|---|---|---|---|
0
Demetres
31.05.12
✎
22:07
|
Подскажите как загрузить из ods в базу 1С
|
|||
1
Demetres
31.05.12
✎
22:07
|
нашел такой код на просторах интернета
Попытка ServiceManager = Новый ComОбъект("com.sun.star.ServiceManager"); МетодЗагрузки = "ОО"; Исключение Сообщить("Отсутствует приложение для загрузки файла"); КонецПопытки; Если МетодЗагрузки = "ОО" Тогда scr = Новый ComОбъект("MSScriptControl.ScriptControl"); scr.language = "javascript"; scr.eval("MassivParametrov = new Array()"); MassivParametrov = scr.eval("MassivParametrov"); scr.AddObject("OpenOffice", ServiceManager); scr.eval("MassivParametrov[0]=OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')"); scr.eval("MassivParametrov[0].Name='Hidden'"); scr.eval("MassivParametrov[0].Value=true"); Desktop = ServiceManager.CreateInstance("com.sun.star.frame.Desktop"); URL = ConvertToURL(Путь); Doc = Desktop.LoadComponentFromURL(URL, "_blank", 0, MassivParametrov); Doc.lockControllers(); Doc.addActionLock(); Sheets = Doc.GetSheets();; Документ = Sheets.GetByIndex(0); |
|||
2
Demetres
31.05.12
✎
22:08
|
падает на Doc = Desktop.LoadComponentFromURL(URL, "_blank", 0, MassivParametrov);
пишет что путь не правильный URL Произошла исключительная ситуация ([automation bridge] ): com.sun.star.lang.IllegalArgumentException: URL seems to be an unsupported one. |
|||
3
Demetres
31.05.12
✎
22:09
|
кто-нибудь встречался с подобной проблемой
|
|||
4
ProProg
31.05.12
✎
22:09
|
не тупи на инфостарте два десятка готовых разработок.
|
|||
5
Demetres
31.05.12
✎
22:13
|
(4) там только один раз можно скачать за день
|
|||
6
ProProg
31.05.12
✎
22:13
|
купи абонимент.
|
|||
7
Demetres
31.05.12
✎
22:19
|
(6) блин нет сейчас возможности купить, а код надо сейчас писать, если можешь помоги нет нечего тогда в теме серить
|
|||
8
Demetres
31.05.12
✎
22:26
|
up
|
|||
9
Demetres
31.05.12
✎
22:38
|
вверх
|
|||
10
DjSpike
31.05.12
✎
22:52
|
Как вариант, ods сохранить в xls и загрузить все с помощью компоненты Yoksel. Примеры можешь посмотреть здесь http://yoksel.net.ru/HomePage
|
|||
11
Suhoi
31.05.12
✎
23:28
|
Если до завтра терпит, то завтра на работу приду выложу код работы с опенофисом... Я тут уже выкладывал, так быстро найти не мог, наверно эту ветку уже удалили...
|
|||
12
ProProg
31.05.12
✎
23:29
|
Открою страшную тайну!!! никакого кода не нужно!!!! ВОобще!
|
|||
13
smaharbA
31.05.12
✎
23:29
|
урл нужен верен
(10) не тупи, ибо ведаешь что нет знатнее меня |
|||
14
Suhoi
31.05.12
✎
23:30
|
+(11)по моему мнению, проще способа нет ...
|
|||
15
smaharbA
31.05.12
✎
23:30
|
любой код 1с + ооо ничего не стоит
|
|||
16
Suhoi
31.05.12
✎
23:31
|
(12) покажи свое кунг-фу связи 1с с опенофисом без кода :-)
|
|||
17
ProProg
31.05.12
✎
23:31
|
1) берешь табличное поле 1С
2) открываешь свой файл в опенофисе 3) копи паст всю таблицу 4) паст в табличное поле в 1С 5) ВСЕ - бери его считывай - чо хоч делай!!! будет в сто раз быстрее чем будешь 1Сникой считывать через ком поячеисто всю фигню Ибо методы табличного поля и когда он ов 1С - будет в сто раз быстрее все считано |
|||
18
DjSpike
31.05.12
✎
23:32
|
(13) ну почему же сразу "не тупи".
Я предложил варинат. И между прочим вариант с примерами... Я в курсе что ты предлагаешь ods разбирать как простой текстовый файл (или xml не помню уже)... |
|||
21
Suhoi
31.05.12
✎
23:33
|
(17) :-))))))) Копипаст таблицы с данными в пару тысяч строк :-)))
|
|||
22
smaharbA
31.05.12
✎
23:33
|
(18) ты не в курсе - весь код 1с + ооо, абсолютно только мной сделан и все, и ты вкурсе
|
|||
23
Лефмихалыч
31.05.12
✎
23:33
|
(17) а если надо ватоматом грузить таблицы пачками, нанять обезьяну с чорным поясом по копипасте?
|
|||
26
smaharbA
31.05.12
✎
23:34
|
Маня дава
|
|||
27
ProProg
31.05.12
✎
23:34
|
(21) пары тщ строк?? я 65000 строк копировал - 30 секунд!!!
|
|||
28
smaharbA
31.05.12
✎
23:34
|
щик скотча забъемся ?
|
|||
29
ProProg
31.05.12
✎
23:35
|
замечательно все работает. даже супер.
|
|||
32
Suhoi
31.05.12
✎
23:38
|
(27) так это же нужно открыть файл, а если их несколько, ... я не спорю, так конечно можно, но и финт ушами можно сделать... :-)
|
|||
34
DjSpike
31.05.12
✎
23:39
|
Abrahams, между прочим, вариант который я предлагаю это тот единственный вариант который работает в linux (1c запущена через wine@etersoft).
|
|||
35
smaharbA
31.05.12
✎
23:41
|
по мелочи пойдет ?
[1C} //******************************************* Функция ПолучитьОбертку() ХТМЛ = СоздатьОбъект("htmlfile"); ХТМЛ.Open("text/html"); //<-- Подготовим нужные методы ХТМЛ.Write("<script> |var ХТМЛ; |ПолучитьЗначение=function(x,y){return x.constructor == Array ? x[y] : x}; |УстановитьЗначение=function(x,y,z){x[y]=z}; |РазмерМассива=function(x){return x.length}; |УстановитьБулево=function(x){x.Value=Boolean(x.Value)}; |Массив=function(x){return new Array(x)}; |</script>"); Док=ХТМЛ.documentElement.document; // Внедрение объекта Скрипта в самого себя, для сохранности контекста Док.script.ХТМЛ=ХТМЛ; // Все подготовке --> Возврат Док.script; КонецФункции // ПолучитьОбертку(Это) Функция ОпенОфис(Файл="") Это=ПолучитьОбертку(); //УРЛ="file:///"+Это.encodeURI(СтрЗаменить(Файл,"\","/")); СервисМанагер=СоздатьОбъект("com.sun.star.ServiceManager"); Обновлялка=СервисМанагер.createInstance("com.sun.star.reflection.CoreReflection"); Проводник=СервисМанагер.createInstance("com.sun.star.ucb.FileContentProvider"); УРЛ=Проводник.getFileURLFromSystemPath("",Файл); Сообщить(УРЛ); Массив=Это.Массив(0); Параметр=Это.Массив(0); Для Сч=0 По 1 Цикл Обновлялка.forName("com.sun.star.beans.PropertyValue").createObject(Параметр); Это.УстановитьЗначение(Массив,Сч,Это.ПолучитьЗначение(Параметр,0)); КонецЦикла; Параметр=Это.ПолучитьЗначение(Массив,0); Параметр.Name="Hidden"; Параметр.Value=0;//Если 0 или любое пустое значение то Ложь, иначе Истина Это.УстановитьБулево(Параметр); Параметр=Это.ПолучитьЗначение(Массив,1); Параметр.Name="Password"; Параметр.Value="123"; Для Сч=0 По Это.РазмерМассива(Массив)-1 Цикл Сообщить(Это.ПолучитьЗначение(Массив,Сч).Name); Сообщить(Это.ПолучитьЗначение(Массив,Сч).Value); КонецЦикла; Десктоп = СервисМанагер.createInstance("com.sun.star.frame.Desktop"); //Док = Десктоп.LoadComponentFromURL("private:factory/scalc", "_blank", 0, Массив ); Док = Десктоп.LoadComponentFromURL(УРЛ, "_blank", 0, Массив ); Листы=Док.getSheets(); Лист=Листы.getByIndex(0); Курсор=Лист.createCursor(); Курсор.gotoStartOfUsedArea(0); Курсор.gotoEndOfUsedArea(-1); Адреса=Курсор.getRangeAddress(); Диапазон=Лист.getCellRangeByPosition(Адреса.StartColumn,Адреса.StartRow,Адреса.EndColumn,Адреса.EndRow); Поиск=Диапазон.createSearchDescriptor(); Поиск.SearchRegularExpression = -1; Поиск.SearchString = ".+"; Рез=Диапазон.findAll(Поиск); Всего=Рез.getCount(); Начало=Рез.getByIndex(0).getRangeAddress(); Конец=Рез.getByIndex(Всего-1).getRangeAddress(); ДиапазонДанных=Диапазон.getSpreadsheet().getCellRangeByPosition(Начало.StartColumn, Начало.StartRow,Конец.EndColumn,Конец.EndRow); Для С=1 По ДиапазонДанных.getRows().getCount() Цикл Стр=""; Для К=1 По ДиапазонДанных.getColumns().getCount() Цикл Стр=Стр+"; "+ДиапазонДанных.getCellByPosition(К-1,С-1).getText().String(); КонецЦикла; Сообщить(Стр); КонецЦикла; Массив=Это.Массив(0); Обновлялка.forName("com.sun.star.beans.PropertyValue").createObject(Параметр); Это.УстановитьЗначение(Массив,0,Это.ПолучитьЗначение(Параметр,0)); Параметр.Name="Wait"; Параметр.Value=-1;//Если 0 или любое пустое значение то Ложь, иначе Истина Это.УстановитьБулево(Параметр); Для Сч=0 По Это.РазмерМассива(Массив)-1 Цикл Сообщить(Это.ПолучитьЗначение(Массив,Сч).Name); Сообщить(Это.ПолучитьЗначение(Массив,Сч).Value); КонецЦикла; Док.Print(Массив); //Предупреждение("Печать ?"); Док.Close(-1); //Десктоп.Terminate(); КонецФункции //******************************************* Процедура Сформировать() Перем Имя,Путь; Если ФС.ВыбратьФайл(0,Имя,Путь,"","Файлы офиса|*.ods;*.xls;*.odt;*.doc","*")=0 Тогда Возврат; КонецЕсли; ОпенОфис(Путь+Имя); КонецПроцедуры // |
|||
36
ProProg
31.05.12
✎
23:43
|
(32) а ты хоть раз видел чтобы человек получив файл не открыл его? из чего следует что в 99.99 процентах вероятности открытие файла - чисто механически происходит всегда.
|
|||
37
DjSpike
31.05.12
✎
23:44
|
(35) Сомневаюсь что это код будет работать в 1с запщенной через wine
СервисМанагер=СоздатьОбъект("com.sun.star.ServiceManager"); Обновлялка=СервисМанагер.createInstance("com.sun.star.reflection.CoreReflection"); Проводник=СервисМанагер.createInstance("com.sun.star.ucb.FileContentProvider"); |
|||
38
Suhoi
31.05.12
✎
23:44
|
(34) на самом деле я как раз его тоже предложить и хотел. Простой, но работает на раз...
а в коде (35) что много буков :-))) у меня код попроще получается... |
|||
39
ProProg
31.05.12
✎
23:45
|
(36) ибо любой манагер прежде всег ов любом случае открывает файл и без открытия никак даже не настроит в 1С ни колонки ни все остальное! и будет дергаться между окнами чтобы задать какую строку, задать все колокни где что находится и тд и тп.
|
|||
40
smaharbA
31.05.12
✎
23:45
|
(34) ты знаешь, что не единственный, только тогда ты не смог вкурить
в линуксе с 1с под вайн вполне работает ООО нативный |
|||
41
smaharbA
31.05.12
✎
23:46
|
могу на пальцах (с кодом) пояснить
|
|||
42
Лефмихалыч
31.05.12
✎
23:46
|
(36) а ты хоть раз видел, чтобы файл получал не человек, а сервер?
|
|||
43
smaharbA
31.05.12
✎
23:47
|
Для близира
@echo off set python=%programfiles%\OpenOffice.org 3\Basis\program\python-core-2.6.1\bin\python.exe set pythonooo=%programfiles%\OpenOffice.org 3\program\python.exe for /f %%i in ('call "%pythonooo%" -c "import os; print '\n'.join(os.environ.keys())"') do ( for /f "delims=" %%a in ('call "%pythonooo%" -c "import os; print os.environ['%%~i']"') do ( set "%%~i=%%~a" ) ) set port=2002 set soffice=%programfiles%\OpenOffice.org 3\program\soffice.exe start "" /min "%soffice%" "-accept=socket,host=localhost,port=%port%;urp;" -writer :next_netstat ping -n 1 127.0.0.1 > nul netstat -an -p tcp | findstr "LIST" | findstr /r /c:":%port%[\t ]" 2>nul || goto next_netstat ( echo import uno echo local = uno.getComponentContext^^^(^^^) echo res = local.ServiceManager.createInstanceWithContext^^^("com.sun.star.bridge.UnoUrlResolver", local^^^) echo ctx = res.resolve^^^("uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext"^^^) echo sm = ctx.ServiceManager echo desktop = sm.createInstanceWithContext^^^("com.sun.star.frame.Desktop", ctx^^^) echo a = [] echo doc = desktop.getCurrentComponent^^^(^^^) echo p = uno.createUnoStruct^("com.sun.star.beans.PropertyValue"^^^) echo a.append^^^(p^^^) echo a.append^^^(p^^^) echo a[0].Name = "Pages" echo a[1].Name = "Wait" echo a[1].Value = True echo uno.invoke^^^(doc,'print', ^^^(tuple^^^(a^^^),^^^)^^^) ) | "%python%" - |
|||
44
smaharbA
31.05.12
✎
23:48
|
оно казаоль бы вин не доглядевшему
|
|||
45
DjSpike
31.05.12
✎
23:48
|
(41) Пока не увиже собственными глазами не поверю. Пришли обработку рабочую которая сможет открыть xls файл... Почтовый ящик в профиле указан.
|
|||
46
Suhoi
31.05.12
✎
23:49
|
(36) да конечно открывают, но посмотреть беглым взглядом или распечатать, но заставить буха копипастнуть таблицу в 1с - у нас такое не пройдет...
(39) вот именно, будет дергаться между окнами, а так открыл путь откуда файл нужно загрузить, выбрал филе и все загрузилось само со всеми колонками и т.п. |
|||
47
smaharbA
31.05.12
✎
23:49
|
(45) см (43)
и вроде бы вин |
|||
48
ProProg
31.05.12
✎
23:50
|
(42) какая разница что его получает. если речь идет об автоматической загрузке полностью - когда 1ска из каталога или из почты собирает файлы и их грузит - очень немногие фирмы работают. А в большинстве на 90 процентов речь скорее всего идет о том что есть примитивная работа - что то человеку присылают на почту. Он открывает, на фирме юзается ОПЕНОФИС а не майрософт и надо написать загрузку эих любых файлов в 1С.
Я думаю что как раз о втором и идет речь. |
|||
50
DjSpike
31.05.12
✎
23:51
|
(47) ни фига не понял, ты предлагаешь под wine поставить еще и openoffice???
|
|||
51
ProProg
31.05.12
✎
23:52
|
(46) что легче научить копипаст делать или заставлять буха туда сюда дергать окна и настраивать строки, колонку и прочую шнягу.
Еще не забываем чт ов файле может быть намного сложнее структуруа - когда ячекий есть объединенные - куча всякой херни. ТОРГ-12 все видели в эскеле? это же полный пипец - пока там бух отредактирует все колонки - пройдет вечность. |
|||
52
smaharbA
31.05.12
✎
23:52
|
(50) ты и тогда не понял - все абсолютно нативно
|
|||
53
smaharbA
31.05.12
✎
23:53
|
и все абсолютно штатно как для адинес, так и для ооо/ло
|
|||
54
smaharbA
31.05.12
✎
23:53
|
и никаких ооо под вайном
|
|||
55
smaharbA
31.05.12
✎
23:54
|
+ код не надо пытаться читать и излагать - нужно курить
|
|||
56
smaharbA
31.05.12
✎
23:55
|
++ абсолютно также как было с открытием работы 1с + ооо
|
|||
60
andrewks
модератор
01.06.12
✎
00:00
|
заканчиваем меряние выступающими органами
|
|||
63
ProProg
01.06.12
✎
00:04
|
(0) берешь обработку с ИТС загрузка табличных документов.
Вставляешь в табличное поле расположенное там свою таблицу из опенофиса. Все. Остальное все штатно настраиваешь - загружаешь спокойно. |
|||
64
smaharbA
01.06.12
✎
00:05
|
такто в ветке есть код для книги, не для базытупых
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |