$PBExportHeader$uo_workprice_change.sru forward global type uo_workprice_change from nonvisualobject end type end forward global type uo_workprice_change from nonvisualobject end type global uo_workprice_change uo_workprice_change type variables long uo_billid string uo_billcode end variables forward prototypes 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 audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) public function integer getinfo (long arg_billid, ref s_workprice_changemx arg_ref_mx[], ref long arg_arr_cnt, ref string arg_msg) public function integer save (s_workprice_change arg_s_workprice, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) end prototypes 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_workprice_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_workprice_change WHERE billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_workprice_changemx 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_workprice_change SET DSCRP = DSCRP+' '+:arg_newdescppart WHERE u_workprice_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 audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_flag uo_workpricetable uo_workprice uo_workprice = CREATE uo_workpricetable 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 //更新工价表 Long ll_sonmtrlid s_workprice_changemx s_workprice_mx[] Long ll_arr_cnt,ll_i Long cnt DateTime serdate 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_workprice_mx,ll_arr_cnt,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF FOR ll_i = 1 TO ll_arr_cnt IF s_workprice_mx[ll_i].editflag = 0 THEN //变更数量 IF s_workprice_mx[ll_i].workqty > 0 THEN UPDATE u_sc_workprice SET proname = :s_workprice_mx[ll_i].proname, workqty = :s_workprice_mx[ll_i].workqty, workprice = :s_workprice_mx[ll_i].workprice, wrkgrpid = :s_workprice_mx[ll_i].wrkgrpid, ifstandard = :s_workprice_mx[ll_i].ifstandard, lsxtype = :s_workprice_mx[ll_i].lsxtype, lastflag = :s_workprice_mx[ll_i].lastflag, workhour = :s_workprice_mx[ll_i].workhour, dscrp = :s_workprice_mx[ll_i].dscrp, worklevel = :s_workprice_mx[ll_i].worklevel, techlevel = :s_workprice_mx[ll_i].techlevel, auditflag = 1, auditrep = :arg_opemp, auditdate = getdate() WHERE mtrlid = :s_workprice_mx[ll_i].mtrlid AND procode = :s_workprice_mx[ll_i].procode and status = :s_workprice_mx[ll_i].status; IF sqlca.SQLCode <> 0 OR sqlca.SQLNRows = 0 THEN rslt = 0 ARG_MSG = '更新工价表失败,第 '+String(ll_i)+' 行'+'~n'+sqlca.SQLErrText GOTO ext END IF ELSEIF s_workprice_mx[ll_i].workqty = 0 THEN //数量为0,删除 DELETE FROM u_sc_workprice WHERE mtrlid = :s_workprice_mx[ll_i].mtrlid AND procode = :s_workprice_mx[ll_i].procode and status = :s_workprice_mx[ll_i].status; 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 // 新增 cnt = 0 SELECT count(*) INTO :cnt FROM u_sc_workprice WHERE mtrlid = :s_workprice_mx[ll_i].mtrlid AND procode = :s_workprice_mx[ll_i].procode and status = :s_workprice_mx[ll_i].status; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '查询工价表失败,第 '+String(ll_i)+' 行'+'~n'+sqlca.SQLErrText GOTO ext END IF IF cnt > 0 THEN rslt = 0 ARG_MSG = '工价表已存在相同信息,不能插入重复内容,第 '+String(ll_i)+' 行' GOTO ext END IF INSERT INTO u_sc_workprice ( mtrlid, procode, proname, workqty, workprice, wrkgrpid, ifstandard , lsxtype , lastflag , workhour, dscrp , worklevel , techlevel, proid, auditflag, auditrep, auditdate, status) VALUES ( :s_workprice_mx[ll_i].mtrlid, :s_workprice_mx[ll_i].procode, :s_workprice_mx[ll_i].proname, :s_workprice_mx[ll_i].workqty, :s_workprice_mx[ll_i].workprice, :s_workprice_mx[ll_i].wrkgrpid, :s_workprice_mx[ll_i].ifstandard, :s_workprice_mx[ll_i].lsxtype, :s_workprice_mx[ll_i].lastflag, :s_workprice_mx[ll_i].workhour, :s_workprice_mx[ll_i].dscrp, :s_workprice_mx[ll_i].worklevel, :s_workprice_mx[ll_i].techlevel, 0, 1, :arg_opemp, getdate(), :s_workprice_mx[ll_i].status ); IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '插入工价表失败,第 '+String(ll_i)+' 行'+'~n'+sqlca.SQLErrText GOTO ext END IF END IF IF uo_workprice.update_auditflag(s_workprice_mx[ll_i].mtrlid,serdate,arg_opemp,ARG_MSG,FALSE) = 0 THEN rslt = 0 GOTO ext END IF NEXT //更新审核标记 UPDATE u_workprice_change SET auditingrep = :arg_opemp, auditingdate = getdate(), flag = 1 WHERE billid = :arg_billid AND flag = 0; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "因网络或其它原因导致单据审核操作失败"+"~n"+sqlca.SQLErrText GOTO ext ELSEIF sqlca.SQLNRows = 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 DESTROY uo_workprice RETURN rslt end function public function integer getinfo (long arg_billid, ref s_workprice_changemx 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 billid, printid, editflag, mtrlid, procode, proname, workqty, workprice_ori, workprice, wrkgrpid, ifstandard, lsxtype, lastflag, workhour, dscrp, worklevel, techlevel, status FROM u_workprice_changemx WHERE u_workprice_changemx.billid = :arg_billid Order By u_workprice_changemx.printid; OPEN cur_mx; FETCH cur_mx INTO :arg_ref_mx[i].billid, :arg_ref_mx[i].printid, :arg_ref_mx[i].editflag, :arg_ref_mx[i].mtrlid, :arg_ref_mx[i].procode, :arg_ref_mx[i].proname, :arg_ref_mx[i].workqty, :arg_ref_mx[i].workprice_ori, :arg_ref_mx[i].workprice, :arg_ref_mx[i].wrkgrpid, :arg_ref_mx[i].ifstandard, :arg_ref_mx[i].lsxtype, :arg_ref_mx[i].lastflag, :arg_ref_mx[i].workhour, :arg_ref_mx[i].dscrp, :arg_ref_mx[i].worklevel, :arg_ref_mx[i].techlevel, :arg_ref_mx[i].status; DO WHILE sqlca.SQLCode = 0 i++ FETCH cur_mx INTO :arg_ref_mx[i].billid, :arg_ref_mx[i].printid, :arg_ref_mx[i].editflag, :arg_ref_mx[i].mtrlid, :arg_ref_mx[i].procode, :arg_ref_mx[i].proname, :arg_ref_mx[i].workqty, :arg_ref_mx[i].workprice_ori, :arg_ref_mx[i].workprice, :arg_ref_mx[i].wrkgrpid, :arg_ref_mx[i].ifstandard, :arg_ref_mx[i].lsxtype, :arg_ref_mx[i].lastflag, :arg_ref_mx[i].workhour, :arg_ref_mx[i].dscrp, :arg_ref_mx[i].worklevel, :arg_ref_mx[i].techlevel, :arg_ref_mx[i].status; LOOP CLOSE cur_mx; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM u_workprice_changemx 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_workprice_change arg_s_workprice, 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_workprice.billid) THEN arg_s_workprice.billid = 0 IF IsNull(arg_s_workprice.procode) THEN arg_s_workprice.procode = '' IF IsNull(arg_s_workprice.proname) THEN arg_s_workprice.proname = '' IF IsNull(arg_s_workprice.rep) THEN arg_s_workprice.rep = '' IF IsNull(arg_s_workprice.dscrp) THEN arg_s_workprice.dscrp = '' //IF arg_s_workprice.procode = '' THEN // arg_msg = '请选择工序' // rslt = 0 // GOTO ext //END IF IF arg_s_workprice.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_workprice.arg_s_mx) IF it_mxbt <= 0 THEN rslt = 0 arg_msg = "没有正确明细内容" GOTO ext END IF IF arg_s_workprice.billid = 0 THEN ll_billid = f_sys_scidentity(0,"u_workprice_change","billid",arg_msg,FALSE,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 + 'WC',Date(server_dt),FALSE,sqlca) IF ls_billcode = "err" THEN rslt = 0 arg_msg = "无法获取单据编号"+"~n"+sqlca.SQLErrText GOTO ext END IF INSERT INTO u_workprice_change (billid, billcode, billdate, relcode, procode, proname, rep, dscrp, opdate, opemp) VALUES (:ll_billid, :ls_billcode, :arg_s_workprice.billdate, :arg_s_workprice.relcode, :arg_s_workprice.procode, :arg_s_workprice.proname, :arg_s_workprice.rep, :arg_s_workprice.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_workprice_changemx (billid, printid, editflag, mtrlid, procode, proname, workqty_ori, workqty, workprice_ori, workprice, wrkgrpid, ifstandard, lsxtype, lastflag, dscrp, workhour, techlevel, status) VALUES (:ll_billid, :arg_s_workprice.arg_s_mx[i].printid, :arg_s_workprice.arg_s_mx[i].editflag, :arg_s_workprice.arg_s_mx[i].mtrlid, :arg_s_workprice.arg_s_mx[i].procode, :arg_s_workprice.arg_s_mx[i].proname, :arg_s_workprice.arg_s_mx[i].workqty_ori, :arg_s_workprice.arg_s_mx[i].workqty, :arg_s_workprice.arg_s_mx[i].workprice_ori, :arg_s_workprice.arg_s_mx[i].workprice, :arg_s_workprice.arg_s_mx[i].wrkgrpid, :arg_s_workprice.arg_s_mx[i].ifstandard, :arg_s_workprice.arg_s_mx[i].lsxtype, :arg_s_workprice.arg_s_mx[i].lastflag, :arg_s_workprice.arg_s_mx[i].dscrp, :arg_s_workprice.arg_s_mx[i].workhour, :arg_s_workprice.arg_s_mx[i].techlevel, :arg_s_workprice.arg_s_mx[i].status); 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_workprice_change SET billdate = :arg_s_workprice.billdate, procode = :arg_s_workprice.procode, proname = :arg_s_workprice.proname, rep = :arg_s_workprice.rep, dscrp = :arg_s_workprice.dscrp, relcode = :arg_s_workprice.relcode, moddate = getdate(), modemp = :arg_opemp WHERE billid = :arg_s_workprice.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_workprice_changemx Where billid = :arg_s_workprice.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_workprice_changemx (billid, printid, editflag, mtrlid, procode, proname, workqty_ori, workqty, workprice_ori, workprice, wrkgrpid, ifstandard, lsxtype, lastflag, dscrp, workhour, techlevel, status) VALUES (:arg_s_workprice.billid, :arg_s_workprice.arg_s_mx[i].printid, :arg_s_workprice.arg_s_mx[i].editflag, :arg_s_workprice.arg_s_mx[i].mtrlid, :arg_s_workprice.arg_s_mx[i].procode, :arg_s_workprice.arg_s_mx[i].proname, :arg_s_workprice.arg_s_mx[i].workqty_ori, :arg_s_workprice.arg_s_mx[i].workqty, :arg_s_workprice.arg_s_mx[i].workprice_ori, :arg_s_workprice.arg_s_mx[i].workprice, :arg_s_workprice.arg_s_mx[i].wrkgrpid, :arg_s_workprice.arg_s_mx[i].ifstandard, :arg_s_workprice.arg_s_mx[i].lsxtype, :arg_s_workprice.arg_s_mx[i].lastflag, :arg_s_workprice.arg_s_mx[i].dscrp, :arg_s_workprice.arg_s_mx[i].workhour, :arg_s_workprice.arg_s_mx[i].techlevel, :arg_s_workprice.arg_s_mx[i].status ); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF NEXT uo_billid = arg_s_workprice.billid END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT; END IF RETURN rslt end function on uo_workprice_change.create call super::create TriggerEvent( this, "constructor" ) end on on uo_workprice_change.destroy TriggerEvent( this, "destructor" ) call super::destroy end on