|
![]() |
#1 |
Moderator
|
В языке Cи можно писать операторы присваивания с условием в одну строку:
Код: A = (B>100)? C : D; В навижене так писать нельзя, но конструкция подобного типа может пригодится в случае вывода числа в табличную часть формы - например когда в случае нуля надо вывести пустую ячейку, или, например, в случае превышения писать 'превышение' Парадигма программирования очень простая: булево условие надо превратить в целочисленный параметр и используя это число получить требуемую строку В общем, начальные условия задачи: Str1 - строка, которая выводится на при истинности условия Str2 - строка, которая выводится на при ложности условия Condition - условие, результат которого есть булево выражение TRUE или FALSE Тогда 1. Булево выражение Condition надо превратить в число 0 или 1. Сделать это можно, например, так: Код: STRLEN(FORMAT(Condition))-2 Можно это выражение инверснуть, т.е Код: 3-STRLEN(FORMAT(Condition)) дальше проще 2. Вот готовый код, который выводит Str1 или Str2 в завиcимости от условия Код: MESSAGE(COPYSTR(str1+str2, STRLEN(str1)*(STRLEN(FORMAT(Condition))-2)+1, STRLEN(str1)*(3-STRLEN(FORMAT(Condition))) +STRLEN(str2)*(STRLEN(FORMAT(Condition))-2))); Ну а теперь пара готовых примеров: 1) вывести в поле формы число Number. В случае если Number=0 выводит пустую строку Код: COPYSTR(' '+FORMAT(Number), (STRLEN(FORMAT(Number=0))-2)+1, (3-STRLEN(FORMAT(Number=0))) +STRLEN(FORMAT(Number))*(STRLEN(FORMAT(Number=0))-2)) Код: COPYSTR('НОРМА'+'ПРЕВЫШЕНИЕ', STRLEN('НОРМА')*(STRLEN(FORMAT(Number>100))-2)+1, STRLEN('НОРМА')*(3-STRLEN(FORMAT(Number>100))) +STRLEN('ПРЕВЫШЕНИЕ')*(STRLEN(FORMAT(Number>100))-2)) |
|
![]() |
#2 |
Участник
|
Зачем?
![]() Код: IF Number>100 THEN Str := 'Превышение' ELSE str:='Норма'
__________________
Должен остаться только один. |
|
![]() |
#3 |
Moderator
|
В SourceExpr условие IF не запихаешь...
|
|
![]() |
#4 |
Участник
|
|
|
![]() |
#5 |
Участник
|
OnFormat
|
|
![]() |
#6 |
Участник
|
Yes Nо
Да Нет На разных языках по разному работает, можно попробовать Код: strpos(format(false,0,2),'1') Код: COPYSTR('ПревышениеНорма',strpos('0ревышение1',format(false,0,2)),10) Самый красивый вариант Код: STRSUBSTNO('%'+Format(strpos('01',format(True,0,2))),'Превышение','Норма') STRSUBSTNO('%'+Format(strpos('01',format(True,0,2))),'Превышение',Variable) 1)Вот готовый код, который выводит Str1 или Str2 в завиcимости от условия Код: SELECTSTR(strpos('10',format(false,0,2)),'Норма,Превышение') Код: SELECTSTR(strpos('10',format(Number=0,0,2)),' ,'+format(Number)) Код: SELECTSTR(strpos('10',format(Number>10,0,2)),' Превышение,'+format(Number)) |
|