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

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

22 Сентябрь 2017, 19:55 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Здесь можно поблагодарить участников форума Улыбка
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1 2 »   Вниз
  Печать  
Автор Тема: Как по условию сменить цвет поля/фона/текста?  (Прочитано 2798 раз)
0 Пользователей и 1 Гость смотрят эту тему.
MichaFon
Новичок
*
Offline Offline

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


« Стартовое сообщение: 2 Декабрь 2016, 22:13 »

Подскажите, пожалуйста, как сменить цвет по условию? В зависимости от выбора пользователя, неких значений в форме (выпадающий список, вероятность события и угроза от события) определяется результат риска (A, B, C, D, E). Если значение A или B цвет нужно установить красный (цвет чего не принципиально всего поля, фона, текста риска). В Base вижу только статические наборы цветов, без возможности задать выражение, может через макрос можно менять цвет?

Пока нашел только упоминание о смене цвета тут:  http://www.openoffice.org/api/docs/common/ref/com/sun/star/inspection/PropertyControlType.html#ColorListBox. Одна из-за отсутствия опыта не могу понять, как использовать (менять цвет) на практике.


* Risk.png (15.38 Кб, 1004x266 - просмотрено 14 раз.)
« Последнее редактирование: 2 Декабрь 2016, 22:28 от MichaFon » Записан
rami
Гуру
*******
Offline Offline

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


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #1: 2 Декабрь 2016, 22:24 »

Подскажите, пожалуйста, как сменить цвет по условию? В зависимости от выбора пользователя, неких значений в форме (выпадающий список, вероятность события и угроза от события) определяется результат риска (A, B, C, D, E). Если значение A или B цвет нужно установить красный (цвет чего не принципиально всего поля, фона, текста риска). В Base вижу только статические наборы цветов, без возможности задать выражение, может через макрос можно менять цвет?
Макросом в формах можно, давайте образец базы и что нужно покрасить.
Записан

MichaFon
Новичок
*
Offline Offline

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


« Ответ #2: 2 Декабрь 2016, 23:50 »

Спасибо огромное.
Во вложении форма, правда тут всего один список и цифра, но не важно. Мне главное понять, как цвет менять. В данном случай, если результат выбора =1 то цвет красный, если =5 то зеленый. Подобное мне нужно в разных местах организовать.

* DATABASE-Empty.odb (550.22 Кб - загружено 7 раз.)

* Risk2.png (13.11 Кб, 935x198 - просмотрено 16 раз.)
Записан
rami
Гуру
*******
Offline Offline

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


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #3: 3 Декабрь 2016, 13:05 »

Во вложении форма, правда тут всего один список и цифра, но не важно. Мне главное понять, как цвет менять. В данном случай, если результат выбора =1 то цвет красный, если =5 то зеленый. Подобное мне нужно в разных местах организовать.
Если список в фокусе, то его цвет не виден, тем более, что окрашивается весь список целиком, а не отдельные строки. Поэтому лучше раскрашивать не сам список, а связанную с ним метку или что-нибудь другое (для примера, таблицу)

* DATABASE-Empty2.odb (116.87 Кб - загружено 7 раз.)
Записан

MichaFon
Новичок
*
Offline Offline

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


« Ответ #4: 3 Декабрь 2016, 15:08 »

Еще раз спасибо, с цветом понятно это то что нужно.
Пытяюсь теперь реализовать определение буквы риска (ABCDE, см. скрин - это пересечение строк и столбцов) по результату выбора из списков (S0-5 + P0-5), однако получаю ошибку на отсутствие Object.
Я хотел повесить макрос на список и результат сразу вписывать в таблицу 20_UE.  Возможно я вообще зря затеял определение буквы риска и нужно просто "починить" связи в таблицах (видь все данные с виду есть). Подскажите, пожалуйста, опытным взглядом.

* DATABASE-Empty 3.odb (558.87 Кб - загружено 4 раз.)

* RiskMatrix.png (14.41 Кб, 797x385 - просмотрено 11 раз.)
Записан
rami
Гуру
*******
Offline Offline

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


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #5: 3 Декабрь 2016, 15:53 »

Пытяюсь теперь реализовать определение буквы риска (ABCDE, см. скрин - это пересечение строк и столбцов) по результату выбора из списков (S0-5 + P0-5), однако получаю ошибку на отсутствие Object.
Где в макросе "RiskAuto" вы определили переменную "Statement" Непонимающий и где найти форму по имени "FinalRisk" Непонимающий
В документе "frm_20_UnwantedEvent" у вас всего две формы: главная форма "Formulario1" и субформа "SubFormUEList" — какая из этих двух "FinalRisk" Непонимающий


* Отсутствуют объекты.png (61.54 Кб, 594x190 - просмотрено 14 раз.)
Записан

