Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

5 Март 2021, 18:49 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Вы можете задать вопрос по LibreOffice или Apache OpenOffice без регистрации, используя форму
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1 2 3 »   Вниз
  Печать  
Автор Тема: Ошибка выполнения скрипта в разных OS  (Прочитано 9220 раз)
0 Пользователей и 1 Гость смотрят эту тему.
spyAndrey
Участник
**
Offline Offline

Сообщений: 33


« Стартовое сообщение: 26 Октябрь 2016, 20:00 »

Пробую запускать макрос в windows, libreoffice 5.2.2.2
работает без вопросов.

Если пытаюсь запускать Ubuntu, версия офиса та же, выдаёт ошибку:

Ошибка времени выполнения BASIC.
Свойство или метод не найдены: drawPages.

в вот этой строке:

PageD = Doc.drawPages(0)

Пробовал в другой версии LO 5.1.6.2
Ошибка та же.

я до сих пор въехать в работу с UNO не  могу, а тут такая хрень...
Хорошо хоть в двух ОС работаю и проверил работу макроса в винде, а то сижу... проверяю-перепроверяю, может не правильно написал...
Хотя есть сомнения, что у меня правильно написано, или в работе под Linux есть какие-то, нюансы Непонимающий в общем много разных мыслей (и слов Улыбка) в голову лезет

могу выложить полный файл
« Последнее редактирование: 26 Октябрь 2016, 20:02 от spyAndrey » Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 764


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #1: 26 Октябрь 2016, 20:07 »

Файл, конечно, штука хорошая - прикладывай, посмотрим...
А вообще-то вопрос по самой процедуре запуска - как запускаешь? Самое важное - из какого окна? Из Basic IDE, с листа Calc'a или - всяко может быть! - из Writer? Или речь идет о презентации или о картинке?..
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
spyAndrey
Участник
**
Offline Offline

Сообщений: 33


« Ответ #2: 26 Октябрь 2016, 21:05 »

из базы данных, а создаю рисунок Draw.
Вот начитываясь, я уже тоже понял, что всё зависит "в каком состоянии всё находится", но вот понять как "найти нужный документ" пока понять не могу
 а файл вот:

* cgd.odb (19.64 Кб - загружено 9 раз.)
Записан
spyAndrey
Участник
**
Offline Offline

Сообщений: 33


« Ответ #3: 26 Октябрь 2016, 21:06 »

Форму я вообще сначала на листе в Draw рисовал, но потом решил перенести к базам, и началось... Улыбка
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 764


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #4: 26 Октябрь 2016, 21:28 »

Сейчас уже время позднее, башка варит не очень... Так что, может быть, сейчас ткну пальцем в небо.
Под WIndows отрабатывает действительно без замечаний.
Вызывает смутные подозрения вот эта комбинация:
Код:
Doc = StarDesktop.CurrentComponent
 PageD = Doc.drawPages(0)
В зависимости от того, какой документ StarDesktop посчитает на данный момент текущим, зависит где ты будешь искать эти самые drawPages. И фишка в том, что у документа Writer эта drawPage всего одна. Поэтому и методом getDrawPages его не обеспечили. А форма, в которой ты кнопку нажал и есть документ Writer.
Если StarDesktop при создании  LoadEmptyDocument("sdraw") успел на этот новый draw-документ переключить внимание, все будет в порядке. А иначе код макроса продолжает выполняться, а .CurrentComponent все еще текущая форма.
Попробуй в LoadEmptyDocument() перед самым выходом из процедуры поставить Wait() секунд на 10, чтобы наверняка... Если ошибка перестанет появляться, значит Ubuntu слишком медленно создает новый компонент, придется пройтись по всему коду и поисправлять все Doc = StarDesktop.CurrentComponent на использование Doc, полученного параметром функции/процедуры.
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
spyAndrey
Участник
**
Offline Offline

Сообщений: 33


« Ответ #5: 26 Октябрь 2016, 21:38 »

Спасибо, попробую отпишусь
У Питоньяка всё как то "разлито" по нескольким книгам и страницам (во всяком у меня такое впечатление сложилось), по идее можно же создать функцию поиска страницы с конкретным именем, что то похожее применяется у него всюду...
Записан
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 3 061


iMac, LibreOffice и Apache OpenOffice


« Ответ #6: 26 Октябрь 2016, 21:46 »

Если StarDesktop при создании  LoadEmptyDocument("sdraw") успел на этот новый draw-документ переключить внимание, все будет в порядке.
Там всего, как я понимаю два документа, — форма и новый рисунок Draw, нужно использовать две переменные, например, fDoc — форма и dDoc — рисунок, тогда не надо будет искать текущий компонент.
Записан

