二开服务端插件挂在生产用料清单的保存操作上面,如下图:二开代码示例如下:usingKingdee.BOS.Core.DynamicForm.PlugIn;usingKingdee.BOS.Util;usingKingdee.K3.Core.MFG.EntityHelper;usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.ComponentModel;usingKingdee.BOS.Orm.DataEntity;usingKingdee.K3.Core.MFG.EnumConst;usingKingdee.K3.Core.BD.ServiceArgs;usingKingdee.K3.MFG.App;namespaceEK.Kingdee.K3.MFG.PRD.App.ServicePlugIn{[Description("生产用料清单保存计算最小发料批量数量")]publicclassPPBOMSaveCalMiniQty:AbstractOperationServicePlugIn{publicoverridevoidBeginOperationTransaction(global::Kingdee.BOS.Core.DynamicForm.PlugIn.Args.BeginOperationTransactionArgse){base.BeginOperationTransaction(e);if(e.DataEntitys.IsEmpty())return;foreach(DynamicObjectitemine.DataEntitys){DynamicObjectCollectionentryDatas=item.GetDynamicValue(CONST_PRD_PPBOM.CONST_FEntity.ENTITY_ORM_PPBomEntry);foreach(DynamicObjectentryDatainentryDatas){boolisMinIssueQty=entryData.GetDynamicValue(CONST_PRD_PPBOM.CONST_FEntity.ORM_ISMinIssueQty);if(isMinIssueQty==false)continue;DynamicObjectmtrlObj=entryData.GetDynamicValue(CONST_PRD_PPBOM.CONST_FEntity.ORM_MaterialID);if(mtrlObj.IsNullOrEmpty())continue;decimalchildMtrlIssueQty=mtrlObj.GetDynamicValue("MaterialProduce").FirstOrDefault().GetDynamicValue("MinIssueQty");//最小发料批量数量longchildMtrlMasterId=mtrlObj.GetDynamicValue("msterID");longchildMtrlBaseUnit=entryData.GetDynamicValue(CONST_PRD_PPBOM.CONST_FEntity.ORM_BaseUnitID_Id);//基本单位longchildMtrlIssueUnitId=mtrlObj.GetDynamicValue("MaterialProduce").FirstOrDefault().GetDynamicValue("MinIssueUnitId_Id");//最小发料批量单位varunitConvertRateArgs=newGetUnitConvertRateArgs(){MasterId=childMtrlMasterId,SourceUnitId=childMtrlIssueUnitId,DestUnitId=childMtrlBaseUnit};varunitConvert=AppServiceContext.BDService.GetUnitConvertRate(this.Context,unitConvertRateArgs);decimalbaseMustQty=entryData.GetDynamicValue(CONST_PRD_PPBOM.CONST_FEntity.ORM_BaseMustQty);decimalbaseMinIssueQty=unitConvert.ConvertQty(childMtrlIssueQty);decimalnewMinIssueQty=RoundQtyByMinBatchQty(baseMustQty,baseMinIssueQty);entryData.SetDynamicObjectItemValue("BaseMinIssueQty",newMinIssueQty);}}}privatedecimalRoundQtyByMinBatchQty(decimalqty,decimalminBatchQty){if(minBatchQty<=0)returnqty;decimalresult=qty;decimalremainQty=result%minBatchQty;if(remainQty>0){result=(qty-remainQty)+minBatchQty;}returnresult;}}}