$PBExportHeader$uf_update_warecost.srf global type uf_update_warecost from function_object end type forward prototypes global function integer uf_update_warecost (long arg_storageid, boolean arg_ifcommit, ref string arg_msg) end prototypes global function integer uf_update_warecost (long arg_storageid, boolean arg_ifcommit, ref string arg_msg);Int rslt = 1 Int li_balctype SELECT balctype INTO :li_balctype FROM u_storage Where storageid = :arg_storageid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询仓库结存金额计算方法失败,不能结存' rslt = 0 GOTO ext END IF CHOOSE CASE li_balctype CASE 0 rslt = 1 GOTO ext case 1 case 2 update u_inwaremx set u_inwaremx.fprice = u_mtrldef.planprice, u_inwaremx.price = u_mtrldef.planprice * u_inwaremx.rebate from u_inwaremx,u_inware,u_mtrldef where u_inwaremx.scid = u_inware.scid and u_inwaremx.inwareid = u_inware.inwareid and u_inwaremx.mtrlid = u_mtrldef.mtrlid and u_inware.flag = 1 and u_inware.balcdateint = 0 and u_inware.storageid = :arg_storageid; if sqlca.sqlcode <> 0 then arg_msg = '更新计划价为进仓价失败,'+sqlca.sqlerrtext rslt = 0 goto ext end if update u_warebalc set u_warebalc.incamt = u_incamt_balc.incamt from u_warebalc,u_incamt_balc where u_warebalc.storageid = u_incamt_balc.storageid and u_warebalc.mtrlid = u_incamt_balc.mtrlid and u_warebalc.status = u_incamt_balc.status; if sqlca.sqlcode <> 0 then arg_msg = '更新进仓金额失败,'+sqlca.sqlerrtext rslt = 0 goto ext end if case 3 update u_inwaremx set u_inwaremx.fprice = u_mtrldef.planprice, u_inwaremx.price = u_mtrldef.planprice * u_inwaremx.rebate from u_inwaremx,u_inware,u_mtrldef where u_inwaremx.scid = u_inware.scid and u_inwaremx.inwareid = u_inware.inwareid and u_inwaremx.mtrlid = u_mtrldef.mtrlid and u_inwaremx.fprice = 0 and u_inware.flag = 1 and u_inware.balcdateint = 0 and u_inware.storageid = :arg_storageid; if sqlca.sqlcode <> 0 then arg_msg = '更新计划价为进仓价失败,'+sqlca.sqlerrtext rslt = 0 goto ext end if update u_warebalc set u_warebalc.incamt = u_incamt_balc.incamt from u_warebalc,u_incamt_balc where u_warebalc.storageid = u_incamt_balc.storageid and u_warebalc.mtrlid = u_incamt_balc.mtrlid and u_warebalc.status = u_incamt_balc.status; if sqlca.sqlcode <> 0 then arg_msg = '更新进仓金额失败,'+sqlca.sqlerrtext rslt = 0 goto ext end if END CHOOSE UPDATE u_warebalc SET u_warebalc.desamt = round(u_warebalc.desqty * uv_warebalc_newoutcost.newoutcost,2), u_warebalc.balcamt = round(u_warebalc.balcqty * uv_warebalc_newoutcost.newoutcost,2) FROM u_warebalc INNER JOIN uv_warebalc_newoutcost ON u_warebalc.Storageid = uv_warebalc_newoutcost.Storageid AND u_warebalc.mtrlid = uv_warebalc_newoutcost.mtrlid AND u_warebalc.status = uv_warebalc_newoutcost.status Where (u_warebalc.balcdateint = 0) AND u_warebalc.storageid = :arg_storageid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新结存出仓金额及结存金额失败!>>'+sqlca.SQLErrText GOTO ext END IF UPDATE u_mtrlware SET wareamt = round(u_mtrlware.noallocqty * uv_warebalc_newoutcost.newoutcost,2), cost = uv_warebalc_newoutcost.newoutcost FROM u_mtrlware INNER JOIN uv_warebalc_newoutcost ON u_mtrlware.mtrlid = uv_warebalc_newoutcost.mtrlid AND u_mtrlware.storageid = uv_warebalc_newoutcost.Storageid AND u_mtrlware.Status = uv_warebalc_newoutcost.status Where u_mtrlware.storageid = :arg_storageid ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新库存金额失败!>>'+sqlca.SQLErrText GOTO ext END IF UPDATE u_outwaremx SET costamt = round(u_outwaremx.qty * uv_warebalc_newoutcost.newoutcost,2) FROM u_outwaremx INNER JOIN u_outware ON u_outwaremx.scid = u_outware.scid AND u_outwaremx.outwareid = u_outware.outwareid INNER JOIN uv_warebalc_newoutcost ON u_outware.StorageID = uv_warebalc_newoutcost.Storageid AND u_outwaremx.mtrlid = uv_warebalc_newoutcost.mtrlid AND u_outwaremx.status = uv_warebalc_newoutcost.status Where (u_outware.billtype = 1) AND u_outware.storageid = :arg_storageid AND u_outware.flag = 1 AND u_outware.balcflag = 0; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新销售单出仓成本失败!>>'+sqlca.SQLErrText GOTO ext END IF UPDATE u_outwaremx SET costamt = round(u_outwaremx.qty * uv_warebalc_newoutcost.newoutcost,2), u_outwaremx.fprice = uv_warebalc_newoutcost.newoutcost, u_outwaremx.price = uv_warebalc_newoutcost.newoutcost*u_outwaremx.rebate FROM u_outwaremx INNER JOIN u_outware ON u_outwaremx.scid = u_outware.scid AND u_outwaremx.outwareid = u_outware.outwareid INNER JOIN uv_warebalc_newoutcost ON u_outware.StorageID = uv_warebalc_newoutcost.Storageid AND u_outwaremx.mtrlid = uv_warebalc_newoutcost.mtrlid AND u_outwaremx.status = uv_warebalc_newoutcost.status Where (u_outware.billtype <> 1) AND u_outware.storageid = :arg_storageid AND u_outware.flag = 1 AND u_outware.balcflag = 0; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新出仓成本失败!>>'+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF RETURN rslt end function