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

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

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

Войти
Новости: Вы можете задать вопрос по LibreOffice или Apache OpenOffice без регистрации, используя форму
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1 2 »   Вниз
  Печать  
Автор Тема: Будьте добры, подскажите по написанию макроса. Имеет  (Прочитано 4971 раз)
0 Пользователей и 1 Гость смотрят эту тему.
ForumOOo (бот)

Offline Offline

Сообщений: 761


« Стартовое сообщение: 3 Февраль 2016, 16:25 »

Компонент: Base
Версия продукта: 5.x
Сборка: LibreOffice 5.0.4
ОС: Любая

Будьте добры, подскажите по написанию макроса.

Имеется флажок и кнопка. И еще две формы.
Идея: чтобы при нажатии кнопки и установленном флажке открывалась одна форма, а при снятом флажке другая.

Сейчас вопрос решен только тем, что создано две кнопки, каждая из которых открывает свое окно. Но это топорный метод.

--
Подпись: MasterLi
Записан
rami
Гуру
*******
Offline Offline

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


iMac, LibreOffice и Apache OpenOffice


« Ответ #1: 3 Февраль 2016, 23:24 »

Имеется флажок и кнопка. И еще две формы.
Идея: чтобы при нажатии кнопки и установленном флажке открывалась одна форма, а при снятом флажке другая.
Вот, например:

* Кнопка и птичка.odb (27.75 Кб - загружено 27 раз.)
Записан

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

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



« Ответ #2: 4 Февраль 2016, 05:31 »

Да, работает.
Только мудрёно получилось: Label меняется. Можно и без этого.
Записан
MasterLi
Участник
**
Offline Offline

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



« Ответ #3: 4 Февраль 2016, 09:15 »

Фу-у-ух разобрался ...

Код:
Sub Direction
Dim oForm, oForms, oCheckBox, oButton
oForms=ThisComponent.getDrawPage().getForms()
oForm=oForms.getByName("MainForm")
oCheckBox=oForm.getByName("Госзаказ")
oButton=oForm.getByName("Кнопка_направление")
If oCheckBox.State Then ThisComponent.Parent.FormDocuments.getByName("Направление (госзаказ)").open else ThisComponent.Parent.FormDocuments.getByName("Направление").Open
End Sub
Записан
rami
Гуру
*******
Offline Offline

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


iMac, LibreOffice и Apache OpenOffice


« Ответ #4: 4 Февраль 2016, 09:31 »

Только мудрёно получилось: Label меняется. Можно и без этого.
Вы просили подсказать, так я подсказал...

Ах да, забыл подсказать как отключить макрос от чекбокса Непонимающий , ну это просто заходите в редактирование формы, выделяете чекбокс, жмёте в выпадающем меню на "Элемент управления..." и во вкладке "События" удаляете назначенный макрос.
Записан

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

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



« Ответ #5: 4 Февраль 2016, 09:49 »

Ах да, забыл подсказать как отключить макрос от чекбокса  , ну это просто заходите в редактирование формы, выделяете чекбокс, жмёте в выпадающем меню на "Элемент управления..." и во вкладке "События" удаляете назначенный макрос.

Это ежу понятно Улыбка
Записан
MasterLi
Участник
**
Offline Offline

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



« Ответ #6: 4 Февраль 2016, 09:51 »

Вы просили подсказать, так я подсказал...
Помогите еще кой в чем:

Две формы.
Обе черпают информацию из одной и той же таблицы.
В первой форме кнопка, открывающая вторую форму.
Что дописать в макрос, чтобы в открывающейся форме показывалась та же запись, что и в данный момент в первой форме ?
Записан
MasterLi
Участник
**
Offline Offline

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



« Ответ #7: 25 Январь 2021, 10:42 »

Помогите, друзья. Если переименовываешь форму, в код вставляешь новое имя формы - перестаёт работать. Да, и когда назад возвращаешь, то всё равно не работает. Есть один момент. формы я скинул в папку.

Код:
Sub Direction
Dim oForm, oForms, oCheckBox, oButton
oForms=ThisComponent.getDrawPage().getForms()
oForm=oForms.getByName("MainForm")
oCheckBox=oForm.getByName("Госзаказ")
oButton=oForm.getByName("Кнопка_направление")
If oCheckBox.State Then ThisComponent.Parent.FormDocuments.getByName("Направление (госзаказ)").open else ThisComponent.Parent.FormDocuments.getByName("Направление").Open
End Sub

Ошибка времени выполнения Basic.
Вызвано исключение
Type: com.sun.star.container.NoSuchElementException
Message: Направление ТОО Касарас (ПЛАТНО).
Записан
economist
Форумчанин
***
Offline Offline

Сообщений: 1 461


« Ответ #8: 25 Январь 2021, 12:37 »

формы я скинул в папку.
В смысле сохранили как ODT-файлы (как "внешие" формы)?
Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
MasterLi
Участник
**
Offline Offline

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



« Ответ #9: 26 Январь 2021, 05:12 »

В смысле сохранили как ODT-файлы (как "внешие" формы)?
Нет. Для разных ТОО создал разные папки форм.
НО теперь, даже если я использую их вне папки, всё равно не работает.

Вообще не понимаю почему ?! Всё написано правильно !!!