MichaFon
Новичок
*
Offline Offline

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


« Ответ #6: 4 Декабрь 2016, 14:55 »

Отвечая на ваш вопрос я начинаю понимать насколько далек от решения свей задачи и пошел исправлять ошибки... Ответ на вопросы: 1)Переменную "Statement" забыл определить. 2) Нет такой формы "FinalRisk" это моя ошибка, я думал можно указать имя поля которое Update-им.  "FinalRisk" это поле, куда я пытаюсь вписать (степень риска A B C D или E) в таблице 20_UE.

На скриншоте Risk3 я постарался показать задуманное: нужно при выборе Likelihood(таблица MatrixLikelihood) и Severity(таблица MatrixSeverity), определить результирующую степень риска (ABCDE) из таблицы MatrixRisk. Идея в том, что первым выбирают Likelihood, затем Severity(поэтому макрос на это поле повесил), когда все выбрано пазл сходиться и мы определяем степень риска, если A цвет красный, если E цвет зеленый.

В макросе мне нужно реализовать нечто вроде:  executeUpdate("UPDATE ""20_UE"" SET ""20_UE"".""FinalRisk"" = (SELECT ""MatrixRisk"".""Risk"" FROM ""20_UE"", ""MatrixRisk"" WHERE ""20_UE"".""FinalLikelihood"" = ""MatrixRisk"".""IDLikelihood"" AND ""20_UE"".""FinalSeverity"" = ""MatrixRisk"".""IDSeverity"" AND ""20_UE"".""IDUE"" = <переменная>) WHERE IDUE = <переменная>")
, где <переменная> - то что вводит человек см.скрин IDUE

Не могу получить искомое значение в макросе вечно ошибка вроде Object не найден и т.п.


* Risk3.png (51.66 Кб, 1285x466 - просмотрено 10 раз.)

* IDUE.png (22.27 Кб, 957x500 - просмотрено 6 раз.)
« Последнее редактирование: 4 Декабрь 2016, 23:48 от MichaFon » Записан
MichaFon
Новичок
*
Offline Offline

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


« Ответ #7: 7 Декабрь 2016, 01:22 »

Пожалуйста, подскажите, с макросом:
1) не могу "дотянуться" до значения <переменная> (это текущее знащение IDUE на момент активации макроса из таблицы 20_UE)
2) не могу выполнить макрос на работу с нужными таблицами

Пока не решил проблему с пунктом №1 пробую переменной oIDUE присвоить "правильное" значение. Однако результат в "oFinalRisk" пусто, предполагаю, что причина в подключении к БД.
Код:
Sub RiskAuto
  Dim oForm As Object, oForms As Object, oTable as Object
  Dim oStatement As Object, oEvent as object, oFinalRisk As Object, oQuery as String
db=ConnectToDataBase("DATABASE-Empty 3")
oStatement=DB.createStatement()
  'oForms = ThisComponent.getDrawPage().getForms()
  'oForm = oEvent.Source.getModel().getParent()
  oIDUE="28"
  'oIDUE=oForm.getByName("IDUE")
  'MsgBox oIDUE
  oQuery="SELECT ""MatrixRisk"".""Risk"" FROM ""20_UE"", ""MatrixRisk"" WHERE ""20_UE"".""FinalLikelihood"" = ""MatrixRisk"".""IDLikelihood"" AND ""20_UE"".""FinalSeverity"" = ""MatrixRisk"".""IDSeverity"" AND ""20_UE"".""IDUE"" = '" & oIDUE & "'"
'MsgBox oQuery
oFinalRisk=oStatement.executeQuery(oQuery)
'MsgBox oFinalRisk
If Not IsNull(oFinalRisk) And Not IsEmpty(oFinalRisk) Then
End if
Result = oFinalRisk.GetString(1)
' MsgBox Result
oTable=e.Source.Context.Controls(0).Model
  oTable.executeUpdate("UPDATE ""20_UE"" SET ""20_UE"".""FinalRisk"" = (SELECT ""MatrixRisk"".""Risk"" FROM ""20_UE"", ""MatrixRisk"" WHERE ""20_UE"".""FinalLikelihood"" = ""MatrixRisk"".""IDLikelihood"" AND ""20_UE"".""FinalSeverity"" = ""MatrixRisk"".""IDSeverity"" AND ""20_UE"".""IDUE"" = '"&oIDUE&"') WHERE IDUE = '"&oIDUE&"'")

DisconnectFromDataBase(db)
End Sub

* DATABASE-Empty4.odb (565.51 Кб - загружено 3 раз.)
« Последнее редактирование: 7 Декабрь 2016, 21:13 от MichaFon » Записан
rami
Гуру
*******
Offline Offline

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


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #8: 7 Декабрь 2016, 10:54 »

