单据公式自定义内容,支持浏览器代码。

单据公式自定义内容,支持浏览器代码。

比如:

1、单据自定义公式:取【文本自定义1】字段@符号前的内容

var ifa= function(str){
return String(str).indexOf('@');
}
var index = ifa( 【文本自定义1】 );
return String( 【文本自定义1】 ).substring(0,index)

 

2、单据自定义公式:取【文本自定义1】字段@符号后的内容

var ifa= function(str){
return String(str).indexOf('@');
}
var index = ifa( 【文本自定义1】 );
return String( 【文本自定义1】 ).substring(index+1)

 

----6.8版本支持如果没有@返回空

var ifa= function(str){
return String(str).indexOf('@');
}
var index = ifa( 【商品名称】 );
if( index == -1 ) return ' ' ; else return String( 【商品名称】 ).substring(index+1);

3、其他

1)【b1】字段的平方

Math.pow( 【b1】 , 2) ;

2)5.5变6,5.2也变6
Math.ceil(【b1】);

3)取系统当前时间十分秒
new Date().format("yyyyMMddHHmmssfff");

new Date().format("yyyy-M-d h:m:s");

4)录入数据自动计算

eval(【备注】)

在备注里面录入 1+2+3  ,那么就会自动算出6

 

4、【文本自定义1】内容是1234(只有4位)显示成12年34周

String(  【文本自定义1】 ).substring(0,2)+'年'+String(  【文本自定义1】 ).substring(2)+'周'

5-1、单据2个日期相减(无正负区分)

function getifDaysBetweenDates(date1, date2) {
// 将日期字符串转换为Date对象
var d1 = new Date(date1);
var d2 = new Date(date2);

// 计算两个日期的时间差(毫秒)
var timeDiff = Math.abs(d2.getTime() - d1.getTime());

// 计算天数
var days = Math.ceil(timeDiff / (1000 * 3600 * 24));

return days;
}
if( 【生产日期】 == '' ) { return zte(0 ) } else
return getifDaysBetweenDates( 【表头.录单日期】 , 【生产日期】 )

 5-2、报表日期相减,系统日期-批号(日期,不能是2025-1-1,格式需要是2025-01-01)

parseInt( (new Date() -(new Date( 【批号】 ) ) )/(1000 * 60 * 60*24))

5-3、报表公式:效期至-系统时间 ,还有几天到期,小于等于当天就是0,效期至大于系统时间就是多少天

function getifDaysBetweenDates(date1) {

// 将日期字符串转换为Date对象
var d1 = new Date(date1);
var d2 = new Date() ;
// 计算两个日期的时间差(毫秒)

var timeDiff = d2.getTime() - d1.getTime();

// 计算天数
var days = timeDiff / (1000 * 3600 * 24);

return days;
}
if( 【效期至】 == '' ) { return zte(0 ) } else{
var result =getifDaysBetweenDates( 【效期至】 );

if(result <0){ return Math.ceil(Math.abs(result)) }
else { return Math.ceil(result)-1
}
}

下图系统时间是2025-7-21

 

6、容易错的点,因为浏览器的计算是js计算,会存在小数位数精度的问题,所以在写公式的时候,需要加上.toFixed(8) 

比如:

 parseInt( ((【销售数量】 - (【文本1】* 【辅助单位3换算率】))/ 【辅助单位2换算率】).toFixed(8))

 

7、报表公式设置:字段内容拆分,这里是“/”作为拆分标记的

--/前面

var sifValueName=function(){

let cstr= 【商品名称】;

let match =String(cstr) .split('/');

if (match) {

return match[0];

}

return 0;

}

return sifValueName();

------------------------------------/后面

var sifValueName=function(){

let cstr= 【商品名称】;

let match =String(cstr) .split('/');

if (match) {

return match[1];

}

return 1;

}

return sifValueName();

8、单据,效期至小于系统日期,或者效期至为空,就显示空,否则显示1

if(new Date( 【效期至】 ) - new Date() <0) return ''
else if( 【效期至】== '') return ''
else return 1

9、单据拆分字段取值

1)前:

var ifa= function(str){
return String(str).indexOf('/');
}
var index = ifa( 【自由项】 );
return String( 【自由项】).substring(0,index)

2)中:

var ifa= function(str){
return String(str).indexOf('/');
}
var index1 = ifa( 【自由项】 );

var ifb= function(str){
return String(str).lastIndexOf('/');
}
var index2 = ifb( 【自由项】 );

return String( 【自由项】).substring(index1+1,index2)

