2013-02-18 149 views
1

我试图搞清楚这一点,但无济于事。我所在的数据库有根据期间显示总帐科目余额的字段(例如{GLAF.BAL1}{GLAF.BAL2},{GLAF.BAL3}等)。 我正在寻找一种基于当前日期显示余额总和的方法。动态字段名称的水晶报表公式

我有以下公式来确定当前周期是什么(我们的财政年度开始8/1:

if month(currentdate) >= 8 then Period := (Month(currentdate)-7) else Period := (Month(currentdate)+5) 

有没有我可以创建一个公式,基本上会做以下方式二。例子,以确保它是清楚的:

实施例1(当前周期= 4):

Balance =: ({GLAF.BAL1} + {GLAF.BAL2} + {GLAF.BAL3}) 

实施例2(电流周期= 7):

Balance =: ({GLAF.BAL1} + {GLAF.BAL2} + {GLAF.BAL3} + {GLAF.BAL4} + {GLAF.BAL5} + {GLAF.BAL6}) 

回答

0

可以稍微缩短公式是这样的:

if {?period} >= 1 then {GLAF.BAL1} + 
if {?period} >= 2 then {GLAF.BAL2} + 
if {?period} >= 3 then {GLAF.BAL3} + 
if {?period} >= 4 then {GLAF.BAL4} + 
if {?period} >= 5 then {GLAF.BAL5} + 
if {?period} >= 6 then {GLAF.BAL6} + 
if {?period} >= 7 then {GLAF.BAL7} + 
if {?period} >= 8 then {GLAF.BAL8} + 
if {?period} >= 9 then {GLAF.BAL9} + 
if {?period} >= 10 then {GLAF.BAL10} + 
if {?period} >= 11 then {GLAF.BAL11} + 
if {?period} >= 12 then {GLAF.BAL12} 

然而要小心,没有值是NULL,因为这需要更仔细的处理。

+0

谢谢!这工作完美。我知道我必须有一些显而易见的方式,而且这很好。 – 2013-02-19 12:53:56

+0

更新: 我不得不略微调整公式,以说明会计总是在发布数字后一个月后工作。所以我只是将每个区间增加1,并在底部放置“if {?period}> = 1”。 – 2013-02-19 13:04:53

1

我不知道的东西完全“动态”的,但我只是这样做:

local numberVar Balance := 0; 

if {@period} > 1 then 
    Balance := Balance + {GLAF.BAL1}; 

if {@period} > 2 then 
    Balance := Balance + {GLAF.BAL2}; 

if {@period} > 3 then 
    Balance := Balance + {GLAF.BAL3}; 

Balance; 
+0

谢谢!你的答案也产生了正确的数字。我只是因为公式更短而与其他答案一起去了。 – 2013-02-19 12:53:14

0

使用 SQL表达式或公式字段将NULL转换为零。每个数据库字段需要一个(在您的情况下为12个)。

SQL表达式语法:

-- {%GLAF.BAL01} 
-- convert NULL to 0 
NVL(GLAF.BAL1,0) 

公式字段语法:

// {@GLAF.BAL01} 
// convert NULL to 0 
If IsNull({GLAF.BAL1}) Then 0 Else {GLAF.BAL1} 

创建一个公式字段来概括这些字段:

// {@Balance} 
// place each field in an array; summarize array 
// use formula fields to convert NULL to 0 
Numbervar Array periods := [{@GLAF.BAL01},{@GLAF.BAL02},...,{@GLAF.BAL12}]; 

Local Numbervar balance:=0; 
Local Numbervar i; 

For i := 1 To {?period} Do (
    balance := balance + periods[i]; 
); 

balance;