Поправил макрос:
Код:
Sub RiskAuto
Dim oForm As Object, oForms As Object, oTable as Object
Dim oStatement As Object, oEvent As object, oFinalRisk As Object, oQuery$, oRisk$
oIDUE="28"   '"правильное" значение
oQuery="SELECT ""MatrixRisk"".""Risk"" FROM ""20_UE"", ""MatrixRisk"" WHERE ""20_UE"".""FinalLikelihood"" = ""MatrixRisk"".""IDLikelihood"" AND ""20_UE"".""FinalSeverity"" = ""MatrixRisk"".""IDSeverity"" AND ""20_UE"".""IDUE"" = :x"

db=ConnectToDataBase("DATABASE-Empty 3")
ps=db.prepareStatement(oQuery)   'запрос по значению oIDUE
ps.setLong(1,oIDUE)
oResult=ps.executeQuery()
If NOT IsNull(oResult) AND NOT IsEmpty(oResult) Then
If oResult.next() Then oRisk=oResult.getString(1)
End If
oStatement=db.createStatement()

oSql="UPDATE ""20_UE"" SET ""20_UE"".""FinalRisk"" = '" & oRisk & "' WHERE IDUE = " & oIDUE
oStatement.executeQuery(oSql)   'вставка в таблицу

DisconnectFromDataBase(db)
End Sub

P.S. MichaFon, используйте уникальные названия для документов которые выкладываете на форуме (3 дек. и сегодня вы выложили разные документы под одним именем — что не есть хорошо)
Записан

MichaFon
Новичок
*
Offline Offline

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


« Ответ #9: 7 Декабрь 2016, 21:15 »

Исправил(сменил имя загруженного файла).
P.S. MichaFon, используйте уникальные названия для документов которые выкладываете на форуме
Записан
MichaFon
Новичок
*
Offline Offline

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


« Ответ #10: 8 Декабрь 2016, 01:40 »

В макросе не могу получить  текущий IDUE и записать его в переменную - ошибка Object не установлен. Поэтому для отладку пробовал вручную присваивать значение переменной. Но и тут ошибка NoData is Available

Код:
Sub RiskAuto
  Dim oForm As Object, oForms As Object, oTable as Object
  Dim oStatement As Object, oEvent as object, oFinalRisk As Object, oQuery as String
db=ConnectToDataBase("DATABASE-Empty4")
oStatement=DB.createStatement()
 oForms = ThisComponent.getDrawPage().getForms()
 oForm = oEvent.Source.getModel().getParent()
 ' oIDUE="28" 'для проверки\отладки
 oIDUE=oForm.getByName("IDUE")
  'MsgBox oIDUE
  oQuery="SELECT ""MatrixRisk"".""Risk"" FROM ""20_UE"", ""MatrixRisk"" WHERE ""20_UE"".""FinalLikelihood"" = ""MatrixRisk"".""IDLikelihood"" AND ""20_UE"".""FinalSeverity"" = ""MatrixRisk"".""IDSeverity"" AND ""20_UE"".""IDUE"" = '" & oIDUE & "'"
'MsgBox oQuery
oFinalRisk=oStatement.executeQuery(oQuery)
If Not IsNull(oFinalRisk) And Not IsEmpty(oFinalRisk) Then
End if
Result = oFinalRisk.GetString(1)
' MsgBox Result
oTable=e.Source.Context.Controls(0).Model
oTable.executeUpdate("UPDATE ""20_UE"" SET ""20_UE"".""FinalRisk"" = (SELECT ""MatrixRisk"".""Risk"" FROM ""20_UE"", ""MatrixRisk"" WHERE ""20_UE"".""FinalLikelihood"" = ""MatrixRisk"".""IDLikelihood"" AND ""20_UE"".""FinalSeverity"" = ""MatrixRisk"".""IDSeverity"" AND ""20_UE"".""IDUE"" = '" & oIDUE & "') WHERE IDUE = '" & oIDUE & "'")
DisconnectFromDataBase(db)
End Sub

* DATABASE-Empty5.odb (565.44 Кб - загружено 3 раз.)

* Object_не_установлен.png (18.04 Кб, 583x237 - просмотрено 7 раз.)

* NoDataIsAvailable.png (24.5 Кб, 666x327 - просмотрено 7 раз.)
Записан
MichaFon
Новичок
*
Offline Offline

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


« Ответ #11: 9 Декабрь 2016, 00:00 »

Понял ошибку и смог определить IDUE (записать в переменную oIDUE) и смог определить букву риска (FinalRisk)
Код:
Sub RiskAuto (oEvent as Variant)
  Dim oForm As Object, oForms As Object, oTable as Object
  Dim oStatement As Object, oEvent as object, oFinalRisk As Object, oQuery as String
