fastreport 合计函数_FastReport中如何使用自定义函数

本文介绍了如何在FastReport中使用自定义函数MoneyToCharacter,将数字转换为中文大写。该函数通过遍历数字字符串并结合中文数字和单位进行转换,然后在Memo28OnBeforePrint事件中引用此函数,用于显示SUM函数的计算结果。示例代码展示了函数的完整实现及应用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Code页的全部代码如下:

----------------------------------------

//这里是函数

function MoneyToCharacter(Money:real):string; //数字转换为中文大写

var

temp:string;

resu:string;

i,j:integer;

len:integer;

Num:array[0..9] of string;

A:array[0..13] of string;

begin

Num[0]:='零';

num[1]:='壹';

Num[2]:='贰';

num[3]:='叁';

Num[4]:='肆';

num[5]:='伍';

Num[6]:='陆';

num[7]:='柒';

Num[8]:='捌';

num[9]:='玖';

a[0]:='分';

a[1]:='角';

a[2]:='元';

a[3]:='拾';

a[4]:='佰';

a[5]:='仟';

a[6]:='万';

a[7]:='拾';

a[8]:='佰';

a[9]:='仟';

a[10]:='亿';

a[11]:='拾';

a[12]:='佰';

a[13]:='仟';

temp:=trim(inttostr(round(money*100)));

len:=length(temp);

resu:='';

if (len>13) or (len=0) then

begin

exit;

end;

for i:=1 to len do

begin

j:=strtoint(copy(temp,i,1));

resu:=resu+num[j]+a[len-i];

end;

result:=resu;

end;

//这里是自定义函数的引用

procedure Memo28OnBeforePrint(Sender: TfrxComponent);

begin

memo28.text:=MoneyToCharacter(SUM(,MasterData1)) ;

end;

begin

end.

----------------------------------------

### 插入合计函数的方法 在FastReport 中,为了实现报表中的数据汇总功能,如计算组总数或列表行数等,可以利用 Totals 功能。具体来说,在插入合计函数时需设置几个关键参数: - **合计函数的类型**:选择合适的聚合函数,比如 `Sum`、`Avg` 或者 `Count` 等。 - **表达式**:对于大多数函数而言,需要提供一个表达式作为输入。然而,“Count” 函数特别之处在于它并不强制要求指定具体的字段名[^1]。 #### 设置步骤说明 当配置这些参数时,还需要指明两个重要的位置属性——一个是用来处理该函数的数据 band(通常是在细节带 Detail Band),另一个是用来展示最终结果的位置即打印区 (PrintBand)。 下面是一个简单的例子,假设要统计某列数值之和并将其结果显示出来: ```cpp // 假设有一个名为 "SalesAmount" 的字段表示销售金额 var sumExpression = "<YourTable.SalesAmount>"; var totalField = new Total(); totalField.Name = "Total_Sales"; totalField.Expression = sumExpression; totalField.Function = TotalFunction.Sum; // 使用求和函数 detailBand.ComponentCollection.Add(totalField); ``` 如果想要获取记录的数量,则可以直接应用 Count 方法而无需定义额外的 expression 属性: ```cpp var countField = new Total(); countField.Name = "Record_Count"; countField.Function = TotalFunction.Count; summaryBand.ComponentCollection.Add(countField); ``` 以上代码片段展示了如何创建一个新的总计对象,并通过设定其名称(Name),以及所使用的内置函数(Function) 来达到目的。最后一步是将这个新创建的对象添加到相应的 DataBand 组件集合中去。 #### 处理特殊需求 针对某些特定场景下的复杂业务逻辑,例如转换成中文大写的合计金额,可以通过自定义脚本或者调用外部库来完成这样的操作。如下所示的例子演示了怎样把净额字段 AMTN_NET 转换成汉字表述的形式[^2]: ```cpp string chineseAmount = ConvertNumToChinese(SUM("<进/销/退/折表身档.AMTN_NET>", MasterData2)); ``` 这里的关键点在于正确构建 SQL 查询语句以提取所需数据,并确保传给 `ConvertNumToChinese()` 函数的是经过 SUM 计算后的总值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值