Имя: Пароль:
1C
1С v8
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
такто в ветке есть код для книги, не для базытупых