db=ConnectToDataBase("DATABASE-Empty5")
oStatement=DB.createStatement()
  oForms = ThisComponent.getDrawPage().getForms()
  oForm  = oForms().getByName("SubFormUEList")
  oID=oForm.getByName("txtIDUE")
oIDUE=CDbl(oID.text)
 ' MsgBox oIDUE
  oQuery="SELECT ""MatrixRisk"".""Risk"" FROM ""20_UE"", ""MatrixRisk"" WHERE ""20_UE"".""FinalLikelihood"" = ""MatrixRisk"".""IDLikelihood"" AND ""20_UE"".""FinalSeverity"" = ""MatrixRisk"".""IDSeverity"" AND ""20_UE"".""IDUE"" = '" & oIDUE & "'"
'MsgBox oQuery
oFinalRisk=oStatement.executeQuery(oQuery)
If Not IsNull(oFinalRisk) And Not IsEmpty(oFinalRisk) Then
  oFinalRisk.next()
Result = oFinalRisk.GetString(1)
MsgBox Result
End if
oTable=e.Source.Context.Controls(0).Model
  oTable.executeUpdate("UPDATE ""20_UE"" SET ""20_UE"".""FinalRisk"" = (SELECT ""MatrixRisk"".""Risk"" FROM ""20_UE"", ""MatrixRisk"" WHERE ""20_UE"".""FinalLikelihood"" = ""MatrixRisk"".""IDLikelihood"" AND ""20_UE"".""FinalSeverity"" = ""MatrixRisk"".""IDSeverity"" AND ""20_UE"".""IDUE"" = '" & oIDUE & "') WHERE IDUE = '" & oIDUE & "'")

DisconnectFromDataBase(db)
End Sub

Переменную oFinalRisk и oQuery определял сугубо для отладки (букву риска определяю без ошибки).
Осталось решить проблему, как в таблицу вписать риск, при выполнении кода:
Код:
oTable=e.Source.Context.Controls(0).Model
  oTable.executeUpdate("UPDATE ""20_UE"" SET ""20_UE"".""FinalRisk"" = (SELECT ""MatrixRisk"".""Risk"" FROM ""20_UE"", ""MatrixRisk"" WHERE ""20_UE"".""FinalLikelihood"" = ""MatrixRisk"".""IDLikelihood"" AND ""20_UE"".""FinalSeverity"" = ""MatrixRisk"".""IDSeverity"" AND ""20_UE"".""IDUE"" = '" & oIDUE & "') WHERE IDUE = '" & oIDUE & "'")
ошибка Object не установлен

« Последнее редактирование: 9 Декабрь 2016, 00:42 от MichaFon » Записан
rami
Гуру
*******
Offline Offline

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


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #12: 9 Декабрь 2016, 01:00 »

Осталось решить проблему, как в таблицу вписать риск, при выполнении кода:
Код:
oTable=e.Source.Context.Controls(0).Model
  oTable.executeUpdate("UPDATE ""20_UE"" SET ""20_UE"".""FinalRisk"" = (SELECT ""MatrixRisk"".""Risk"" FROM ""20_UE"", ""MatrixRisk"" WHERE ""20_UE"".""FinalLikelihood"" = ""MatrixRisk"".""IDLikelihood"" AND ""20_UE"".""FinalSeverity"" = ""MatrixRisk"".""IDSeverity"" AND ""20_UE"".""IDUE"" = '" & oIDUE & "') WHERE IDUE = '" & oIDUE & "'")
ошибка Object не установлен
1. откуда берётся е ведь передаётся событием oEvent
2. executeUpdate надо применять не к таблице в форме, а к базе:
Код:
oStatement.executeUpdate("UPDATE ""20_UE"" SET ""20_UE"".""FinalRisk"" = (SELECT ""MatrixRisk"".""Risk"" FROM ""20_UE"", ""MatrixRisk"" WHERE ""20_UE"".""FinalLikelihood"" = ""MatrixRisk"".""IDLikelihood"" AND ""20_UE"".""FinalSeverity"" = ""MatrixRisk"".""IDSeverity"" AND ""20_UE"".""IDUE"" = '" & oIDUE & "') WHERE IDUE = '" & oIDUE & "'")   'вставка в таблицу
потом обновить.

Что у вас вызывает макрос RiskAuto?
Записан

JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

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


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


WWW
« Ответ #13: 9 Декабрь 2016, 01:18 »

Событие по смене S1-S5 - комбобокс слева внизу
Записан

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

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


« Ответ #14: 9 Декабрь 2016, 01:20 »

Комбо-бокс Severity

1. откуда берётся е ведь передаётся событием oEvent
Ошибку понял, но пока не понял как исправить. "e" это скопировал Вашу же реализацию смены цвета таблицы, скопировал как есть нужно "e" заменить на "правильный" код.



* Risk.png (15.38 Кб, 1004x266 - просмотрено 6 раз.)
Записан
Страниц: 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!