Имя: Пароль:
1C
1С v8
Ошибка загрузки xlsx-файла в клиенте 1С x64 через LibreOffice Calc x32
0 jk3
 
02.07.20
22:35
Имеется Клиент 1С x64, LibreOffice Calc x32.

Вот такой код, который прекрасно отрабатывает на клиенте 1С x32, падает на клиенте 1С x64 в ошибкой:
"Произошла исключительная ситуация (Ошибка выполнения Microsoft JScript): Разрешение отклонено"

ServiceManager = New COMObject("com.sun.star.ServiceManager");

js = New COMObject("MSScriptControl.ScriptControl");
js.language = "javascript";
js.AddObject("ServiceManager", ServiceManager);
js.eval("Arr = new Array()");
js.eval("Arr[0] = ServiceManager.Bridge_GetStruct('com.sun.star.beans.PropertyValue')"); // вот на этой строке падает
1 Фрэнки
 
02.07.20
23:16
Религия запрещает использование 64 бит в LibreOffice Calc ?
2 spectre1978
 
03.07.20
06:24
(0) скорее всего что-то пытается выполнить 32-битный код в адресном пространстве 64-битного процесса. Попробуйте перейти на 64-битный либреофис.
3 jk3
 
03.07.20
23:18
(1) (2)
Снёс x32 LibreOffice, установил x64 LibreOffice.
Ошибка та же самая.

Тут дело в том, что вызывающий процесс x64, а MSScriptControl.ScriptControl -- x32.

В службах компонентов прописал по статье: https://osergey.ru/ru/call-32-bit-com-objects-to-side-64-bi/#more-508

Но не взлетает.
Почему-то у самого MSScriptControl.ScriptControl при выполнении нет доступа к ServiceManager.Bridge_GetStruct.
4 acht
 
03.07.20
23:35
А зачем там MSScriptControl.ScriptControl вообще?
5 spectre1978
 
05.07.20
09:12
Я так понимаю, код был утащен из-под клюшек и скриптконтрол был использован из-за неумения клюшек работать с COMSafeArray. Под восьмёркой ведь этот кусок можно попробовать переписать без скриптконтрола?
6 NorthWind
 
05.07.20
09:27
вот здесь с Bridge_GetStruct работают напрямую Выгрузка данных в Оpen Office
7 pechkin
 
05.07.20
10:13
1с сама умеет читать xlsx
8 spectre1978
 
05.07.20
11:13
(7) может быть, ods читать нужно.
9 jk3
 
05.07.20
23:23
(4) Для запуска LibreCalc в скрытом режиме (Hidden = True).
(5) Да, код старый.
(6) Спасибо, помогло.
Переписал кусок вместо MSScriptControl.ScriptControl вот так:

Property1 = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue");
Property1.Name = "ReadOnly";
Property1.Value = True;
Property2 = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue");
Property2.Name = "Hidden";
Property2.Value = True;
        
Args = New COMSafeArray("VT_VARIANT", 2);
Args.SetValue(0, Property1);
Args.SetValue(1, Property2);

Document = Desktop.LoadComponentFromURL(GetFileURL(FilePath), "_blank", 0, Args);
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn