$PBExportHeader$uo_train_emp.sru forward global type uo_train_emp from nonvisualobject end type end forward global type uo_train_emp from nonvisualobject end type global uo_train_emp uo_train_emp 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 p_getflag (long arg_billid, ref long arg_flag, 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 save (s_train_emp arg_s_train, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) public function integer getinfo (long arg_billid, ref s_train_emp_mx arg_ref_mx[], ref long arg_arr_cnt, 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_train_emp SET DSCRP = DSCRP+' '+:arg_newdescppart WHERE u_train_emp.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 p_getflag (long arg_billid, ref long arg_flag, ref string arg_msg);Int rslt = 1 SELECT flag INTO :arg_flag FROM u_train_emp 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 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_train_emp_mx Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除单据明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_train_emp 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 uo_empinfo uo_emp uo_emp = CREATE uo_empinfo s_train s_save 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 s_train_emp_mx s_mx[] Long ll_arr_cnt IF getinfo(arg_billid,s_mx,ll_arr_cnt,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF Long ll_i DateTime ld_traindate String ls_content string ls_billcode SELECT billcode,traindate,content INTO :ls_billcode,:ld_traindate,:ls_content FROM u_train_emp Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '查询单据相关信息失败'+sqlca.SQLErrText GOTO ext END IF FOR ll_i = 1 TO ll_arr_cnt s_save.trainid = 0 s_save.empid = s_mx[ll_i].empid s_save.traindate = ld_traindate s_save.content = ls_content s_save.result = s_mx[ll_i].result s_save.othercode = s_mx[ll_i].othercode s_save.dscrp = s_mx[ll_i].dscrp s_save.relid = arg_billid s_save.relcode = ls_billcode IF uo_emp.uof_add_train(s_save,publ_operator,ARG_MSG,FALSE) = 0 THEN rslt = 0 GOTO ext END IF NEXT //更新审核标记 UPDATE u_train_emp 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 caudit (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long ll_flag DateTime null_dt 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 DELETE FROM u_rs_train Where relid = :arg_billid; IF sqlca.SQLCode <> 0 THEN arg_msg = '删除培训内容失败,原因:'+sqlca.SQLErrText rslt = 0 GOTO ext END IF //更新审核标记 UPDATE u_train_emp 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 ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer save (s_train_emp arg_s_train, 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_train.billid) THEN arg_s_train.billid = 0 IF IsNull(arg_s_train.billemp) THEN arg_s_train.billemp = '' IF IsNull(arg_s_train.content) THEN arg_s_train.content = '' IF IsNull(arg_s_train.dscrp) THEN arg_s_train.dscrp = '' IF arg_s_train.billemp = '' THEN arg_msg = '请输入经手人' rslt = 0 GOTO ext END IF IF arg_s_train.content = '' 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_train.arg_s_mx) IF it_mxbt <= 0 THEN rslt = 0 arg_msg = "没有正确明细内容" GOTO ext END IF IF arg_s_train.billid = 0 THEN ll_billid = f_sys_scidentity(0,"u_train_emp","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 + 'PX',Date(server_dt),FALSE,sqlca) IF ls_billcode = "err" THEN rslt = 0 arg_msg = "无法获取单据编号"+"~n"+sqlca.SQLErrText GOTO ext END IF INSERT INTO u_train_emp (billid, billcode, billemp, traindate, content, dscrp, opdate, opemp) VALUES (:ll_billid, :ls_billcode, :arg_s_train.billemp, :arg_s_train.traindate, :arg_s_train.content, :arg_s_train.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_train_emp_mx (billid, empid, result, othercode, dscrp, printid) VALUES (:ll_billid, :arg_s_train.arg_s_mx[i].empid, :arg_s_train.arg_s_mx[i].result, :arg_s_train.arg_s_mx[i].othercode, :arg_s_train.arg_s_mx[i].dscrp, :arg_s_train.arg_s_mx[i].printid); 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_train_emp SET traindate = :arg_s_train.traindate, billemp = :arg_s_train.billemp, content = :arg_s_train.content, dscrp = :arg_s_train.dscrp, moddate = getdate(), modemp = :arg_opemp WHERE billid = :arg_s_train.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_train_emp_mx Where billid = :arg_s_train.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_train_emp_mx (billid, empid, result, othercode, dscrp, printid) VALUES (:arg_s_train.billid, :arg_s_train.arg_s_mx[i].empid, :arg_s_train.arg_s_mx[i].result, :arg_s_train.arg_s_mx[i].othercode, :arg_s_train.arg_s_mx[i].dscrp, :arg_s_train.arg_s_mx[i].printid); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF NEXT uo_billid = arg_s_train.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 getinfo (long arg_billid, ref s_train_emp_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 empid, result, othercode, dscrp FROM u_train_emp_mx Where billid = :arg_billid; OPEN cur_mx; FETCH cur_mx INTO :arg_ref_mx[i].empid, :arg_ref_mx[i].result, :arg_ref_mx[i].othercode, :arg_ref_mx[i].dscrp; DO WHILE sqlca.SQLCode = 0 i++ FETCH cur_mx INTO :arg_ref_mx[i].empid, :arg_ref_mx[i].result, :arg_ref_mx[i].othercode, :arg_ref_mx[i].dscrp; LOOP CLOSE cur_mx; SELECT count(*) INTO :no_mxcheck FROM u_train_emp_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 on uo_train_emp.create call super::create TriggerEvent( this, "constructor" ) end on on uo_train_emp.destroy TriggerEvent( this, "destructor" ) call super::destroy end on