![]() |
#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)) |
|