通过API对接传入价税合计、折扣额、含税单价等数据后不一致问题浅析
通过API传入做订单的时候,有些场景下需要通过接口将第三方系统的价税合计 或 折扣额 或 含税单价 直接传入,但经常会出现传入的数据和最终订单上的数据不一致的问题,比如,传入的价税合计是108.47,但对接成功后,订单的价税合计是108.48;有比如传入的含税单价是10,对接成功后,订单的含税单价为0。折扣额类似,诸如此类的问题,起主要根本原因都是传入的数据和系统的运算发生冲突覆盖导致的。
先简单说明API传入数据的时候,各个字段的执行顺序,是跟报文里的字段顺序是一样的,所以如果先传入了价税合计,然后传入其他字段触发了对价税合计的重算,那么重算的结果自然就会将传入的价税合计覆盖。比如以下例子:
"FSaleOrderEntry": [
{
"FMaterialId": {
"FNumber": "C999791P"
},
"FQty": "5.00",
"FALLAmount": "108.47",
"FTaxPrice": "21.695999",
"FEntryTaxRate": "13.00"
}
]
上述这个例子里,传入了销售数量FQty5,然后价税合计FALLAmount传入108.47,到此时,价税合计已成功传入108.47,但接着传入了含税单价FTaxPrice=21.695999,含税单价的值更新触发价税合计的重算,计算结果为108.47999,按精度取两位小数,最终价税合计=107.48,覆盖了传入的108.47
根据以上原因,解决办法就是调整一下字段顺序,将先传入数量和单价等字段,先让系统的计算先进行,最后传入价税合计,用传入的价税合计覆盖计算的结果即可。修改后的报文示例如下:
"FSaleOrderEntry": [
{
"FMaterialId": {
"FNumber": "C999791P"
},
"FQty": "5.00",
"FTaxPrice": "21.695999",
"FEntryTaxRate": "13.00",
"FALLAmount": "108.47"
}
]
含税单价或折扣额等字段相同的问题原因和处理方法都是一样的,并注意的是,调整这些字段的传入顺序时,最好是调整到明细信息的最后一位,这样可确保在它们之后不会再有字段会联动触发计算覆盖。
对于含税单价而已,跟它发生覆盖的主要是取价服务,触发取价服务的有日期、客户、销售部门、销售组、销售员、结算币别、是否含税、价目表、辅助属性、销售数量、计价数量、是否赠品、BOM版本、批号。折扣额则是由于折扣率的值更新重算或获取折扣服务的结果重算,触发取折扣服务的一般是单价或含税单价的值更新。
最后,特别需要注意提醒,以上调整报文里字段顺序的方法在使用是,接口的参数 自动调整Json字段顺序 IsAutoAdjustField 比如置为false,不可以启用这个参数,启用这个参数后,报文里的字段顺序就会随机自动调整,无法进行控制。
通过API对接传入价税合计、折扣额、含税单价等数据后不一致问题浅析
本文2024-09-23 02:46:41发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-154640.html