请求协助配置RTF模板:页眉显示page total+brought forward,页脚显示page total+carry forward
在Oracle BI Publisher RTF模板中实现每页页眉/页脚的累计合计(Brought Forward/Carry Forward)
要实现每页页眉显示Brought Forward(上期结转)+ Page Total(本页小计)、页脚显示**Page Total(本页小计)+ Carry Forward(本期结转)**的效果,核心是利用BI Publisher的全局变量和分页触发逻辑,以下是具体实现步骤:
1. 定义全局累计变量
在模板最开头(比如正文前的隐藏段落,避免显示)插入以下BI Publisher字段代码,初始化两个关键变量:
<?xdoxslt:set_variable($_XDOCTX, 'GLOBAL_TOTAL', 0)?> <?xdoxslt:set_variable($_XDOCTX, 'PAGE_TOTAL', 0)?>
GLOBAL_TOTAL:存储跨页的累计总金额PAGE_TOTAL:存储当前页的金额小计
2. 逐行累加金额到变量
在数据行的金额字段对应的位置(可隐藏该计算字段),插入代码实现每行金额的累加:
<?xdoxslt:set_variable($_XDOCTX, 'PAGE_TOTAL', xdoxslt:get_variable($_XDOCTX, 'PAGE_TOTAL') + <?AMOUNT?>)?> <?xdoxslt:set_variable($_XDOCTX, 'GLOBAL_TOTAL', xdoxslt:get_variable($_XDOCTX, 'GLOBAL_TOTAL') + <?AMOUNT?>)?>
替换<?AMOUNT?>为你模板中实际的金额数据字段。
3. 配置页眉内容
在页眉区域添加以下内容,实现Brought Forward和Page Total的显示:
Brought Forward: <?xdoxslt:get_variable($_XDOCTX, 'GLOBAL_TOTAL') - xdoxslt:get_variable($_XDOCTX, 'PAGE_TOTAL')?> Page Total: <?xdoxslt:get_variable($_XDOCTX, 'PAGE_TOTAL')?>
逻辑说明:Brought Forward = 全局累计值 - 当前页小计,即上一页结束时的累计金额。
4. 配置页脚内容
在页脚区域添加以下内容,实现Page Total和Carry Forward的显示:
Page Total: <?xdoxslt:get_variable($_XDOCTX, 'PAGE_TOTAL')?> Carry Forward: <?xdoxslt:get_variable($_XDOCTX, 'GLOBAL_TOTAL')?>
逻辑说明:Carry Forward就是当前全局累计值,即到本页结束时的总累计金额。
5. 重置当前页小计(关键)
在每页结束的触发点插入代码,重置PAGE_TOTAL为0,确保下一页的小计重新计算:
<?if@section-end?><?xdoxslt:set_variable($_XDOCTX, 'PAGE_TOTAL', 0)?><?endif?>
该代码会在BI Publisher分页结束时自动执行,避免跨页小计混淆。
注意事项
- 变量定义必须放在模板最开头,确保作用域覆盖所有数据行;
- 必须使用BI Publisher的PDF预览功能查看效果,Word原生预览无法解析变量逻辑;
- 若存在分组,需在分组结束时校验累计值是否正确,必要时添加分组级别的变量重置;
- 若累计值异常,检查变量更新代码是否在每行数据渲染后执行。
内容的提问来源于stack exchange,提问作者Saravanan J
相关产品推荐
相关产品推荐

