Укажите отработанное время

Отработанное время:
Продуктивное время:
Bug 8241 - не работает выгрузка из 1с в OpenOffice   Make a simular bug
Summary: не работает выгрузка из 1с в OpenOffice
Status: CLOSED FIXED
Alias: None
Product: WINE@Etersoft
Classification: Продукты (Products)
Component: Взаимодействие с Office (show other bugs)
Version: 2.0
Hardware: PC All
: P2 normal
Target Milestone: ---
Assignee: Константин Кондратюк
QA Contact: Svetlana Zhukova
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
In work:
Reported: 2012-02-27 17:36 MSK by Shestakov Dmitriy
Modified: 2012-04-06 11:11 MSK (History)
4 users (show)

See Also:
Заявки RT: 23134
Связано с:
Дата напоминания:


Attachments
простой тест (6.61 KB, application/octet-stream)
2012-04-03 19:22 MSK, Константин Кондратюк
Details
лог по ole (4.74 KB, text/plain)
2012-04-03 19:53 MSK, Константин Кондратюк
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Shestakov Dmitriy 2012-02-27 17:36:31 MSK
1с 8.2 (8.2.14.533)
OpenOffice.org 3.3 

Конфигурация значения не имеет, думаю, что и версия платформы роли не играет.

Нужно установить OpenOffice в WINE@.

Обработка находится тут: /var/ftp/pvt/Windows/Testing/RT/23134.

Способ воспроизведения:
1. Открываете 1с в рабочем режиме.
2. Файл-Открыть и указать обработку.
3. Выбрать каталог, только не корень диска.

Все, в итоге должна создаться таблица опенофис Test_oo_via_NX.ods со
строкой "Тестовое сообщение".
Comment 1 Svetlana Zhukova 2012-02-28 12:06:51 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


Программа зависает.
Comment 2 Svetlana Zhukova 2012-03-13 11:15:22 MSK
Установила unioffice. Теперь при выполнении обработки появляетя сообщение,что на компьютере не установлен OO, при этом открывается стартовое окно OO.
Comment 3 Константин Кондратюк 2012-04-03 18:32:24 MSK
Зачем устанавливался UniOffice, я не понял - обработка изначально работает с объектами OpenOffice.

Пересоздал бутылку:
eterhack bottle bugs/8241

1С 8.2.15.301, LibreOffice 3.5.1

На первый взгляд: запускается обработка, открывается LibreOffice, создаётся файл по указанному пути. Файл, кажется, пустой. LibreOffice, запустившись, остаётся открытым - не понятно, влияет это как-нибудь на работу обработки или нет.
Comment 4 Константин Кондратюк 2012-04-03 18:53:08 MSK
В обработке есть такой код:

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("Массив");

При этом никаких ошибок выполнение непосредственно этой инструкции в консоль не валит.
Comment 5 Константин Кондратюк 2012-04-03 19:19:13 MSK
OpenOffice вообще не имеет никакого отношения к проблеме. Проблема возникает при работе с объектом MSScriptControl из Windows Scripting. С чем связано, пока не ясно.
Comment 6 Константин Кондратюк 2012-04-03 19:22:49 MSK
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}");
Comment 7 Константин Кондратюк 2012-04-03 19:36:47 MSK
Как и ожидалось, на Windows такая обработка успешно выполняется.
Comment 8 Константин Кондратюк 2012-04-03 19:43:36 MSK
И в 1.0.12 простая обработка выполняется
Comment 9 Константин Кондратюк 2012-04-03 19:53:31 MSK
Created attachment 2473 [details]
лог по ole

на всякий случай - кусок лога по ole при выполнении действия
Comment 10 Константин Кондратюк 2012-04-03 20:08:03 MSK
Дотестировал 1.0.12 - в дальнейшем появляется ошибка при вызове LoadComponentFromURL()

То есть в качестве временного решения не подойдёт.
Comment 11 Константин Кондратюк 2012-04-03 20:09:17 MSK
Точный текст ошибки в 1.0.12:
{Форма.Форма.Форма(61)}: Ошибка при вызове метода контекста (LoadComponentFromURL)
	Document = Desktop.LoadComponentFromURL(convertToURL(ИмяФайла), "_blank", 0, Массив);
по причине:
Типы не совпадают (1)
Comment 12 Константин Кондратюк 2012-04-04 16:41:06 MSK
В 1.0.12 тоже есть ошибка. Только при выполнении проблемной строки кода валятся fixme и, по всей видимости, возвращается ошибка. В итоге результат работы такой же, как и при Массив = 0;

Не работает ни в одной из версий, но в 2.0 ведёт к зависанию, тогда как у 1.0.12 недостаточно функционала для достижения ошибки.
Comment 13 Константин Кондратюк 2012-04-04 18:21:09 MSK
Не возвращается управление из функции ITypeInfo2_fnGetContainingTypeLib()

Зависание где-то в районе выполнения строки:
    *pIndex = This->typeinfo->typekind >> 16;
(до неё трейсится, после - нет)
Comment 14 Константин Кондратюк 2012-04-04 18:22:22 MSK
Путём экспериментов с параметрами упростил запуск обработки:
$ wine 1cv8.exe enterprise /F"D:\\DemoAcc" /execute "C:\\SimpleTest.epf"
Comment 15 Константин Кондратюк 2012-04-04 19:11:56 MSK
(В ответ на comment #13)
> Зависание где-то в районе выполнения строки:
>     *pIndex = This->typeinfo->typekind >> 16;

Всё потому, что приходящий pIndex == NULL.
Если игнорировать нулевой указатель, то обработка выполняется, а затем успешно выполняется и большая обработка по выгрузке в OpenOffice.

В качестве экстренной меры добавил проверку на нулевой указатель - хуже точно не будет, а 1ске (как минимум) становится лучше.
Comment 16 Константин Кондратюк 2012-04-04 19:22:58 MSK
Сформулировал задачу по исследованию и правильному решению проблемы:
http://bugs.etersoft.ru/show_bug.cgi?id=8365

На этом задачу с выгрузкой можно считать решённой.
Comment 17 Константин Кондратюк 2012-04-06 11:11:22 MSK
Пришёл отзыв пользователя: в новой сборке всё работает.