EAS套打入门reportone.docx
- 文档编号:30155166
- 上传时间:2023-08-05
- 格式:DOCX
- 页数:12
- 大小:341KB
EAS套打入门reportone.docx
《EAS套打入门reportone.docx》由会员分享,可在线阅读,更多相关《EAS套打入门reportone.docx(12页珍藏版)》请在冰豆网上搜索。
EAS套打入门reportone
EAS套打模板设计(ReportOne格式)快速入门
1、前言
本文希望通过简要的描述,使用户快速了解EAS套打中的ReportOne格式并能够按照实际需求自己动手设计模板。
ReportOne系列的Print格式(模板文件名为*.r1-print,以下简称为R1),应用于EAS套打,为EAS用户提供自定义格式的单据、报表打印。
R1格式集成到EAS中,始于版本5.4.0。
本文针对EAS6.0.0(5.9)而作,EAS5.4.0的用户也可参考,基本无异。
图1 套打管理中的新建R1模板操作
2、R1格式的组件及规则
R1格式包含了下列组件:
页、单元对象(文字、金额、图片)、数据表、网格。
2.1 页
一个模板,自动对应了一个页对象。
页不可创建、删除。
页是模板的可设计区域。
通常,页的大小为纸张大小减去四边距后的尺寸,此时页与纸张一一对应,套打模式和大部分报表模式就是这种情形。
但是当多数据源的报表模式(参考后文的“简历模式”),设计时内容就很多,此设计区域容纳不下的时候,允许修改页的高度。
见下图“页面设置”(注:
由于不存在横向自由扩展的功能,页宽度不可修改)。
图2-1页面设置
运行时,页自动与主数据源绑定。
如果不存在“能引起分页的对象(如数据表)”绑定主数据源,则主数据源自动移至其下一条记录使页重复输出,例如票据套打模式、简历模式等。
否则,由“能引起分页的对象”分页。
2.2 单元对象
单元对象包括:
文字对象、金额对象、图片对象,它提供了一块固定的区域,用于展现对应的内容。
此内容可以是绑定字段,或自定义的固定内容。
注意,“单元对象”是离散的矩形区域,不等同于表格的“单元格”。
图2-2 工具箱中的单元对象
单元对象本身不引起分页,也不会引起数据源移动至下一条记录。
当单元对象放置在可高度自适应的容器中,并“纵向充满”容器时,可实现高度自适应的效果。
什么是“可高度自适应的容器”?
网格的行、数据表的数据行,具有“行高自适应”的属性,它们的单元格为“可高度自适应的容器”。
其中的金额对象,提供了对动态币别的支持。
对象除了本身可绑定金额数值的字段外,还可以再绑定币别字段。
系统根据数据源提供的币别信息,实现“人民币壹佰元整”、“$123.45”等形式的展示。
2.3 数据表
数据表是一种表格,它由规整的行、列组成,行列的交汇处为单元格。
行、列、单元格是组成表格的基本元素。
(注意“单元格”不等同于“单元对象”)
数据表具有分组展现、统计功能,其数据行能根据数据源重复输出,它是一种可能引起分页的对象。
2.3.1 行
数据表的行分为三种不同类型:
普通行、分组行、数据行。
图2-3 数据表各种类型的行及分组描述
数据行有且只有一行,数据表至少由这一行组成。
数据行顾名思义,用于将数据源逐行输出。
相对于分组行中的统计内容,数据行中的内容可称为明细数据。
数据行属性设置中有“套打型”和“报表型”供选择。
套打型用于指定每页打印固定行数;报表型则按照数据量重复输出,空间不够时自动分页。
分组行与分组对应。
在数据表上设置一层分组,则数据行上下两侧各增加一个分组行,称为“分组头”、“分组尾”。
分组头、尾随分组重复输出。
每层分组的头、尾允许增删多个分组行,但至少必须各保留一行。
如果按照需求必须做分组,而分组头(或分组尾)不想输出,可将其行高设为0,或设置其属性“不打印”。
普通行位于最外层,对应一份报表的表头表尾,即“总计层”。
数据表允许在其头、尾插入多行普通行,也允许没有普通行。
普通行和分组行有属性“每页出现”,可规避其随分组起、止才出现的特性,分页时随页的重复而每页出现,通常与“套打型”配合使用。
2.3.2 单元格
数据表的单元格可以直接用于显示文字内容,也可以作为容器放置单元对象,它可以是下列类型之一:
文本——固定的文字内容,通常出现在表头或分组头;
字段——绑定数据表当前数据源的某个字段,通常出现在数据行中;
统计——可做分组统计(分组范围内)、区域统计(当前页范围内)、累计(从分组开始至当前页)等,通常出现在分组尾(该层分组的统计)或表尾的普通行(总计);
运算——统计功能的扩展,支持横向的在同一行中对多个数值字段进行运算,再对运算结果进行纵向的统计,最终运算结果显示在该单元格中;
容器——可放置单元对象或网格,但数据表本身不允许嵌套。
多个单元格可以融合。
表头表尾某些列与整体不符的情况,通常可以将一行中的几个单元格进行“合并单元格”,再放入网格进行划分。
另一种常见情形是某一列从分组头,跨过数据行,合并到分组尾,并绑上分组字段。
注意某些情形可能是没有意义的,例如在二层分组头之间做单元格的融合。
2.3.3 数据源绑定
数据表必须绑定唯一的一个数据源。
如果要展现另一个数据源的数据,可以在单元格中放置单元对象,并通过单元对象绑定另一数据源的字段。
2.4 网格
网格也是一种表格,同样由行、列、单元格是组成。
网格本身不绑定数据,它的行没有类型;单元格也不能显示文字,只能作为容器使用。
网格的基本功能是作为一种布局的手段,放置一批单元对象,使模板的调整更简单。
此时,网格可放在页中、数据表的单元格中。
网格可以嵌套,但嵌套会使模板变得复杂,所以通常通过单元格的融合也可以达到相同的效果。
网格的另一高级功能是组合多个数据表,在多数据源的情况下完成报表的展现需求。
通常配合“一主多从”的数据源出现(参考“简历模式”),此时的网格作为分隔区域的大容器放置在页中,一般设置为1列多行。
可在第一行中放置另一网格做表头,可在后续各行中分别放置数据表。
放置数据表的行,设置属性“行高自适应”。
那么,这个做为大容器的网格,起到将各个数据表依次输出的目的。
所以,设置了行高自适应的网格,也是一个可能引起分页的对象。
3、模板设计经典模式
3.1 票据套打
以支票为代表的套打,其特征为:
*单数据源;
*数据源的每一行记录对应一张票据;
*不带分录。
在页面上准确位置放置单元对象,绑定字段即可。
页随数据源的记录自动重复输出。
模板允许从磁盘中导入一张图片作为背景,用于辅助确定准确位置。
该图片随模板保存、预览(除非设计完成后将其删除),但不输出到打印机。
图3-1支票套打
支票中金额的展现,可使用金额对象。
小写金额可按“样式”中的“填格”属性完成填格功能。
日期可按年、月、日,创建三个文字对象,都是绑定日期字段,分别做格式化:
yyyy、MM、dd。
如果是日期大写,可用脚本中提供的专门用于支票日期大写的formatChequeDate函数,例如在文字对象的“后处理脚本”中写上:
setValue(formatChequeDate(getValue(),"yyyy"))
3.2 单据套打
单据的主要特征是带分录,逻辑上是“单据——分录”关系的数据源,但在EAS中,通常表现为单数据源。
数据源所提供的数据形式上如下:
单据A 分录A-1
单据A 分录A-2
单据B 分录B-1
单据B 分录B-2
单据B 分录B-3
单据C 分录C-1
由上例可见,三张单的分录合并在一起由一个数据源提供。
数据源总共6条记录,第一张单据A有2条分录、第二张单据B有3条分录、第三张单据C有1条分录。
对于此种情形,要做分组,分组字段为“单据ID”(或叫“单据号”之类能唯一标识单据的字段)。
图3-2 单据套打
该模式通常只需一个数据表,前后普通行融合后放网格做表头表尾;分组头做分录的标题,分组尾绑单据的汇总字段或利用套打系统做统计;数据行为套打型,每页重复固定次数。
所有普通行、分组行设置为“每页出现”。
常见的“凭证”等业务的套打,属于此模式。
3.3 多数据源的单据套打(带审批的单据)
该模式特针对下述情形:
*在上述“单据套打”所描述的单数据源的基础上,增加了一个审批信息数据源;
*审批记录行数可预知(最多不超过多少行);
*审批信息在单据每页中显示。
首先,模板开始设计之前,必须引入数据源并设置参数,使“从数据源”依赖“主数据源”。
此例中,输入参数名称为billId,为审批数据源的单据ID字段(可按数据库中“外键”的概念理解),绑定到单据数据源的单据ID字段。
图3-3 设置数据源依赖关系
和展现单据的数据表并列地,也放置一个数据表在页中,绑定审批数据源,位于单据下方。
由于审批记录行数可预知,设置数据行套打型、固定行数。
这样,审批信息将不会跨页,只出现在单据的第一页里。
如果有必要让审批信息在单据的每页中重复出现,在其数据表的“后处理脚本”中填上secondBirth()函数即可。
注意,此例中的数据源提供方式,不能满足报表形式的展现,即不能满足单据跨页显示完了,单据后头接上审批信息(除非只打印一张单据)。
如果要达成此需求,数据源必须是“单据——[分录,审批]”这样“一主二从”的形式,请参考“简历模式”。
3.4 单数据源的报表
“报表型”区别于“套打型”的特点是:
不限定每页显示数据行数,行高可随内容自动调整(行高自适应),通常为第一页开头是表头,表体内容跨若干页,最后一页是表尾的形式。
和单据套打类似,用一个数据表就可以解决问题。
做必要的分组,分组行择需隐藏(“不打印”属性);数据行设置为“报表型”;如果某些字段数据量不可预知,或各行数据多寡悬殊,可设置“行高自适应”;普通行、分组行的“每页出现”属性择需设置。
3.5 多数据源的报表(简历模式)
该模式的数据源为“一主多从”的结构。
以简历为例,对应的是“人员基本信息——[教育经历、工作经历……]”。
如同前面“多数据源的单据套打”中所述,对于多数据源的情况,同样需要设置依赖关系。
不赘述。
在“组件及规则”部分中已提及,利用页按主数据源的记录自动重复的功能,人员基本信息数据源中每一个人的记录都能自动得到输出。
我们只需要创建一个一列多行的网格作为基本容器,第一行嵌套另一个网格放置基本信息,第二行开始各放入一个数据表,显示教育经历等各从数据源的内容。
以上描述如下图所示。
为了清晰展示多层容器的关系,该图中各对象都向内部缩入,留出一圈边缘,实际设计模板时,对象应该是充满的,除非故意设计成这样。
从图中可以看到“分页提示线”,这是由于设计区域不足以容纳众多的内容,我们在页面设置中修改了页的高度。
此线只是提示,按照实际纸张输出,一页有那么大。
图3-4 简历模式
4、模板设计常见需求解决方案
4.1 盖章(电子签名)
需求一:
对于动态的内容,由数据源提供数据,用图片对象直接绑定字段即可。
需求二:
对于固定的内容,只是有条件地控制是否显示。
用图片对象,在其“后处理脚本”中写脚本进行控制。
假设存在一个叫“是否完成”的字段isFinished,布尔值,单据状态为“完成”则加盖图章。
图章的图片对象的脚本为:
if(getFieldValue("数据源名称","isFinished"))
{
setHide(false);
}
else
{
setHide(true);
}
脚本不是唯一的,只要符合语法,可以举一反三。
上例也可写成:
setHide(!
getFieldValue("数据源名称","isFinished"));
4.2 “是”/“否”(枚举值显示为汉字)
数据表单元格或单元对象绑定目标字段。
后处理脚本为:
setValue(getValue()?
"是":
"否");
或:
setValue(toStr(getValue())==“true”?
"是":
"否");
4.3 能否做到只显示统计,不显示明细数据
通过隐藏数据行,可以达到目的。
数据行属性--“不打印”。
虽然功能上能达到目的,但还是建议避免这种做法,尽量从数据源的角度考虑解决方案。
试想为了显示若干行统计数据而取回上万行明细数据,是多么笨拙的做法。
4.4 页眉页脚
R1格式中尚无明确的“页眉页脚”的概念。
但通过下列途径,可达到页眉页脚一致的效果:
*放置在页中的单元对象,可随页重复输出。
*在单数据表的情况下,数据表的前、后的普通行,设置“每页出现”。
4.5 节纸打印
简而言之就是例如在一张A4纸中打印三张凭证。
做法如下:
页面设置中纸张按实际打印的物理纸张设置为A4,勾上“节纸打印”选项。
模板中单据放置在页靠上三分之一的范围内。
4.6 连续走纸
针式打印机、两边带孔的连续纸。
打印机自动走纸,无需任何特殊设置。
4.7 超市小票模式
连续的纸张,每页长度由内容决定,可以打多长就撕下多少。
就像在超市买单时的购物小票。
页面设置,纸张选自定义(Custom)、纵向,勾上“动态走纸(超市小票模式)”选项。
4.8 关于纸张、横纵向与打印机进纸方向的问题
纸张有确定的大小,不管是标准纸还是自定义纸张,都是由宽度×高度来描述。
例如A4纸是210×297(单位:
毫米),如果尺寸为297×210,只是与A4物理纸张一样大,不能称为A4纸。
打印机的进纸方向是与纸张尺寸一致的,与横纵向的设置无关。
例如模板设置了纸张为A4纸,那么一张A4的物理纸张总是210的一端(宽)贴着进纸口,297的一端(高)垂直进纸口来装纸。
横纵向只是定义了内容在这张纸上的打印方向,和进纸方向无关。
以上是一般打印机与纸张的规则,由于容易混淆,特此说明。
另外,不管是设置了纵向还是横向,设计器和预览界面中看到的,总是文字正向的方向,不会像图片一样转换90度。
4.9 如何确定主数据源
当一个模板中定义了多个数据源时,要按照逻辑关系设置参数,定义依赖关系。
模板执行时,系统自动识别“不依赖于其它数据源的”为主数据源。
主数据源将影响到分页。
如果确实存在无依赖关系的、并列的数据源,则按照设计器中看到的顺序,第一个为主数据源。
此时,在设计器导航栏中的数据页签中,选中除第一个之外的任一数据源,鼠标右键,可看到“成为主数据源”的弹出菜单。
此菜单项可将选中目标置顶成为主数据源。
图4-1数据源
不建议在模板中定义多个无关的数据源,而实际只使用到其中的一个或几个。
5、设计器使用技巧
* 对象属性设置、设计区中的拖拽操作,遵循“选中目标”原则,即选中谁、操作谁。
就像文字编辑时的光标,光标在哪里,录入的文字就插入在哪里。
所以,当选中一个文字对象的时候问“为什么不能拖动表格行高”是不聪明的问题。
* 设计器左边导航栏的“报表”页签,是对设计区中对象的树状描述。
它的对象选中状态和设计区保持一致。
当设计区中出现重叠现象,比如对象覆盖到其容器,使选中不方便时,可通过此树来选中对象。
* [Ctrl]+鼠标单击,可多选对象;[Shift]+鼠标单击,可“块选”表格(包括数据表和网格)的单元格。
(注:
相同容器中的对象才允许多选。
)
* 选中工具箱中的组件,在设计区中创建对象时,按住[Ctrl],可连续创建多个对象。
* 导航栏“数据”页签,可将一个字段拖到设计区目标对象上绑定。
特别地,对于数据表,拖放字段的时候按住[Shift],可将字段别名作为文本内容填入单元格中;拖放字段的时候按住[Ctrl],可将单元格的类型置为对该字段的分组统计。
* 对象从一个容器“移动”到另一个容器,可剪切([Ctrl]+[X])、粘贴([Ctrl]+[V])。
* 数据表单元格的内容可复制,而且可按照单元格的位置批量复制。
例如把整行标题文字从第一行移动到第二行,选中第一行第一个单元格,[Shift]+选中第一行最后一个单元格,[Ctrl]+[X],选中第二行第一个单元格,[Ctrl]+[V]。
(注:
作者是R1套打设计器、执行引擎的开发人员,也是R1套打规则定义的主要设计人员)
48500
1.4
107000
1498
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EAS 入门 reportone