③秘密信息严禁泄露车间投入产出表更新小计行数据注:二开要关账后处理数据,不然成本计算就会自动重新获取。车间投入产出表是报表,但是数据是保存在对应的实体表内,可以直接更新实体表对应字段T_CB_SFCINOUTPUT(表头)T_CB_SFCINOUTPUTENTRY(表体)T_CB_SFCINOUTPUTENTRY_SUB(小计行)这2个字段都是期末汇报未入库数量,都要更新,FENDRPTTOSTKQTY一个是在界面展示的,FWIPENDRPTQTY一个是成本计算使用的可以直接在报表新增按钮,配置二开插件更新T_CB_SFCINOUTPUTENTRY_SUB(小计行)由于当前成本计算是成本中心级,所以上期的期末汇报未入库结转到下期的期初汇报未入库时,同一车间下的所有工序共用小计行的期初汇报未入库数量1/5③秘密信息严禁泄露如果需要更精确的成本,则对每道工序二开更新,自行获取上期每道工序的期末汇报未入库,填写到本期的期初汇报未入库,并且重算本期的汇报未入库数量=期初汇报未入库+汇报数量-本期完工例如下面期间是2024年1期如果要对上述内容的小计行汇总工序汇报未入库数量汇报数量完工数量期末汇报未入库数量10010552001055小计0201010结转到2024年2期工序汇报未入库数量汇报数量完工数量期末汇报未入库数量10101051520105510小计10555按原工序的期初汇报10和20工序应该都是5,所有需要对工序10,20重写期初汇报未入库重新获取上期期末的汇报未入库数量,再汇总到小计行工序汇报未入库数量汇报数量完工数量期末汇报未入库数量10510510205555小计10151015如果是用于在产品分配,还需要单独二开在产品分配标准,可以参考标准产品的汇报未入库,只需要修改标准产品单价计算的逻辑即可在产品分配标准二开参考2/5工序汇报未入库数量汇报数量完工数量期末汇报未入库数量10010552001055小计0201010③秘密信息严禁泄露https://vip.kingdee.com/article/498907543448794368?productLineId=1&isKnowledge=0usingKingdee.BOS.Core.Util;usingKingdee.BOS.Orm.DataEntity;usingKingdee.K3.FIN.CB.App.Core.CostCal.Object;usingKingdee.K3.FIN.CB.App.Core.CostCal.Parameters;usingKingdee.K3.FIN.Core;usingKingdee.K3.FIN.Core.Object.CostCal;usingKingdee.K3.FIN.Core.Parameters;usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceKingdee.K3.FIN.CB.App.Core.CostCal.Cal{publicclassTEST:ProcessCompleteCostCal{///
///在产品分配//////
/////////protectedoverridevoidWipAmountDetailCal(ProductingParameterproductingParameter,decimalwipQty,CostCalMaterialmaterial,CostMatterialDetaildetail){decimalinputAmount=detail.SumCurrInputAmount;//本期没有完工产品,在所有的费用都计入在产品成本if(this.CurrProductionInfo.ExpenseResults.CompleteQty==0){this.CalEndAmount(material,detail,inputAmount);return;}decimalprice=this.GetExpensePrice(wipQty,inputAmount,productingParameter,material,detail);decimalcompleteAmount=0;decimalendAmount=0;3/5③秘密信息严禁泄露endAmount=FieldFormatterUtil.MathRound(price*wipQty,this.CostCalParameter.RoundType,this.CostCalParameter.AmountAccuracy);completeAmount=inputAmount-endAmount;//无期末在产,尾差调整到完工成本if((this.CurrentProcessInputQty.ProcessTrack.Equals("0")&&this.CurrentProcessInputQty.WipEndRptQty==0)||(this.CurrentProcessInputQty.ProcessTrack.Equals("1")&&wipQty==0)){completeAmount+=endAmount;endAmount=0;}this.CalCompleteAmount(material,detail,completeAmount);this.CalEndAmount(material,detail,endAmount);}//////计算单价/////////////////////protectedoverridedecimalGetExpensePrice(decimalwipQty,decimalinputAmount,ProductingParameterproductingParameter,CostCalMaterialmaterial,CostMatterialDetaildetail){//如果投入金额为0,但材料单价大于0时,直接返回材料单价。比如一种特殊情况,退料的成本完全等于本期领料成本导致投入成本为0的情况。if(inputAmount==0&&material!=null&&material.Price>0&&this.CompleteQty<0&&this.CurrProductionInfo.ExpenseResults.EndQty>=0){decimalprice=this.CurrProductionInfo.ExpenseResults.SumInputQty==0?0:Math.Round(detail.SumInputAmount/this.CurrProductionInfo.ExpenseResults.SumInputQty,this.CostCalParameter.CalPricePrecision);returnprice;}if(wipQty+this.CompleteQty==0){4/5③秘密信息严禁泄露decimalprice=0;if(inputAmount<0&&wipQty<0){price=Math.Round(inputAmount/wipQty,this.CostCalParameter.CalPricePrecision);returnprice;}//此场景一般是委外工单发生退料的情况。此时退料金额完全放到完工处理if(inputAmount<0&&this.CompleteQty<0){price=Math.Round(inputAmount/this.CompleteQty,this.CostCalParameter.CalPricePrecision);returnprice;}returnMath.Round(inputAmount/Math.Abs(wipQty),this.CostCalParameter.CalPricePrecision);}else{//汇报数量0if((this.CurrentProcessInputQty.InitRptToStockQty+this.CurrentProcessInputQty.RptQty)!=0&&this.CurrentProcessInputQty.ProcessTrack.Equals("0")){returnMath.Round(inputAmount/(this.CurrentProcessInputQty.InitRptToStockQty+this.CurrentProcessInputQty.RptQty),this.CostCalParameter.CalPricePrecision);}else{returnMath.Round(inputAmount/(wipQty+this.CurrProductionInfo.ExpenseResults.CompleteQty),this.CostCalParameter.CalPricePrecision);}}}}}5/5