$PBExportHeader$uo_abnormity.sru forward global type uo_abnormity from nonvisualobject end type type s_abnormitymx from structure within uo_abnormity end type end forward type s_abnormitymx from structure long empid string empcode string empname decimal { 5 } amount decimal { 5 } wage string mxdscrp long printid string relcode string reason string unit end type global type uo_abnormity from nonvisualobject end type global uo_abnormity uo_abnormity type variables public protectedwrite long billid //计件单自动增量id Public ProtectedWrite Long scid //分部 public protectedwrite string billcode //计件单的唯一编号 public protectedwrite datetime opdate //建立时间,自动 public protectedwrite string opemp //建立人 public protectedwrite datetime moddate //修改时间,自动 public protectedwrite string modemp //修改人 public protectedwrite int flag=0 //审核标志 public protectedwrite int secflag=0 //审核标志 public protectedwrite datetime auditingdate //审核时间 public protectedwrite string auditingrep //审核操作员 long wagemth datetime billdate //计件日期 long wageid //工资项目id string dscrp='' //备注 string relcode ='' //相关号码  long relid long wrkgrpid long ifzj long zjid uo_wage u_wage int uo_option_taskwork_not_affirm int uo_option_abnormity_noorder private: s_abnormitymx abnormitymx[] //明细结构数组 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 save (ref string arg_msg, boolean arg_ifcommit) public function integer acceptmx (long arg_empid, string arg_empcode, string arg_empname, decimal arg_amount, decimal arg_wage, string arg_mxdscrp, ref string arg_msg, long arg_printid, string arg_relcode, string arg_reason, string arg_unit) public function integer newbegin (long arg_scid, ref string arg_msg) public function integer p_getinfo (long arg_scid, long arg_billid, ref string arg_msg) public function integer getinfo (long arg_scid, long arg_billid, ref string arg_msg) public function integer auditmx (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer cauditmx (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer add_dscrp (long arg_scid, long arg_billid, string arg_newdescppart, ref string arg_msg) public function integer secauditing (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer c_secauditing (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer del (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer updatebegin (long arg_scid, long arg_billid, ref string arg_msg) public function integer auditing (long arg_scid, long arg_wageid, long arg_wagemth, ref string arg_msg, boolean arg_ifcommit) public function integer c_auditing (long arg_scid, long arg_wageid, long arg_wagemth, ref string arg_msg, boolean arg_ifcommit) 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 wageid=0 dscrp='' relcode='' wrkgrpid = 0 scid = 0 it_newbegin=FALSE it_updatebegin=FALSE //清除明细 P_CLEARMX() RETURN 1 end function public function integer save (ref string arg_msg, boolean arg_ifcommit); Integer rslt = 1,i,cnt = 0 DateTime server_dt Long ls_newid IF uo_option_abnormity_noorder = -1000 THEN rslt = 0 arg_msg = '选项:026,读取初始默认值失败!' GOTO ext END IF IF IsNull(wageid) THEN wageid = 0 IF IsNull(dscrp) THEN dscrp = '' IF IsNull(relcode) THEN relcode = '' IF IsNull(relid) THEN relid = 0 IF IsNull(wagemth) THEN wagemth = 0 if isnull(wrkgrpid) then wrkgrpid = 0 if isnull(ifzj) then ifzj = 0 if isnull(zjid) then zjid = 0 IF it_newbegin = FALSE AND it_updatebegin = FALSE THEN rslt = 0 arg_msg = "非编辑状态不可以提交" 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 cnt = 0 SELECT count(*) INTO :cnt FROM u_gz_wageitem Where wageid = :wageid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询工资项目失败!" GOTO ext END IF IF cnt <> 1 THEN rslt = 0 arg_msg = "不存在工资项目!" GOTO ext END IF IF uo_option_abnormity_noorder = 0 and ifzj = 0 THEN SELECT count(*) INTO :cnt FROM u_sc_abnormity_bill WHERE billid = :relid AND flag = 1; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询返工返修单失败,可能返工返修单未审核' rslt = 0 GOTO ext END IF IF cnt <> 1 THEN arg_msg = '查询返工返修单失败,请查检' rslt = 0 GOTO ext END IF END IF IF it_mxbt = 0 THEN // rslt = 0 arg_msg = "没有计件明细" GOTO ext END IF //IF f_check_inoutdate(0,billdate,FALSE,arG_MSG) = 0 THEN // rslt = 0 // GOTO ext //END IF ////////////////////////////////////////////////开始区分:新建/更新 处理 IF billid = 0 THEN //新建 ls_newid = f_sys_scidentity(0,"u_sc_abnormity","billid",arg_msg,TRUE,id_sqlca) IF ls_newid <= 0 THEN rslt = 0 GOTO ext END IF billcode = getid(0,"YC",Date(server_dt),TRUE,sqlca) //取得新单据编号 IF billcode = "err" THEN billcode = '' rslt = 0 arg_msg = "无法获取计件单编号" GOTO ext END IF INSERT INTO u_sc_abnormity ( billid, billcode, Wagemth, wageid, billdate, Dscrp, opdate, opemp, relcode, relid, wrkgrpid, ifzj, zjid, scid) VALUES ( :ls_newid, :billcode, :Wagemth, :wageid, :billdate, :dscrp, :server_dt, :publ_operator, :relcode, :relid, :wrkgrpid, :ifzj, :zjid, :scid); IF sqlca.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_sc_abnormitymx ( billid, empid, empcode, empname, amount, wage, mxdscrp, printid, relcode, reason, unit, scid) VALUES (:ls_newid, :abnormitymx[i].empid, :abnormitymx[i].empcode, :abnormitymx[i].empname, :abnormitymx[i].amount, :abnormitymx[i].wage, :abnormitymx[i].mxdscrp, :abnormitymx[i].printid, :abnormitymx[i].relcode, :abnormitymx[i].reason, :abnormitymx[i].unit, :scid); IF sqlca.SQLCode <> 0 THEN billid = 0 //还原noticeid rslt = 0 arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText ROLLBACK ; GOTO ext END IF NEXT ELSE //////////////////////////////////////////////////更新 UPDATE u_sc_abnormity SET wageid = :wageid, billdate = :billdate, Dscrp = :Dscrp, moddate = :server_dt, modemp = :publ_operator, relcode = :relcode, relid = :relid, wagemth = :wagemth, wrkgrpid = :wrkgrpid WHERE u_sc_abnormity.billid = :billid and u_sc_abnormity.scid = :scid AND Auditingflag = 0; IF sqlca.SQLCode <> 0 OR sqlca.SQLNRows <= 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致更新单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF //删除原有明细 DELETE FROM u_sc_abnormitymx Where u_sc_abnormitymx.billid = :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_sc_abnormitymx ( billid, empid, empcode, empname, amount, wage, mxdscrp, printid, relcode, reason, unit, scid) VALUES (:billid, :abnormitymx[i].empid, :abnormitymx[i].empcode, :abnormitymx[i].empname, :abnormitymx[i].amount, :abnormitymx[i].wage, :abnormitymx[i].mxdscrp, :abnormitymx[i].printid, :abnormitymx[i].relcode, :abnormitymx[i].reason, :abnormitymx[i].unit, :scid); IF sqlca.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 acceptmx (long arg_empid, string arg_empcode, string arg_empname, decimal arg_amount, decimal arg_wage, string arg_mxdscrp, ref string arg_msg, long arg_printid, string arg_relcode, string arg_reason, string arg_unit); Long rslt = 1,cnt = 0,ls_i String ls_empname,ls_empcode IF it_newbegin = FALSE AND it_updatebegin = FALSE THEN rslt = 0 arg_msg = "非编辑状态不可以使用,操作取消" GOTO ext END IF IF IsNull(arg_empid) THEN arg_empid = 0 IF IsNull(arg_empcode) THEN arg_empcode = '' IF IsNull(arg_empname) THEN arg_empname = '' IF IsNull(arg_relcode) THEN arg_relcode = '' IF IsNull(arg_amount) THEN arg_amount = 0 IF IsNull(arg_wage) THEN arg_wage = 0 IF IsNull(arg_mxdscrp) THEN arg_mxdscrp = '' IF IsNull(arg_reason) THEN arg_reason = '' if isnull(arg_unit) then arg_unit = '' IF arg_wage = 0 THEN rslt = 1 GOTO ext END IF IF IsNull(arg_empcode) OR Trim(arg_empcode) = '' THEN rslt = 0 arg_msg = '员工编号不能为空' GOTO ext END IF //if arg_amount < 0 then //检查生产数量 // rslt = 0 // arg_msg = "数量错误" // goto ext //end if SELECT empcode,empname INTO :ls_empcode,:ls_empname FROM u_rs_empinfo Where empid = :arg_empid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询员工资料失败。>'+sqlca.SQLErrText GOTO ext END IF IF ls_empname <> arg_empname OR ls_empcode <> arg_empcode THEN rslt = 0 arg_msg = arg_empname+'>>该员工的编号或名称不正确。' GOTO ext END IF //写入内容 it_mxbt++ abnormitymx[it_mxbt].empid = arg_empid abnormitymx[it_mxbt].empcode = arg_empcode abnormitymx[it_mxbt].empname = arg_empname abnormitymx[it_mxbt].amount = arg_amount abnormitymx[it_mxbt].wage = arg_wage abnormitymx[it_mxbt].mxdscrp = arg_mxdscrp abnormitymx[it_mxbt].printid = arg_printid abnormitymx[it_mxbt].relcode = arg_relcode abnormitymx[it_mxbt].reason = arg_reason abnormitymx[it_mxbt].unit = arg_unit ext: IF rslt = 0 THEN p_clearmx() Return(rslt) end function public function integer newbegin (long arg_scid, ref string arg_msg);Long rslt = 1 IF arg_scid < 0 THEN arg_msg = '请选择分部' rslt = 0 GOTO ext END IF p_reset() scid = arg_scid it_newbegin = True it_updatebegin = False ext: IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer p_getinfo (long arg_scid, long arg_billid, ref string arg_msg);Int rslt = 1 IF arg_billid <= 0 THEN rslt = 0 arG_MSG = "非法的单据唯一码" GOTO ext END IF SELECT u_sc_abnormity.wageid, u_sc_abnormity.billdate, u_sc_abnormity.relcode, u_sc_abnormity.dscrp, u_sc_abnormity.Auditingflag, u_sc_abnormity.billcode, u_sc_abnormity.Auditingemp, u_sc_abnormity.Auditingdate, u_sc_abnormity.opdate, u_sc_abnormity.opemp, u_sc_abnormity.wagemth , u_sc_abnormity.moddate, u_sc_abnormity.modemp, u_sc_abnormity.relid, u_sc_abnormity.secauditingflag, u_sc_abnormity.wrkgrpid INTO :wageid, :billdate, :relcode, :dscrp, :flag, :billcode, :auditingrep, :auditingdate, :opdate, :opemp, :wagemth, :moddate, :modemp, :relid, :secflag, :wrkgrpid FROM u_sc_abnormity Where u_sc_abnormity.billid = :arg_billid and u_sc_abnormity.scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arG_MSG = "查询操作失败(错误单据唯一码),单据"+sqlca.SQLErrText GOTO ext END IF billid = arg_billid scid = arg_scid ext: IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer getinfo (long arg_scid, long arg_billid, 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 rslt = p_getinfo(arg_scid,arg_billid,arg_msg) IF rslt = 0 THEN GOTO ext //用游标读取明细 DECLARE cur_mx CURSOR FOR SELECT u_sc_abnormitymx.empid, u_sc_abnormitymx.amount, u_sc_abnormitymx.wage FROM u_sc_abnormitymx Where u_sc_abnormitymx.billid = :arg_billid and u_sc_abnormitymx.scid = :arg_scid; OPEN cur_mx; FETCH cur_mx INTO :abnormitymx[i].empid,:abnormitymx[i].amount, :abnormitymx[i].wage; DO WHILE sqlca.SQLCode = 0 i++ FETCH cur_mx INTO :abnormitymx[i].empid,:abnormitymx[i].amount, :abnormitymx[i].wage; LOOP CLOSE cur_mx; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM u_sc_abnormitymx Where u_sc_abnormitymx.billid = :arg_billid and u_sc_abnormitymx.scid = :arg_scid; 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 billid = arg_billid scid = arg_scid it_mxbt = i - 1 ext: IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer auditmx (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit);Long cnt = 0,i Int rslt = 1 Decimal ls_emp_sumwage IF uo_option_taskwork_not_affirm = -1000 THEN rslt = 0 arg_msg = '选项:[080]计件单不使用确认功能,读取初始默认值失败,操作取消!' GOTO ext END IF IF getinfo(arg_scid,arg_billid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF wagemth = 0 THEN rslt = 0 arg_msg = '请输入工资月份' GOTO ext END IF IF flag = 1 THEN rslt = 0 arg_msg = '单据已审核,操作取消' GOTO ext END IF IF uo_option_taskwork_not_affirm = 0 THEN IF secflag = 0 THEN arg_msg = '单据未确认,不能审核' rslt = 0 GOTO ext END IF END IF cnt = 0 SELECT count(*) INTO :cnt From u_gz_wageitem Where useflag = 1 And wageid = :wageid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询工资项目失败!原因>>'+sqlca.SQLErrText GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = '不存在该工资项目!原因>>'+sqlca.SQLErrText GOTO ext END IF FOR i = 1 To it_mxbt ls_emp_sumwage = 0.00 ls_emp_sumwage = abnormitymx[i].amount * abnormitymx[i].wage IF u_wage.f_setwagemxdata(wagemth,abnormitymx[i].empid,wageid,ls_emp_sumwage,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF NEXT IF uo_option_taskwork_not_affirm = 0 THEN UPDATE u_sc_abnormity SET Auditingflag = 1, Auditingemp = :publ_operator, Auditingdate = getdate() WHERE billid = :arg_billid AND scid = :arg_scid And Auditingflag = 0; ELSE UPDATE u_sc_abnormity SET Auditingflag = 1, Auditingemp = :publ_operator, Auditingdate = getdate(), secauditingdate = getdate(), secauditingemp = :publ_operator, secauditingflag = 1 WHERE billid = :arg_billid AND scid = :arg_scid And Auditingflag = 0; END IF IF sqlca.SQLCode <> 0 THEN arg_msg = '更新异常计件单失败,原因>>'+sqlca.SQLErrText rslt = 0 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 cauditmx (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit);Long cnt = 0,i Int rslt = 1 Decimal ls_emp_sumwage DateTime ls_null SetNull(ls_null) IF uo_option_taskwork_not_affirm = -1000 THEN rslt = 0 arg_msg = '选项:080,读取初始默认值失败!' GOTO ext END IF IF getinfo(arg_scid,arg_billid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF flag = 0 THEN rslt = 0 arg_msg = '单据还没有审核,操作取消' GOTO ext END IF IF f_check_wage_audit(wagemth,arg_scid,arg_msg) = 0 THEN rslt = 0 arg_msg = arg_msg + ',不能撤审' GOTO ext END IF //检查该月份,该工资项目是否已开工资变更单 cnt = 0 SELECT count(*) INTO :cnt FROM u_wage_change WHERE wageid = :wageid AND wagemth = :wagemth; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询该月份该工资项目是否已开工资变更单失败'+"~n"+sqlca.SQLErrText GOTO ext END IF IF cnt > 0 THEN rslt = 0 arg_msg = '该月份该工资项目已开工资变更单,不能撤审' GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_gz_wageitem Where useflag = 1 AND wageid = :wageid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询工资项目失败!原因>>'+sqlca.SQLErrText GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = '不存在该工资项目!原因>>'+sqlca.SQLErrText GOTO ext END IF FOR i = 1 TO it_mxbt ls_emp_sumwage = 0.00 ls_emp_sumwage = abnormitymx[i].amount * abnormitymx[i].wage IF u_wage.f_setwagemxdata(wagemth,abnormitymx[i].empid,wageid,0 - ls_emp_sumwage,arg_msg,FALSE) = 0 THEN rslt = 0 GOTO ext END IF NEXT IF uo_option_taskwork_not_affirm = 0 THEN UPDATE u_sc_abnormity SET Auditingflag = 0, Auditingemp = '', Auditingdate = :ls_null WHERE billid = :arg_billid and scid = :arg_scid AND Auditingflag = 1; ELSE UPDATE u_sc_abnormity SET Auditingflag = 0, Auditingemp = '', Auditingdate = :ls_null, secauditingdate = :ls_null, secauditingemp = '', secauditingflag = 0 WHERE billid = :arg_billid and scid = :arg_scid AND Auditingflag = 1; END IF IF sqlca.SQLCode <> 0 THEN arg_msg = '更新异常计件单失败,原因>>'+sqlca.SQLErrText rslt = 0 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_scid, long arg_billid, string arg_newdescppart, ref string arg_msg);//==================================================================== // Function: add_dscrp(arg_billid,arg_newdescppart,arg_msg) //-------------------------------------------------------------------- // Description: //-------------------------------------------------------------------- // Arguments: // value long arg_billid // value string arg_newdescppart // reference string arg_msg //-------------------------------------------------------------------- // Returns: integer //-------------------------------------------------------------------- // Author: yyx Date: 2003.11.21 //-------------------------------------------------------------------- // Modify History: // //==================================================================== 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 SELECT u_sc_abnormity.auditingflag INTO :flag FROM u_sc_abnormity Where u_sc_abnormity.billid = :arg_billid and u_sc_abnormity.scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询异常计件单操作失败' GOTO ext END IF IF flag = 0 THEN rslt = 0 arg_msg = "非审核状态下不可用" GOTO ext END IF UPDATE u_sc_abnormity SET dscrp = dscrp+' '+:arg_newdescppart Where u_sc_abnormity.billid = :billid and u_sc_abnormity.scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN ROLLBACK ; rslt = 0 arg_msg = "因网络或其它原因导致添加单据备注操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF COMMIT; dscrp = dscrp+' '+arg_newdescppart ext: Return (rslt) end function public function integer secauditing (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,li_secauditingflag IF arg_billid = 0 THEN rslt = 0 arg_msg = "没有审核对象" GOTO ext END IF SELECT secauditingflag INTO :li_secauditingflag FROM u_sc_abnormity Where billid = :arg_billid and scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询异常计件单资料失败' GOTO ext END IF IF li_secauditingflag = 1 THEN rslt = 0 arg_msg = '该单据已确认' GOTO ext END IF UPDATE u_sc_abnormity SET secauditingemp = :publ_operator, secauditingdate = getdate(), secauditingflag = 1 WHERE u_sc_abnormity.billid = :arg_billid and scid = :arg_scid AND secauditingflag = 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 RETURN rslt end function public function integer c_secauditing (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,li_secauditingflag DateTime null_dt SetNull(null_dt) IF arg_billid = 0 THEN rslt = 0 arg_msg = "没有审核对象" GOTO ext END IF SELECT secauditingflag INTO :li_secauditingflag FROM u_sc_abnormity Where billid = :arg_billid and scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询异常计件单资料失败' GOTO ext END IF IF li_secauditingflag = 0 THEN rslt = 0 arg_msg = '该单据未确认,不能反确认' GOTO ext END IF UPDATE u_sc_abnormity SET secauditingemp = '', secauditingdate = :null_dt, secauditingflag = 0 WHERE u_sc_abnormity.billid = :arg_billid and scid = :arg_scid AND secauditingflag = 1; 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 RETURN rslt end function public function integer del (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit);//==================================================================== // Function: del(arg_billid,arg_msg) //-------------------------------------------------------------------- // Description: //-------------------------------------------------------------------- // Arguments: // value long arg_billid // reference string arg_msg //-------------------------------------------------------------------- // Returns: integer //-------------------------------------------------------------------- // Author: yyx Date: 2003.11.21 //-------------------------------------------------------------------- // Modify History: // //==================================================================== Int rslt = 1 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 SELECT u_sc_abnormity.auditingflag INTO :flag FROM u_sc_abnormity WHERE u_sc_abnormity.billid = :arg_billid And u_sc_abnormity.scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询异常计件单操作失败' GOTO ext END IF IF flag = 1 THEN rslt = 0 arg_msg = "单据已经审核,不可以删除" GOTO ext END IF DELETE FROM u_sc_abnormity WHERE u_sc_abnormity.billid = :arg_billid And u_sc_abnormity.scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除计件单操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_sc_abnormitymx WHERE u_sc_abnormitymx.billid = :arg_billid And u_sc_abnormitymx.scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除计件单明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK ; p_reset() ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT ; END IF Return (rslt) end function public function integer updatebegin (long arg_scid, long arg_billid, ref string arg_msg);//==================================================================== // Function: updatebegin(arg_billid,arg_msg) //-------------------------------------------------------------------- // Description: //-------------------------------------------------------------------- // Arguments: // value long arg_billid // reference string arg_msg //-------------------------------------------------------------------- // Returns: integer //-------------------------------------------------------------------- // Author: yyx Date: 2003.11.21 //-------------------------------------------------------------------- // Modify History: // //==================================================================== Int rslt = 1 IF arg_billid <= 0 THEN billid = 0 GOTO ext END IF SELECT u_sc_abnormity.billcode, u_sc_abnormity.wagemth, u_sc_abnormity.wageid, u_sc_abnormity.billdate, u_sc_abnormity.dscrp, u_sc_abnormity.auditingflag, u_sc_abnormity.secauditingflag INTO :billcode, :wagemth, :wageid, :billdate, :dscrp, :flag, :secflag From u_sc_abnormity Where u_sc_abnormity.billid = :arg_billid and u_sc_abnormity.scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询数据操作失败,计件单'+sqlca.SQLErrText GOTO ext END IF IF secflag = 1 THEN rslt = 0 arg_msg = '单据已经确认,不可以修改' GOTO ext END IF IF flag = 1 THEN rslt = 0 arg_msg = '单据已经审核,不可以修改' GOTO ext END IF billid = arg_billid scid = arg_scid p_clearmx() it_newbegin = False it_updatebegin = True ext: IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer auditing (long arg_scid, long arg_wageid, long arg_wagemth, ref string arg_msg, boolean arg_ifcommit);Long cnt = 0,i Int rslt = 1 Decimal ls_emp_sumwage datastore ds_emp_sumabnormitywage IF uo_option_taskwork_not_affirm = -1000 THEN rslt = 0 arg_msg = '选项:080,读取初始默认值失败!' GOTO ext END IF IF uo_option_taskwork_not_affirm = 0 THEN cnt = 0 SELECT count(*) INTO :cnt FROM u_sc_abnormity WHERE wagemth = :arg_wagemth AND wageid = :arg_wageid and (scid = :arg_scid or :arg_scid = -1) AND secAuditingflag = 0; IF sqlca.SQLCode <> 0 THEN ARG_msg = '查询是否有异常计件单未审核失败,原因>>'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF cnt > 0 THEN ARG_msg = '还有异常计件单未确认,不能审核' rslt = 0 GOTO ext END IF END IF //cnt = 0 //SELECT count(*) INTO :cnt FROM u_sc_abnormity // WHERE wagemth = :arg_wagemth // AND wageid = :arg_wageid // AND Auditingflag = 1; //IF sqlca.SQLCode <> 0 THEN // rslt = 0 // ARG_msg = '查询异常计件单明细失败!原因:'+sqlca.SQLErrText // GOTO ext //END IF // //IF cnt > 0 THEN // rslt = 0 // ARG_msg = '该月的异常计件单已审核,审核前请先执行撤审!' // GOTO ext //END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_gz_wageitem Where useflag = 1 AND wageid = :arg_wageid; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_msg = '查询工资项目失败!原因>>'+sqlca.SQLErrText GOTO ext END IF IF cnt = 0 THEN rslt = 0 ARG_msg = '不存在该工资项目!原因>>'+sqlca.SQLErrText GOTO ext END IF ds_emp_sumabnormitywage = CREATE datastore ds_emp_sumabnormitywage.DataObject = 'dw_emp_sumabnormitywage' ds_emp_sumabnormitywage.SetTransObject(sqlca) IF ds_emp_sumabnormitywage.Retrieve(arg_scid,arg_wagemth,arg_wageid, 0) = 0 THEN rslt = 0 ARG_msg = '本月没有计件单可审核' GOTO ext END IF FOR i = 1 TO ds_emp_sumabnormitywage.RowCount() ls_emp_sumwage = 0.00 ls_emp_sumwage = ds_emp_sumabnormitywage.Object.sumwage[i] IF u_wage.f_setwagemxdata(arg_wagemth,ds_emp_sumabnormitywage.Object.u_sc_abnormitymx_empid[i],arg_wageid,ls_emp_sumwage,ARG_msg,FALSE) = 0 THEN rslt = 0 GOTO ext END IF NEXT IF uo_option_taskwork_not_affirm = 0 THEN UPDATE u_sc_abnormity SET Auditingflag = 1, Auditingemp = :publ_operator, Auditingdate = getdate() WHERE wagemth = :arg_wagemth AND wageid = :arg_wageid and (scid = :arg_scid or :arg_scid = -1) AND Auditingflag = 0; ELSE UPDATE u_sc_abnormity SET Auditingflag = 1, Auditingemp = :publ_operator, Auditingdate = getdate(), secauditingdate = getdate(), secauditingemp = :publ_operator, secauditingflag = 1 WHERE wagemth = :arg_wagemth AND wageid = :arg_wageid and (scid = :arg_scid or :arg_scid = -1) AND Auditingflag = 0; END IF IF sqlca.SQLCode <> 0 THEN ARG_msg = '更新异常计件单失败,原因>>'+sqlca.SQLErrText rslt = 0 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 c_auditing (long arg_scid, long arg_wageid, long arg_wagemth, ref string arg_msg, boolean arg_ifcommit); Long cnt = 0,i decimal ls_emp_sumwage Int rslt = 1 DateTime null_server_dt SetNull(null_server_dt) IF uo_option_taskwork_not_affirm = -1000 THEN rslt = 0 arg_msg = '选项:080,读取初始默认值失败!' GOTO ext END IF IF f_check_wage_audit(arg_wagemth,arg_scid,arg_msg) = 0 THEN rslt = 0 arg_msg = arg_msg + ',不能撤审' GOTO ext END IF //检查该月份,该工资项目是否已开工资变更单 cnt = 0 SELECT count(*) INTO :cnt FROM u_wage_change WHERE wageid = :arg_wageid And wagemth = :arg_wagemth; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询该月份该工资项目是否已开工资变更单失败'+"~n"+sqlca.SQLErrText GOTO ext END IF IF cnt > 0 THEN rslt = 0 arg_msg = '该月份该工资项目已开工资变更单,不能撤审' GOTO ext END IF SELECT count(*) Into :cnt From u_sc_abnormity Where wagemth = :arg_wagemth and (scid = :arg_scid or :arg_scid = -1) And Auditingflag = 1; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询异常计件单明细失败,原因>>'+sqlca.SQLErrText GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = '该月的异常计件单未审核,不用撤审!' GOTO ext END IF cnt = 0 SELECT count(*) Into :cnt From u_gz_wageitem Where useflag = 1 And wageid = :arg_wageid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询工资项目失败,原因>>'+sqlca.SQLErrText GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = '不存在该工资项目,原因>>'+sqlca.SQLErrText GOTO ext END IF //IF u_wage.f_wage_clear(arg_wageid,arg_wagemth,arg_msg,False) = 0 THEN // rslt = 0 // GOTO ext //END IF // datastore ds_emp_sumabnormitywage ds_emp_sumabnormitywage = CREATE datastore ds_emp_sumabnormitywage.DataObject = 'dw_emp_sumabnormitywage' ds_emp_sumabnormitywage.SetTransObject(sqlca) IF ds_emp_sumabnormitywage.Retrieve(arg_scid,arg_wagemth,arg_wageid, 1) = 0 THEN rslt = 0 ARG_msg = '本月没有计件单已审核' GOTO ext END IF FOR i = 1 TO ds_emp_sumabnormitywage.RowCount() ls_emp_sumwage = 0.00 ls_emp_sumwage = 0 - ds_emp_sumabnormitywage.Object.sumwage[i] IF u_wage.f_setwagemxdata(arg_wagemth,ds_emp_sumabnormitywage.Object.u_sc_abnormitymx_empid[i],arg_wageid,ls_emp_sumwage,ARG_msg,FALSE) = 0 THEN rslt = 0 GOTO ext END IF NEXT IF uo_option_taskwork_not_affirm = 0 THEN UPDATE u_sc_abnormity SET Auditingflag = 0, Auditingemp = '', Auditingdate = :null_server_dt Where wagemth = :arg_wagemth And Auditingflag = 1 And wageid = :arg_wageid and (scid = :arg_scid or :arg_scid = -1); ELSE UPDATE u_sc_abnormity SET Auditingflag = 0, Auditingemp = '', Auditingdate = :null_server_dt, secauditingdate = :null_server_dt, secauditingemp = '', secauditingflag = 0 Where wagemth = :arg_wagemth And Auditingflag = 1 And wageid = :arg_wageid and (scid = :arg_scid or :arg_scid = -1); END IF IF sqlca.SQLCode <> 0 THEN arg_msg = '更新计件明细单失败,原因:'+sqlca.SQLErrText rslt = 0 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_abnormity.create call super::create TriggerEvent( this, "constructor" ) end on on uo_abnormity.destroy TriggerEvent( this, "destructor" ) call super::destroy end on event constructor;u_wage = Create uo_wage String str_optionvalue,arg_msg f_get_sys_option_value('080',str_optionvalue,arg_msg) uo_option_taskwork_not_affirm = Long(str_optionvalue) f_get_sys_option_value('026',str_optionvalue,arg_msg) uo_option_abnormity_noorder = Long(str_optionvalue) end event event destructor;DESTROY u_wage end event