$PBExportHeader$uo_checkback.sru forward global type uo_checkback from nonvisualobject end type end forward global type uo_checkback from nonvisualobject end type global uo_checkback uo_checkback type variables Long uo_billid end variables forward prototypes public function integer updatebegin (long arg_billid, ref string arg_msg) public function integer caudit (long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg) public function integer p_getinfo (long arg_billid, ref s_checkback arg_s_check, ref string arg_msg) public function integer save (s_checkback arg_s_checkback, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) public function integer getinfo (long arg_billid, ref s_checkback arg_ref_s_cb, ref string arg_msg) public function integer del (long arg_billid, integer arg_chk_auto, ref string arg_msg, boolean arg_ifcommit) end prototypes public function integer updatebegin (long arg_billid, ref string arg_msg);Int rslt = 1 s_checkback arg_s_check IF arg_billid <= 0 THEN rslt = 0 ARG_MSG = '错误单据唯一码' GOTO ext END IF IF p_getinfo(arg_billid,arg_s_check,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF arg_s_check.flag = 1 THEN rslt = 0 ARG_MSG = '单据已经审核,不可以修改,要修改请先撤销审核' GOTO ext END IF IF arg_s_check.auto = 1 THEN rslt = 0 ARG_MSG = '自动建立单据,不能修改' GOTO ext END IF ext: RETURN rslt end function public function integer caudit (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 DateTime null_dt SetNull(null_dt) IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF s_checkback arg_s_cb IF getinfo(arg_billid,arg_s_cb,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF arg_s_cb.flag = 0 THEN rslt = 0 arg_msg = '单据未审核,不可以撤审' GOTO ext END IF UPDATE u_checkback SET flag = 0, auditemp = '', auditdate = :null_dt WHERE billid = :arg_billid AND flag = 1; 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 audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF s_checkback arg_s_cb IF getinfo(arg_billid,arg_s_cb,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF arg_s_cb.flag = 1 THEN rslt = 0 arg_msg = '单据已经审核,不可以再审' GOTO ext END IF //更新审核标记 UPDATE u_checkback 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 ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg);Int rslt = 1 s_checkback arg_s_check IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF IF arg_newdescppart = '' THEN rslt = 0 arg_msg = "要添加内容为空,操作取消" GOTO ext END IF IF p_getinfo(arg_billid,arg_s_check,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF arg_s_check.flag = 0 THEN rslt = 0 arg_msg = '单据未审核,不可以增加备注' GOTO ext END IF UPDATE u_CheckBack SET DSCRP = DSCRP+' '+:arg_newdescppart WHERE u_CheckBack.billid = :arg_billid AND flag = 1; 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 p_getinfo (long arg_billid, ref s_checkback arg_s_check, ref string arg_msg);Int rslt = 1 IF arg_billid <= 0 THEN rslt = 0 ARG_MSG = '错误单据唯一码' GOTO ext END IF SELECT u_CheckBack.billcode, u_CheckBack.billemp, u_CheckBack.relcode, u_CheckBack.dscrp, u_CheckBack.flag, u_CheckBack.sptid, u_CheckBack.billtype, u_CheckBack.auto INTO :arg_s_check.billcode, :arg_s_check.billemp, :arg_s_check.relcode, :arg_s_check.dscrp, :arg_s_check.flag, :arg_s_check.sptid, :arg_s_check.billtype, :arg_s_check.auto FROM u_CheckBack Where u_CheckBack.billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '查询验退单内容失败(错误单据唯一码)'+sqlca.sqlerrtext GOTO ext END IF ext: RETURN rslt end function public function integer save (s_checkback arg_s_checkback, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Integer rslt = 1 Long cnt = 0 DateTime server_dt Long ll_billid,it_mxbt,ll_i,i String ls_unit String ls_sccode,ls_billcode,ls_reltaskcode IF IsNull(arg_s_checkback.scid) THEN arg_s_checkback.scid = 0 IF IsNull(arg_s_checkback.billid) THEN arg_s_checkback.billid = 0 IF IsNull(arg_s_checkback.billemp) THEN arg_s_checkback.billemp = '' IF IsNull(arg_s_checkback.relcode) THEN arg_s_checkback.relcode = '' IF IsNull(arg_s_checkback.dscrp) THEN arg_s_checkback.dscrp = '' IF IsNull(arg_s_checkback.sptid) THEN arg_s_checkback.sptid = 0 IF IsNull(arg_s_checkback.billtype) THEN arg_s_checkback.billtype = 0 IF IsNull(arg_s_checkback.relid) THEN arg_s_checkback.relid = 0 IF IsNull(arg_s_checkback.auto) THEN arg_s_checkback.auto = 0 IF arg_s_checkback.billemp = '' THEN rslt = 0 arg_msg = "请输入经手人" GOTO ext END IF if arg_s_checkback.billtype = 0 or arg_s_checkback.billtype = 1 then cnt = 0 SELECT count(*) INTO :cnt FROM u_spt Where sptid = :arg_s_checkback.sptid ; 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 elseif arg_s_checkback.billtype = 2 then 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 it_mxbt = UpperBound(arg_s_checkback.arg_s_mx) IF it_mxbt <= 0 THEN rslt = 0 arg_msg = "没有正确明细内容" GOTO ext END IF FOR ll_i = 1 To it_mxbt ls_unit = '' SELECT unit INTO :ls_unit FROM u_mtrldef Where u_mtrldef.mtrlid = :arg_s_checkback.arg_s_mx[ll_i].mtrlid; IF sqlca.SQLCode <> 0 THEN arg_msg = '验退单,查询行:'+String(arg_s_checkback.arg_s_mx[ll_i].printid)+',物料资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF ls_unit = arg_s_checkback.arg_s_mx[ll_i].unit And arg_s_checkback.arg_s_mx[ll_i].rate <> 1 THEN arg_msg = '验退单,行:'+String(arg_s_checkback.arg_s_mx[ll_i].printid)+',物料资料采购单位与库存单位相同,但转换率不为1,请检查!' rslt = 0 GOTO ext END IF IF ls_unit <> arg_s_checkback.arg_s_mx[ll_i].unit And arg_s_checkback.arg_s_mx[ll_i].rate = 1 THEN arg_msg = '验退单,行:'+String(arg_s_checkback.arg_s_mx[ll_i].printid)+',物料资料采购单位与库存单位不相同,但转换率为1,请检查!' rslt = 0 GOTO ext END IF IF arg_s_checkback.arg_s_mx[ll_i].ifrel = 0 THEN ls_reltaskcode = '' ELSE IF arg_s_checkback.arg_s_mx[ll_i].relbillid = 0 THEN arg_msg = '行:'+String(arg_s_checkback.arg_s_mx[ll_i].printid)+',请选择订单!' rslt = 0 GOTO ext END IF IF arg_s_checkback.billtype = 0 THEN SELECT taskcode INTO :ls_reltaskcode FROM u_buytask WHERE scid = :arg_s_checkback.scid AND taskid = :arg_s_checkback.arg_s_mx[ll_i].relbillid; IF sqlca.SQLCode <> 0 THEN arg_msg = '行:'+String(arg_s_checkback.arg_s_mx[ll_i].printid)+',查询订单失败,请检查!' rslt = 0 GOTO ext END IF ELSEIF arg_s_checkback.billtype = 1 THEN SELECT taskcode INTO :ls_reltaskcode FROM u_order_wfjg WHERE scid = :arg_s_checkback.scid AND wfjgid = :arg_s_checkback.arg_s_mx[ll_i].relbillid; IF sqlca.SQLCode <> 0 THEN arg_msg = '行:'+String(arg_s_checkback.arg_s_mx[ll_i].printid)+',查询订单失败,请检查!' rslt = 0 GOTO ext END IF ELSEIF arg_s_checkback.billtype = 2 THEN SELECT ordercode INTO :ls_reltaskcode FROM u_order_ml WHERE scid = :arg_s_checkback.scid AND orderid = :arg_s_checkback.arg_s_mx[ll_i].relbillid; IF sqlca.SQLCode <> 0 THEN arg_msg = '行:'+String(arg_s_checkback.arg_s_mx[ll_i].printid)+',查询指令单失败,请检查!' rslt = 0 GOTO ext END IF END IF END IF arg_s_checkback.arg_s_mx[ll_i].relbillcode = ls_reltaskcode NEXT IF arg_s_checkback.billid = 0 THEN ll_billid = f_sys_scidentity(0,"u_CheckBack","billid",arg_msg,True,id_sqlca) IF ll_billid <= 0 THEN rslt = 0 GOTO ext END IF IF f_get_sccode(arg_s_checkback.scid,sqlca,ls_sccode,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF arg_s_checkback.billtype = 0 THEN ls_billcode = getid(arg_s_checkback.scid,ls_sccode + 'TJ',Date(server_dt),False,sqlca) ELSEIF arg_s_checkback.billtype = 1 THEN ls_billcode = getid(arg_s_checkback.scid,ls_sccode + 'AT',Date(server_dt),False,sqlca) ELSEIF arg_s_checkback.billtype = 2 THEN ls_billcode = getid(arg_s_checkback.scid,ls_sccode + 'AT',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_CheckBack (scid, billid, billcode, sptid, billdate, billemp, relcode, dscrp, opdate, opemp, billtype, relid, auto) VALUES ( :arg_s_checkback.scid, :ll_billid, :ls_billcode, :arg_s_checkback.sptid, :arg_s_checkback.billdate, :arg_s_checkback.billemp, :arg_s_checkback.relcode, :arg_s_checkback.dscrp, getdate(), :arg_opemp, :arg_s_checkback.billtype, :arg_s_checkback.relid, :arg_s_checkback.auto) ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致建立单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF uo_billid = ll_billid ELSE UPDATE u_CheckBack SET billemp = :arg_s_checkback.billemp, billdate = :arg_s_checkback.billdate, sptid = :arg_s_checkback.sptid, moddate = getdate(), modemp = :arg_opemp, relcode = :arg_s_checkback.relcode, dscrp = :arg_s_checkback.dscrp WHERE billid = :arg_s_checkback.billid And flag = 0; IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致更新单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_CheckBackMx Where billid = :arg_s_checkback.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_CheckBackMx // ( billid, // printid, // mtrlid, // checkqty, // lackqty, // mxdscrp, // status, // woodcode, // pcode, // ifrel, // relbillid, // relbillcode, // relprintid, // unit, // rate) // VALUES (:arg_s_checkback.billid, // :arg_s_checkback.arg_s_mx[i].printid, // :arg_s_checkback.arg_s_mx[i].mtrlid, // :arg_s_checkback.arg_s_mx[i].checkqty, // :arg_s_checkback.arg_s_mx[i].lackqty, // :arg_s_checkback.arg_s_mx[i].mxdscrp, // :arg_s_checkback.arg_s_mx[i].status, // :arg_s_checkback.arg_s_mx[i].woodcode, // :arg_s_checkback.arg_s_mx[i].pcode, // :arg_s_checkback.arg_s_mx[i].ifrel, // :arg_s_checkback.arg_s_mx[i].relbillid, // :arg_s_checkback.arg_s_mx[i].relbillcode, // :arg_s_checkback.arg_s_mx[i].relprintid, // :arg_s_checkback.arg_s_mx[i].unit, // :arg_s_checkback.arg_s_mx[i].rate); // IF sqlca.SQLCode <> 0 THEN // rslt = 0 // arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText // GOTO ext // END IF // NEXT uo_billid = arg_s_checkback.billid END IF FOR i = 1 To it_mxbt INSERT INTO u_CheckBackMx ( billid, printid, mtrlid, checkqty, lackqty, mxdscrp, status, woodcode, pcode, ifrel, relbillid, relbillcode, relprintid, unit, rate) VALUES (:uo_billid, :arg_s_checkback.arg_s_mx[i].printid, :arg_s_checkback.arg_s_mx[i].mtrlid, :arg_s_checkback.arg_s_mx[i].checkqty, :arg_s_checkback.arg_s_mx[i].lackqty, :arg_s_checkback.arg_s_mx[i].mxdscrp, :arg_s_checkback.arg_s_mx[i].status, :arg_s_checkback.arg_s_mx[i].woodcode, :arg_s_checkback.arg_s_mx[i].pcode, :arg_s_checkback.arg_s_mx[i].ifrel, :arg_s_checkback.arg_s_mx[i].relbillid, :arg_s_checkback.arg_s_mx[i].relbillcode, :arg_s_checkback.arg_s_mx[i].relprintid, :arg_s_checkback.arg_s_mx[i].unit, :arg_s_checkback.arg_s_mx[i].rate); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF NEXT ext: IF rslt = 0 THEN ROLLBACK; ELSEIF arg_ifcommit And rslt = 1 THEN COMMIT; END IF RETURN rslt end function public function integer getinfo (long arg_billid, ref s_checkback arg_ref_s_cb, 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 IF p_getinfo(arg_billid,arg_ref_s_CB,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF //用游标读取明细 DECLARE cur_mx CURSOR FOR SELECT billid, printid, ifrel, mtrlid, checkqty, lackqty, mxdscrp, relbillid, relbillcode, relprintid, status, woodcode, pcode FROM u_CheckBackMx WHERE billid = :arg_billid Order By printid; OPEN cur_mx; FETCH cur_mx INTO :arg_ref_s_CB.arg_s_mx[i].billID, :arg_ref_s_CB.arg_s_mx[i].printid, :arg_ref_s_CB.arg_s_mx[i].ifrel, :arg_ref_s_CB.arg_s_mx[i].mtrlid, :arg_ref_s_CB.arg_s_mx[i].checkqty, :arg_ref_s_CB.arg_s_mx[i].lackqty, :arg_ref_s_CB.arg_s_mx[i].mxdscrp, :arg_ref_s_CB.arg_s_mx[i].relbillid, :arg_ref_s_CB.arg_s_mx[i].relbillcode, :arg_ref_s_CB.arg_s_mx[i].relprintid, :arg_ref_s_CB.arg_s_mx[i].status, :arg_ref_s_CB.arg_s_mx[i].woodcode, :arg_ref_s_CB.arg_s_mx[i].pcode; DO WHILE sqlca.SQLCode = 0 i++ FETCH cur_mx INTO :arg_ref_s_CB.arg_s_mx[i].billID, :arg_ref_s_CB.arg_s_mx[i].printid, :arg_ref_s_CB.arg_s_mx[i].ifrel, :arg_ref_s_CB.arg_s_mx[i].mtrlid, :arg_ref_s_CB.arg_s_mx[i].checkqty, :arg_ref_s_CB.arg_s_mx[i].lackqty, :arg_ref_s_CB.arg_s_mx[i].mxdscrp, :arg_ref_s_CB.arg_s_mx[i].relbillid, :arg_ref_s_CB.arg_s_mx[i].relbillcode, :arg_ref_s_CB.arg_s_mx[i].relprintid, :arg_ref_s_CB.arg_s_mx[i].status, :arg_ref_s_CB.arg_s_mx[i].woodcode, :arg_ref_s_CB.arg_s_mx[i].pcode; LOOP CLOSE cur_mx; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM u_CheckBackMx 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 ext: RETURN rslt end function public function integer del (long arg_billid, integer arg_chk_auto, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 s_checkback arg_s_check IF arg_billid <= 0 THEN rslt = 0 ARG_MSG = '错误单据唯一码' GOTO ext END IF IF p_getinfo(arg_billid,arg_s_check,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF arg_s_check.flag = 1 THEN rslt = 0 ARG_MSG = '单据已经审核,不可以删除' GOTO ext END IF IF arg_chk_auto = 1 THEN IF arg_s_check.auto = 1 THEN ARG_MSG = '自动生产的单据,不能删除' rslt = 0 GOTO ext END IF END IF DELETE FROM u_CheckBack Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "删除单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_CheckBackMx Where billid = :arg_billid ; 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 on uo_checkback.create call super::create TriggerEvent( this, "constructor" ) end on on uo_checkback.destroy TriggerEvent( this, "destructor" ) call super::destroy end on global type uo_incase from nonvisualobject end type