$PBExportHeader$uf_warebalc_spt.srf global type uf_warebalc_spt from function_object end type forward prototypes global function integer uf_warebalc_spt (integer arg_balctype, long arg_balcdateint, long arg_scid, long arg_sptid, datetime arg_balcdate, ref string arg_msg) end prototypes global function integer uf_warebalc_spt (integer arg_balctype, long arg_balcdateint, long arg_scid, long arg_sptid, datetime arg_balcdate, ref string arg_msg);Long rslt = 1,cnt DateTime balc_date,null_dt Long ls_balcdateint IF arg_balctype = 1 THEN ls_balcdateint = Year(Date(arg_balcdate)) * 10000 + Month(Date(arg_balcdate)) * 100 + Day(Date(arg_balcdate)) balc_date = DateTime(Date(arg_balcdate),Time('23:59:59')) SELECT count(*) INTO :cnt FROM ow_wfjgbalc WHERE balcdate = :balc_date AND sptid = :arg_sptid AND scid = :arg_scid; IF cnt <> 0 THEN rslt = 0 arg_msg = "外协商指定日期已进行过结存操作" GOTO ext END IF IF uf_spt_warebalc_check_inoutflag(arg_scid,arg_sptid,arg_balcdate,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF UPDATE ow_wfjgbalc SET balcdateint = :ls_balcdateint, balcdate = :arg_balcdate WHERE balcdateint = 0 AND sptid = :arg_sptid AND scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "更新外协商结存标记失败. ~n 原因:"+sqlca.SQLErrText GOTO ext END IF INSERT INTO ow_wfjgbalc (balcdateint, sptid, mtrlid, bgqty, bgamt, inqty, inamt, thqty, thamt, outqty, outamt, reoutqty, reoutamt, balcqty, balcamt, status, woodcode, pcode, scid ) SELECT 0, ow_wfjgbalc.sptid, ow_wfjgbalc.mtrlid, ow_wfjgbalc.balcqty, ow_wfjgbalc.balcamt, 0, 0, 0, 0, 0, 0, 0, 0, ow_wfjgbalc.balcqty, ow_wfjgbalc.balcamt, ow_wfjgbalc.status, ow_wfjgbalc.woodcode, ow_wfjgbalc.pcode, :arg_scid FROM ow_wfjgbalc WHERE ( (abs(ow_wfjgbalc.bgqty)+abs(ow_wfjgbalc.outqty)+abs(ow_wfjgbalc.inqty)+abs(ow_wfjgbalc.thqty)+abs(ow_wfjgbalc.reoutqty)+abs(ow_wfjgbalc.balcqty) <> 0) OR (abs(ow_wfjgbalc.bgamt)+ abs(ow_wfjgbalc.inamt)+abs(ow_wfjgbalc.thamt)+abs(ow_wfjgbalc.outamt)+abs(ow_wfjgbalc.reoutamt)+abs(ow_wfjgbalc.balcamt) <> 0) ) AND ( ow_wfjgbalc.sptid = :arg_sptid ) AND ( ow_wfjgbalc.balcdateint = :ls_balcdateint ) And ( ow_wfjgbalc.scid = :arg_scid); IF sqlca.SQLCode <> 0 THEN arg_msg = "结存操作失败 ~n原因:"+sqlca.SQLErrText rslt = 0 GOTO ext END IF // 写入日表 upartbalc UPDATE ow_wfjg_out SET balcflag = 1 , ow_wfjg_out.balcdateint = :ls_balcdateint WHERE ( ow_wfjg_out.flag = 1 ) AND ( ow_wfjg_out.balcflag = 0 ) AND ( ow_wfjg_out.sptid = :arg_sptid) AND ( ow_wfjg_out.balcdateint = 0 ) AND ( ow_wfjg_out.scid = :arg_scid); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "结存操作失败 ~n原因:"+sqlca.SQLErrText GOTO ext END IF UPDATE ow_wfjg_in SET balcflag = 1 , ow_wfjg_in.balcdateint = :ls_balcdateint WHERE ( ow_wfjg_in.flag = 1 ) AND ( ow_wfjg_in.balcflag = 0 ) AND ( ow_wfjg_in.sptid = :arg_sptid ) AND ( ow_wfjg_in.balcdateint = 0 ) AND ( ow_wfjg_in.scid = :arg_scid); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "结存操作失败 ~n原因:"+sqlca.SQLErrText GOTO ext END IF ELSE SELECT count(*) INTO :cnt FROM ow_wfjg_in WHERE flag = 1 AND ( balcdateint > :arg_balcdateint OR balcdateint = 0 ) AND ( sptid = :arg_sptid ) And ( scid = :arg_scid ); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '外协商反结存失败,查询进仓单结存日期后是否有单失败' GOTO ext END IF IF cnt > 0 THEN rslt = 0 arg_msg = '外协商反结存失败,进仓单结存日期后已经有单审核,如果要反结存请将进仓单反审核' GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM ow_wfjg_out WHERE flag = 1 AND ( balcdateint > :arg_balcdateint OR balcdateint = 0 ) AND ( sptid = :arg_sptid ) And ( scid = :arg_scid ); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '外协商反结存失败,查询出仓单结存日期后是否有单失败' GOTO ext END IF IF cnt > 0 THEN rslt = 0 arg_msg = '外协商反结存失败,出仓单结存日期后已经有单审核,如果要反结存请将出仓单反审核' GOTO ext END IF // 写入日表 upartbalc UPDATE ow_wfjg_in SET balcflag = 0 , ow_wfjg_in.balcdateint = 0 WHERE ( ow_wfjg_in.flag = 1 ) AND ( ow_wfjg_in.balcflag = 1 ) AND ( ow_wfjg_in.sptid = :arg_sptid ) AND ( ow_wfjg_in.balcdateint = :arg_balcdateint ) AND ( ow_wfjg_in.scid = :arg_scid ); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "反结存操作失败 ~n原因:"+sqlca.SQLErrText GOTO ext END IF UPDATE ow_wfjg_out SET balcflag = 0 , ow_wfjg_out.balcdateint = 0 WHERE ( ow_wfjg_out.flag = 1 ) AND ( ow_wfjg_out.balcflag = 1 ) AND ( ow_wfjg_out.sptid = :arg_sptid ) AND ( ow_wfjg_out.balcdateint = :arg_balcdateint ) AND ( ow_wfjg_out.scid = :arg_scid ); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "反结存操作失败 ~n原因:"+sqlca.SQLErrText GOTO ext END IF //----------------------------------------- DELETE FROM ow_wfjgbalc WHERE balcdateint = 0 AND sptid = :arg_sptid AND scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN arg_msg = '反结存操作 ~n原因:'+sqlca.SQLErrText rslt = 0 GOTO ext END IF SetNull(null_dt) UPDATE ow_wfjgbalc SET balcdateint = 0, balcdate = :null_dt WHERE balcdateint = :arg_balcdateint AND sptid = :arg_sptid AND scid = :arg_scid ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "更新外协商结存标记失败. ~n 原因:"+sqlca.SQLErrText GOTO ext END IF END IF ext: IF rslt = 0 THEN ROLLBACK; ELSE COMMIT; END IF RETURN rslt end function