$PBExportHeader$uo_rs_wage_change.sru forward global type uo_rs_wage_change from nonvisualobject end type end forward global type uo_rs_wage_change from nonvisualobject end type global uo_rs_wage_change uo_rs_wage_change type variables PUBLIC PROTECTEDWRITE Long billid PUBLIC PROTECTEDWRITE String billcode PUBLIC PROTECTEDWRITE DateTime opdate PUBLIC PROTECTEDWRITE String opemp PUBLIC PROTECTEDWRITE DateTime moddate PUBLIC PROTECTEDWRITE String modemp PUBLIC PROTECTEDWRITE Int flag PUBLIC PROTECTEDWRITE Int pflag PUBLIC PROTECTEDWRITE DateTime auditingdate PUBLIC PROTECTEDWRITE String auditingrep Long scid DateTime billdate String dscrp String rep String relcode Long empid s_rs_wage_change_mx taskworkmx[] Transaction commit_transaction Long it_mxbt = 0 Boolean it_newbegin = FALSE Boolean it_updatebegin = FALSE end variables forward prototypes public function integer p_clearmx () public function integer p_reset () public function integer updatebegin (long arg_billid, ref string arg_msg) public function integer save (ref string arg_msg, boolean arg_ifcommit) public function integer del (long arg_billid, ref string arg_msg) public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit) public function integer p_getinfo (long arg_billid, ref string arg_msg) public function integer acceptmx (long arg_wageid, string arg_wagename, decimal arg_wageamt, string arg_mxdscrp, ref string arg_msg) public function integer getinfo (long arg_billid, ref string arg_msg) public function integer auditing (long arg_billid, string arg_opemp, boolean arg_ifcommit, ref string arg_msg) public function integer newbegin () public function integer auditing_p (long arg_billid, string arg_opemp, boolean arg_ifcommit, ref string arg_msg) public function integer auditing_p_cancel (long arg_billid, boolean arg_ifcommit, ref string arg_msg) end prototypes public function integer p_clearmx ();//INT p_clearmx() //清除明细 it_mxbt=0 RETURN 1 end function public function integer p_reset ();//INT p_RESET() //清除对象及其明细 billid = 0 billcode = '' opemp = '' auditingrep = '' flag = 0 rep = "" empid = 0 dscrp = '' relcode = '' it_newbegin = FALSE it_updatebegin = FALSE //清除明细 P_CLEARMX() RETURN 1 end function public function integer updatebegin (long arg_billid, ref string arg_msg);Int rslt = 1 IF arg_billid <= 0 THEN rslt = 0 GOTO ext END IF IF p_getinfo(arg_billid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF flag = 1 THEN rslt = 0 arg_msg = '单据已经审核,不可以修改' GOTO ext END IF billid = arg_billid p_clearmx() it_newbegin = FALSE it_updatebegin = TRUE ext: IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer save (ref string arg_msg, boolean arg_ifcommit);Integer rslt = 1,cnt = 0,i DateTime server_dt Long ls_newid String ls_sccode IF IsNull(empid) THEN empid = 0 IF IsNull(relcode) THEN relcode = '' IF IsNull(rep) THEN rep = '' IF IsNull(scid) THEN scid = 0 IF IsNull(dscrp) THEN dscrp = '' IF it_newbegin = FALSE AND it_updatebegin = FALSE THEN rslt = 0 arg_msg = "非编辑状态不可以提交" GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_scdef Where scid = :scid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询项目资料失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF cnt <> 1 THEN arg_msg = '项目资料不存在或重复' rslt = 0 GOTO ext END IF SELECT Top 1 getdate() INTO :server_dt FROM u_user USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,日期 " GOTO ext END IF IF rep = '' THEN rslt = 0 arg_msg = '请输入经手人' GOTO ext END IF IF it_mxbt = 0 THEN // rslt = 0 arg_msg = "没有明细" GOTO ext END IF IF Year(Date(billdate)) < 2000 OR IsNull(billdate) THEN rslt = 0 arg_msg = "缺少计件时间或不合理" GOTO ext END IF SELECT count(*) INTO :cnt FROM u_rs_empinfo Where empid = :empid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询员工资料失败!" GOTO ext END IF IF cnt <> 1 THEN rslt = 0 arg_msg = "不存在员工资料!" GOTO ext END IF ////////////////////////////////////////////// //开始区分:新建/更新 处理 IF billid = 0 THEN //新建 ls_newid = f_sys_scidentity(0,"u_rs_wage_change","billid",arg_msg,TRUE,id_sqlca) IF ls_newid < 0 THEN rslt = 0 GOTO ext END IF IF f_get_sccode(scid,sqlca,ls_sccode,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF billcode = getid(0,ls_sccode + "RW",Date(server_dt),TRUE,commit_transaction) //取得新单据编号 IF billcode = "err" THEN billcode = '' rslt = 0 arg_msg = "无法获取单据编号" GOTO ext END IF INSERT INTO u_rs_wage_change ( billid, billdate, empid, rep, relcode, dscrp, scid, billcode, opemp, opdate) VALUES ( :ls_newid, :billdate, :empid, :rep, :relcode, :dscrp, :scid, :billcode, :publ_operator, :server_dt) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致插入操作失败>>"+"~n"+sqlca.SQLErrText GOTO ext END IF // billid = ls_newid FOR i = 1 TO it_mxbt INSERT INTO u_rs_wage_change_mx ( billid, wageid, wageamt, mxdscrp) VALUES ( :ls_newid, :taskworkmx[i].wageid, :taskworkmx[i].wageamt, :taskworkmx[i].mxdscrp) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN billid = 0 //还原noticeid rslt = 0 arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText ROLLBACK ; GOTO ext END IF NEXT ELSE //////////////////////////////////////////////// //更新 UPDATE u_rs_wage_change SET billdate = :billdate, empid = :empid, rep = :rep, relcode = :relcode, dscrp = :dscrp, modemp = :publ_operator, moddate = :server_dt WHERE billid = :billid AND flag = 0 USING commit_transaction; IF commit_transaction.SQLCode <> 0 OR commit_transaction.SQLNRows <= 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致更新单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF // 删除原有明细 DELETE FROM u_rs_wage_change_mx Where billid = :billid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除旧有明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF FOR i = 1 TO it_mxbt INSERT INTO u_rs_wage_change_mx ( billid, wageid, wageamt, mxdscrp) VALUES ( :billid, :taskworkmx[i].wageid, :taskworkmx[i].wageamt, :taskworkmx[i].mxdscrp) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF NEXT // END IF it_newbegin = FALSE it_updatebegin = FALSE ext: IF rslt = 0 THEN ROLLBACK; p_clearmx() ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF Return(rslt) end function public function integer del (long arg_billid, ref string arg_msg);Int rslt = 1 IF arg_billid <= 0 THEN rslt = 0 arg_msg = "没有删除对象,操作取消" GOTO ext END IF rslt = p_getinfo(arg_billid,arg_msg) IF rslt = 0 THEN GOTO ext IF flag = 1 THEN rslt = 0 arg_msg = "单据已经审核,不可以删除" GOTO ext END IF DELETE FROM u_rs_wage_change WHERE u_rs_wage_change.billid = :arg_billid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_rs_wage_change_mx WHERE u_rs_wage_change_mx.billid = :arg_billid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除单据明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF it_newbegin = FALSE it_updatebegin = FALSE IF rslt = 0 THEN ROLLBACK; p_reset() ELSEIF rslt = 1 THEN COMMIT; END IF ext: 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 arg_newdescppart = Trim(arg_newdescppart) IF arg_billid <= 0 THEN rslt = 0 arg_msg = "没有删除对象,操作取消" GOTO ext END IF IF it_newbegin OR it_updatebegin THEN rslt = 0 arg_msg = "编辑状态下不可以执行,操作取消" GOTO ext END IF IF p_getinfo(arg_billid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF flag = 0 and pflag = 0 THEN rslt = 0 arg_msg = "非审核状态下不可用" GOTO ext END IF UPDATE u_rs_wage_change SET dscrp = dscrp+' '+:arg_newdescppart WHERE u_rs_wage_change.billid = :billid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致添加单据备注操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF dscrp = dscrp+' '+arg_newdescppart ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer p_getinfo (long arg_billid, ref string arg_msg);Int rslt = 1 IF arg_billid <= 0 THEN rslt = 0 arG_MSG = "非法的单据唯一码" GOTO ext END IF SELECT billid, billdate, rep, relcode, dscrp, scid, billcode, empid, flag, pflag, scid INTO :billid, :billdate, :rep, :relcode, :dscrp, :scid, :billcode, :empid, :flag, :pflag, :scid FROM u_rs_wage_change WHERE u_rs_wage_change.billid = :arg_billid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arG_MSG = "查询操作失败(错误单据唯一码),单据"+commit_transaction.SQLErrText GOTO ext END IF billid = arg_billid ext: IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer acceptmx (long arg_wageid, string arg_wagename, decimal arg_wageamt, string arg_mxdscrp, ref string arg_msg);Int rslt = 1 Long cnt = 0 IF it_newbegin = FALSE AND it_updatebegin = FALSE THEN rslt = 0 arg_msg = "非编辑状态不可以使用,操作取消" GOTO ext END IF IF IsNull(arg_wageid) THEN arg_wageid = 0 IF IsNull(arg_wageamt) THEN arg_wageamt = 0 IF IsNull(arg_mxdscrp) THEN arg_mxdscrp = '' IF arg_wageid = 0 THEN rslt = 1 GOTO ext END IF SELECT count(*) INTO :cnt FROM u_gz_wageitem WHERE wageid = :arg_wageid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询工资项目:'+arg_wagename+',失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF cnt <> 1 THEN arg_msg = '工资项目:'+arg_wagename+',资料重复或不存在,请核对' rslt = 0 GOTO ext END IF IF arg_wageamt < 0 THEN arg_msg = '错误的金额' rslt = 0 GOTO ext END IF //写入内容 it_mxbt++ taskworkmx[it_mxbt].wageid = arg_wageid taskworkmx[it_mxbt].wageamt = arg_wageamt taskworkmx[it_mxbt].mxdscrp = arg_mxdscrp ext: IF rslt = 0 THEN p_clearmx() Return(rslt) end function public function integer getinfo (long arg_billid, ref string arg_msg);Int rslt = 1,i = 1,no_mxcheck = 0 IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF IF p_getinfo(arg_billid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF //用游标读取明细 DECLARE cur_inwaermx CURSOR FOR SELECT u_rs_wage_change_mx.wageid, u_rs_wage_change_mx.wageamt, u_gz_wageitem.wagename FROM u_rs_wage_change_mx,u_gz_wageitem WHERE u_rs_wage_change_mx.billid = :arg_billid AND u_rs_wage_change_mx.wageid = u_gz_wageitem.wageid USING commit_transaction; OPEN cur_inwaermx; FETCH cur_inwaermx INTO :taskworkmx[i].wageid,:taskworkmx[i].wageamt, :taskworkmx[i].wagename; DO WHILE sqlca.SQLCode = 0 i++ FETCH cur_inwaermx INTO :taskworkmx[i].wageid,:taskworkmx[i].wageamt, :taskworkmx[i].wagename; LOOP CLOSE cur_inwaermx; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM u_rs_wage_change_mx WHERE u_rs_wage_change_mx.billid = :arg_billid USING commit_transaction; IF commit_transaction.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 it_mxbt = i - 1 it_newbegin = FALSE it_updatebegin = FALSE ext: IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer auditing (long arg_billid, string arg_opemp, boolean arg_ifcommit, ref string arg_msg);Long i Int rslt = 1 IF arg_billid <= 0 THEN rslt = 0 GOTO ext END IF IF getinfo(arg_billid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF pflag = 0 THEN rslt = 0 arg_msg = '单据未经初审,不可以再审核' GOTO ext END IF IF flag = 1 THEN rslt = 0 arg_msg = '单据已经审核,不可以再审核' GOTO ext END IF UPDATE u_rs_wage_change SET u_rs_wage_change.flag = 1, u_rs_wage_change.auditingrep = :arg_opemp, u_rs_wage_change.auditingdate = getdate() WHERE u_rs_wage_change.billid = :arg_billid AND u_rs_wage_change.flag = 0 AND u_rs_wage_change.pflag = 1 USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新审核标志失败,原因:'+commit_transaction.SQLErrText GOTO ext ELSEIF commit_transaction.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在审核,请稍后查询。"+"~n"+commit_transaction.SQLErrText GOTO ext END IF DELETE FROM u_rs_wagemx Where empid = :empid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '清除员工原标准薪酬失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF FOR i = 1 TO it_mxbt INSERT INTO u_rs_wagemx(empid,wageid,wageamt) VALUES(:empid,:taskworkmx[i].wageid,:taskworkmx[i].wageamt) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '设定员工工资项目:'+taskworkmx[i].wagename+',标准薪酬失败,'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF NEXT ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT USING commit_transaction; END IF RETURN rslt end function public function integer newbegin (); p_reset() it_newbegin=TRUE it_updatebegin=FALSE return 1 end function public function integer auditing_p (long arg_billid, string arg_opemp, boolean arg_ifcommit, ref string arg_msg);Int rslt = 1 IF arg_billid <= 0 THEN rslt = 0 GOTO ext END IF IF p_getinfo(arg_billid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF pflag = 1 THEN rslt = 0 arg_msg = '单据已经审核,不可以再审核' GOTO ext END IF UPDATE u_rs_wage_change SET u_rs_wage_change.pflag = 1, u_rs_wage_change.pauditemp = :arg_opemp, u_rs_wage_change.pauditdate = getdate() WHERE u_rs_wage_change.billid = :arg_billid AND u_rs_wage_change.pflag = 0 USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新审核标志失败,原因:'+commit_transaction.SQLErrText GOTO ext ELSEIF commit_transaction.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在审核,请稍后查询。"+"~n"+commit_transaction.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT USING commit_transaction; END IF RETURN rslt end function public function integer auditing_p_cancel (long arg_billid, boolean arg_ifcommit, ref string arg_msg);Int rslt = 1 datetime null_dt setnull(null_dt) IF arg_billid <= 0 THEN rslt = 0 GOTO ext END IF IF p_getinfo(arg_billid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF flag = 1 THEN rslt = 0 arg_msg = '单据已经人事审核,不可以撤审' GOTO ext END IF UPDATE u_rs_wage_change SET u_rs_wage_change.pflag = 0, u_rs_wage_change.pauditemp = '', u_rs_wage_change.pauditdate = :null_dt WHERE u_rs_wage_change.billid = :arg_billid AND u_rs_wage_change.pflag = 1 and u_rs_wage_change.flag = 0 USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新审核标志失败,原因:'+commit_transaction.SQLErrText GOTO ext ELSEIF commit_transaction.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在审核,请稍后查询。"+"~n"+commit_transaction.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT USING commit_transaction; END IF RETURN rslt end function on uo_rs_wage_change.create call super::create TriggerEvent( this, "constructor" ) end on on uo_rs_wage_change.destroy TriggerEvent( this, "destructor" ) call super::destroy end on