$PBExportHeader$uo_orderrqwp_change.sru forward global type uo_orderrqwp_change from nonvisualobject end type end forward global type uo_orderrqwp_change from nonvisualobject end type global uo_orderrqwp_change uo_orderrqwp_change type variables long uo_billid string uo_billcode end variables forward prototypes public function integer save (s_orderrqwp_change arg_s_change, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) public function integer p_getflag (long arg_billid, ref integer arg_flag, ref string arg_msg) public function integer updatebegin (long arg_billid, ref string arg_msg) public function integer del (long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit) public function integer getinfo (long arg_billid, ref s_orderrqwp_change_mx arg_ref_mx[], ref long arg_arr_cnt, ref string arg_msg) public function integer audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) end prototypes public function integer save (s_orderrqwp_change arg_s_change, 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_change.scid) THEN arg_s_change.scid = 0 IF IsNull(arg_s_change.billid) THEN arg_s_change.billid = 0 IF IsNull(arg_s_change.relcode) THEN arg_s_change.relcode = '' IF IsNull(arg_s_change.rep) THEN arg_s_change.rep = '' IF IsNull(arg_s_change.dscrp) THEN arg_s_change.dscrp = '' IF arg_s_change.rep = '' 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 it_mxbt = UpperBound(arg_s_change.arg_s_mx) IF it_mxbt <= 0 THEN rslt = 0 arg_msg = "没有正确明细内容" GOTO ext END IF IF arg_s_change.billid = 0 THEN ll_billid = f_sys_scidentity(0,"u_orderrqwp_change","billid",arg_msg,True,id_sqlca) IF ll_billid <= 0 THEN rslt = 0 GOTO ext END IF IF f_get_sccode(0,sqlca,ls_sccode,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF ls_billcode = getid(0,ls_sccode + 'RC',Date(server_dt),False,sqlca) IF ls_billcode = "err" THEN rslt = 0 arg_msg = "无法获取单据编号"+"~n"+sqlca.SQLErrText GOTO ext END IF INSERT INTO u_orderrqwp_change (scid, billid, billcode, billdate, relcode, rep, dscrp, opdate, opemp) VALUES (:arg_s_change.scid, :ll_billid, :ls_billcode, :arg_s_change.billdate, :arg_s_change.relcode, :arg_s_change.rep, :arg_s_change.dscrp, getdate(), :arg_opemp); 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_orderrqwp_change_mx // (scid, // billid, // printid, // orderid, // mtrlid, // procode, // proname, // proorder, // proqty, // proqty_ori, // workprice, // workprice_ori, // wrkgrpid, // ifjd, // lastflag, // editflag, // status, // dscrp) // VALUES (:arg_s_change.scid, // :ll_billid, // :arg_s_change.arg_s_mx[i].printid, // :arg_s_change.arg_s_mx[i].orderid, // :arg_s_change.arg_s_mx[i].mtrlid, // :arg_s_change.arg_s_mx[i].procode, // :arg_s_change.arg_s_mx[i].proname, // :arg_s_change.arg_s_mx[i].proorder, // :arg_s_change.arg_s_mx[i].proqty, // :arg_s_change.arg_s_mx[i].proqty_ori, // :arg_s_change.arg_s_mx[i].workprice, // :arg_s_change.arg_s_mx[i].workprice_ori, // :arg_s_change.arg_s_mx[i].wrkgrpid, // :arg_s_change.arg_s_mx[i].ifjd, // :arg_s_change.arg_s_mx[i].lastflag, // :arg_s_change.arg_s_mx[i].editflag, // :arg_s_change.arg_s_mx[i].status, // :arg_s_change.arg_s_mx[i].dscrp); // 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_orderrqwp_change SET billdate = :arg_s_change.billdate, relcode = :arg_s_change.relcode, rep = :arg_s_change.rep, dscrp = :arg_s_change.dscrp, moddate = getdate(), modemp = :arg_opemp WHERE billid = :arg_s_change.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_orderrqwp_change_mx Where billid = :arg_s_change.billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除旧有明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF uo_billid = arg_s_change.billid END IF FOR i = 1 To it_mxbt INSERT INTO u_orderrqwp_change_mx (scid, billid, printid, relid, relprintid, mtrlid, procode, proname, proorder, proqty, proqty_ori, workprice, workprice_ori, wrkgrpid, ifjd, lastflag, editflag, status, dscrp) VALUES (:arg_s_change.scid, :uo_billid, :arg_s_change.arg_s_mx[i].printid, :arg_s_change.arg_s_mx[i].relid, :arg_s_change.arg_s_mx[i].relprintid, :arg_s_change.arg_s_mx[i].mtrlid, :arg_s_change.arg_s_mx[i].procode, :arg_s_change.arg_s_mx[i].proname, :arg_s_change.arg_s_mx[i].proorder, :arg_s_change.arg_s_mx[i].proqty, :arg_s_change.arg_s_mx[i].proqty_ori, :arg_s_change.arg_s_mx[i].workprice, :arg_s_change.arg_s_mx[i].workprice_ori, :arg_s_change.arg_s_mx[i].wrkgrpid, :arg_s_change.arg_s_mx[i].ifjd, :arg_s_change.arg_s_mx[i].lastflag, :arg_s_change.arg_s_mx[i].editflag, :arg_s_change.arg_s_mx[i].status, :arg_s_change.arg_s_mx[i].dscrp); IF sqlca.SQLCode <> 0 THEN if arg_s_change.billid = 0 then uo_billid = 0 //还原uo_billid 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 p_getflag (long arg_billid, ref integer arg_flag, ref string arg_msg);Int rslt = 1 SELECT flag INTO :arg_flag FROM u_orderrqwp_change 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 updatebegin (long arg_billid, ref string arg_msg);Int rslt = 1 Int li_flag Long cnt 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 del (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int 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 DELETE FROM u_orderrqwp_change WHERE billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_orderrqwp_change_mx 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 public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_flag IF arg_newdescppart = '' 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 = 0 THEN rslt = 0 arG_MSG = "待审核状态下不可用" GOTO ext END IF UPDATE u_orderrqwp_change SET DSCRP = DSCRP+' '+:arg_newdescppart WHERE u_orderrqwp_change.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 public function integer getinfo (long arg_billid, ref s_orderrqwp_change_mx arg_ref_mx[], 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_mx CURSOR FOR SELECT scid, billid, printid, relid, relprintid, mtrlid, procode, proname, proorder, proqty, proqty_ori, workprice, workprice_ori, wrkgrpid, ifjd, lastflag, editflag, status, dscrp FROM u_orderrqwp_change_mx WHERE billid = :arg_billid Order By printid; OPEN cur_mx; FETCH cur_mx INTO :arg_ref_mx[i].scid, :arg_ref_mx[i].billid, :arg_ref_mx[i].printid, :arg_ref_mx[i].relid, :arg_ref_mx[i].relprintid, :arg_ref_mx[i].mtrlid, :arg_ref_mx[i].procode, :arg_ref_mx[i].proname, :arg_ref_mx[i].proorder, :arg_ref_mx[i].proqty, :arg_ref_mx[i].proqty_ori, :arg_ref_mx[i].workprice, :arg_ref_mx[i].workprice_ori, :arg_ref_mx[i].wrkgrpid, :arg_ref_mx[i].ifjd, :arg_ref_mx[i].lastflag, :arg_ref_mx[i].editflag, :arg_ref_mx[i].status, :arg_ref_mx[i].dscrp; DO WHILE sqlca.SQLCode = 0 i++ FETCH cur_mx INTO :arg_ref_mx[i].scid, :arg_ref_mx[i].billid, :arg_ref_mx[i].printid, :arg_ref_mx[i].relid, :arg_ref_mx[i].relprintid, :arg_ref_mx[i].mtrlid, :arg_ref_mx[i].procode, :arg_ref_mx[i].proname, :arg_ref_mx[i].proorder, :arg_ref_mx[i].proqty, :arg_ref_mx[i].proqty_ori, :arg_ref_mx[i].workprice, :arg_ref_mx[i].workprice_ori, :arg_ref_mx[i].wrkgrpid, :arg_ref_mx[i].ifjd, :arg_ref_mx[i].lastflag, :arg_ref_mx[i].editflag, :arg_ref_mx[i].status, :arg_ref_mx[i].dscrp; LOOP CLOSE cur_mx; SELECT count(*) INTO :no_mxcheck FROM u_orderrqwp_change_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 audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int 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 <> 0 THEN rslt = 0 ARG_MSG = '单据不是在待审核状态,不可以审核' GOTO ext END IF DateTime serdate s_orderrqwp_change_mx s_change_mx[] Long ll_arr_cnt,ll_i Long cnt Decimal ld_finishqty SELECT Top 1 getdate() Into :serdate From u_user; IF sqlca.SQLCode <> 0 THEN ARG_MSG = '查询服务器时间失败' rslt = 0 GOTO ext END IF IF getinfo(arg_billid,s_change_mx,ll_arr_cnt,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF FOR ll_i = 1 To ll_arr_cnt IF s_change_mx[ll_i].editflag = 0 THEN //变更 SELECT finishqty INTO :ld_finishqty FROM U_OrderRqwp WHERE scid = :s_change_mx[ll_i].scid AND taskid = :s_change_mx[ll_i].relid AND printid = :s_change_mx[ll_i].relprintid AND mtrlid = :s_change_mx[ll_i].mtrlid And procode = :s_change_mx[ll_i].procode; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '第'+String(ll_i)+'行,查询工序进度已完成数失败,'+sqlca.SQLErrText GOTO ext END IF IF s_change_mx[ll_i].proqty > 0 THEN IF ld_finishqty > s_change_mx[ll_i].proqty THEN rslt = 0 ARG_MSG = '第'+String(ll_i)+'行,工序进度已完成数为:'+String(ld_finishqty,'#,##0.##########')+',不能把计划数变更为:'+String(s_change_mx[ll_i].proqty,'#,##0.##########') GOTO ext END IF UPDATE U_OrderRqwp SET proqty = :s_change_mx[ll_i].proqty, proorder = :s_change_mx[ll_i].proorder, workprice = :s_change_mx[ll_i].workprice, wrkgrpid = :s_change_mx[ll_i].wrkgrpid, ifjd = :s_change_mx[ll_i].ifjd, lastflag = :s_change_mx[ll_i].lastflag WHERE scid = :s_change_mx[ll_i].scid AND taskid = :s_change_mx[ll_i].relid AND printid = :s_change_mx[ll_i].relprintid AND mtrlid = :s_change_mx[ll_i].mtrlid And procode = :s_change_mx[ll_i].procode; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '第'+String(ll_i)+'行,更新工序进度失败,'+sqlca.SQLErrText GOTO ext END IF SELECT count(*) INTO :cnt FROM U_OrderRqwp WHERE scid = :s_change_mx[ll_i].scid AND taskid = :s_change_mx[ll_i].relid AND printid = :s_change_mx[ll_i].relprintid And lastflag = 1; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '第'+String(ll_i)+'行,查询指令单工序进度最后工序信息失败,'+sqlca.SQLErrText GOTO ext END IF IF cnt > 1 THEN rslt = 0 ARG_MSG = '第'+String(ll_i)+'行,相关指令单工序进度有多个最后工序,更新失败,请检查'+sqlca.SQLErrText GOTO ext END IF ELSEIF s_change_mx[ll_i].proqty = 0 THEN IF ld_finishqty > 0 THEN rslt = 0 ARG_MSG = '第'+String(ll_i)+'行,工序进度已完成数:'+String(ld_finishqty,'#,##0.##########')+',不能删除工序进度' GOTO ext END IF DELETE FROM U_OrderRqwp WHERE scid = :s_change_mx[ll_i].scid AND taskid = :s_change_mx[ll_i].relid AND printid = :s_change_mx[ll_i].relprintid AND mtrlid = :s_change_mx[ll_i].mtrlid And procode = :s_change_mx[ll_i].procode; IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows = 0 THEN rslt = 0 ARG_MSG = '更新工序进度失败,第 '+String(ll_i)+' 行'+'~n'+sqlca.SQLErrText GOTO ext END IF END IF ELSE SELECT count(*) INTO :cnt FROM U_OrderRqwp WHERE scid = :s_change_mx[ll_i].scid AND taskid = :s_change_mx[ll_i].relid AND printid = :s_change_mx[ll_i].relprintid AND mtrlid = :s_change_mx[ll_i].mtrlid And procode = :s_change_mx[ll_i].procode; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '第'+String(ll_i)+'行,查询工序进度失败,'+sqlca.SQLErrText GOTO ext END IF IF cnt > 0 THEN rslt = 0 ARG_MSG = '工序进度已存在相同信息,不能插入重复内容,第 '+String(ll_i)+' 行' GOTO ext END IF INSERT INTO U_OrderRqwp (scid, taskid, printid, Mtrlid, Procode, Proname, Proorder, proqty, wrkGrpid, lsxtype, workPrice, ifjd, lastflag, status) VALUES (:s_change_mx[ll_i].scid, :s_change_mx[ll_i].relid, :s_change_mx[ll_i].relprintid, :s_change_mx[ll_i].mtrlid, :s_change_mx[ll_i].procode, :s_change_mx[ll_i].proname, :s_change_mx[ll_i].proorder, :s_change_mx[ll_i].proqty, :s_change_mx[ll_i].wrkgrpid, 1, :s_change_mx[ll_i].workprice, :s_change_mx[ll_i].ifjd, :s_change_mx[ll_i].lastflag, :s_change_mx[ll_i].status); IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '第'+String(ll_i)+'行,查询工序进度失败,'+sqlca.SQLErrText GOTO ext END IF END IF NEXT UPDATE u_orderrqwp_change SET flag = 1, auditdate = getdate(), auditemp = :arg_opemp Where billid = :arg_billid; 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 on uo_orderrqwp_change.create call super::create TriggerEvent( this, "constructor" ) end on on uo_orderrqwp_change.destroy TriggerEvent( this, "destructor" ) call super::destroy end on