2016-07-26 3 views
1

У меня есть 3 колонки в моей базе: COL1, COL2 и COL3. Я хочу разместить их в своем отчете, но динамически, например:Динамическая структура столбцов

IF i = 3 THEN COL3 
ELSE IF i = 2 THEN COL2 
ELSE IF i = 1 THEN COL1 

Таким образом, структура зависит от условий. так что возможно иметь что-то вроде следующего?

stringvar test:= COL; 
numbervar i = 3; 
{test + toText(i)} 

Я хочу поймать исключение, если структура столбцов изменится в будущем.

+0

использовать его в формуле .. –

ответ

0

That's not exactly something Crystal Reports is well equipped for. Нет никакого способа использовать строку, чтобы определить, какое поле захватывать, не используя структуру if-else.

Однако, если в будущем будет добавлено COL4, вам все равно придется войти и изменить отчет, так что numbervar может быть установлен в 4. Нет ничего хорошего, чтобы Кристалл мог ожидать столбец, который может быть или не быть там ,

Поэтому, учитывая это, оператор if-else является лучшим способом определить, какой столбец захватить. Несмотря на то, чтобы сэкономить немного времени на копирования оклейки, вы могли бы подготовить будущих строк кода в виде комментариев и активировать их, когда время уместно:

IF i = 1 THEN {table.COL1} 
ELSE IF i = 2 {table.COL2} 
ELSE IF i = 3 {table.COL3} 
\\ ELSE IF i = 4 {table.COL4} 
\\ ELSE IF i = 5 {table.COL5} 
\\ ... 
+1

это была моя вторая идея, чтобы он например, если кристалл не поддерживает другой способ – Simon

+0

Да, вы могли бы подумать, что это будет поддерживаемая функция. Кристалл существует уже давно, и ему необходимо поддерживать много устаревшего кода. Хорошая практика ориентации на объекты в то время не вызывала большого беспокойства. – 4444

0

так же, как это:

numbervar s:=0; 
if {Command_1.emp_number} = 1 then 

    s = 3 
else 

    s = 4; 

Надеется, что это помогает в качестве руководства ..