Summary: | не работает выгрузка из 1с в OpenOffice | ||
---|---|---|---|
Product: | WINE@Etersoft | Reporter: | Shestakov Dmitriy <mid> |
Component: | Взаимодействие с Office | Assignee: | Константин Кондратюк <kondratyuk> |
Status: | CLOSED FIXED | QA Contact: | Svetlana Zhukova <svzhu> |
Severity: | normal | ||
Priority: | P2 | CC: | baraka, kondratyuk, night, svzhu |
Version: | 2.0 | ||
Target Milestone: | --- | ||
Hardware: | PC | ||
OS: | All | ||
Whiteboard: | |||
Заявки RT: | 23134 | Связано с: | 8365 |
Дата напоминания: | |||
Attachments: |
простой тест
лог по ole |
Description
Shestakov Dmitriy
2012-02-27 17:36:31 MSK
eterhack bottle 1c82/8241 2.0.0-eter2.18/8 Установила ОО, calc запускается,работает. При выполнении обработки в консоли: Usually, you can find it in the winbind package of your distribution. fixme:file:MoveFileWithProgressW MOVEFILE_WRITE_THROUGH unimplemented err:ole:CoInitializeEx Attempt to change threading model of this apartment from apartment threaded to multi-threaded err:ole:marshal_object object doesn't expose interface {00000126-0000-0000-c000-000000000046}, failing with error 0x80004002 err:ole:ClientIdentity_QueryMultipleInterfaces IRemUnknown_RemQueryInterface failed with error 0x80004002 -\\-\\-\\-повторяется err:ole:CoGetClassObject class {6c736db1-bd94-11d0-8a23-00aa00b58e10} not registered err:ole:CoGetClassObject no class object {6c736db1-bd94-11d0-8a23-00aa00b58e10} could be created for context 0x1 Программа зависает. Установила unioffice. Теперь при выполнении обработки появляетя сообщение,что на компьютере не установлен OO, при этом открывается стартовое окно OO. Зачем устанавливался UniOffice, я не понял - обработка изначально работает с объектами OpenOffice. Пересоздал бутылку: eterhack bottle bugs/8241 1С 8.2.15.301, LibreOffice 3.5.1 На первый взгляд: запускается обработка, открывается LibreOffice, создаётся файл по указанному пути. Файл, кажется, пустой. LibreOffice, запустившись, остаётся открытым - не понятно, влияет это как-нибудь на работу обработки или нет. В обработке есть такой код: ServiceManager=новый COMОбъект("com.sun.star.ServiceManager"); Граница = ServiceManager.Bridge_GetStruct("com.sun.star.table.BorderLine"); Граница.lineDistance = 0; Граница.innerLineWidth = 0; Граница.outerLineWidth = 1; scr = новый COMОбъект("MSScriptControl.ScriptControl"); scr.language = "javascript"; scr.eval("Массив=new Array()"); Массив = scr.eval("Массив"); scr.AddCode("function SetItem(ind,val){Массив[ind]=val}"); scr.AddObject("ServiceManager",ServiceManager); scr.eval("Массив[0]=ServiceManager.Bridge_GetStruct('com.sun.star.beans.PropertyValue')"); scr.eval("Массив[0].Name='Hidden'"); scr.eval("Массив[0].Value=true"); Судя по результатам построчного выполнения, работа замораживается на строчке Массив = scr.eval("Массив"); При этом никаких ошибок выполнение непосредственно этой инструкции в консоль не валит. OpenOffice вообще не имеет никакого отношения к проблеме. Проблема возникает при работе с объектом MSScriptControl из Windows Scripting. С чем связано, пока не ясно. Created attachment 2472 [details]
простой тест
Тестовая обработка: создаём объект, создаём массив, пытаемся переменной Массив присвоить значение - в этот момент возникает ошибка.
scr = новый COMОбъект("MSScriptControl.ScriptControl");
scr.language = "javascript";
scr.eval("Массив=new Array()");
Массив = scr.eval("Массив");
scr.AddCode("function SetItem(ind,val){Массив[ind]=val}");
Как и ожидалось, на Windows такая обработка успешно выполняется. И в 1.0.12 простая обработка выполняется Created attachment 2473 [details]
лог по ole
на всякий случай - кусок лога по ole при выполнении действия
Дотестировал 1.0.12 - в дальнейшем появляется ошибка при вызове LoadComponentFromURL() То есть в качестве временного решения не подойдёт. Точный текст ошибки в 1.0.12: {Форма.Форма.Форма(61)}: Ошибка при вызове метода контекста (LoadComponentFromURL) Document = Desktop.LoadComponentFromURL(convertToURL(ИмяФайла), "_blank", 0, Массив); по причине: Типы не совпадают (1) В 1.0.12 тоже есть ошибка. Только при выполнении проблемной строки кода валятся fixme и, по всей видимости, возвращается ошибка. В итоге результат работы такой же, как и при Массив = 0; Не работает ни в одной из версий, но в 2.0 ведёт к зависанию, тогда как у 1.0.12 недостаточно функционала для достижения ошибки. Не возвращается управление из функции ITypeInfo2_fnGetContainingTypeLib() Зависание где-то в районе выполнения строки: *pIndex = This->typeinfo->typekind >> 16; (до неё трейсится, после - нет) Путём экспериментов с параметрами упростил запуск обработки: $ wine 1cv8.exe enterprise /F"D:\\DemoAcc" /execute "C:\\SimpleTest.epf" (В ответ на comment #13) > Зависание где-то в районе выполнения строки: > *pIndex = This->typeinfo->typekind >> 16; Всё потому, что приходящий pIndex == NULL. Если игнорировать нулевой указатель, то обработка выполняется, а затем успешно выполняется и большая обработка по выгрузке в OpenOffice. В качестве экстренной меры добавил проверку на нулевой указатель - хуже точно не будет, а 1ске (как минимум) становится лучше. Сформулировал задачу по исследованию и правильному решению проблемы: http://bugs.etersoft.ru/show_bug.cgi?id=8365 На этом задачу с выгрузкой можно считать решённой. Пришёл отзыв пользователя: в новой сборке всё работает. |