$PBExportHeader$uo_wage.sru forward global type uo_wage from nonvisualobject end type end forward global type uo_wage from nonvisualobject end type global uo_wage uo_wage forward prototypes public function integer f_delone (long arg_mth, long arg_empid, ref string arg_msg, boolean arg_ifcommit) public function integer f_setwagemxdata (long arg_mth, long arg_empid, long arg_wageid, decimal arg_wageamt, ref string arg_msg, boolean arg_ifcommit) public function integer f_addemp (long arg_wagemth, long arg_empid, ref string arg_msg, boolean arg_ifcommit) public function integer f_delemp (long arg_wagemth, long arg_empid, ref string arg_msg, boolean arg_ifcommit) public function integer f_init_wagemx_0 (long arg_scid, long arg_mth, long arg_wageid, ref string arg_msg, boolean arg_ifcommit) public function integer f_uninit (long arg_scid, long arg_mth, ref string arg_msg) public function integer f_auditing (long arg_mth, long arg_scid, long arg_empid, string arg_ademp, ref string arg_msg) public function integer f_wage_cmpl (long arg_scid, long arg_mth, ref string arg_msg, boolean arg_ifcommit) public function integer f_unauditing (long arg_mth, long arg_scid, long arg_empid, string arg_ademp, ref string arg_msg) public function integer f_init (long arg_scid, long arg_mth, integer arg_ifall, ref string arg_msg) public function integer f_wage_clear (long arg_wageid, long arg_wagemth, ref string arg_msg, boolean arg_ifcommit) public function integer f_check_noaudit (long arg_wagemth, long arg_scid, long arg_empid, ref string arg_msg) end prototypes public function integer f_delone (long arg_mth, long arg_empid, ref string arg_msg, boolean arg_ifcommit);//f_delone //1,删除一工资记录 //2.删除对应工资明细记录 long rslt=1,cnt string ls_msg select count(*) into :cnt from u_gz_wage where u_gz_wage.wagemth=:arg_mth and Auditingflag = 0 and empid=:arg_empid; if sqlca.sqlcode<>0 then ls_msg=sqlca.sqlerrtext rslt=0 arg_msg="查询工资记录是否已经审核失败>>"+ls_msg goto ext end if if cnt=0 then rslt=0 arg_msg="目标工资记录已经审核!" goto ext end if //1,删除一工资记录 delete u_gz_wage where wagemth=:arg_mth and empid=:arg_empid; if sqlca.sqlcode<>0 then ls_msg=sqlca.sqlerrtext rslt=0 arg_msg="删除个人工资记录失败>>"+ls_msg goto ext end if //2.删除工资明细记录 delete u_gz_wagemx where wagemth=:arg_mth and empid=:arg_empid ; if sqlca.sqlcode<>0 then ls_msg=sqlca.sqlerrtext rslt=0 arg_msg="删除个人工资对应项目明细记录失败>>"+ls_msg goto ext end if ext: if rslt=0 then rollback; else if arg_ifcommit then commit; end if end if return rslt end function public function integer f_setwagemxdata (long arg_mth, long arg_empid, long arg_wageid, decimal arg_wageamt, ref string arg_msg, boolean arg_ifcommit);//f_setwagemxdata(arg_mth,arg_empid,arg_wageid,arg_wageamt,arg_msg,arg_ifcommit) //审核检查 //删除旧的 //插入新的 Long rslt = 1,cnt,ls_wagetype String ls_msg,ls_wagename String ls_empcode,ls_empname 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 = '查询员工资料失败:'+String(arg_empid) GOTO ext END IF SELECT count(*) INTO :cnt FROM u_gz_wage WHERE u_gz_wage.wagemth = :arg_mth AND Auditingflag = 0 AND empid = :arg_empid; IF sqlca.SQLCode <> 0 THEN ls_msg = sqlca.SQLErrText rslt = 0 arg_msg = "查询员工:"+String(ls_empcode+ls_empname)+"月份:"+String(arg_mth)+"工资记录是否已经审核失败>>"+ls_msg GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = "员工:"+String(ls_empcode+ls_empname)+"月份:"+String(arg_mth)+"目标工资记录已经审核或还没有初始化!" GOTO ext END IF SELECT u_gz_wageitem.wagetype,u_gz_wageitem.wagename INTO :ls_wagetype,:ls_wagename FROM u_gz_wageitem Where u_gz_wageitem.wageid = :arg_wageid ; IF sqlca.SQLCode <> 0 THEN ls_msg = sqlca.SQLErrText rslt = 0 arg_msg = "查询工资项目增减类型失败>>"+ls_msg GOTO ext END IF UPDATE u_gz_wagemx SET Wagename = :ls_wagename, wagetype = :ls_wagetype, Wageamt = Wageamt + :arg_wageamt Where wageid = :arg_wageid AND empid = :arg_empid AND wagemth = :arg_mth ; IF sqlca.SQLCode = 0 AND sqlca.SQLNRows = 0 THEN INSERT INTO u_gz_wagemx ( wageid, empid, wagemth, Wagename, wagetype, Wageamt ) VALUES ( :arg_wageid, :arg_empid, :arg_mth, :ls_wagename, :ls_wagetype, :arg_wageamt ) ; IF sqlca.SQLCode <> 0 THEN ls_msg = sqlca.SQLErrText rslt = 0 arg_msg = "插入新工资明细数据记录失败>>"+ls_msg GOTO ext END IF ELSEIF sqlca.SQLCode <> 0 THEN ls_msg = sqlca.SQLErrText rslt = 0 arg_msg = "删除旧更新工资明细数据记录失败>>"+ls_msg GOTO ext END IF //delete from u_gz_wagemx // where wageid=:arg_wageid and empid=:arg_empid and wagemth=:arg_mth ; // if sqlca.sqlcode<>0 then // ls_msg=sqlca.sqlerrtext // rslt=0 // arg_msg="删除旧工资明细数据记录失败>>"+ls_msg // goto ext // end if ext: IF rslt = 0 THEN ROLLBACK; ELSE IF arg_ifcommit THEN COMMIT; END IF END IF RETURN rslt end function public function integer f_addemp (long arg_wagemth, long arg_empid, ref string arg_msg, boolean arg_ifcommit);//f_addemp(long wagemth,long empid,ref string arg_msg,boolean arg_ifcommit) //在工资表中追加人员 Int cnt = 0 Int rslt = 1 Long ll_deptid,ll_flag = 0 String ls_empcode,ls_empname,ls_name SELECT empcode,empname INTO :ls_empcode,:ls_empname FROM u_rs_empinfo Where empid = :arg_empid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询员工资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ls_name = ls_empcode + ' ' + ls_empname SELECT Top 1 Auditingflag INTO :ll_flag FROM u_gz_wage Where wagemth = :arg_wagemth; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询工资表失败,原因:'+sqlca.SQLErrText GOTO ext END IF IF ll_flag = 1 THEN rslt = 0 arg_msg = '该月工资表已审核,不能增加员工!' GOTO ext END IF SELECT count(*) INTO :cnt FROM u_gz_wage Where wagemth = :arg_wagemth AND empid = :arg_empid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询员工:'+ls_name+',工资表失败,原因:'+sqlca.SQLErrText GOTO ext END IF IF cnt > 0 THEN rslt = 0 arg_msg = '该员工:'+ls_name+',已在该月工资表中存在,不能增加!' GOTO ext END IF SELECT deptid INTO :ll_deptid FROM u_rs_empinfo Where empid = :arg_empid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询员工:'+ls_name+',部门失败,原因:'+sqlca.SQLErrText GOTO ext END IF IF ll_deptid <= 0 THEN rslt = 0 arg_msg = '非法部门唯一码' GOTO ext END IF INSERT INTO u_gz_wage (wagemth, empid, deptid) VALUES (:arg_wagemth, :arg_empid, :ll_deptid); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '员工:'+ls_name+',插入工资表失败,原因:'+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 f_delemp (long arg_wagemth, long arg_empid, ref string arg_msg, boolean arg_ifcommit);int rslt=1 long ll_flag=0,cnt=0 select top 1 Auditingflag into :ll_flag from u_gz_wage where wagemth=:arg_wagemth; if sqlca.sqlcode<>0 then rslt=0 arg_msg='查询工资表失败,原因:'+sqlca.sqlerrtext goto ext end if if ll_flag=1 then rslt=0 arg_msg='该月工资表已审核,不能增加员工!' goto ext end if select count(*) into :cnt from u_sc_taskworkmx,u_sc_taskwork where u_sc_taskworkmx.billid = u_sc_taskwork.billid and ( u_sc_taskwork.Wagemth = :arg_wagemth or u_sc_taskwork.wagemth = 0 ) and empid=:arg_empid; 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 delete from u_gz_wagemx where wagemth=:arg_wagemth and empid=:arg_empid; if sqlca.sqlcode<>0 then rslt=0 arg_msg='删除失败!原因:'+sqlca.sqlerrtext goto ext end if delete from u_gz_wage where wagemth=:arg_wagemth and empid=:arg_empid; 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 public function integer f_init_wagemx_0 (long arg_scid, long arg_mth, long arg_wageid, ref string arg_msg, boolean arg_ifcommit);//f_init_wagemx_0(arg_mth,arg_wageid,arg_msg,arg_ifcommit) //1,补充生成工资明细0项目记录 //2.删除废弃记录 Long rslt = 1 String ls_msg //1 补充生成工资明细0项目记录 INSERT INTO u_gz_wagemx ( wageid, empid, wagemth, Wagename, wagetype, Wageamt ) SELECT u_gz_wageitem.wageid, u_gz_wage.empid, u_gz_wage.wagemth, u_gz_wageitem.Wagename, u_gz_wageitem.wagetype, 0 as amt FROM u_gz_wage, u_gz_wageitem, u_rs_empinfo WHERE ( u_gz_wageitem.useflag = 1 ) AND ( u_rs_empinfo.scid = :arg_scid ) AND ( u_rs_empinfo.empid = u_gz_wage.empid ) AND ( u_gz_wage.wagemth = :arg_mth ) AND ( u_gz_wageitem.wageid = :arg_wageid) AND ( u_gz_wage.empid NOT IN ( SELECT u_gz_wagemx.empid FROM u_gz_wagemx WHERE u_gz_wagemx.wagemth = :arg_mth AND u_gz_wagemx.wageid = :arg_wageid)) ; IF sqlca.SQLCode <> 0 THEN ls_msg = sqlca.SQLErrText rslt = 0 arg_msg = "初始化工资[月直接输入]明细项目记录失败>"+String(arg_wageid)+">>"+ls_msg GOTO ext END IF DELETE FROM u_gz_wagemx WHERE u_gz_wagemx.wagemth = :arg_mth AND u_gz_wagemx.wageid = :arg_wageid AND u_gz_wagemx.empid NOT IN (SELECT u_gz_wage.empid FROM u_gz_wage WHERE ( u_gz_wage.wagemth = :arg_mth ) ); IF sqlca.SQLCode <> 0 THEN ls_msg = sqlca.SQLErrText rslt = 0 arg_msg = "删除无效工资[月直接输入]明细项目记录失败>"+String(arg_wageid)+">>"+ls_msg 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 f_uninit (long arg_scid, long arg_mth, ref string arg_msg);//f_uninit //1,删除工资记录 //2.删除工资明细记录 Long rslt = 1,cnt String ls_msg cnt = 0 select count(*) into :cnt from u_scdef where scid = :arg_scid; 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 cnt = 0 SELECT count(*) INTO :cnt FROM u_gz_wage,u_rs_empinfo WHERE u_gz_wage.wagemth = :arg_mth AND u_gz_wage.empid = u_rs_empinfo.empid AND u_rs_empinfo.scid = :arg_scid AND Auditingflag = 1; //有已经审核的记录即认为是已经审核,不可以反初始化 IF sqlca.SQLCode <> 0 THEN ls_msg = sqlca.SQLErrText rslt = 0 arg_msg = "查询工资表是否已经审核失败>>"+ls_msg GOTO ext END IF IF cnt > 0 THEN rslt = 0 arg_msg = String(arg_mth)+"工资表已经审核,不可以反初始化" GOTO ext END IF //1,删除工资记录 DELETE u_gz_wage FROM u_gz_wage,u_rs_empinfo WHERE wagemth = :arg_mth AND u_gz_wage.empid = u_rs_empinfo.empid AND u_rs_empinfo.scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN ls_msg = sqlca.SQLErrText rslt = 0 arg_msg = "删除"+String(arg_mth)+"工资记录失败>>"+ls_msg GOTO ext END IF //2.删除工资明细记录 DELETE u_gz_wagemx FROM u_gz_wagemx,u_rs_empinfo WHERE u_gz_wagemx.wagemth = :arg_mth AND u_gz_wagemx.empid = u_rs_empinfo.empid AND u_rs_empinfo.scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN ls_msg = sqlca.SQLErrText rslt = 0 arg_msg = "删除"+String(arg_mth)+"工资项目明细记录失败>>"+ls_msg GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSE COMMIT; END IF RETURN rslt end function public function integer f_auditing (long arg_mth, long arg_scid, long arg_empid, string arg_ademp, ref string arg_msg);//f_auditing // //1.计算工资金额 //3.查询是否已经审核:if arg_empid=0,全月[部门]审核; else 单条审核 //4. Long rslt = 1,i, cnt = 0 String ls_msg DateTime ldt_billdate Decimal lde_wageamt Long ll_moneyid_native, ll_empid uo_empinfo uo_ep uo_ep = Create uo_empinfo datastore ds ds = Create datastore ds.DataObject = 'ds_mthwage_emp' ds.SetTransObject(sqlca) SELECT count(*) INTO :cnt FROM u_scdef Where scid = :arg_scid; 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 IF arg_empid < 0 Or arg_mth < 200001 THEN rslt = 0 arg_msg = '参数错误' END IF rslt = f_wage_cmpl(arg_scid,arg_mth,arg_msg,False) IF rslt = 0 THEN GOTO ext END IF //更新人员部门ID UPDATE u_gz_wage SET u_gz_wage.Deptid = isnull(u_rs_empinfo.Deptid,0) FROM u_gz_wage, u_rs_empinfo WHERE ( u_gz_wage.empid = u_rs_empinfo.empid ) AND ( u_rs_empinfo.scid = :arg_scid ) AND ( u_gz_wage.wagemth = :arg_mth ) ; IF sqlca.SQLCode <> 0 THEN ls_msg = sqlca.SQLErrText rslt = 0 arg_msg = "更新工资数据人员部门信息失败>>"+ls_msg GOTO ext END IF IF f_check_noaudit(arg_mth,arg_scid,arg_empid,arg_msg) = 0 THEN rslt = 0 arg_msg = arg_msg + ',不能审核工资表' GOTO ext END IF ldt_billdate = DateTime(Today(),Now()) SELECT moneyid INTO :ll_moneyid_native FROM cw_currency Where native = 1; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询本位币资料失败' rslt = 0 GOTO ext END IF IF arg_empid = 0 THEN //全月数据审核[部门审核] cnt = 0 SELECT count(*) INTO :cnt FROM u_gz_wage,u_rs_empinfo WHERE u_gz_wage.wagemth = :arg_mth AND u_gz_wage.empid = u_rs_empinfo.empid AND u_rs_empinfo.scid = :arg_scid And Auditingflag = 0 ; IF sqlca.SQLCode <> 0 THEN ls_msg = sqlca.SQLErrText rslt = 0 arg_msg = "查询工资表是否已经审核失败>>"+ls_msg GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = String(arg_mth)+"工资表已经全部审核!" GOTO ext END IF //增加工资应付帐 cnt = ds.Retrieve(arg_scid, arg_mth, 0) FOR i = 1 To cnt ll_empid = ds.Object.u_gz_wage_empid[i] lde_wageamt = ds.Object.uv_getnew_tolwageamt_tolwageamt[i] IF IsNull(lde_wageamt) THEN lde_wageamt = 0 //增加工资应付帐 IF lde_wageamt <> 0 THEN IF uo_ep.uof_add_emppay(ll_empid,0,ll_moneyid_native,String(arg_mth)+'工资',& ldt_billdate,lde_wageamt,String(arg_mth)+'工资',0,False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF NEXT UPDATE u_gz_wage SET Auditingdate = getdate(), Auditingemp = :arg_ademp, Auditingflag = 1 FROM u_gz_wage,u_rs_empinfo WHERE u_gz_wage.wagemth = :arg_mth AND u_gz_wage.empid = u_rs_empinfo.empid AND u_rs_empinfo.scid = :arg_scid And Auditingflag = 0 ; IF sqlca.SQLCode <> 0 THEN ls_msg = sqlca.SQLErrText rslt = 0 arg_msg = "审核"+String(arg_mth)+"工资表失败>>"+ls_msg GOTO ext END IF rslt = sqlca.SQLNRows ELSE //单记录审核 cnt = 0 SELECT count(*) INTO :cnt FROM u_gz_wage,u_rs_empinfo WHERE u_gz_wage.wagemth = :arg_mth AND u_gz_wage.empid = u_rs_empinfo.empid AND u_rs_empinfo.scid = :arg_scid AND Auditingflag = 0 And u_gz_wage.empid = :arg_empid; 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 SELECT uv_getnew_Tolwageamt.Tolwageamt INTO :lde_wageamt FROM u_gz_wage INNER JOIN u_rs_empinfo ON u_gz_wage.empid = u_rs_empinfo.empid INNER JOIN uv_getnew_Tolwageamt ON u_rs_empinfo.empid = uv_getnew_Tolwageamt.empid AND u_gz_wage.wagemth = uv_getnew_Tolwageamt.wagemth WHERE u_gz_wage.wagemth = :arg_mth AND u_rs_empinfo.scid = :arg_scid And u_gz_wage.empid = :arg_empid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询员工工资额失败,"+sqlca.SQLErrText GOTO ext END IF IF IsNull(lde_wageamt) THEN lde_wageamt = 0 //增加工资应付帐 IF lde_wageamt <> 0 THEN IF uo_ep.uof_add_emppay(arg_empid,0,ll_moneyid_native,String(arg_mth)+'工资',& ldt_billdate,lde_wageamt,String(arg_mth)+'工资',0,False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF UPDATE u_gz_wage SET Auditingdate = getdate(), Auditingemp = :arg_ademp, Auditingflag = 1 FROM u_gz_wage,u_rs_empinfo WHERE u_gz_wage.wagemth = :arg_mth AND u_gz_wage.empid = u_rs_empinfo.empid AND u_rs_empinfo.scid = :arg_scid AND Auditingflag = 0 And u_gz_wage.empid = :arg_empid; IF sqlca.SQLCode <> 0 THEN ls_msg = sqlca.SQLErrText rslt = 0 arg_msg = "审核个人的工资记录失败!>>"+ls_msg GOTO ext END IF rslt = sqlca.SQLNRows END IF ext: Destroy uo_ep Destroy ds IF rslt = 0 THEN ROLLBACK; ELSE COMMIT; END IF RETURN rslt end function public function integer f_wage_cmpl (long arg_scid, long arg_mth, ref string arg_msg, boolean arg_ifcommit);//f_wage_cmpl Long rslt = 1 String ls_msg UPDATE u_gz_wage SET u_gz_wage.Tolwageamt = uv_getnew_Tolwageamt .Tolwageamt FROM u_gz_wage, u_rs_empinfo, uv_getnew_Tolwageamt WHERE u_gz_wage.empid = uv_getnew_Tolwageamt.empid AND u_gz_wage.empid = u_rs_empinfo.empid AND u_rs_empinfo.scid = :arg_scid AND u_gz_wage.wagemth = uv_getnew_Tolwageamt.wagemth AND u_gz_wage.wagemth = :arg_mth AND u_gz_wage.Auditingflag = 0; IF sqlca.SQLCode <> 0 THEN ls_msg = sqlca.SQLErrText rslt = 0 arg_msg = "计算"+String(arg_mth)+"工资金额记录失败>>"+ls_msg GOTO ext END IF if rslt = 0 then rollback; elseIF rslt = 1 and arg_ifcommit THEN COMMIT; END IF ext: RETURN rslt end function public function integer f_unauditing (long arg_mth, long arg_scid, long arg_empid, string arg_ademp, ref string arg_msg);//f_unauditing //2.查询是否已经审核:if arg_empid=0,全月[部门]审核; else 单条审核 //3. //4. Long rslt = 1, i,cnt = 0 String ls_msg Long ll_moneyid_native Long ll_empid Dec lde_wageamt uo_empinfo uo_ep uo_ep = Create uo_empinfo datastore ds ds = Create datastore ds.DataObject = 'ds_mthwage_emp' ds.SetTransObject(sqlca) SELECT count(*) INTO :cnt FROM u_scdef Where scid = :arg_scid; 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 IF arg_empid < 0 Or arg_mth < 200001 THEN rslt = 0 arg_msg = '参数错误' END IF SELECT moneyid INTO :ll_moneyid_native FROM cw_currency Where native = 1; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询本位币资料失败' rslt = 0 GOTO ext END IF IF arg_empid = 0 THEN //全月数据撤销审核[单部门] cnt = 0 SELECT count(*) INTO :cnt FROM u_gz_wage,u_rs_empinfo WHERE u_gz_wage.wagemth = :arg_mth AND u_gz_wage.empid = u_rs_empinfo.empid AND u_rs_empinfo.scid = :arg_scid And Auditingflag = 1 ; IF sqlca.SQLCode <> 0 THEN ls_msg = sqlca.SQLErrText rslt = 0 arg_msg = "查询工资表是否已经审核失败>>"+ls_msg GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = String(arg_mth)+"工资表全部未经审核!" GOTO ext END IF //增加工资应付帐 cnt = ds.Retrieve(arg_scid, arg_mth, 1) FOR i = 1 To cnt ll_empid = ds.Object.u_gz_wage_empid[i] lde_wageamt = ds.Object.uv_getnew_tolwageamt_tolwageamt[i] IF IsNull(lde_wageamt) THEN lde_wageamt = 0 IF lde_wageamt <> 0 THEN IF uo_ep.uof_del_emppay(ll_empid,0,ll_moneyid_native,String(arg_mth)+'工资',0,False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF NEXT UPDATE u_gz_wage SET Auditingdate = getdate(), Auditingemp = :arg_ademp, Auditingflag = 0 FROM u_gz_wage,u_rs_empinfo WHERE u_gz_wage.wagemth = :arg_mth AND u_gz_wage.empid = u_rs_empinfo.empid AND u_rs_empinfo.scid = :arg_scid And Auditingflag = 1 ; IF sqlca.SQLCode <> 0 THEN ls_msg = sqlca.SQLErrText rslt = 0 arg_msg = "撤审"+String(arg_mth)+"工资表失败>>"+ls_msg GOTO ext END IF rslt = sqlca.SQLNRows ELSE //单记录撤销审核 cnt = 0 SELECT count(*) INTO :cnt FROM u_gz_wage,u_rs_empinfo WHERE u_gz_wage.wagemth = :arg_mth AND u_gz_wage.empid = u_rs_empinfo.empid AND u_rs_empinfo.scid = :arg_scid AND u_gz_wage.Auditingflag = 1 And u_gz_wage.empid = :arg_empid; IF sqlca.SQLCode <> 0 THEN ls_msg = sqlca.SQLErrText rslt = 0 arg_msg = "查询工资记录是否已经审核失败>>"+ls_msg GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = "目标工资记录未经审核!" GOTO ext END IF IF uo_ep.uof_del_emppay(arg_empid,0,ll_moneyid_native,String(arg_mth)+'工资',0,False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF UPDATE u_gz_wage SET Auditingdate = getdate(), Auditingemp = :arg_ademp, Auditingflag = 0 FROM u_gz_wage,u_rs_empinfo WHERE u_gz_wage.wagemth = :arg_mth AND u_gz_wage.empid = u_rs_empinfo.empid AND u_rs_empinfo.scid = :arg_scid AND u_gz_wage.Auditingflag = 1 And u_gz_wage.empid = :arg_empid; IF sqlca.SQLCode <> 0 THEN ls_msg = sqlca.SQLErrText rslt = 0 arg_msg = "撤销审核个人的工资记录失败!>>"+ls_msg GOTO ext END IF rslt = sqlca.SQLNRows END IF ext: Destroy uo_ep Destroy ds IF rslt = 0 THEN ROLLBACK; ELSE COMMIT; END IF RETURN rslt end function public function integer f_init (long arg_scid, long arg_mth, integer arg_ifall, ref string arg_msg);//f_init //更新人员部门ID //1,补充生成工资记录 //2.更新离职人员工资标记 Long rslt = 1 String ls_msg Long a_wageid[],p_wageid,ls_i Long cnt SELECT count(*) INTO :cnt FROM u_scdef Where scid = :arg_scid; 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 DateTime ld_lastdate,ld_firstdate Long ll_month ll_month = Long(Right(String(arg_mth),2)) IF Not (ll_month >= 1 AND ll_month <= 12) THEN arg_msg = '非法的工资月份' rslt = 0 GOTO ext END IF IF arg_ifall = 0 THEN IF f_get_month_day(arg_mth,0,ld_firstdate,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF f_get_month_day(arg_mth,1,ld_lastdate,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF //1 补充生成工资记录 INSERT INTO u_gz_wage ( empid, wagemth, deptid, Tolwageamt, Havpaywageamt, Payflag, ispay, Dscrp, Auditingflag, Auditingemp, leaveflag) SELECT u_rs_empinfo.empid,:arg_mth,u_rs_empinfo.deptid,0,0,0,0,'',0,'',0 FROM u_rs_empinfo WHERE u_rs_empinfo.status = 1 AND u_rs_empinfo.scid = :arg_scid AND ( u_rs_empinfo.joindate <= :ld_lastdate AND :arg_ifall = 0 OR :arg_ifall = 1) AND u_rs_empinfo.empid NOT IN (SELECT empid FROM u_gz_wage Where wagemth = :arg_mth) ; IF sqlca.SQLCode <> 0 THEN ls_msg = sqlca.SQLErrText rslt = 0 arg_msg = "补充插入在职新工资数据记录失败>>"+ls_msg GOTO ext END IF INSERT INTO u_gz_wage ( empid, wagemth, deptid, Tolwageamt, Havpaywageamt, Payflag, ispay, Dscrp, Auditingflag, Auditingemp, leaveflag) SELECT u_rs_empinfo.empid,:arg_mth,u_rs_empinfo.deptid,0,0,0,0,'',0,'',0 FROM u_rs_empinfo INNER join uv_get_dimissiondate on u_rs_empinfo.empid = uv_get_dimissiondate.empid WHERE u_rs_empinfo.status = 0 AND u_rs_empinfo.scid = :arg_scid AND ( uv_get_dimissiondate.movedate >= :ld_firstdate AND :arg_ifall = 0 ) AND u_rs_empinfo.empid NOT IN (SELECT empid FROM u_gz_wage Where wagemth = :arg_mth) ; IF sqlca.SQLCode <> 0 THEN ls_msg = sqlca.SQLErrText rslt = 0 arg_msg = "补充插入离职新工资数据记录失败>>"+ls_msg GOTO ext END IF //2.更新离职人员工资标记 UPDATE u_gz_wage SET leaveflag = 1 FROM u_gz_wage, u_rs_empinfo WHERE ( u_gz_wage.empid = u_rs_empinfo.empid ) AND ( u_rs_empinfo.status = 0 ) AND ( u_rs_empinfo.scid = :arg_scid ) AND ( u_gz_wage.wagemth = :arg_mth ) ; IF sqlca.SQLCode <> 0 THEN ls_msg = sqlca.SQLErrText rslt = 0 arg_msg = "更新离职人员工资标记录失败>>"+ls_msg GOTO ext END IF COMMIT; //工资记录初始化成功则提交 //游标查询全部的 项目 String ls_wageitem = '' Int li_ifint = 0 SELECT count(*) INTO :cnt FROM u_gz_wagemx Where wagemth = :arg_mth; IF sqlca.SQLCode <> 0 THEN ls_msg = sqlca.SQLErrText rslt = 0 arg_msg = "查询是否首次初始化失败>>"+ls_msg GOTO ext END IF IF cnt = 0 THEN li_ifint = 1 DECLARE wageitem_cur CURSOR FOR SELECT u_gz_wageitem.Wageid FROM u_gz_wageitem Where ( u_gz_wageitem.useflag = 1 ) ; OPEN wageitem_cur; p_wageid = 1 FETCH wageitem_cur INTO :a_wageid[p_wageid]; DO WHILE sqlca.SQLCode = 0 p_wageid++ FETCH wageitem_cur INTO :a_wageid[p_wageid]; LOOP CLOSE wageitem_cur; p_wageid = p_wageid - 1 IF p_wageid = 0 THEN arg_msg = '工资项目未定义,请检查' rslt = 0 GOTO ext END IF FOR ls_i = 1 TO p_wageid //循环初始化项目 ,直接提交 rslt = f_init_wagemx_0(arg_scid,arg_mth,a_wageid[ls_i],arg_msg,FALSE) IF rslt = 0 THEN GOTO ext END IF NEXT IF li_ifint = 1 THEN UPDATE u_gz_wagemx SET u_gz_wagemx.Wageamt = u_rs_wagemx.wageamt FROM u_gz_wagemx INNER JOIN u_rs_wagemx ON u_gz_wagemx.empid = u_rs_wagemx.empid AND u_gz_wagemx.wageid = u_rs_wagemx.wageid Where u_gz_wagemx.wagemth = :arg_mth; IF sqlca.SQLCode <> 0 THEN ls_msg = sqlca.SQLErrText rslt = 0 arg_msg = "导入员工薪酬失败>>"+ls_msg GOTO ext END IF END IF ext: IF rslt = 0 THEN ROLLBACK; ELSE COMMIT; END IF RETURN rslt end function public function integer f_wage_clear (long arg_wageid, long arg_wagemth, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long cnt SELECT count(*) INTO :cnt FROM u_gz_wage WHERE wagemth = :arg_wagemth 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 UPDATE u_gz_wagemx SET wageamt = 0 WHERE wageid = :arg_wageid AND wagemth = :arg_wagemth; 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 public function integer f_check_noaudit (long arg_wagemth, long arg_scid, long arg_empid, ref string arg_msg);Int rslt = 1 Long cnt Long li_year,li_month li_year = Long(Left(String(arg_wagemth),4)) li_month = Long(Right(String(arg_wagemth),2)) //其它计件单 SELECT count(*) INTO :cnt FROM u_sc_abnormity INNER JOIN u_sc_abnormitymx ON u_sc_abnormity.billid = u_sc_abnormitymx.billid and u_sc_abnormity.scid = u_sc_abnormitymx.scid WHERE ( u_sc_abnormity.wagemth = :arg_wagemth ) AND ( u_sc_abnormitymx.empid = :arg_empid OR :arg_empid = 0 ) AND ( u_sc_abnormity.scid = :arg_scid OR :arg_scid = -1 ) And ( u_sc_abnormity.Auditingflag = 0 ); 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 //奖罚单 SELECT count(*) INTO :cnt FROM u_gz_award_punish WHERE ( u_gz_award_punish.wagemth = :arg_wagemth ) AND ( u_gz_award_punish.empid = :arg_empid OR :arg_empid = 0 ) And ( u_gz_award_punish.flag = 0 ); 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 //借支单 SELECT count(*) INTO :cnt FROM u_gz_loanwage WHERE ( u_gz_loanwage.returndate = :arg_wagemth ) AND ( u_gz_loanwage.empid = :arg_empid OR :arg_empid = 0 ) And ( u_gz_loanwage.flag = 0 ); 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 //扣费品领用单 SELECT count(*) INTO :cnt FROM u_outware WHERE ( year(u_outware.outdate) = :li_year ) AND ( month(u_outware.outdate) = :li_month ) AND ( u_outware.flag = 1 ) AND ( u_outware.secflag = 0 ) AND ( u_outware.cusid = :arg_empid ) And ( u_outware.billtype = 10 ); 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 //个人产品计件单 SELECT count(*) INTO :cnt FROM u_scwg_taskwork_2,u_scwg_taskwork_2_mx WHERE ( u_scwg_taskwork_2.wagemth = :arg_wagemth ) AND ( u_scwg_taskwork_2.flag = 0 ) AND ( u_scwg_taskwork_2.billid = u_scwg_taskwork_2_mx.billid ) AND ( u_scwg_taskwork_2.billtype = 1 ) AND ( u_scwg_taskwork_2.wrkGrpid = :arg_empid OR :arg_empid = 0 ) And (u_scwg_taskwork_2.scid = :arg_scid Or :arg_scid = -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 //工作中心产品日分配计件单 SELECT count(*) INTO :cnt FROM u_scwg_taskwork_day,u_scwg_taskwork_day_mx_emp WHERE ( u_scwg_taskwork_day.wagemth = :arg_wagemth ) AND ( u_scwg_taskwork_day.flag = 0 ) AND ( u_scwg_taskwork_day.billid = u_scwg_taskwork_day_mx_emp.billid ) AND ( u_scwg_taskwork_day_mx_emp.empid = :arg_empid OR :arg_empid = 0 ) AND ( u_scwg_taskwork_day.scid = :arg_scid OR :arg_scid = -1) And (u_scwg_taskwork_day.billtype = 0 ); 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 //工作中心日分配异常计件单 SELECT count(*) INTO :cnt FROM u_scwg_taskwork_day,u_scwg_taskwork_day_mx_emp WHERE ( u_scwg_taskwork_day.wagemth = :arg_wagemth ) AND ( u_scwg_taskwork_day.flag = 0 ) AND ( u_scwg_taskwork_day.billid = u_scwg_taskwork_day_mx_emp.billid ) AND ( u_scwg_taskwork_day_mx_emp.empid = :arg_empid OR :arg_empid = 0 ) AND ( u_scwg_taskwork_day.scid = :arg_scid OR :arg_scid = -1 ) And (u_scwg_taskwork_day.billtype = 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 //产品个人计件单 SELECT count(*) INTO :cnt FROM u_sc_taskwork INNER JOIN u_sc_taskworkmx ON u_sc_taskwork.billid = u_sc_taskworkmx.billid WHERE ( u_sc_taskwork.wagemth = :arg_wagemth ) AND ( u_sc_taskwork.Auditingflag = 0 ) AND ( u_sc_taskworkmx.Empid = :arg_empid OR :arg_empid = 0 ) And ( u_sc_taskwork.scid = :arg_scid Or :arg_scid = -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 //工作中心计件工资分配 SELECT count(*) INTO :cnt FROM u_scwg_taskwork_money WHERE ( u_scwg_taskwork_money.wagemth = :arg_wagemth ) AND ( u_scwg_taskwork_money.Auditingflag = 0 ) And ( u_scwg_taskwork_money.empid = :arg_empid Or :arg_empid = 0 ); 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 ext: RETURN rslt end function on uo_wage.create call super::create TriggerEvent( this, "constructor" ) end on on uo_wage.destroy TriggerEvent( this, "destructor" ) call super::destroy end on