Макрос для кнопки вычисления в Формах OO Base

Автор MotleyGoo, 26 мая 2015, 15:53

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

MotleyGoo

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

Подробнее:
Есть LAMP сервер с mysql базой данных. OO Base (win7-x64pro & OO 4.1.1) коннектится через драйвер mysql-connector-odbc-5.3.4-win.
Создал форму используя Мастер для создания формы. Строки отлично пишутся в базу.
Остался один момент. Периодически пользователю формы необходимо вычислить значение одного поля из другого. Эти поля не всегда зависимы друг от друга, поэтому удалить зависимые столбцы и использовать запросы нельзя. Ко всему, вычисление нужно произвести до внесения данных в базу.

Итак, я создал кнопку на форме, привязал к событию "По нажатию клавиши" свой "Hello World" макрос. Работает.

Теперь к самому макросу.
Есть два форматированных поля   "fmtprice_max_notax" и "fmtprice_max_tax"
Предположим, что юзер заполнил "fmtprice_max_notax" и хочет автоматически расчитать "fmtprice_max_tax" по нажатию Button1

Помогите, пожалуйста с макросом, который
1 Берет значение fmtprice_max_notax
2 Умножает это значение на 1.18
3 Заполняет "fmtprice_max_tax"
Цитировать
Sub Button1
Dim max_notax AS Currency
Dim max_tax AS Currency 'Что дальше?
End Sub


JohnSUN

Добро пожаловать на форум!Sub Btn1_onclick(oEvent)
Dim oSource As Variant
Dim oModel As Variant
Dim oParent As Variant
Dim oColumns As Variant
oSource = oEvent.Source ' В параметре есть вся нужная информация о текущей кнопке и её "родителях"
oModel = oSource.getModel() ' Нужно просто дотянуться до текущей записи базы данных
oParent = oModel.getParent() ' Это и есть текущая запись формы
oColumns = oParent.getColumns() ' Поля текущей записи
' Узнать, какие поля доступны для getByName() можно, например, так:
' oElementNames = oColumns.getElementNames()
' А дальше просто: получить все нужные поля текущей записи по .getByName(), их значения через
' wasNull, getString, getBoolean, getByte, getShort, getInt, getLong, getFloat, getDouble и т.д.
' (подробности здесь - http://www.openoffice.org/api/docs/common/ref/com/sun/star/sdb/XColumn.html),
' выполнить вычисления и затолкать в нужное место через .updateЧегоТоТам
oColumns.getByName("fmtprice_max_tax").updateDouble(oColumns.getByName("fmtprice_max_notax").getDouble()*1.8)
End Sub
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне