打印模板

一、功能描述

解决客户在业务应用中需要的不同类型的打印能够按照模版打印,通过设计器的能力将单据上的数据转化为打印的服务。在业务应用中可以是小票打印、可以是合同打印、可以是凭证打印、可以套打、图片、二维码、主子表等多种单据的打印。随着业务的不断扩展,对于打印不同组织也会有不同的需求,可以通过分级管控解决各级组织的模版打印。而全球化在国际业务中也能够按照不同的语言或者格式展示本地区适合的模版,按照当地的语言格式打印。

2.1 单一表单的打印设计

只需要简单的文本设计或者单一表格就可以完成模板设计,例如在HR系统中打印人员信息表;在财务系统中打印收款单等等。

2.2 主子表和单据的打印设计

需要建立主表或者文本区域,还要建立与之对应的多个子表的模板设计。例如用户在采购系统中打印采购合同、采购订单;在销售系统中打印销售订单;在制造系统中打印生产订单等。一般主表呈现当前表单的统一信息,子表内显示具体的数据。

2.3 卡片的打印设计

需要呈现卡片样式的模板,例如固定资产卡片的打印模板、吊牌卡片模板、人员信息卡片模板等,可以根据卡片的样式直接打印。

2.4 套打模板的打印设计

需要事先加载已经存在的图片样式,在图片上设计文本内容,例如财务的各种记账凭证单、快递的发货单等都需要通过放入已有的单据图片进行套打,通过放入套打底图在对应的文本内完成图片的打印。

2.5 条码/二维码的打印设计

各类商品订单、商品出货单、退货单、固定资产等业务单据需要通过条码或者二维码快速识别。

2.6 分组表的打印设计

一个表列相同,但需要用某个字段分组,通过分组显示打印的情况,如人员信息,需要按照各个部门进行分组的情况下,需要将分组的字段放在每组的列头呈现。

2.7 直接打印

凭证批量打印,会有月底一次打印整月凭证的情况,通常不需要预览,直接打印,打印的凭证数量非常多。发货单批量打印场景,每天发货前会批量打印多张发货单,不需要预览,直接打印。

2.8 多语言打印

某中国的跨国企业在进行企业内部管理时,通常核心组织要给在国外的企业制定模板,这时候在和核心组织内的语言为中文,设定的模板也为中文;而在为国外如英国制定模板时指定的模板为应为,模板也为英文,国外的组织获取的打印单据也为英文。

某国内一家企业需要向国外采购物资,此时它的供应商里有英文的,也有台湾用繁体的。此时国内的企业需要将采购订单制定打印模板为中文,而对应的用英文的供应商则能够查看的打印内容是英文,而台湾的用户看到的打印内容是繁体。

三、主要操作说明

操作路径:进入【应用构建服务】→【应用构建】:自定义应用-页面建模-打印模板

3.1 应用搜索

下图可以根据应用的名称进行搜索过滤。

类别搜索

3.2 模板搜索

下图可以根据打印模板的名称进行搜索已经创建的模板。

在左侧的导出功能可以对打印模板导出为xml文件,导入功能对符合规则的xml模板文件进行导入。

模板搜索

3.3 模板基本操作

模板创建成功之后可进行的操作如预览、编辑、复制、设置默认/取消默认、停用、删除、重命名操作。

模板操作

  • 新增模板:下图是模板新增的操作。在选择的领域分类里添加模板,选择所属分类即表单分类,并填写名称。创建表单时只能是通过在表单级或者业务对象级创建,不能在领域、应用级进行创建。

模板操作

点击新增模板。

模板操作

选择所属的分类及模板名称,确定一个模板就创建成功了。

  • 删除模板:选择某个模板在更多里面选择删除按钮。删除的模板只能是租户级,如果是系统模板则不能被删除;设为默认值的模板也不能被删除。

  • 启停用模板:启用/停用选择的模板。启动显示状态为已启动,停止显示已停止。启用的模板能够被调用,而停用的模板则不能使用;如果已经在用的模板停用后不影响已经使用的状态。

  • 复制模板:选择当前模板复制一个模板为新的自定义模板。复制模板不能跨应用,目前支持跨表单复制,但也只支持人力资源领域,其他领域暂时不支持。复制时所属分类默认,模板名称能够在原有名称的基础上复制;如果复制多个名称按照_复制累加。

  • 重命名模板:点击名称,在文本框内修改模板的名称。重命名可以修改模板名称,模板名称不能重复。

  • 设置默认模板:可设置单个模板为默认模板。设置的模板显示状态为默认。在模板上选择默认模板则会对当前的模板打默认标记,打了标记的模板不能被删除,在用户使用时第一个被选到。

  • 预览:用户可以不进入编辑页面直接查看已经设置好的模板,管理页面的预览是打印时的预览,在这里的预览不能做任何的操作。

四、设计器

下图为设计器页面。

模板操作

图中1.控件区,2.画布区,3.工具栏、4.属性区。

4.1 控件区

4.1.1 组件

4.1.1.1 关键应用
  • 文本
  • 图片
  • 条形码
  • 列表
  • 套打列表
  • 卡片
  • 多行列表
  • 页眉
  • 页脚
  • 数据容器
  • 分组
  • 网格布局
  • 横线
  • 竖线
  • 矩形
  • 椭圆
