如何解决调用检验单的webapi保存接口修改检验数据时提示明细合格数量、不合格数量与使用决策合格、不合格数量不一致的问题
问题现象:星空系统内通过上游单据下推生成检验单(或者设置上游单据审核自动生成检验单),系统预置默认全部检验数量为合格,此时在外部系统完成检验后,调用检验单的webapi保存接口将检验结果回传星空系统内的检验单上,但是存在部分情况下接口调用失败无法保存,提示明细合格数量、不合格数量与使用决策合格、不合格数量不一致。
原因分析:(1)因为标准产品修改检验单明细表体的合格数量、不合格数量以及检验结果都会导致使用决策表体的刷新,刷新后使用决策表体的FDETAILID就会改变,此时再按照之前获取的FDETAILID去设置使用决策表体的使用决策和数量时就无法识别到对应的使用决策分录,也就会导致使用决策表体修改不成功,但是明细分录的数量已经修改完成,所以保存时两边不一致导致校验无法通过;(2)使用决策表体是子表体,在数据包的NeedUpDateFields参数中设置的更新字段不正确导致使用决策表体数据更新不成功,从而保存校验无法通过;
解决方案:
1、由于标准产品录入使用决策表体的数量和状态后会自动计算明细的合格数量和不合格数量,因此可以只修改使用决策表体数据不需要赋值明细表体合格数量或者不合格数量(指定FDETAILID的分录则认为是修改,FDETAILID为0的则认为是新增的分录)
2、或者把明细表体的合格数量和不合格数量的赋值放到使用决策表体赋值之后,因为当使用决策表体存在多行且不勾选检验单选项参数中的参数“修改检验结果、合格数量、不合格数量自动刷新使用决策表体”时,修改明细表体的合格数量、不合格数量时是不会自动刷新使用决策表体的(检验结果字段赋值类似,也要放到使用决策表体字段赋值之后)
3、修改子表体例如使用决策表体或者检验项目表体字段值,需要在"NeedUpDateFields"中将主表体的标识"FEntity"先增加进去;
4、例如原本检验单检验数量为10,合格数量为10不合格数量为0,现在需要修改为8个合格使用决策为接收,2个不合格使用决策为判退,则数据包格式如下所示:
{
"Creator": "",
"NeedUpDateFields": ["FEntity","FQualifiedQty","FUnqualifiedQty","FBaseUnqualifiedQty","FBaseQualifiedQty","FPolicyDetail","FPolicyStatus","FPolicyQty","FBasePolicyQty","FUsePolicy"],
"NeedReturnFields": ["FQualifiedQty","FUnqualifiedQty","FBaseUnqualifiedQty","FBaseQualifiedQty"],
"IsDeleteEntry": "false",
"SubSystemId": "",
"IsVerifyBaseDataField": "false",
"IsEntryBatchFill": "true",
"ValidateFlag": "true",
"NumberSearch": "true",
"InterationFlags": "",
"Model": {
"FID": 100673,
"FEntity": [
{
"FEntryID": 100716,
"FPolicyDetail": [
{
"FDetailID": 101092,
"FPolicyStatus": "1",
"FPolicyQty": 8,
"FBasePolicyQty": 8,
"FUsePolicy": "A"
},
{
"FDetailID": 0,
"FPolicyMaterialId": {
"FNUMBER": "xlh1115"
},
"FPolicyStatus": "2",
"FPolicyQty":2,
"FBasePolicyQty": 2,
"FUsePolicy": "F",
"FIsCheck": "false",
"FIsDefectProcess": "false",
"FCanSale": "false",
"FIsMRBReview": "false",
"FIsReturn": "true",
"FIsRelatedDefect": "false",
"FMRBReviewStatus": "0",
}
]
}
]
}
}
补充说明:
(1)当检验单表体存在多行分录时,如果只是需要修改其中某一行的数据其他行数据保持不变,则需要将数据包中的参数 "IsDeleteEntry"设置为false,否则会导致其他不包含在数据包中的分录被删除;
(2)标准产品除了退货检验外,使用决策表体的"FIsReturn"字段的值都是默认为true的且界面上默认不显示该字段不允许修改,因此数据包中可以不包含此字段使用字段设置的默认值即可,如果需要添加则字段的值一定要设置为true,否则会导致相关数量无法反写回上游单据;
(3)检验单分录的质检状态不要在数据包中设置为质检完成(可以不包含该字段使用系统默认值即可),需要通过触发相关质检完成操作完成质检状态的改变,因为只有触发质检完成操作才可以实现相关数量的反写。
(4)如果不合格数量对应的使用决策是检验单单据类型中设置的默认不合格使用决策,则数据包中可以只赋值明细的合格数量或者不合格数量(通过触发标准产品修改合格数量、不合格数量时使用决策的刷新逻辑),但是如果不合格数量对应的使用决策不是确定的,每个单据的检验结果可能会不一样,则需要按上述数据包格式通过修改使用决策表体数据的方式实现;
(5)如果同时修改合格数量、不合格数量以及检验结果,则需要通过使用决策表体修改合格数量、不合格数量(明细表体的合格数量和不合格数量不需要赋值),然后将检验结果字段的赋值放在使用决策表体的赋值之后即可。
如何解决调用检验单的webapi保存接口修改检验数据时提示明细合格数量、不合格数量与使用决策合格、不合格数量不一致的问题
本文2024-09-23 03:27:40发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-159002.html