spyAndrey
Участник
**
Offline Offline

Сообщений: 33


« Ответ #7: 26 Октябрь 2016, 22:11 »

самое интересное, что:
wait 1000
помогло!
Записан
spyAndrey
Участник
**
Offline Offline

Сообщений: 33


« Ответ #8: 26 Октябрь 2016, 22:20 »

нужно использовать две переменные, например, fDoc — форма и dDoc — рисунок, тогда не надо будет искать текущий компонент.
вот с этого места поподробнее, т.е., для формы это будет:
oForm = oEvent.Source.getModel().getParent() ' от источника события
или
Form2 = ThisComponent.Drawpage.Forms.getByName("fNalichnikt") ' форма содержит тип наличника
а для рисунка:
dDoc = вот тут помогите
Записан
Yakov
Администратор
**
Offline Offline

Сообщений: 2 568


WWW
« Ответ #9: 26 Октябрь 2016, 22:31 »

Использовать
Код:
Doc = StarDesktop.CurrentComponent
не рекомендуется.
Вместо этого следует использовать
Код:
Doc = ThisComponent
https://wiki.openoffice.org/wiki/Documentation/BASIC_Guide/Documents
Записан
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 3 061


iMac, LibreOffice и Apache OpenOffice


« Ответ #10: 26 Октябрь 2016, 23:51 »

нужно использовать две переменные, например, fDoc — форма и dDoc — рисунок, тогда не надо будет искать текущий компонент.
вот с этого места поподробнее, т.е., для формы это будет:
oForm = oEvent.Source.getModel().getParent() ' от источника события
или
Form2 = ThisComponent.Drawpage.Forms.getByName("fNalichnikt") ' форма содержит тип наличника
Я имел в виду документ с формами и кнопкой "Нарисовать", — этот документ — ThisComponent или:
Код:
fDoc=ThisComponent

а для рисунка:
dDoc = вот тут помогите
Переменную рисованного документа oDrawDoc вы определяете в строке 433, но не используете. Если эту переменную определить вне процедуры, то она будет видна во всех макросах. Строку 283:
Код:
Dim oDrawDoc  'Temporary draw document.
перенесите из макроса наружу.
Записан

spyAndrey
Участник
**
Offline Offline

Сообщений: 33


« Ответ #11: 27 Октябрь 2016, 13:09 »

Закрепим, что удалось понять:
ThisComponent - после запуска будет указывать на документ Write в котором находится форма, и меняться он не будет, даже после того как я создал документ Draw.

Dim oDrawDoc - я ставлю первой строкой в макросе, после создания рисунка:

oDrawDoc = LoadEmptyDocument("sdraw")

он будет хранить информацию об этом объекте, и из любого места я его смогу достать, и добавить на рисунок что нужно...

хорошо, попробую
Записан
spyAndrey
Участник
**
Offline Offline

Сообщений: 33


« Ответ #12: 27 Октябрь 2016, 13:19 »

сработало, в Windows, но правда объявлять надо:
Public oDrawDoc

вечером запущу в Ubuntu, отпишусь
Записан
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 3 061


iMac, LibreOffice и Apache OpenOffice


« Ответ #13: 27 Октябрь 2016, 14:10 »

Закрепим, что удалось понять:
ThisComponent - после запуска будет указывать на документ Write в котором находится форма, и меняться он не будет, даже после того как я создал документ Draw.
Открепим и закрепим по новой Смеющийся : ThisComponent — это документ в котором записан или запущен макрос (в нашем случае макрос записан в базе, но запускается из формы этой базы)

Dim oDrawDoc - я ставлю первой строкой в макросе, после создания рисунка:

oDrawDoc = LoadEmptyDocument("sdraw")
Не первой строкой, а вообще за пределами любого макроса, см. снимок Разные переменные.png
Переменные Page и PageD будут доступны только в макросе Main, а oDrawDoc в любом макросе.


* Разные переменные.png (26.85 Кб, 453x117 - просмотрено 15 раз.)
Записан

spyAndrey
Участник
**
Offline Offline

Сообщений: 33


« Ответ #14: 27 Октябрь 2016, 14:39 »

Открепим и закрепим по новой  : ThisComponent — это документ в котором записан или запущен макрос (в нашем случае макрос записан в базе, но запускается из формы этой базы)
Но, при этом форма лежит на документе Write, если к ней из макроса обращаться? и иконка такая и методы...
Записан
Страниц: 1 2 3 »   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!