4.1.1.2 主要操作说明
  • 文本 文本可以是一个普通的文本,也可以是一个表达式,也可以是一个数据源字段,也可以是个公式字段。普通文本上可以设置数据格式、设置边框属性、可以设置文本属性、可以设置对齐等属性,具体参看属性。 在组件【文本】上选择,然后拖拽至画布区任意位置。目前暂不支持拖至卡片和列表内,但是可以拖至网格内。 文本支持预览时的格式包括数字、货币、日期、百分比、时间和通用格式。

  • 图片 图片是可以在空白页面和网格内放置图片,图片支持格式包括png、jpeg、bmp等格式,也支持数据源。 在组件【图片】上拖拽至画布区,并在属性区上传图片或者在数据源上设置。

  • 条形码 条形码可以是条码也可以是二维码。条形码的显示要依赖于数据源字段。 在组件【条形码】上选择,拖拽至画布区。选择条码类型、并设置条码数据源。可以设置条形码的大小、显示样式等,在右侧属性显。 条形码支持主表字段,也支持字表字段。条码的具体描述参加如下所示: 条码描述

  • 列表 列表是最常用的组件,列表能够显示主子孙表的数据。 在组件【列表】上选择,拖拽至画布区,弹出数据源选择框,在数据源上选择列,并且设置列宽和顺序。

    列表的属性在右侧设置,可以设置列表头、列表尾的显示与隐藏;显示整个表头,显示孙表。 列表支持动态行高,默认是固定行高,固定行高时能够设置行数,并且可以自动分配行的大小。动态行高时自动进行计算,整个列表还支持显示行的个数,最多可以显示多少行。

  • 套打列表 套打列表主要是针对套打打印的列表。对于套打的列表本身是要有底图。 在选择组件【套打列表】前先在页面上添加套打图片,或者后放置也可以。在空白页面上点击右侧属性里的套打背景选择图片。套打列表的数据源设置和普通列表一致。 套打列表默认只支持固定行高,不支持动态行高;固定行高可以自动缩放字体,最小缩放至5号字,超出的内容用...表示。

  • 卡片 卡片是一种类似与单据里的普通卡片,主要是主表,也支持字表属性。卡片的样式多为文本加数据。 在选择组件【卡片】上选择,拖拽至画布区。卡片弹出设置数据源的弹框如下:卡片数据源选择时可以设置列数,设置列数能够显示对应的列。 卡片的属性支持动态行高,能够自动撑行的高度。可以设置在每页都打印等属性。

  • 多行列表 多行列表类似于多个列表的一个组件,最多支持3行的一个列表。在选择组件【多行列表】上选择,拖拽至画布区。卡片弹出设置数据源的弹框如下:根据选择的多行列表数量生成对应列表行。每个列表行中可以设置对应的列。也可以选择是否显示行号。

  • 页眉 页眉是指每页的头部区域。页眉不支持动态行高,只支持固定行高,需要根据业务数据设置。 页眉支持放置文本、二维码、图片、列表、卡片等组件。也支持在页眉都打印,或在最后一页打印,或除了第一页等设置。

  • 页脚 页脚是指每页的尾部区域。也为不支持动态行高,只支持固定行高。 页脚支持放置文本、二维码、图片、列表、卡片等组件。也支持在页眉都打印,或在最后一页打印,或除了第一页等设置。

  • 数据容器 页面布局方式为吸附模式下,非卡片控件需要存放在数据容器下。非吸附模式不强制使用。

  • 分组 分组是指对于一组数据能够按照其中的某个属性进行分组,多指子表分组。按照某个字段分组,如果某个字段有多个参照或者枚举值,则可以分出多个分组列表。 选择【分组】组件,拖拽能够弹出分组设置,设置一个字段进行分组。

  • 网格布局 网格布局是一种灵活的表格。网格内可以嵌套网格,可以放置其他任何组件。网格支持合并列和行,拆分列和行。可以删除行、删除列;在行的前面或者后边增加或者删除列操作。 网格布局支持边框显示与隐藏等样式属性。

  • 横线 可以随意画横线,可以在列表里添加横线。这里的线不能对数据进行分割,只起到样式分割。 选择【横线】在画布区里放置在任何位置,可以设置横线的样式和位置。

  • 竖线 可以随意画竖线,可以在列表里添加竖线。这里的线不能对数据进行分割,只起到样式分割。选择【竖线】在画布区里放置在任何位置,可以设置横线的样式和位置。

  • 矩形 矩形可以在画布区画一个矩形作为辅助,这里的矩形也不能对数据生效并设置数据源,只起到样式效果。 选择【矩形】组件在画布区里放置在任何位置,可以设置矩形的样式和位置。

  • 椭圆形 椭圆形可以在画布区画一个矩形作为辅助,这里的椭圆形也不能对数据生效并设置数据源,只起到样式效果。 选择【椭圆形】组件在画布区里放置在任何位置,可以设置椭圆形的样式和位置。

4.1.2 层级

层级主要是针对页面上操作的控件及数据源的分层显示,并且能够在树形结构上快速的操作组件层操作。

4.1.3 数据集

数据集主要是对应业务单据的业务对象,包括系统变量。单据里的自定义项、审批历史等数据源内容也需要业务方提供。 目前数据源部分除供应链、营销、人力为注册方式的元数据,需要领域提供注册,如果升级元数据或者自定义项需要将升级的元数据在打印元数据升级。其他领域不需要。 数据源提供搜索功能,可以定位到任意字段属性。数据源支持主子孙表。

4.1.3.1 关键应用

数据源属性结构

  • 搜索-系统变量
  • 拖入画布区
    4.1.3.2 主要操作说明
  • 数据源属性结构 默认加载数据源树,树形结构按照主子孙表的属性结构展示。 -搜索 输入搜索的内容,可以快速定位。
  • 系统变量 系统变量主要是一些常用变量,包括如下变量:

    1.分录页码:分录页的当前码,分录页码常用于一个单据有多个分录,每个分录又有多页的情况。分录一般是和某个分录的整体可以分为多页。

    2.页码:页码主要是针对在打印页码数据填充后的当前页的编号,一个单据打印多页时,每页的号码。

    3.分录总页数数:分录的总页数。一般指一个分录的总页数。

    4.总页数:是指整个单据打印的总页数。与分录页不同,分录页是在一次打印时可以分成多个分录,每个分录的总页数。而总页数是指当前打印数据计算完成的总页数。

    5.是分录第一页:对分录第一页进行标识。是一个分录的第一页。

    6.是分录最后一页:对分录最后一页进行标识。是一个分录的最后一页。

    7.第一页:对一次打印的第一页标识。

    8.最后一页:对一次打印的最后一页标识。

    9.修改时间:是对模板的修改时间。

    10.创建时间:是创建模板的时间。

    11.模板名称:是模板的名称。

    12.当前时间:设置打印的时间,在打印时显示的是当前打印时间。

    13.当前日期:设置打印的日期,在打印时显示的是当前打印日期。

    14.企业名称:是当前登录用户的企业名称。

    15.当前用户:是当前登录用户的名称。

    拖拽一个系统变量到当前页面,实际是一个文本,系统变量无需设置数据源,在预览或者打印时可根据系统的数据进行展示。

  • 拖入画布区 选择一个字段拖入画布区,默认字段为一个文本组件,具体的属性和文本是一致的。

4.2 画布区

画布区设计的主要区域,对应的组件放置的区域。

4.2.1 关键应用

  • 标尺
  • 拖动

4.2.2 主要操作说明

  • 标尺:用于在设计页面和设计组件大小的情况下使用。标尺支持毫米和像素两种单位。 类别搜索
  • 拖动:界面的组件可以拖动,有些则不能拖动位置,但可以改变大小。 可以拖动位置的组件有:图片、条形码、网格、卡片、列表、套打列表、文本、辅助线等,不能拖动页头和页脚的位置。 组件都可以调整高度; 只有也没和页脚不能调整宽度,其他组件都可以调整宽度。辅助线不能调整高宽,可以调整线条样式。

4.3 工具栏

工具栏主要是做一些辅助作用,帮助页面操作。

4.3.1 关键应用

  • 页面管理
  • 缩放
  • 左对齐
  • 居中对齐
  • 右对齐
  • 顶对齐
  • 垂直居中
  • 底对齐
  • 水平分居
  • 垂直分布
  • 置顶
  • 置底
  • 移至上层
  • 移至下层
  • 收起左侧栏
  • 收起右侧栏

4.3.2 主要操作说明

  • 页面管理 页面管理主要是在做模板时,可以一次设置多个页面。每个页面的内容不同,在打印时先按照页面设置时的顺序打印,打印完所有模板页后再打印第二条记录。类似人力打印员工合同页打印时先按照模板的顺序打印第一个人的合同,打印完成后再打印第个人。 页面管理可以新增页面,在画布区左上角的工具栏选择【页面模板]下的弹框,在弹框的最底下【新建模板页面】,在页面的区域出现空白区域,可以输入名称既可完成新建。 页面管理可以删除,在页面区域选择一个页面,在后边的按钮上选择删除,直接删除页面。 页面管理可以复制,在页面区域选择一个页面,在后边的按钮上选择复制,复制出一个一模一样的页面,可以在当前页面调整,复制后的名称默认加原有名称上加“-副本”。 页面管理可以重命名,在页面区域选择一个页面,在后边的按钮上选择重命名,在名称输入框上修改名称。 页面管理可以移动页面,调整页面的顺序。页面的顺序会影响打印时的顺序,设计时需要按照打印时的顺序调整。 类别搜索

