$PBExportHeader$uo_ws_pd.sru forward global type uo_ws_pd from nonvisualobject end type end forward global type uo_ws_pd from nonvisualobject end type global uo_ws_pd uo_ws_pd type variables Long uo_billid String uo_billcode end variables forward prototypes public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg) public function integer del (long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer updatebegin (long arg_billid, ref string arg_msg) public function integer audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) public function integer caudit (long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer getinfo (long arg_billid, ref s_ws_pd_mx arg_ref_pdmx[], ref long arg_arr_cnt, ref string arg_msg) public function integer save (s_ws_pd arg_s_pd, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) public function integer p_getflag (long arg_billid, ref long arg_flag, ref string arg_msg) public function integer p_getbilltype (long arg_billid, ref integer arg_billtype, ref string arg_msg) end prototypes public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg); Int rslt = 1 long ll_flag IF arg_newdescppart = '' THEN rslt = 0 arG_MSG = "要添加内容为空,操作取消" GOTO ext END IF IF p_getflag(arg_billid,ll_flag,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF ll_flag = 0 THEN rslt = 0 arG_MSG = "待审核状态下不可用" GOTO ext END IF UPDATE u_ws_pd SET DSCRP = DSCRP+' '+:arg_newdescppart WHERE u_ws_pd.billid = :arg_billid; IF SQLCA.SQLCode <> 0 THEN rslt = 0 arG_MSG = "因网络或其它原因导致添加备注操作失败"+"~n"+SQLCA.SQLErrText GOTO ext END IF ext: IF rslt = 1 THEN COMMIT; ELSE ROLLBACK; END IF Return (rslt) end function public function integer del (long arg_billid, ref string arg_msg, boolean arg_ifcommit);int rslt = 1 long ll_flag if arg_billid <= 0 then rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF IF p_getflag(arg_billid,ll_flag,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF if ll_flag <> 0 then rslt = 0 arg_msg = '单据不是在待审核状态,不能删除' GOTO ext END IF DELETE FROM u_ws_pd_mx WHERE billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除单据明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_ws_pd_mx_cmpl WHERE billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除单据明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_ws_pd WHERE billid = :arg_billid AND flag = 0; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除单据操作失败"+"~n"+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 public function integer updatebegin (long arg_billid, ref string arg_msg);Int rslt = 1 long li_flag IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF IF p_getflag(arg_billid,li_flag,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF li_flag = 1 THEN rslt = 0 arg_msg = '单据已经审核,不可以修改,要修改请先撤销审核' GOTO ext END IF ext: RETURN rslt end function public function integer audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long ll_flag Int li_billtype uo_pf_cmpl uo_cmpl uo_cmpl = CREATE uo_pf_cmpl IF arg_billid <= 0 THEN rslt = 0 ARG_MSG = '错误单据唯一码' GOTO ext END IF IF p_getflag(arg_billid,ll_flag,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF ll_flag <> 0 THEN rslt = 0 ARG_MSG = '单据不是在待审核状态,不可以再审' GOTO ext END IF IF p_getbilltype(arg_billid,li_billtype,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF s_ws_pd_mx s_pdmx[] Long ll_cnt,i,j IF getinfo(arg_billid,s_pdmx,ll_cnt,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF ll_cnt = 0 THEN rslt = 0 ARG_MSG = '没有明细内容,不能审核' GOTO ext END IF //更新审核标记 UPDATE u_ws_pd SET auditemp = :arg_opemp, auditdate = getdate(), flag = 1 WHERE billid = :arg_billid AND flag = 0; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或其它原因导致单据审核操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF IF li_billtype <> 3 THEN //Open(w_sys_wait_jdt) //初始化进度条 //w_sys_wait_jdt.Show() //w_sys_wait_jdt.wf_accepttol(ll_cnt) IF li_billtype = 0 OR li_billtype = 1 THEN FOR i = 1 TO ll_cnt //w_sys_wait_jdt.st_msg.Text = s_pdmx[i].mtrlcode+" 正在统计..." //进度信息 UPDATE u_ws_pd_mx_cmpl SET qty = qty + :s_pdmx[i].qty WHERE billid = :arg_billid AND mtrlid = :s_pdmx[i].mtrlid AND status = :s_pdmx[i].status AND woodcode = :s_pdmx[i].woodcode AND pcode = :s_pdmx[i].pcode; IF sqlca.SQLCode = 0 THEN IF sqlca.SQLNRows = 0 THEN INSERT INTO u_ws_pd_mx_cmpl (billid, mtrlid, status, woodcode, pcode, qty) VALUES( :arg_billid, :s_pdmx[i].mtrlid, :s_pdmx[i].status, :s_pdmx[i].woodcode, :s_pdmx[i].pcode, :s_pdmx[i].qty); IF sqlca.SQLCode <> 0 THEN ARG_MSG = '物料:'+s_pdmx[i].mtrlcode + ',新增盘点运算明细失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF ELSE ARG_MSG = '物料:'+s_pdmx[i].mtrlcode + ',更新盘点运算明细失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF //w_sys_wait_jdt.wf_inc(i) //进度 NEXT ELSE FOR i = 1 TO ll_cnt //w_sys_wait_jdt.st_msg.Text = s_pdmx[i].mtrlcode+" 正在统计..." //进度信息 String ls_pfcode_dft ls_pfcode_dft = f_get_dft_pf(s_pdmx[i].mtrlid) IF ls_pfcode_dft = '' THEN ARG_MSG = '物料:'+s_pdmx[i].mtrlcode + ',查询默认清单失败,请核对该物料清单' rslt = 0 GOTO ext END IF s_pf_cmpl arg_pf IF uo_cmpl.uof_cmpl_scll(s_pdmx[i].mtrlid,ls_pfcode_dft,s_pdmx[i].qty,arg_pf,ARG_MSG) = 0 THEN ARG_MSG = '物料:'+s_pdmx[i].mtrlcode + ',' +ARG_MSG rslt = 0 GOTO ext END IF FOR j = 1 TO UpperBound(arg_pf.sonmtrlid) IF arg_pf.mtrlorigin[j] = 0 AND & arg_pf.ifselforder[j] = 0 THEN CONTINUE END IF UPDATE u_ws_pd_mx_cmpl SET qty = qty + :arg_pf.scllqty[j] WHERE billid = :arg_billid AND mtrlid = :arg_pf.sonmtrlid[j] AND status = :arg_pf.status[j] AND woodcode = :arg_pf.woodcode[j] AND pcode = :arg_pf.pcode[j]; IF sqlca.SQLCode = 0 THEN IF sqlca.SQLNRows = 0 THEN INSERT INTO u_ws_pd_mx_cmpl (billid, mtrlid, status, woodcode, pcode, qty) VALUES( :arg_billid, :arg_pf.sonmtrlid[j], :arg_pf.status[j], :arg_pf.woodcode[j], :arg_pf.pcode[j], :arg_pf.scllqty[j]); IF sqlca.SQLCode <> 0 THEN ARG_MSG = '物料:'+s_pdmx[i].mtrlcode + ',新增盘点运算明细失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF ELSE ARG_MSG = '物料:'+s_pdmx[i].mtrlcode + ',更新盘点运算明细失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF NEXT //w_sys_wait_jdt.wf_inc(i) //进度 NEXT END IF END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF DESTROY uo_cmpl //Close(w_sys_wait_jdt) RETURN rslt end function public function integer caudit (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long ll_flag DateTime null_dt Int li_billtype SetNull(null_dt) IF arg_billid <= 0 THEN rslt = 0 ARG_MSG = '错误单据唯一码' GOTO ext END IF IF p_getflag(arg_billid,ll_flag,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF ll_flag <> 1 THEN rslt = 0 ARG_MSG = '单据不是在审核状态,不可以撤审' GOTO ext END IF IF p_getbilltype(arg_billid,li_billtype,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF //更新审核标记 UPDATE u_ws_pd SET auditemp = '', auditdate = :null_dt, flag = 0 Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或其它原因导致单据撤审操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF IF li_billtype <> 3 THEN DELETE FROM u_ws_pd_mx_cmpl Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "删除单据明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer getinfo (long arg_billid, ref s_ws_pd_mx arg_ref_pdmx[], ref long arg_arr_cnt, ref string arg_msg);Int rslt = 1 Long i = 1,no_mxcheck = 0 IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF //用游标读取明细 DECLARE cur_pdmx CURSOR FOR SELECT u_ws_pd_mx.mtrlid, u_mtrldef.mtrlcode, u_ws_pd_mx.qty, u_ws_pd_mx.status, u_ws_pd_mx.woodcode, u_ws_pd_mx.pcode FROM u_ws_pd_mx,u_mtrldef WHERE u_ws_pd_mx.billid = :arg_billid AND u_ws_pd_mx.mtrlid = u_mtrldef.mtrlid Order By u_ws_pd_mx.printid; OPEN cur_pdmx; FETCH cur_pdmx INTO :arg_ref_pdmx[i].mtrlid, :arg_ref_pdmx[i].mtrlcode,:arg_ref_pdmx[i].qty, :arg_ref_pdmx[i].status,:arg_ref_pdmx[i].woodcode, :arg_ref_pdmx[i].pcode; DO WHILE sqlca.SQLCode = 0 i++ FETCH cur_pdmx INTO :arg_ref_pdmx[i].mtrlid, :arg_ref_pdmx[i].mtrlcode,:arg_ref_pdmx[i].qty, :arg_ref_pdmx[i].status,:arg_ref_pdmx[i].woodcode, :arg_ref_pdmx[i].pcode; LOOP CLOSE cur_pdmx; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM u_ws_pd_mx Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,单据明细数量" GOTO ext END IF IF i <> (no_mxcheck + 1) THEN rslt = 0 arg_msg = "查询操作失败,单据明细" GOTO ext END IF arg_arr_cnt = i - 1 ext: RETURN rslt end function public function integer save (s_ws_pd arg_s_pd, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Integer rslt = 1,cnt = 0 DateTime server_dt Long ll_billid,it_mxbt,i String ls_sccode,ls_billcode IF IsNull(arg_s_pd.scid) THEN arg_s_pd.scid = 0 IF IsNull(arg_s_pd.billid) THEN arg_s_pd.billid = 0 IF IsNull(arg_s_pd.billtype) THEN arg_s_pd.billtype = 0 IF IsNull(arg_s_pd.wrkgrpid) THEN arg_s_pd.wrkgrpid = 0 IF IsNull(arg_s_pd.rep) THEN arg_s_pd.rep = '' IF IsNull(arg_s_pd.dscrp) THEN arg_s_pd.dscrp = '' IF IsNull(arg_s_pd.wrkgrpid) THEN arg_s_pd.wrkgrpid = 0 IF IsNull(arg_s_pd.atid) THEN arg_s_pd.atid = 0 IF IsNull(arg_s_pd.workgroupid) THEN arg_s_pd.workgroupid = 0 IF arg_s_pd.rep = '' THEN arg_msg = '请输入经手人' rslt = 0 GOTO ext END IF IF arg_s_pd.atid = 0 THEN arg_msg = '请选择车间盘点' rslt = 0 GOTO ext END IF IF arg_s_pd.wrkgrpid = 0 THEN arg_msg = '请选择车间' rslt = 0 GOTO ext END IF IF arg_s_pd.billtype = 3 AND arg_s_pd.workgroupid = 0 THEN arg_msg = '请选择工组' rslt = 0 GOTO ext END IF SELECT Top 1 getdate() INTO :server_dt FROM u_user; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,日期 " GOTO ext END IF IF arg_s_pd.billtype <> 3 THEN it_mxbt = UpperBound(arg_s_pd.arg_s_pdmx) IF it_mxbt <= 0 THEN rslt = 0 arg_msg = "没有正确明细内容" GOTO ext END IF ELSEIF arg_s_pd.billtype = 3 THEN it_mxbt = 0 END IF IF arg_s_pd.billid = 0 THEN ll_billid = f_sys_scidentity(0,"u_ws_pd","billid",arg_msg,TRUE,id_sqlca) IF ll_billid <= 0 THEN rslt = 0 GOTO ext END IF IF f_get_sccode(arg_s_pd.scid,sqlca,ls_sccode,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF arg_s_pd.billtype <> 3 THEN ls_billcode = getid(arg_s_pd.scid,ls_sccode + 'DP',Date(server_dt),FALSE,sqlca) ELSE ls_billcode = getid(arg_s_pd.scid,ls_sccode + 'SA',Date(server_dt),FALSE,sqlca) END IF IF ls_billcode = "err" THEN rslt = 0 arg_msg = "无法获取单据编号"+"~n"+sqlca.SQLErrText GOTO ext END IF INSERT INTO u_ws_pd (scid, billid, billcode, pddate, pdmonth, rep, dscrp, opdate, opemp, wrkgrpid, billtype, atid, workgroupid) VALUES (:arg_s_pd.scid, :ll_billid, :ls_billcode, :arg_s_pd.pddate, :arg_s_pd.pdmonth, :arg_s_pd.rep, :arg_s_pd.dscrp, getdate(), :arg_opemp, :arg_s_pd.wrkgrpid, :arg_s_pd.billtype, :arg_s_pd.atid, :arg_s_pd.workgroupid); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致建立单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF FOR i = 1 TO it_mxbt INSERT INTO u_ws_pd_mx (billid, printid, mtrlid, status, woodcode, pcode, qty, mxdscrp) VALUES (:ll_billid, :arg_s_pd.arg_s_pdmx[i].printid, :arg_s_pd.arg_s_pdmx[i].mtrlid, :arg_s_pd.arg_s_pdmx[i].status, :arg_s_pd.arg_s_pdmx[i].woodcode, :arg_s_pd.arg_s_pdmx[i].pcode, :arg_s_pd.arg_s_pdmx[i].qty, :arg_s_pd.arg_s_pdmx[i].mxdscrp); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF NEXT uo_billid = ll_billid uo_billcode = ls_billcode ELSE UPDATE u_ws_pd SET pddate = :arg_s_pd.pddate, pdmonth = :arg_s_pd.pdmonth, rep = :arg_s_pd.rep, dscrp = :arg_s_pd.dscrp, moddate = getdate(), modemp = :arg_opemp, wrkgrpid = :arg_s_pd.wrkgrpid, atid = :arg_s_pd.atid, billtype = :arg_s_pd.billtype, workgroupid = :arg_s_pd.workgroupid WHERE billid = :arg_s_pd.billid AND flag = 0 ; IF sqlca.SQLCode <> 0 OR sqlca.SQLNRows <= 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致更新单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF IF arg_s_pd.billtype <> 3 THEN DELETE FROM u_ws_pd_mx Where billid = :arg_s_pd.billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除旧有明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF FOR i = 1 TO it_mxbt INSERT INTO u_ws_pd_mx (billid, printid, mtrlid, status, woodcode, pcode, qty, mxdscrp) VALUES (:arg_s_pd.billid, :arg_s_pd.arg_s_pdmx[i].printid, :arg_s_pd.arg_s_pdmx[i].mtrlid, :arg_s_pd.arg_s_pdmx[i].status, :arg_s_pd.arg_s_pdmx[i].woodcode, :arg_s_pd.arg_s_pdmx[i].pcode, :arg_s_pd.arg_s_pdmx[i].qty, :arg_s_pd.arg_s_pdmx[i].mxdscrp); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF NEXT END IF uo_billid = arg_s_pd.billid END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT; END IF RETURN rslt end function public function integer p_getflag (long arg_billid, ref long arg_flag, ref string arg_msg);Int rslt = 1 SELECT flag INTO :arg_flag FROM u_ws_pd WHERE billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN ARG_MSG = '查询单据审核标记失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ext: RETURN rslt end function public function integer p_getbilltype (long arg_billid, ref integer arg_billtype, ref string arg_msg);Int rslt = 1 SELECT billtype INTO :arg_billtype FROM u_ws_pd WHERE billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN ARG_MSG = '查询单据类型失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ext: RETURN rslt end function on uo_ws_pd.create call super::create TriggerEvent( this, "constructor" ) end on on uo_ws_pd.destroy TriggerEvent( this, "destructor" ) call super::destroy end on