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 со строкой "Тестовое сообщение".
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 На этом задачу с выгрузкой можно считать решённой.
Пришёл отзыв пользователя: в новой сборке всё работает.