4.4 属性区

4.4.1 属性

属性是对组件内容部分设置的补充,通过设置属性能够对打印时的一些效果进行预设值。属性主要是对应组件的属性,也有一些是页面的。

4.4.1.1 主要操作说明
  • 页面属性

  • 标题:标题是可以修改的。在这里可以修改打印的页面标题是可以修改的。此处的需求是页面本身的修改,不影响模板的名称。这里的名称和工具栏左上角的页面名称是一致的。

  • 单位:毫米、像素。设置时可以根据个人的爱好设置使用像素还是毫米,像素和毫米在设置时的大小有区别。
  • 纸张:纸张是实际打印时对应的纸张大小,所以在开始设置模板时需要确定纸张的大小,从而能够设置模板的大小。目前支持的纸张大小有固定大小为A3、A4、A4、A5、B4、B5,除这些外可以自定义大小,设置纸张的宽和高。
  • 方向:设置纸张的方向是横向和纵向。希望能够在设置的时候设置好是横向还是纵向, 不建议设置了纸张为横向再在打印时设置为纵向,这样设置的模板和打印时的效果会有不同。和纸张属于层级关系,设置了纸张大小可以设置方向。
  • 高度和宽度:在选择默认的大小后不能设置宽度和高度,只有自定义纸张的才可以设置。
  • 布局方式:分别有自由拖拽和容器吸附。类别搜索

  • 组件属性

  • 数据设置:根据弹框设置表达式来设置标题,一般针对文本,其他组件不显示标题。 数据列选项为数据集中可以显示的字段属性作为值,系统变量、公式同理。

  • 长文设置:针对文本控件的样式。
  • 金额转大写:聚焦在一个文本上,可以对一个文本或者一个列表内的具体单元格的值进行设置,必须是数字型的才能生效。
  • 动态行高:针对一个文本或者列表的一行支持动态行高在宽度一定的情况下选择动态行高后可以自动计算动态行高。文本的高度会被自动撑高,列表的高度会被自动撑高。
  • 隐藏零:隐藏是文本或者单元在预览或者打印时希望不显示,选了隐藏零在打印时就不会显示,当前文本或者单元格为空。
  • 打印在:是针对当前组件能够打印在的页面情况。可以是所有页面、仅在第一页,仅在最后一页,除第一页、除最后一页、除第一页和最后一页、仅自已也和最后一页、仅分录第一页、仅分录最后一页、除了分录第一页和最后一页、仅分录第一页和最后一页。组件通过设置打印在,可以对应在不同的页面上打印或者不打印。
  • 数据格式: 通用:通用格式是业务方传过来的格式,不做任务修改。 数字:数字格式比较常用; 业务方传过来业务数据后可以设置【使用千分位」,如果使用了千分位则可以按照 00,000,000这样的方式呈现。 【启用小数位数】:启用小数位数后,可以设置小数位数。对于业务方传过来的小数位数,可以按照当前的设置显示,比如业务方传递为123.45689,但是设置了保留小数位为2位,则显示最后的效果为123.45. 【负数类型】:可以将传递过来的数据类型显示为负数。支持多种负数类型,包括(n}、-n、- n、n-、n -等;设置了负数类型,默认传递的数据类型可以按照当前设置显示。类别搜索

  • 列表属性

    1.显示列表头:是列表或者套打列表的属性,列表头主要是指列表头部的字段名称是否显示。设置后在设置态和预览态都不显示列表头部。

    2.显示表头:在列表的上方显示表头部分,通过显示表头在表头部分设置相关元素。例如图片、文本等。

    3.显示表尾:在列表的上方显示表尾部分,通过显示表尾在表尾部分设置相关元素。例如图片、文本、合计等等。

    4.显示孙表:可以通过设置孙表的显示与否,能够在子表的后边设置孙表的内容,孙表的设置与子表关联,实际为一个整体,设置后可以在对应的区域设置一个孙表表格。

    5.固定行数:针对固定行高可以设置固定的行数,设置了固定行数后内容会根据设置的行数展示,固定行高时字体能够自动缩放。如果是动态行高设置了行数,当到达固定行数时则不再打印。当设置了固定行高时,最大行数不能设置,和固定行数一致。

    6.最大行数:是指能够设置的最大行数,在列表上能够显示的最大行数。固定行高时设置了固定行数则不能设置最大行数,最大行数和固定行数一致。如果是设置了动态行高,可以显示设置的最大行数,也就是说当前列表最多能显示的行数只能是设置了的数量。类别搜索7.多页显示列表头:当一个列表显示多页时,在动态行高的情况下,第二页及以后的页默认是不显示表头的,如果想显示表头需要开启多页显示表头。开启多页显示表头后,打印时每页都会显示表头。

    8.强制且单元格:强制切单元格默认不开启,开启后会对单元格强制分割。当一行数据跨页时如果不开启强制分单元格则打印时按照动态行高设置后后边的行在当前页打印不全时,自动转移到下一页。当合并行时如果一个单元格跨行,则在打印时设置强制切单元格,如果强制切单元格开启则自动将一行数据一份为二,当打印时合并的单元格在两页的单元格都显示值。

    9.空值打印:当列表没有值时也没有选择空值打印,但是表头和表尾有数据,则列表不打印,表头表尾打印,表尾位置上移。

  • 分组属性

    1.分页打印:分组的时候默认的情况是按照一个分组一个列表,一页可以打印多个分组列表。当开启分页打印时,按照一页只显示一个分组。 -表头或表尾属性

    2.分组依据:可以选择分组的字段设置;

  • 条码属性

    1.标题:标题是名称,可以是文本、表达式、数据列、公式、系统变量。

    2.条码来源:可以设置条码的数据源。一般会设置数据列。

    3.条码类型:支持二维码、条码类型,目前支持的种类有:QRcode、code128auth、CODE128A、CODE128B、CODE128C、EN13、EN8、upc、code39、it14、itf、msi、mis10、msi1010、msi1110、pharmacode.

    4.角度:可以设置条形码的显示的角度,支持0度、90度、180度、270度显示。

    5.自动缩放:支持条码自动缩放。

    6.显示标签:支持条码或者二维码标签显示。类别搜索

    4.4.1.2 公式
    4.4.1.2.1 数学函数
  • tan tan(num) 功能:正切函数 参数:num-数值(弧度) 返回值:Double 示例:tan(23);
  • ln ln(num) 功能:自然对数函数 参数:num-数值 返回值:Double 示例:ln(23);
  • log log(num) 功能:对数函数 参数:num-数值 返回值:Double 示例:log(23);
  • max max(num,num) 功能:比较两个数的大小,返回最大值。 参数:对象1,对象2; 返回值:double 示例:max(23.23,34.56); //返回34.56
  • E 获取自然常数E, 用作参数或者参与运算
  • cos cos(num) 功能:余弦函数 参数:num-数值(弧度) 返回值:Double 示例:cos(23);
  • sqrt sqrt(num) 功能:平方根函数 参数:num-数值 返回值:Double 示例:sqrt(23);
  • round round(num) 功能:四舍五入取整函数 参数:num-数值 返回值:Long 示例:round(2.145);
  • cot cot(num) 功能:余切函数 参数:num-数值(弧度) 返回值:Double 示例:cot(23);
  • asin asin(num) 功能:反正弦函数 参数:num-数值 返回值:Double(弧度) 示例:asin(0.5);
  • numberFormat numberFormat(num,pattern) 功能:将数值格式化 参数:num-数值 参数:pattern-模式: # 表示如果该位存在字符,则显示字符,如果不存在,则不显示 0 表示如果该位存在字符,则显示字符,如果不存在,则显示0 - 表示输出为负数,要放在最前面,例如 -000.00 , 表示在数字中添加逗号,例如做千分位的分割 % 表示乘以100并显示为百分数,要放在最后 \u2030 表示乘以1000并显示为千分数,要放在最后,例如 #0\u2030 也可以自定义常量,比如在数值结尾加单位kg,则需要写成 ##0 kg 返回值:String 示例: 整数千分位分割显示 #,#00 数值保留2位小数显示 #00.00 按百分比显示且最大保留2位小数 #.##% 数值结尾增加单位kg #kg
  • log10 log10(num) 功能:以10为底的对数函数 参数:num-数值 返回值:Double 示例:log10(23);
  • abs abs(num) 功能:绝对值函数参数:num-数值 返回值:Double 示例:abs(23);
  • floor floor(num) 功能:向下取整函数 参数:num-数值 返回值:Long 示例:floor(2.145);
  • min min(num,num) 功能:比较两个数的大小,返回最小值。 参数:对象1,对象2; 返回值:double 示例:min(23.23,34.56); //返回23.23
  • acos acos(num) 功能:反余弦函数 参数:num-数值 返回值:Double(弧度) 示例:acos(0.5);
  • sin sin(num) 功能:正弦函数 参数:num-数值(弧度) 返回值:Double 示例:sin(23);
  • PI 获取圆周率π, 用作参数或者参与运算
  • ceil ceil(num) 功能:向上取整函数 参数:num-数值 返回值:Long 示例:ceil(2.145);
  • scale scale(num,scale) 功能:四舍五入保留指定位数小数,最大保留15位。如果精度不足指定精度则返回原数据,不做精度补位 参数:num-源数值 scale-精度值 返回值:Double 示例:scale(2.145,2);
  • exp exp(num) 功能:幂数函数 参数:num-数值 返回值:Double 示例:exp(23);
  • convertMnyToBlock convertMnyToBlock(num,lang) 功能:实现金额按照语言从数字转换为大写格式。 参数:num-金额,参数:lang-语言, 中文:zh,英文:en 。 返回值:String 示例:convertMnyToBlock(123.45,"en") 或者 convertMnyToBlock(123.45,"zh") 。 如设置凭证的贷方本币合计(组织)字段转中文大写。
  • atan atan(num) 功能:反正切函数 参数:num-数值 返回值:Double(弧度) 示例:atan(23);
    4.4.1.2.2 字符串函数
  • endsWith endsWith(String,String) 功能:判断是否以某字符串结尾 参数:字符串,字符串 返回值:布尔 示例:endsWith("cch,nihao","hao");
  • left left(String,num) 功能:获取从左边起的N个字符串 参数:字符串,整形 返回值:字符串 示例:left("cch,nihao",2);
  • strToNum strToNum(str) 功能:将字符转换为数值 参数:字符串 返回值:Double 示例:strToNum("1.5");
  • length length(String) 功能:获取字符串长度 参数:字符串 返回值:整形 示例:length("cch,nihao");
  • numToStr numToStr(num) 功能:将数值转换为字符 参数:数值型 返回值:字符串 示例:numToStr(1.5);
  • contains contains(String,String) 功能:是否包含某字符串 参数:字符串,字符串 返回值:布尔 示例: contains("cch,nihao","c")
  • lastIndexOf lastIndexOf(String,String) 功能:判断字符串在指定字符串中最后出现的位置 参数:字符串,字符串 返回值:整形 示例:lastIndexOf("cch,nihao","cc");
  • indexOf indexOf(String,String) 功能:判断字符串在指定字符串中首次出现的位置 参数:字符串,字符串 返回值:整形 示例:indexOf("cch,nihao","cc");
  • startsWith startsWith(String,String) 功能:判断是否以某字符串开头 参数:字符串,字符串 返回值:布尔 示例:startsWith("cch,nihao","cc");
  • equalsIgnoreCase equalsIgnoreCase(String,String) 功能:忽略大小写判断两个字符串是否相等 参数:字符串,字符串 返回值:布尔 示例:equalsIgnoreCase("cch,nihao","cch");
  • strToSBC strToSBC(str) 功能:将字符串转换为半角 参数:字符串 返回值:String 示例:strToSBC("全角,");
  • uppercase upperCase(String) 功能:获取字符串大写 参数:字符串 返回值:字符串 示例:upperCase("cch,nihao");
  • right right(String,num) 功能:获取从右边起的N个字符串 参数:字符串,整形 返回值:字符串 示例:right("cch,nihao",2);
  • lowerCase lowerCase(String) 功能:获取字符串小写 参数:字符串 返回值:字符串 示例:lowerCase("cch,nihao");
    4.4.1.2.3 时间函数
  • sysdate sysdate() 功能:获取当前日期 参数:无 返回值:日期 示例: sysdate() 设计器页面,拖【文本】控件,点【数据设置】按钮,选择【公式】页签—时间函数—【sysdate】,点确定保存。
  • strToDate strToDate(dateStr,formatStr) 功能:将字符格式转换为Date类型格式,参数:dateStr--字符串日期,formatStr--第一个参数的日期格式化字符。返回值:日期。示例: strToDate("2020-01-01 00:00:00","yyyy-MM-dd HH:mm:ss")。 如,字段值为2020/06/10,转化为日期Date类型, 即strToDate({VoucherVO.maketime},"yyyy/MM/dd"),设置如下: 类别搜索 预览效果,使用公式前后对比: 类别搜索
  • dateFormat dateFormat(date,format) 功能:格式化日期 参数:date--日期,format--日期格式化字符 返回值:字符串 示例: dateFormat(sysdate(),"yyyy-MM-dd HH:mm:ss SSS") 。 第一个参数date,必须是日期Date类型,非Date类型需要转换为Date再使用dateFormat。如,字段值为2020/06/10,希望格式化为2020-06-10,需要使用strToDate(参考(2)strToDate介绍)将值转换为Date再使用dateFormat格式化。即dateFormat(strToDate({VoucherVO.maketime},"yyyy/MM/dd"),"yyyy-MM-dd"),设置如下: 类别搜索 预览效果,使用公式前后对比: 类别搜索
  • dateFormatByLang dateFormatByLang(date, lang, pattern) 功能:按照语言和模式来格式化日期,参数:date--日期,参数:lang--语言,参数:pattern--匹配模式;返回值:字符串。示例: dateFormatByLang(sysdate(),'en','MMMM d,yyyy') 。 第一个参数必须是日期Date类型,对于值非Date类型的需要转换为Date类型后使用。如,字段值为2020/06/10,希望格式化英文日期格式,公式配置为dateFormatByLang(strToDate({VoucherVO.maketime},"yyyy/MM/dd"),"en","MMMM d,yyyy"),设置如下:
  • dateToTimestamp dateToTimestamp(date) 功能:将Date类型转换为时间戳类型格式 参数:date--Date类型时间 返回值:时间戳 示例: dateToTimestamp(sysdate());
  • dateAdd dateAdd(date,type,amount) 功能:日期增加 参数:date--日期,amount--数量,type--类型 1:年,2:月,3:日,4:时,5:分,6:秒,7:毫秒,8:星期 返回值:日期 示例: dateAdd(sysdate(),1,1) 当前日期增加一年
  • dateTrunc dateTrunc(date) 功能:将指定日期转换为只包含年月日的日期 参数:date--Date类型时间 返回值:Date类型日期 示例: dateTrunc(sysdate());
  • dateDiffAccurately dateDiffAccurately(date1,date2,type) 功能:根据type计算两个日期相差(date1-date2)的时间间隔(周计算规则为有多少个7天)。其中年、月、周、季度与dateDiff相同,日、时、分、秒计算时后面的单位会参与计算(即计算“日”时,时分秒毫秒会参与计算) 如:2020-05-13 00:00:00:000到2020-05-12 12:00:00:000计算“日”会返回0.5 参数:date1--Date类型时间 参数:date2--Date类型时间 参数:date2--类型 1:年,2:月,3:日,4:时,5:分,6:秒,7:毫秒,8:星期,9:季度 返回值:数值 示例: dateDiff(sysdate(),dateAdd(sysdate(),3,-1),3)
  • dateExtract dateExtract(date,type) 功能:返回指定日期所在的年/月/日/时/分/秒/毫秒/周(星期日返回7)/季节 参数:date--Date类型时间 参数:type--类型 1:年,2:月,3:日,4:时,5:分,6:秒,7:毫秒,8:星期,9:季度 返回值:数值 示例: dateExtract(sysdate(),1);
  • timestampToDate timestampToDate(stamp) 功能:将时间戳格式转换为Date类型格式 参数:stamp--时间戳 返回值:日期 示例: timestampToDate(1578041387773);
  • dateDiff dateDiff(date1,date2,type) 功能:根据type计算两个日期相差(date1-date2)的时间间隔(其中周计算规则为有多少个7天)。只计算type指定的这一级单位为止。之后的时间不参与计算 如:2020-05-13 00:00:00:000到2020-05-12 12:00:00:000计算“日”会返回1 参数:date1--Date类型时间 参数:date2--Date类型时间 参数:date2--类型 1:年,2:月,3:日,4:时,5:分,6:秒,7:毫秒,8:星期,9:季度 返回值:数值 示例: dateDiff(sysdate(),dateAdd(sysdate(),3,-1),3)
    4.4.1.2.4 系统函数
  • orgId orgId() 功能:获取所属组织ID 参数:无 返回值:字符串 示例: orgId()
  • tenantId tenantId() 功能:获取当前租户ID 参数:无 返回值:字符串 示例: tenantId()
  • userId userId() 功能:获取当前用户ID 参数:无 返回值:字符串 示例: userId()
  • username userName() 功能:获取当前用户名称 参数:无 返回值:字符串 示例: userName()
  • orgName orgName() 功能:获取所属组织名称 参数:无 返回值:字符串 示例: orgName()
  • tenantName tenantName() 功能:获取当前租户名称 参数:无 返回值:字符串 示例: tenantName()
    4.4.1.2.5 聚合函数
  • avg avg(list,"express") 功能:根据express规则,计算规则之后的结果的结果集求平均,express为空则计算LIST里面的所有值 参数:list 集合数据,可以是集合的集合 返回值:Double 示例:avg(list,"abc");
  • or or(list,express) 功能:根据express规则,对计算出的布尔结果集作或运算。express计算出的结果只能为布尔值 参数:list--集合数据(也可以是Bool数组,代表值:"0"-false "1"-true "true"-true "false"-false "y"-true "n"-false 不区分大小写 ) express--对list进行计算的表达式,若为空或者不填list只能是Bool数组 返回值:Object,true或者false 示例:and(list,"a>b");
  • uniqueCount uniqueCount(list,"expression") 功能:获取列表中数据去重后的数量,例如传入列表为[1,2,3,4] 返回4 传入列表[1,2,3,1] 返回 3 参数:list-列表 返回值:long 示例:uniqueCount(ordertail,"ordertail.curreny") 其中ordertail是子表,ordertail.curreny是子表上的一个字段
  • and and(list,express) 功能:根据express规则,对计算出的布尔结果集作与运算。express计算出的结果只能为布尔值 参数:list--集合数据(也可以是Bool数组,代表值:"0"-false "1"-true "true"-true "false"-false "y"-true "n"-false 不区分大小写 ) express--对list进行计算的表达式,若为空或者不填list只能是Bool数组 返回值:Object,true或者false 示例:and(list,"a>b");
  • groupConcat groupConcat(list,"expression","splitchar",isDistinct) 功能:根据expression规则对list列表的数据计算,对计算结果去重或者不去重后用splitchar字符连接合并为字符串返回 例如传入列表为[a,b,c,d,a] 返回a,b,c,d 传入列表[1,2,3] 返回 1,2,3 , 传入列表[a,b,null,c] 返回a,b,c 参数:list-列表 参数:expression-表达式 参数:splitchar-分割符 参数:isDistinct-是否去重,0:否,1:是 返回值:String 示例:groupConcat(ordertail,"ordertail.curreny","-",1) 其中ordertail是子表,ordertail.curreny是子表上的一个字段, "-"是拼接时的连接符
  • sum sum(list,"express") 功能:根据express规则,计算规则之后的结果的结果集求和,express为空则计算LIST里面的所有值 参数:list 集合数据,可以是集合的集合 返回值:Double 示例:sum(list,"list.alist.blist.c"); 可以对主表或子表的某个字段进行求和,功能等同于汇总中的SUM合计功能。如对销售订单子表的含税金额字段进行合计,公式配置为: sum({voucher_order.orderDetails},"{voucher_order.orderDetails.oriSum}") 类别搜索 操作步骤: 选择函数sum 鼠标定位在第一个参数位置,单击选中销售订单子表,即,第一个参数要选择求和字段的上一级对象,如果是对主表中的字段进行求和汇总这里则要选择主表。 类别搜索 鼠标定位在第二个参数位置,选择求和字段“含税金额” 类别搜索 校验、确定,保存模板,单据预览。 设计态效果 类别搜索 预览效果 类别搜索
  • count count(list) 功能:计算集合的数量 参数:list 集合数据 返回值:Double 示例:count(list);
  • aggrMin aggrMin(list,"express") 功能:根据express规则,计算规则之后的结果的结果集求最小值,express为空则计算LIST里面的所有值 参数:list 集合数据,可以是集合的集合 返回值:Double 示例:aggrMin(list,"abc");
  • aggrMax aggrMax(list,"express") 功能:根据express规则,计算规则之后的结果的结果集求最大值,express为空则计算LIST里面的所有值 参数:list 集合数据,可以是集合的集合 返回值:Double 示例:aggrMax(list,"abc");
    4.4.1.2.6 业务函数
  • getValueMore getValueMore(fullName,selectFiled,conditionField,conditionValue) 功能: 根据条件查询档案的值 参数:fullName--档案的uri selectFiled--要查询的字段 比如 code conditionField--条件字段 比如 id conditionValue -- 条件值 支持批量条件,条件字段和条件值需成对出现,最大支持8组条件。例如: (fullName,selectFiled,conditionField1,conditionValue1,conditionField2,conditionValue2)
  • iif 场景一: 场景二:销售订单模板,订单状态分开立态、审批中、待发货等状态,希望订单状态为开立态时,收货地址显示空,为审批中时,收货地址显示,待发货状态或其他状态时,显示真实的发货地址。 实现:可以使用iif函数判断条件取值 画布双击收货地址文本控件,或选中控件点右侧的数据设置 弹出数据设置弹框,选择【公式】-【业务函数】-iif函数 配置公式: 公式参考 status={voucher_order.nextStatus}, branch=iif(status=="审批中","",{voucher_order.receiveAddress}) iif(status=="开立","",branch) 代表:订单状态值等于开立时,收货地址显示空,订单状态值等于审批中时,,收货地址显示*,其他情况显示收货地址。 类别搜索 单据页面选择数据预览效果。 单据开立态: 类别搜索 单据审批中: 类别搜索 单据待发货: 类别搜索
  • getValue getValue(fullName,selectFiled,conditionField,conditionValue) 功能: 根据条件查询档案的值, 参数: fullName--档案的uri selectFiled--要查询的字段,比如code conditionField--条件字段,比如id conditionValue -- 条件值 getValue函数主要解决在打印模板中需要根据单据中的某个字段取关联查询某档案中的字段信息。以下面场景1“需要根据销售订单的开户支行字段值去银行网点中关联查询到详细地址信息”为例,第一个参数用于指定是哪个档案,那么第一个参数就需要放置【银行网点】档案;第二个参数用于指定需要查询档案中的哪个字段,那么第二个参数就需要选银行网点档案的“地址1”字段(详细地址信息存在“地址1”字段里);第三个参数用于指定需要根据档案中的哪个条件作为查询条件,因此第三个参数放置银行网点档案里的“名称”字段(因为当前的销售订单中只有开户支行名称,假设当前场景开户支行名称唯一,可以使用名称作为条件。通常情况下,第三个参数常使用编码、id等具有唯一性的字段);第四个参数用于指定查询条件的具体值,具体值通常由业务返回,所以需要第四个参数通常使用单据中的字段,因为真正预览的时候单据字段会以实际值显示,如当前例子中销售订单中每个订单的开户支行可能都不同,返回值也不同。配置后公式为 getValue(#{"bd.bank.BankDotVO"}$,"addressone","name",{voucher_order.subBankName}),即代表:在银行网点(第一个参数#{"bd.bank.BankDotVO"}$)档案中根据名称(第三个参数name)获取详细地址1(第二个参数addressone)的值,其中名称(name)值来源于销售订单的开户支行字段值(第四个参数{voucher_order.subBankName})。

可以看出使用getValue函数的前提是需要知道单据和档案之间的关联关系,如上面的例子中,销售订单.开户支行=银行网点.名称,如果使用中不清楚单据和档案之间的关联关系,可以联系相关单据的产品或开发人员沟通获取。 使用getValue函数时需要用到的右侧【档案】,见下图。【档案】下汇总了所有的档案对象,档案使用分成左右2个区显示,档案下的左侧区为所有档案对象,如客户、银行网点、银行类别等等,档案下的右侧区显示了选中档案的所有字段,左右两区都提供了搜索框可以进行搜索过滤供快速定位。 类别搜索 使用时选择getValue函数对函数中的每个参数进行设置,设置第一个参数时,可以将鼠标定位在第一个参数位置,档案中搜索到相应档案(如银行网点),然后双击银行网点,银行网点档案就会插入到第一个参数位置。 类别搜索 设置第二个参数时,鼠标定位在第二个参数的位置,在右侧的档案中选择某一列,单击即可选中;设置第三个参数和第四个参数时同第二个参数设置方式一样,都是单击即可选中。 场景1:销售订单发票信息填写开户银行开户支行,开会支行详细地址存储在银行网点中,如何在销售订单模板中获取到开户支行的详细地址信息? 销售订单信息界面 类别搜索 开户支行银行网点信息 类别搜索 实现方式:使用getValue函数,根据开户支行信息查询银行网点档案中的详细地址信息。销售订单中开户支行为“中国工商银行股份有限公司天津中北支行”,在银行网点中此开户支行的【地址1】字段存储了地址详细信息。 具体操作如下: 画布拖入文本控件,编辑该文本控件,选择【公式】页签 选择业务函数中的getValue函数,函数中第一个参数选档案中的“银行网点”,第二个参数选银行网点的“地址1”,第三个参数选银行网点中的“名称”,第四个字段选单据字段中销售订单的“开户支行”字段。公式为 getValue(#{"bd.bank.BankDotVO"}$,"addressone","name",{voucher_order.subBankName}) 确定保存 类别搜索 设计态如下 类别搜索 销售订单中选择单据预览打印如下,可以看到开户支行地址已经获取并显示出来了。 类别搜索 场景2:销售订单中子表商品,每个商品在物料档案中有图片信息,如何在销售订单打印模板中能够获取到相应商品的图片信息并显示。 销售订单页面,子表信息中有多个商品: 类别搜索 其中商品s000033在【物料使用信息维护】中“物料图册”页签的物料图片中有上传的图片。 类别搜索 实现方式:使用getValue函数,根据物料编码查询物料档案中的物料图片url地址,并将内容以图片形式显示。 操作步骤: 销售订单子表通常使用列表控件显示,画布中拖入列表 在列表中加入一个字段用于后续显示图片,可先随意选择子表中的字段“批次号”,然后再对批次号的单元格进行再编辑修改列表头内容以及列表体内容,见下图 类别搜索 选中列表体中批次号单元格,双击或点数据设置进行再编辑,配置getValue公式,第一个参数为物料档案,第二个参数为物料档案的“物料首图片”字段,第三个参数为物料档案的“物料编码”字段,第四个参数为销售订单子表的“商品编码”字段,具体公式配置为: getValue(#{"pc.product.Product"}$,"url","code",{voucher_order.orderDetails.productCode}) 公式配置见下图 类别搜索 确定并保存,此时设计页面效果见下图 类别搜索 单据中选择单据数据进行预览,可以看到商品的图片url通过公式获取到并显示出来了。 类别搜索 设计页面中选中图片的列表体单元格,右侧【属性】页签【数据类型】改为图片。(默认为文本显示,所以上图中图片列显示的是url的文本格式) 类别搜索 设置完后画布上该列会显示图片的格式效果,可以调整表体的单元格高度来调整图片显示效果。见下图: 类别搜索 保存并预览,可以看到图片列不再显示文本而是显示图片格式。 类别搜索

  • getID getID() 功能: 返回id 参数: uri name id 或 "entity" name id
  • getNull getNull() 功能:获取null值 参数:无 返回值:null 示例: getNull()
  • isNull isNull(obj) 功能:判断对象是否为null 参数:obj--对象 返回值:boolean, true:为null,false:不为null
  • isEmpty isEmpty(obj) 功能: 判断对是否为空 字符串:对象是null或者字符串长度为0 数组:对象是null或者数组长度为0 集合:对象是null或者Map的长度为0 参数:obj--对象 返回值:boolean, true:为空,false:不为空
  • zeroIfNull zeroIfNull(expr) 功能:如果表达式expr的值为null,则返回0,否则返回表达式expr的值 参数:expr 一个具体数值或者一个表达式 返回值:object 示例: zeroIfNull(aaa) 或者 zeroIfNull(aaa+bbb)
  • 查询物料详情 getProductValue(selectFiled,productId,orgId) 功能: 查询指定字段的值 参数:fullName--元数据的uri selectFiled--要查询的字段,支持【 主计量单位:unit, 重量:weight, 毛重单位:weightUnit, 净重:netWeight, 净重单位:netWeightUnit, 体积:volume, 体积单位:volumeUnit, 长:length, 宽:width, 高:high, 库存单位:stockUnit, 库存换算率:stockRate, 采购单位:purchaseUnit, 采购换算率:purchaseRate, 批发销售单位:batchUnit, 批发销售单位换算率:batchRate, 线上零售单位:onlineUnit, 线上零售单位换算率:onlineRate, 线下零售单位:offlineUnit, 线下零售换算率:offlineRate, 要货单位:requireUnit, 要货换算率:requireRate, 检验单位:inspectionUnit, 检验换算率:inspectionRate, 批发计价单位:batchPriceUnit, 批发计价换算率:batchPriceRate, 采购计价单位:purchasePriceUnit, 采购计价换算率:purchasePriceRate, 采购计价单位:purchasePriceUnit, 生产换算率:produceRate, 】 productId--物料ID orgId -- 组织ID
  • 查询客户详情 getMerchantValue(selectFiled,merchantId,orgId) 功能: 查询指定字段的值 参数:fullName--元数据的uri selectFiled--要查询的字段,支持 默认销售区域:saleArea, merchantId--客户ID orgId -- 组织ID
  • 多函数嵌套 现实场景使用中,仅通过其中某个函数往往并不能实现复现效果,公式函数支持嵌套使用,实际使用中可以通过多个公式函数组合嵌套来达到满意效果。 比如,下图第二行多行文本一栏显示的地理信息,期望实现只显示本段文字中从“2005年热尔大草原被《国家地理杂志》评为“中国最美的湿地”。”开始到结束的内容,即达到第一行第二列内容的效果。 类别搜索 公式使用:可以通过公式函数嵌套实现,公式配置为, len=length({1626705390083.20210719223635tqraeDGd70}), start=indexOf({1626705390083.20210719223635tqraeDGd70},"2005年热尔大草原被《国家地理杂志》评为"), right({1626705390083.20210719223635tqraeDGd70},len-start) 其中,len为获取本段完整内容的字符串长度,样例中为589 ,start为获取本段完整内容中“2005年热尔大草原被《国家地理杂志》评为”的起始位置,为407 ,len-start代表要显示的内容长度182,最终使用right获取最后的182个字符串。 类别搜索

4.4.2 样式

设置页面组件的样式,文字、线条、背景色的等样式的设置。

4.4.2.1 主要操作说明
  • 页面属性

    1.边距:边距是指组件设置时举例页面边的距离。距离上下左右的距离,单位和默认的单位一致。

    2.套打背景:选择套打的背景图,上传到页面,页面上可以调整图片的大小,再选择套打列表或者文本框。

    3.打印时显示套打底图:选择这个设置后,在打印时可以选择和底图一起打印。

    4.水印:选择水印后可以设置水印。目前支持图片水印,选择图片水印后在页面上可以选择图片的缩放显示。类别搜索

  • 组件属性

    1.大小及位置:显示组件的大小和位置,可通过输入的方式改变组件在界面上的位置和大小。选择某个组件在属性框里调整。

    2.边距:边距是指组件设置时举例页面边的距离。距离上下左右的距离,单位和默认的单位一致。

    3.文字:设置文字的颜色、字体类型、大小、下划线、删除线、加粗、斜体。其中对应的字体类型如果是没有的类型,可以下载字体设置,对应的预览时能够使用字体。

    4.文本对齐方式:水平居左、水平居中、水平居右;默认的内容可以设置居左、居中、居右。垂直的方向可以设置垂直居上、垂直居下、垂直居中。在动态行高时不能设置垂直居中,对应的不能设置位置,会影响显示效果。

    5.行距;多行文字间可以设置行间距,设置后在预览或者打印时可以显示对应的效果。

    6.背景色:可以设置当前组件整体的背景色,设置后在预览或者打印时能够显示背景色。

    7.边框:无论是文本还是表格或者网格都能设置边框,可以设置边框线条是否显示,或者显示哪个边,可以设置边框的线条样式、线条颜色、线条宽度。

    8.边框圆角:设置边框圆角后,文本边框圆角显示。表格或者网格边框也显示成圆角。

    类别搜索

五、案例

5.1 交通费报销单(卡片+列表)

普通单据模板使用较多,通常布局以卡片+列表组合形式展示。比如费用报销,凭证打印模板,模板中显示标题、格式规范的单据头、子表明细列表等。

5.1.1 数据建模

操作 描述
名称 交通费报销单
编码 transform
父实体
引用接口 审批 业务流
属性 编码 名称 类型
danjubianhao 单据编号 文本
danjuriqi 单据日期 日期
baoxiaorenyuan 报销人员 单选引用 员工
shouji 手机 联系方式
feiyongchengdanbumen 费用承担部门 单选引用 部门
xiangmu 项目 单选引用 项目
hejijine 合计金额 数值

操作 描述
名称 交通费报销项
编码 transitem
父实体 交通费报销单
引用接口 业务流
属性 编码 名称 类型
riqi 日期 日期
chufadidian 出发地点 文本
daodadidian 到达地点 文本
baoxiaojine 报销金额 数值
feiyongleixing 费用类型 文本
transform_id 交通费报销单 单选引用

实体创建成功之后记得一定要发布。

5.1.2 页面建模

新建页面如图:

类别搜索

下一步

类别搜索

定义页面名称,元数据选择上一步创建的交通费报销单,勾选生成列表项,点击完成。

5.1.3 模板设计

选择页面建模下的打印模板页签,左侧选择建立的页面分类点击“新建模板”,弹出如下图:

类别搜索

填入模板名称点击确定。

创建成功点击列表态的编辑按钮进入编辑模式: 类别搜索

编辑模式如图: 类别搜索

在画布中拖入文本控件设置交通费报销单,拖入卡片组件并在卡片设置里面设置需要打印的字段如下图:

类别搜索

左键点击需要打印的字段,右侧列表中就出现需要打印的字段,并设置列数2列,点击确定。

继续拖入列表组件并设置字段显示,列表字段设置如下图: 类别搜索

可以根据需要是否显示行号,从左侧选择需要显示的字段,右侧为已经选择的字段。

编辑之后点保存按钮如下图:

类别搜索

5.1.4 预览效果

回到页面页签在交通费报销单列表点预览,双击一条记录数,进入卡片页,打印模板选择刚才建立的交通费报销,单击打印如下图:

类别搜索

5.2 交通费报销单(分组表)

分组表设计的要点为分组字段,有且只能有一个分组字段。

5.2.1 数据建模

操作 描述
名称 交通费报销单
编码 transform
父实体
引用接口 审批 业务流
属性 编码 名称 类型
danjubianhao 单据编号 文本
danjuriqi 单据日期 日期
baoxiaorenyuan 报销人员 单选引用 员工
shouji 手机 联系方式
feiyongchengdanbumen 费用承担部门 单选引用 部门
xiangmu 项目 单选引用 项目
hejijine 合计金额 数值

操作 描述
名称 交通费报销项
编码 transitem
父实体 交通费报销单
引用接口 业务流
属性 编码 名称 类型
riqi 日期 日期
chufadidian 出发地点 文本
daodadidian 到达地点 文本
baoxiaojine 报销金额 数值
feiyongleixing 费用类型 文本
transform_id 交通费报销单 单选引用

实体创建成功之后记得一定要发布。

5.2.2 页面建模

新建页面如图:

类别搜索

下一步

类别搜索

定义页面名称,元数据选择上一步创建的交通费报销单,勾选生成列表项,点击完成。

5.2.3 模板设计

选择页面建模下的打印模板页签,左侧选择建立的页面分类点击“新建模板”,弹出如下图:

类别搜索

填入模板名称点击确定。

创建成功点击列表态的编辑按钮进入编辑模式: 类别搜索

编辑模式如图: 类别搜索

在画布中拖入文本控件设置交通费报销单,拖入卡片组件并在卡片设置里面设置需要打印的字段如下图:

类别搜索

左键点击需要打印的字段,右侧列表中就出现需要打印的字段,并设置列数2列,点击确定。

在左侧控件区选择容器下面的分组拖到画布中,并设置分组依据选择-费用类型。如下图:

类别搜索

继续拖入列表组件放置分组容器里并设置字段显示,列表字段设置如下图: 类别搜索

可以根据需要是否显示行号,从左侧选择需要显示的字段,右侧为已经选择的字段。

编辑之后点保存按钮如下图:

类别搜索

5.2.4 预览效果

回到页面页签在交通费报销单列表点预览,双击一条记录数,进入卡片页,打印模板选择交通费报销-分组,单击打印如下图:

类别搜索

5.3 凭证打印(套打列表)

套打模板用于打印纸为套打纸的场景,不同于普通白纸套打纸通常带有文字表格等信息,打印时要求打印的变量信息严格展示在固定的格子区域内,比较常见的套打纸如凭证、快递单。

5.3.1 数据建模

操作 描述
名称 凭证表
编码 voucher
父实体
引用接口 审批 业务流
属性 编码 名称 类型
AccBook 财务核算账簿 单选引用 财务核算账簿
zhidanriqi 制单日期 日期
pingzhenghao 凭证号 文本
jiefanghejijine 借方合计金额大写 文本
daifangben 贷方本币合计 数值
jiefangbenbiheji 借方本币合计 数值
pingzhengleixing 凭证类型 文本
jizhangren 记账人 单选引用 员工
shenheren 审核人 单选引用 员工
zhidanren 制单人 单选引用 员工

操作 描述
名称 凭证分录
编码 voucher_entry
父实体 凭证表
引用接口 业务流
属性 编码 名称 类型
zhaiyao 摘要 文本
kemuxinxi 科目信息 单选引用 明细科目
jiefangbenbi 借方本币 数值
daifangbenbi 贷方本币 数值
voucher_id 凭证表 文本

实体创建成功之后记得一定要发布。

5.3.2 页面建模

新建页面如图:

类别搜索

下一步

类别搜索

定义页面名称,元数据选择上一步创建的凭证表,勾选同时生成列表、主表列表,点击完成。

5.3.3 模板设计

选择页面建模下的打印模板页签,左侧选择建立的页面分类点击“新建模板”,弹出如下图:

类别搜索

填入模板名称点击确定。

创建成功点击列表态的编辑按钮进入编辑模式: 类别搜索

编辑模式如图: 类别搜索

类别搜索

  • 页面模板的样式上传一个套打模板背景。

  • 拖入套打列表到画布区设置字段。

  • 按照顺序及大小根据背景模板调整控件。

  • 分别拖入文本控件并在数据设置中根据数据列设置属性字段。

  • 根据合适位置选择对齐方式。

  • 编辑完成保存。

    在合计文本框中需要在数据设置中设置一下数学公式,如下图:

    类别搜索

    convertMnyToBlock(num,lang) 功能:实现金额按照语言从数字转换为大写格式。

    参数:num-金额,参数:lang-语言, 中文:zh,英文:en 。

    在借方本币合计和贷方本币合计需要在数据设置中选择汇总,如下图:

    类别搜索

5.3.4 预览效果

  • 显示套打底图

    类别搜索

    回到页面页签预览凭证列表,双击一条记录数,进入卡片页,打印模板选择凭证打印,点击打印,如下图:

    类别搜索

  • 不显示套打底图

    类别搜索

回到页面页签预览凭证列表,双击一条记录数,进入卡片页,打印模板选择凭证打印,点击打印,如下图:

类别搜索

六、预览、打印

6.1 预览打印

打印模板设计器中设计好之后,就可以在对应单据页面来进行打印查看效果了,目前预览打印支持在卡片页面打印方式(实际以各单据配置按钮情况为准)。以交通费报销为例,在交通费报销卡片页面,可以选择打印模板【打印】按钮,见下图:

类别搜索

6.2 直接打印

直接打印指使用打印插件(即云打印助手)进行打印,通常在单据列表页面的直接打印(如销售订单)/快速打印(如凭证查询)按钮触发。使用打印插件打印具备了浏览器端预览打印能力,但主要用于解决以下场景:

  • 批量打印、静默打印。部分用户于固定时间需要批量打印多条单据,如年底时打印凭证、每天下午五点打印当天的所有发货单,打印时无需再进入预览页,能够精简操作步骤快速发送到打印机,即静默打印。
  • 针式打印机清晰度问题解决。新版打印默认生成PDF文件,但针式打印机打印PDF文件存在不清晰情况,打印插件提供原生打印方式发送打印内容以保证打印效果清晰。 使用直接打印需客户端安装打印插件,安装使用过程如下:
  • 在列表页选择数据点击直接打印,如下图: 类别搜索
  • 若本地未安装打印插件,页面会弹出提示框引导下载插件 类别搜索
  • 点击确定,进入下载引导页,根据本地系统选择适配的插件下载,引导页 类别搜索
  • 插件下载完成后双击exe文件运行即可
  • 若本地已安装过打印,点直接打印时会尝试自动调起程序,在提示框中点【打开运营云打印助手】即可启动插件。
  • 进入打印插件界面,选择左侧的模板、打印机等点击【保存设置】后会将本次设置保存到本地,后续直接使用无需再次选择。 类别搜索
  • 点【打印】按钮将文件发送到指定打印机
  • 右上角最小化按钮,点击按钮插件界面会最小化到系统托盘。在未勾选“跳过预览”且再次触发直接打印时,插件页面会自动弹出以展示预览效果。
  • 最小化后插件会任务栏的系统托盘中,右键点击图标显示【设置】、【退出】按钮。 类别搜索
  • 设置:点击后会重新打开插件页面。
  • 退出:插件程序安全退出。
Copyright © 用友 -【生态技术部】 2021 all right reserved,powered by Gitbook修订时间: 2021-11-20 15:24:32

results matching ""

    No results matching ""