EAS套打入门reportone.docx

上传人:b****8 文档编号:30155166 上传时间:2023-08-05 格式:DOCX 页数:12 大小:341KB
下载 相关 举报
EAS套打入门reportone.docx_第1页
第1页 / 共12页
EAS套打入门reportone.docx_第2页
第2页 / 共12页
EAS套打入门reportone.docx_第3页
第3页 / 共12页
EAS套打入门reportone.docx_第4页
第4页 / 共12页
EAS套打入门reportone.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

EAS套打入门reportone.docx

《EAS套打入门reportone.docx》由会员分享,可在线阅读,更多相关《EAS套打入门reportone.docx(12页珍藏版)》请在冰豆网上搜索。

EAS套打入门reportone.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1