18.9. 开发报表

PostERP的用户可以无限制地自行开发更多报表,让终端用户以之预览与打印报表,或把SQL回应的资料存成文档。数据库里的table都可以拿来自行编制报表,立即集成到指定屏幕的选单中。

18.9.1. 设计报表的SQL

Figure 18-7. 设计报表的SQL

如果要在SQL中嵌入参数供终端使用人输入,请在参数之前加冒号:。例如:

	SELECT f1,f2 FROM t52 WHERE f2 BETWEEN :bd AND :ed
			

其中,bded分别为两个参数。然后在参数页指定个参数的作用,自此,这些参数即等后终端使用人输入数值。

Note

如果必须cast PostgreSQL的资料型态,不要这样cast:f1::TEXT。因为::会混淆PostERP瘦客户。请这样cast:CAST(f1 AS TEXT)

Tip

请善用PostERP提供的月初、月底函数:MonthBegin()MonthEnd()。详见Chapter 8

Note

PostERPSQL injection攻击有防卫。因为终端用户只能输入参数,PostERP再嵌入这些参数进去SQL text。PostgreSQL遇到无效的SQL参数时,会以执行失败告终。

18.9.2. 设计报表样板

Note

开发系统的工作可以选择在云版桌面版PostERP上面进行。但是有一个例外 – 设计报表样板,只能在桌面版PostERP上面进行。

所以,兆笔的开发伙伴必须从GitLab下载瘦客户软件tc.exe,执行它,接入你的开发服务器。其IP地址於您以伙伴开发人身份登录后,在这个网页显示。

Note

PostERP目前版本只能打印Bitmap以及JPEG图案。

Figure 18-8. 设计报表样板

固定式财务报表样板的主要DataSet name必须设定成mds

18.9.2.1. 标题代码

多利用PostERP的国际化功能,以设计多国语言的报表样板。

Tip

关於片语的设定,请参考Section 18.1

假设报表样板有一个字段标题,是员工姓名。因为这份报表将提供给全球操不同语言的用户使用,所以,把员工姓名这几个中文字直接设计在报表样板里,并不可行。

正确的作法是:设置标题代码字段,也就是C245。这里的C是常数,不可以更换。紧跟在C常数的数字245片语#。如此一来,各国终端用户於打印报表时,PostERP会自动把员工姓名以该用户所使用的语言呈现。

18.9.2.2. 样板里面的ReportTitle变量

终端用户於打印报表时,此变量(注意大、小写)会被该报表名称取代。这个名称通常用在报表的表头。

18.9.2.3. 内嵌在SQL语句里的变量

PostERP 自动把内嵌在SQL语句(参见Section 18.9.1)里的变量转成报表变量(注意大、小写)。终端用户於打印报表时,这些变量会被使用人输入的值取代。

18.9.2.4. 样板里面的COMPANY变量

终端用户於打印报表时,此变量(注意大、小写)会被该用户正在操作的公司名取代。

18.9.2.5. 公司logo

如果样板有Image元件且符合下列全部条件,则PostERP自动在该元件打印公司的logo。

  • Image source:选用Database field:

  • Database field:的右侧框填入DataSetCompanyLogo.logo(注意大、小写)。

Logo自数据库里面的t45.f5table与column读取。

18.9.3. 授权报表

PostERP用户授权,令其拥有出这份报表的权限:

Figure 18-9. 授权报表给使用人

18.9.4. 报表预览

Figure 18-10. 报表预览

Tip

报表的输出,可以转存成Excel文档。

18.9.5. 进阶报表样板设计

18.9.5.1. 子报表

有些报表并非只用一道SQL指令就能取得资料。

例如PostERP的分录里的辅助标记:如果把一道SELECT指令选出的金额辅助标记资料放在报表样板的detail band中,然后小计金额字段,则此金额小计是错的!因为:每一笔金额是附属於序号,而且每一笔序号附挂多笔辅助标记记录。金额小计所得到的结果是错误的重复多次辅助标记金额加总。

此例,正确的作法是采用子报表技术。

Tip

请参考附挂於[MzF5]屏幕报表#『3』子报表范例

18.9.5.2. Cross Table报表

请参考附挂於[MzF5]屏幕报表#『1』报表#『2』Cross Table范例报表