3)后:

var ifa= function(str){
return String(str).lastIndexOf('/');
}
var index = ifa( 【自由项】 );
return String( 【自由项】 ).substring(index+1)

效果如下

 10、单据中,公式设置,取没放出来的字段

比如销售订单的虚拟库存,需要设置公式 销售数量-虚拟库存

设置:【销售数量】 -that.grid.get_selectedRowData()?.virtualstockqty  

但是不支持单据助手刷新虚拟库存去刷新这个字段公式的值

11、单据中取grid的某列的合计值

比如,组装拆卸单上表体的数量的合计值+本行数量

设置:that.gridout.findColumn('qty').get_summaryValue() +【库存数量】

12、单据,当录单日期大于等于系统日期返回ok,否则空

var currentdate = new Date().format("yyyy-M-d") ;

if( new Date( 【表头.录单日期】) >=new Date(currentdate)) return 'ok'; else return ''

13、单据,组装拆装单,上表体 库存数量,当【商品类别】  = '包装袋',取整,其他取4位小数---目前自己设置自己的公式还是有问题,所以下面写法作废

对上表体库存数量设置公式:

if(  【商品类别】  == '包装袋' )  return round(【表头.数字自定义1】*0+numeric( that.gridout.get_selectedRowData()?.mqty), 0)  ;  else return   round( numeric(that.gridout.get_selectedRowData()?.mqty )  + 【表头.数字自定义1】*0, 4)

注意:要录入 【表头.数字自定义1】才会触发这个公式

14、无法设置公式的字段或者录入商品不触发系统字段,现在通过给备注或者自定义字段设置公式,也可以进行触发了(7.1版本2025-4)

注意:慎用if(thatRow) ,因为这个写代码,如果代码字段不写完(如果写了原币,那么本币也要写),如果只写了一个,那么就会存在漏的情况,软件是不会对所有数据进行验证的,有些是前端看不见的,实际就会导致数据错误。

1)订单的到货时间目前是不能设置公式的,但希望默认取值:在单据日期上+10天,可以启用1个文本自定义字段,单据上设置公式:

if(thatRow) {
thatRow.reachdate =dateadd( 【表头.录单日期】 ,10 ,'d' )
}

2)销售出库调入销售订单,数量规则之前是代码写死了的(始终是调入未完成数量),现在可以根据公式重算这个数量了。比如希望数量取商品的规格的值,比如商品规格设置的是20*3,销售出库启用自定义设置按下面设置公式后,调入订单后,数量就是60

if(thatRow) {
thatRow.mqty = eval(【规格】 )
}

3)往来单位设置不同的税率,给备注或自定义字段设置公式:

if(thatRow) {
if( 【表头.客户名称】 == 'kh1' ) thatRow.tax= 11 ; else if( 【表头.客户名称】 == 'kh2' ) thatRow.tax= 12 ; else thatRow.tax= 13
}

4)生产任务单,给上表体自定义字段1设置取【销售订单编号】的值。需要启用配置,给备注(或者其他自定义字段)设置公式:

var thatjs=true;
if(thatRow) {thatRow.billdiy_ud1 =thatRow.orderbillcode}

image

image

 

15、报表显示系统时间,有2种(7.2版本开始才支持)

new Date().toLocaleString()
new Date().toLocaleDateString()

image

16、单据表体的内容自动赋值给表头,7.1版本,下面以销售订单为例,把表体自定义1的内容赋值给摘要

1)销售订单表体,启用2个文本自定义字段

2)销售订单设置公式:文本自定义2=文本自定义1,如图

3)备注设置公式:

var thatjs=true;
let comment=''
if(that){
let recount = that.grid.get_recordCount();
for(let iis=0;iis<recount;iis++){
let curRow=that.grid.findRowData(iis);
if(curRow && curRow.billdiy_ud1){
comment=comment+curRow.billdiy_ud1
//window.alert(curRow.billdiy_ud1)
}
}
//window.alert(comment)
that.comment.set_text(comment)
}; 【文本自定义2】

image

 效果如下:表体录入文本自定义1的内容,摘要自动就显示了所有行的文本自定义1的内容

image

17、取单据编号的后4位

var thatjs=true;

function getLastCharacters(str, num) {

if (num >= str.length) {
return str;
}
return str.substring(str.length - num);
}
return getLastCharacters( (【表头.单据编号】).toString() ,4 )

效果:

image

 

posted @ 2023-08-14 14:51  天通事业部  阅读(192)  评论(0)    收藏  举报