电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

套打脚本指南及案例集

来源:金蝶云社区作者:金蝶2024-09-227

套打脚本指南及案例集

1 套打脚本语法及规则

1.1 简要说明

1、该脚本系统采用类Java/JavaScript的语法。

2、面向对象的设计:调用一个对象(假设其名称为text1)的某个方法(假设为getValue),书写为:text1.getValue();

   如果是当前对象,则text1可省略,直接写为:getValue()。

3、大小写敏感。

1.2 脚本编辑域

套打脚本可存在于模板设计期中的任意对象,如文字对象、图片对象、金额对象、网格(单元格、行、列及整个网格对象)、数据表(单元格、行、列及整个数据表对象)、动态列表等的前\后处理脚本编辑框中。

前处理脚本 — 是一段小程序,执行引擎在解析模板时,处理该对象之前运行,可用于修改初始值。

后处理脚本 — 是一段小程序,执行引擎在解析模板时,处理该对象之后运行,可用于修改对象的输出结果。具体语法及函数可参考设计器脚本向导中的说明。

1.3 变量定义及赋值

示例:var a = b + 1;

注意:所定义变量的作用域只在当前脚本块,全局变量请使用set()、get()函数。

1.4 控制语句

         if...else...

         for

         while/do while

         switch case

         break/continue

2 案例

2.1 盖章(电子签名)

需求一:

对于动态的内容,由数据源提供数据,用图片对象直接绑定字段即可。

需求二:

对于固定的内容,只是有条件地控制是否显示。用图片对象,在其“后处理脚本”中写脚本进行控制。

假设存在一个叫“是否完成”的字段isFinished,布尔值,单据状态为“完成”则加盖图章。图章的图片对象的脚本为:

if(getFieldValue(“数据源名称”, “isFinished”))

{

setHide(false);

}

else

{

setHide(true);

}

脚本不是唯一的,只要符合语法,可以举一反三。上例也可写成:

setHide(!getFieldValue(“数据源名称”, “isFinished”));

 

2.2 “是”/“否”(枚举值显示为汉字)

数据表单元格或单元对象绑定目标字段。后处理脚本为:

setValue(getValue()? “是” : “否”);

或:

setValue(toStr(getValue())==“true”? “是” : “否”);

 

2.3 字符串匹配替换

需求:

明细分类账套打,凭证类型字段取值(凭证类型+编码)过长,如

“银行付款 – 001”、“银行收款 – 002”,现希望在不改变元凭证类型基础资料前提下,实现打印效果只显示“银付 – 001”、“银收 – 001”。

示例:

var t = getValue();

if(t.contains("银行付款")){setValue(replaceString(t,"银行付款","银付"));}

if(t.contains("银行收款")){setValue(replaceString(t,"银行收款","银收"));}

 

2.4 关于期间2011-01-01~2011-01-31 现场则想得到格式 201101

操作步骤:

客户端登陆【系统平台->套打->套打管理】,编辑对应的ReportOne模板,找到薪资期间对应的单元格,右键->属性->切换到"通用"页签->后处理脚本。

在后处理脚本框中添加脚本:

string str = getValue();

List date = Arrays.asList(str.split("~"));

List result = Arrays.asList(date.get(0).split("-"));

setValue(result.get(0) + result.get(1));

 

2.5 年龄计算

var a = year(now());

var b = year(getFieldValue("ds_baseInfo","birthday"));

var c = month(now());

var d = month(getFieldValue("ds_baseInfo","birthday"));

var e = day(now());

var f = day(getFieldValue("ds_baseInfo","birthday"));

var age;

if(c>d || (c==month(getFieldValue("ds_baseInfo","birthday")) && e>=f )){

age = a-b;

}else{

age = a-b-1;

}

setValue(age);

 

2.6 时间差计算

2.6.1 计算两个日期之间的间隔天数

解决方式:

方法一、通过在SQL中加入天数的字段,将两个日期时间差计算好之后,在套打模板中引入天数字段取值;

方法二、脚本处理:

var v1 = (getFieldValue("数据源","结束时间").getTime());                

var v2 = (getFieldValue("数据源","开始日期").getTime());

var quot = v1 - v2;

quot = toInt(quot / 1000 / 60 / 60 / 24);

setValue(quot);

 

补充说明:

推荐使用方式一,方法二调用了java取函数的方法,计算精确到毫秒,计算结果可能会带小数。

2.6.2 推算某日期的前\后几天的日期

可以先通过js的getTime()转换成毫秒并参与运算,然后将毫秒转通过setTime()换成date型数据。

例:

var add = 1000 * 60 * 60 * 24; //增加一天

var d1 = now().getTime();

var d2 = new Date();

d2.setTime(d1 + add);

setValue(d2);

 

2.7 数值向上取整脚本示例

通过脚本Math.ceil()运算时,直接输入数值,如Math.ceil(1.23)可取整运算;但是在该方法中嵌套其他的方法时,无法计算出结果,如Math.ceil(getValue())或者Math.ceil(getFieldValue(ds,field))。

Math.ceil貌似和getValue这样的函数不在一个域内,试过好多情况都不能用。可以用一种变通的方法解决,参考以下脚本:

var x=getValue();

var

套打脚本指南及案例集

1 套打脚本语法及规则1.1 简要说明1、该脚本系统采用类Java/JavaScript的语法。2、面向对象的设计:调用一个对象(假设其名称为text1)的某...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

已经是第一篇
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信