* Error.png (22.54 Кб, 371x181 - просмотрено 13 раз.)
« Последнее редактирование: 26 Январь 2021, 05:14 от MasterLi » Записан
MasterLi
Участник
**
Offline Offline

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



« Ответ #10: 26 Январь 2021, 06:22 »

Теперь я знаю точно - это из-за того, что я формы распределил по папкам. Когда формы в корне - всё работает.
Друзья, помогите ! Что допилить в коде, чтобы он брал формы из папок ?
Записан
economist
Форумчанин
***
Offline Offline

Сообщений: 1 461


« Ответ #11: 26 Январь 2021, 08:55 »

Нет. Для разных ТОО создал разные папки форм.

Всё равно непонятно. Файл Базы данных *.ODB - он один, так? В нем (внутри ODB) - две Формы. О каких "папках" речь? Какое расширение у файлов Форм?

С понятием "Форма" в OpenOffice|LibreOffice всё сложно, потому переспрашиваю. Каждый флажок, кнопка итп эл. управления (прижилось слово "контрол") - принадлежит какой-то одной конкретной Форме в ODB/ODT/ODS-файле. Но форм может быть много, они могут лежать поверх друг друга, стопкой, как прозрачные слои в Photoshop, хотя могут и лежать "рядом", не перекрываясь. У Форм есть структура (дерево в Навигаторе Форм) и иерархия - Подформы входят в родительскую Форму и наследуют её свойства, реализуя интерфейс "провалиться в навороченный справочник или особое окно для правки".

Форму из ODB можно сохранить в ODT, в другую папку и использовать его как "внешнюю форму" для ввода данных в БД. Наличие отдельного файла здорово упрощает многопользовательский доступ и безопасность на уровне файловой системы ОС, без запросов паролей итп. Форма может работать с БД даже удаленно, через LAN, WAN.  

Всю "стопку" форм (созданных вручную в ODT) - можно "привязять" к ODB и использовать как мета-форму для ввода данных в БД. В этом случае макросами можно реализовать очень крутой функционал. Фактически одна мета-форма в ODT может одновременно отображать и заполнять данные в/из нескольких, абсолютно разных БД, движков. Скажем TXT/SQLite/FireBird/PostgreSQL.

Всегда стоит в ODT/ODS-файле одну из Форм "стопки" - отвязать от БД и файла ODB, для того чтобы значения контролов этой формы не "сбрасывались" при перезагрузке Формы, при включении режима Разработки итд. Это полезно, ведь контролы могут использоваться внутри ODT/ODB для внутренних нужд, мини-справочников итд. В отличие от Текстовых полей Writer - контролы не в пример легче "обвесить" макросами, скрыть, сделать непечатаемыми итд.  
« Последнее редактирование: 26 Январь 2021, 08:58 от economist » Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
MasterLi
Участник
**
Offline Offline

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



« Ответ #12: 26 Январь 2021, 09:04 »

Код:
Sub Direction_Axim
Dim oForm, oForms, oCheckBox, oButton
oForms=ThisComponent.getDrawPage().getForms()
oForm=oForms.getByName("MainForm_Axim")
oCheckBox=oForm.getByName("ГОСЗАКАЗ")
oButton=oForm.getByName("Кнопка_направление_Аксим")
If oCheckBox.State Then ThisComponent.Parent.FormDocuments.getByName("Направление ТОО Аксим плюс (ГОСЗАКАЗ)").open else ThisComponent.Parent.FormDocuments.getByName("Направление ТОО Аксим плюс (ПЛАТНО)").Open
End Sub

Sub Direction_Kasaras
Dim oForm, oForms, oCheckBox, oButton
oForms=ThisComponent.getDrawPage().getForms()
oForm=oForms.getByName("MainForm_Kasaras")
oCheckBox=oForm.getByName("ГОСЗАКАЗ")
oButton=oForm.getByName("Кнопка_направление_Касарас")
If oCheckBox.State Then ThisComponent.Parent.FormDocuments.getByName("Направление ТОО Касарас (ГОСЗАКАЗ)").open else ThisComponent.Parent.FormDocuments.getByName("Направление ТОО Касарас (ПЛАТНО)").Open
End Sub


* forms.png (12.55 Кб, 604x263 - просмотрено 14 раз.)
Записан
economist
Форумчанин
***
Offline Offline

Сообщений: 1 461


« Ответ #13: 26 Январь 2021, 09:20 »

Так это подформы (подчиненные). Подчиненная форма - всегда крохотная, маленькая, она работает как бы через фильтр родительской формы, т.е. не получит доступа ни к чему "снаружи" родительской "папки". Прежде всего она не имеет доступа ко всем данным других таблиц БД.
Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
MasterLi
Участник
**
Offline Offline

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



« Ответ #14: 26 Январь 2021, 10:13 »

Это не подформы.
Я создаю папку и скидываю их туда. Делаю это для удобства. Чтобы разделить разные ТОО.

Получается, что если формы находятся "в корне", то скрипт работает. Если в папке, то скрипт выдаёт ошибку. Голову сломал, не пойму почему ...
Где-то в мат.часте читал, что нужно использовать слэш / ... только куда его вставить не знаю.
« Последнее редактирование: 26 Январь 2021, 10:16 от MasterLi » Записан
Страниц: 1 2 »   Вверх
  Печать  
 
Перейти в:  

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