AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.03.2007, 12:11   #1  
Kirvisniemi is offline
Kirvisniemi
Moderator
 
342 / 13 (1) ++
Регистрация: 21.12.2004
В языке Cи можно писать операторы присваивания с условием в одну строку:
Код:
A = (B>100)? C : D;
Это значит присвоить переменной A значение C, в случае если B>100; и значение D в противном случае.

В навижене так писать нельзя, но конструкция подобного типа может пригодится в случае вывода числа в табличную часть формы - например когда в случае нуля надо вывести пустую ячейку, или, например, в случае превышения писать 'превышение'

Парадигма программирования очень простая: булево условие надо превратить в целочисленный параметр и используя это число получить требуемую строку

В общем, начальные условия задачи:

Str1 - строка, которая выводится на при истинности условия
Str2 - строка, которая выводится на при ложности условия
Condition - условие, результат которого есть булево выражение TRUE или FALSE

Тогда

1. Булево выражение Condition надо превратить в число 0 или 1.

Сделать это можно, например, так:
Код:
STRLEN(FORMAT(Condition))-2
Это выражение дает 1 при Condition=FALSE и 0 при TRUE

Можно это выражение инверснуть, т.е
Код:
3-STRLEN(FORMAT(Condition))
даст 0 при Condition=FALSE и 1 при TRUE

дальше проще

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))
2) вывести в поле формы надпись НОРМА если Number>100 и надпись ПРЕВЫШЕНИЕ в противном случае:
Код:
COPYSTR('НОРМА'+'ПРЕВЫШЕНИЕ',
		   STRLEN('НОРМА')*(STRLEN(FORMAT(Number>100))-2)+1,
		   STRLEN('НОРМА')*(3-STRLEN(FORMAT(Number>100)))
		   +STRLEN('ПРЕВЫШЕНИЕ')*(STRLEN(FORMAT(Number>100))-2))
и все это заметьте в одну строку
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 01:40.