1

我试图弄清楚这一点,但无济于事。我正在使用的数据库具有显示基于期间的 GL 帐户余额的字段(例如{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})
4

3 回答 3

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;
于 2013-02-19T09:14:29.753 回答
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因为这需要更仔细的处理。

于 2013-02-19T09:38:46.667 回答
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;
于 2013-02-19T16:01:35.317 回答