Всё равно артефакты на python

Автор Massaraksh7, 28 апреля 2024, 10:34

0 Пользователи и 1 гость просматривают эту тему.

Massaraksh7

Тот же скрипт, сделал вызов из Лазаруса со скрытием окна. При вызове второй формы артефакты снова появляются.
https://cloud.mail.ru/public/YB6R/gZpNUVpFs
Что-то не то с этим пайтоном. Макросы на Basic в этом отношении работают безупречно, но с ними свои сложности.

economist

Не мудрено, дергать из одной системы скрипты другой для выполнения функций третьей.

Если Lazarus только для трехкнопочных интерфейсов - это из пушки по воробьям. Их можно реализовать неск. способами на Python (включая самые красивые и современные web-формы, в браузере), на Basic и даже в самом LO Calc.

Архитектурно системы построения отчетов должны создаваться в "системах построения отчетов" или финальных носителях форм (LibreOffice) на любом внутреннем языке автоматизации. Макросы API-команд LO на Python и Basic работают абс. одинаково. Пересмотрите подход к инструментарию.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

Massaraksh7

#2
Цитата: economist от 28 апреля 2024, 21:15Если Lazarus только для трехкнопочных интерфейсов - это из пушки по воробьям.
На Lazarus написана основная программа, для которой и делаются отчёты. Там ~200000 кода строк в совокупности, поэтому вопрос о ней не стоит.
Цитата: economist от 28 апреля 2024, 21:15Пересмотрите подход к инструментарию.
Вот, чем я и занимаюсь. Система построения отчётов в программе есть, интерфейс её выхода описан. Наполнение интерфейса - это блок работы с Excel и Word через OLE-объекты.
Проблема в том, программа работала под Windows, а сейчас будет кроссплатформенной Win/Linux (отсюда и переход на LibreOffice)), то есть, OLE-объекты отпадают, и надо реализовывать другой механизм.
Макросы работают нормально, что в Python, что в Basic, согласен, убедился.
Плохо то, что не могу вызывать макросы открытого ods-файла из Lazarus. Поэтому и приходится изобретать прокладки.
P.S.: Попутно вопрос: можно ли из python (не макроса) вызвать макрос открытого ods-файла? И, если - да, то как?



economist

OLE это OLE что в MSO, что в LO (Windows).

А вот COM (Win) - это UNO (Win|Lin).

Отчёты можно делать и 3-м способом: без офисных пакетов вообще, но в офисных форматах (либы Python, построители отчётов).

Вам для кроссплатформенности надо разгрузить Лпзарус от формирования отчётов.

LO может при открытии или событии (позже) выполнить макрос из 3-х мест (мои, макросы LO и внутри дока).

Следовательно открыв файл в LO любым способом (в т.ч. внешним py-скриптом) - вы получите срабатывание Basic/Python-макроса (в любом из 3-х мест).
 
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

Massaraksh7

#4
Цитата: economist от 29 апреля 2024, 21:15Вам для кроссплатформенности надо разгрузить Лпзарус от формирования отчётов.
Просто не успеем.
Цитата: economist от 29 апреля 2024, 21:15Следовательно открыв файл в LO любым способом (в т.ч. внешним py-скриптом) - вы получите срабатывание Basic/Python-макроса (в любом из 3-х мест).
Если бы речь шла о единичной срабатывании макроса, то это можно сделать и без посредников - просто вызовом из Lazarus.
AProcess := TProcess.Create(nil);
AProcess.Options:=[];
AProcess.Executable:='soffice "'+temppath+'" "macro://temp'+IntToStr(n)+'/Standard.Module1.main';
AProcess.Execute;
AProcess.Free;                   
Но, согласно интерфейса, нужно сначала получить данные макета, интерпретировать их (там свой язык), заполнить и передать снова в макрос. То есть, макрос, скорее всего, надо вызывать минимум 2 раза.
P.S.: Хотя, нет, можно, запустить макрос один раз и организовать что-то вроде IPC,. 


Massaraksh7

Чтобы темы не плодить, спрошу здесь:
Запуск макроса, написанного на basic работает:
AProcess.Executable:='soffice "'+temppath+'" "macro://temp'+IntToStr(n)+'/Standard.Module1.main"';
А на Python - нет.
AProcess.Executable:='soffice "'+temppath+'" "macro://temp'+IntToStr(n)+'/Module1.DoMacro"';       

Massaraksh7

python по-другому вызывается.
AProcess.Executable:='soffice "'+temppath+'" "vnd.sun.star.script:Module1.py$DoMacro?language=Python&location=document"'; 

Massaraksh7

Цитировать"...Ответчик продолжал тихо бубнить себе вопросы и сам на них отвечал..." © Роберт Шекли "Верный вопрос"
;D