www.gusucode.com > 精典源码Delphi130:顺某指纹考勤管理系统 > 精典源码Delphi130:顺某指纹考勤管理系统/11065顺某指纹考勤管理系统delphi/SP_NoMiMa/wbSP_KQ_TiaoBan.txt
/****** Object: Stored Procedure dbo.wbSP_KQ_TiaoBan Script Date: 2000-10-05 16:13:22 ******/ /****** Object: Stored Procedure dbo.wbSP_KQ_TiaoBan Script Date: 2000-03-22 12:27:46 ******/ /****** Object: Stored Procedure dbo.wbSP_KQ_TiaoBan Script Date: 2000-02-24 11:47:59 ******/ CREATE PROCEDURE wbSP_KQ_TiaoBan @KQNO char(5), --调班人员 @YBKQNO Char(5), --原班人员 @KQDate DateTime,--得到考勤当日的日期(无时间部分) @isRGong bit, @RGKQDate DateTime, @Result Int Output AS begin Declare @SBKQNO char(4) Declare @KQTime DateTime Declare @KQYear int Declare @KQMonth int Declare @KQDay int Declare @KQWeekDay int Declare @KQHour int Declare @KQMinute int Declare @KQSecond int declare @BMcode char(4) -- 部门代码 Declare @ZCBorDB Int -- 0:正常班 1:倒班 Declare @BCType char(6) -- 正常班,倒班 Declare @LXCode char(2) -- 班次类型代码 Declare @tmpLXCode Char(2) Declare @BCXuHao int -- 班次序号 Declare @YingDXS Int --应到时间 declare @YingDFZ int Declare @CDTime Int --迟到分钟 Declare @ZTTime Int --早退分钟 Declare @KQJieGuo Char(20) --考勤结果 Declare @tmpSBKQJieGuo Char(20) Declare @isNotKQ bit --当前班次是否考勤 declare @HaveorNot bit --倒班是否排班 --迟到、早退、旷工规定 Declare @gdCDFZ Int Declare @isgdCD bit declare @isgdSBKG bit Declare @gdSBKGFZ int Declare @gdZTFZ int Declare @isgdZT bit declare @isgdXBKG bit Declare @gdXBKGFZ int Declare @SBorXB Int --0: 上班、1:下班 Declare @isCRiXB bit --是否次日下班 Declare @TmpRQ DateTime Declare @tmpYear Int Declare @TmpMonth int Declare @TmpDay Int Declare @WhatDayLX char(1) -- '0' 上日,'1' 当日, '2'下日的班次类型 Declare @QianRLXCode char(2)--上日次日下班班次 Declare @XiaRLXCode char(2) -- 下日排班类型 Declare @isXBKQ bit --如下上班不考勤,则上班考勤时自动填上下班信息 Declare @XBTime Decimal(6,2) --下班应签到时间 Declare @isSBKQ bit --如上班不考勤,则下班不能认为旷工 Declare @SBTime decimal(6,2) --上班应签到时间 Declare @ShangR bit Declare @CiR bit Declare @DangRisCiR_XB bit Declare @DangRisShangR_SB bit Set @Result=0 -- 0 考勤成功 set @ShangR=0 set @CiR=0 -- Get KQ Time if @isRGong=1 begin Set @KQTime= @RGKQDate Set @KQYear=datepart(yy,@RGKQDate) Set @KQMonth=datepart(mm,@RGKQDate) Set @KQDay=datepart(dd,@RGKQDate) Set @KQWeekDay=datepart(dw,@RGKQDate) Set @KQHour=datepart(hh,@RGKQDate) Set @KQMinute=datepart(mi,@RGKQDate) Set @KQSecond=datepart(ss,@RGKQDate) end else begin Set @KQTime=GetDate() Set @KQYear=datepart(yy,GetDate()) Set @KQMonth=datepart(mm,GetDate()) Set @KQDay=datepart(dd,GetDate()) Set @KQWeekDay=datepart(dw,GetDate()) Set @KQHour=datepart(hh,GetDate()) Set @KQMinute=datepart(mi,GetDate()) Set @KQSecond=datepart(ss,GetDate()) end Set @ZCBorDB=1 --1. 判断两人是否是倒班人员 /* if Exists(Select KQNO from bYGongXX where KQNO=@KQNO and ZCBorDB="固定班") begin Set @Result=1 -- 两人不都是倒班人员 return end */ if Exists(Select KQNO from bYGongXX where KQNO=@YBKQNO and ZCBorDB="固定班") begin Set @Result=1 return end --2.判断两人中 @KQNO 是否有班次 exec wbSp_GetDBRenY_BCLXCode @KQNO,@KQYear,@KQMonth,@KQDay,@HaveorNot output,@LXcode output if @HaveorNot=1 begin Set @tmpLXCode=@LXcode exec wbSp_GetDBRenY_BCLXCode @YBKQNO,@KQYear,@KQMonth,@KQDay,@HaveorNot output,@LXcode output if @HaveorNot=1 begin if @tmpLXCode=@LXcode begin Set @Result=2 -- 2. 当日有班 return end end end -- 得到.被调班人员前日,当日和次日排班类型 Set @QianRLXCode='' Set @LXCode='' Set @XiaRLXCode='' -- 得到当日的班次类型代码 exec wbSp_GetDBRenY_BCLXCode @YBKQNO,@KQYear,@KQMonth,@KQDay,@HaveorNot output,@LXcode output -- 得到前日的班次类型代码 Set @TmpRQ=@KQDate-1 Set @tmpYear=DatePart(yy,@TmpRQ) Set @TmpMonth=Datepart(mm,@TmpRQ) Set @TmpDay=datepart(dd,@TmpRQ) exec wbSp_GetDBRenY_BCLXCode @YBKQNO,@tmpYear,@tmpMonth,@tmpDay,@HaveorNot output,@QianRLXCode output -- 得到下日的班次类型代码 Set @TmpRQ=@KQDate+1 Set @tmpYear=DatePart(yy,@TmpRQ) Set @TmpMonth=Datepart(mm,@TmpRQ) Set @TmpDay=datepart(dd,@TmpRQ) exec wbSp_GetDBRenY_BCLXCode @YBKQNO,@tmpYear,@tmpMonth,@tmpDay,@HaveorNot output,@XiaRLXCode output -- 如前日,当日,下日都没有排班 退出 if @QianRLXCode='' and @LXCode='' and @XiaRLXCode='' begin Set @Result=3 -- 3.前日,当日,下日未排班 return end --四、判断是否有考勤班次或是否在考勤时间段内 set @WhatDayLX='1' -- 当日班次类型 Set @BCXuHao=-1 -- 不存在的班次序号 Set @SBorXB=0 --上班 -- 1. 先判断当日班次类型 if @LXCode<>'' begin ----上班时间段 --当日上班,且考勤开始时间在当日 ((SBXS*60+SBFZ) >= SBQFenZ) and isShangR=0 if Exists(Select BCXhuHao from bDBBC where LXcode=@LXcode and (@KQHour*60+@KQMinute) Between (SBXS*60+SBFZ-SBQFenZ) and (SBXS*60+SBFZ+SBHFenZ) and ((SBXS*60+SBFZ) >= SBQFenZ) and isShangR=0 and BCXhuHao is Not Null) Set @BCXuHao=(Select BCXhuHao from bDBBC where LXcode=@LXcode and (@KQHour*60+@KQMinute) Between (SBXS*60+SBFZ-SBQFenZ) and (SBXS*60+SBFZ+SBHFenZ) and ((SBXS*60+SBFZ) >= SBQFenZ) and isShangR=0 and BCXhuHao is Not Null) --当日上班,且考勤开始时间在上日 ((SBXS*60+SBFZ) < SBQFenZ) and isShangR=0 else if Exists(Select BCXhuHao from bDBBC where LXcode=@LXcode and (@KQHour*60+@KQMinute) < (SBXS*60+SBFZ+SBHFenZ) and ((SBXS*60+SBFZ) < SBQFenZ) and isShangR=0 and BCXhuHao is Not Null) Set @BCXuHao=(Select BCXhuHao from bDBBC where LXcode=@LXcode and (@KQHour*60+@KQMinute) < (SBXS*60+SBFZ+SBHFenZ) and ((SBXS*60+SBFZ) < SBQFenZ) and isShangR=0 and BCXhuHao is Not Null) --上日上班,截止考勤时间在当日 (24*60-(SBXS*60+SBFZ+SBHFenZ)) >=0 and isShangR=1 else if Exists(Select BCXhuHao from bDBBC where LXcode=@LXcode and (@KQHour*60+@KQMinute) < ((SBXS*60+SBFZ+SBHFenZ)-24*60) and isShangR=1 and BCXhuHao is Not Null) begin Set @DangRisShangR_SB=1 Set @BCXuHao=(Select BCXhuHao from bDBBC where LXcode=@LXcode and (@KQHour*60+@KQMinute) < ((SBXS*60+SBFZ+SBHFenZ)-24*60) and isShangR=1 and BCXhuHao is Not Null) end ---- 下班时间段 -- 当日下班,且下班截止时间在当日((XBXS*60+XBFZ+XBHFenZ)<24*60) and isCiR=0 else if Exists(Select BCXhuHao from bDBBC where LXcode=@LXcode and (@KQHour*60+@KQMinute) Between (XBXS*60+XBFZ-XBQFenZ) and (XBXS*60+XBFZ+XBHFenZ) and ((XBXS*60+XBFZ+XBHFenZ)<24*60) and isCiR=0 and BCXhuHao is Not Null) begin Set @SBorXB=1 --下班 Set @BCXuHao=(Select BCXhuHao from bDBBC where LXcode=@LXcode and (@KQHour*60+@KQMinute) Between (XBXS*60+XBFZ-XBQFenZ) and (XBXS*60+XBFZ+XBHFenZ) and ((XBXS*60+XBFZ+XBHFenZ)<24*60) and isCiR=0 and BCXhuHao is Not Null) end -- 当日下班,且下班截止时间在次日((XBXS*60+XBFZ+XBHFenZ)>=24*60)>=24*60) and isCiR=0 else if Exists(Select BCXhuHao from bDBBC where LXcode=@LXcode and (@KQHour*60+@KQMinute) Between (XBXS*60+XBFZ-XBQFenZ) and 24*60 and ((XBXS*60+XBFZ+XBHFenZ)>=24*60) and isCiR=0 and BCXhuHao is Not Null) begin Set @SBorXB=1 --下班 Set @BCXuHao=(Select BCXhuHao from bDBBC where LXcode=@LXcode and (@KQHour*60+@KQMinute) Between (XBXS*60+XBFZ-XBQFenZ) and 24*60 and ((XBXS*60+XBFZ+XBHFenZ)>=24*60) and isCiR=0 and BCXhuHao is Not Null) end -- 次日下班,且下班开始时间在当日 isCiR=1 and XBXS*60+XBFZ<XBQFenZ else if Exists(Select BCXhuHao from bDBBC where LXcode=@LXcode and (@KQHour*60+@KQMinute) Between (24*60-(XBQFenZ-(XBXS*60+XBFZ))) and 24*60 and (XBQFenZ-(XBXS*60+XBFZ))>0 and isCiR=1 and BCXhuHao is Not Null) begin set @DangRisCiR_XB=1 Set @SBorXB=1 --下班 Set @BCXuHao=(Select BCXhuHao from bDBBC where LXcode=@LXcode and (@KQHour*60+@KQMinute) Between (XBXS*60+XBFZ-XBQFenZ) and 24*60 and isCiR=1 and BCXhuHao is Not Null) end else Set @BCXuHao=-1 -- 不存在的班次序号 end -- 2. 其次判断下日班次类型的上班 if @XiaRLXCode<>'' and @BCXuHao=-1 begin set @WhatDayLX='2' -- 次日的班次类型 ----上班时间段 --当日上班,且考勤开始时间在上日 ((SBXS*60+SBFZ) < SBQFenZ) and isShangR=0 if Exists(Select BCXhuHao from bDBBC where LXcode=@XiaRLXCode and (@KQHour*60+@KQMinute) >=(24*60-(SBQFenZ-(SBXS*60+SBFZ))) and ((SBXS*60+SBFZ) < SBQFenZ) and isShangR=0 and BCXhuHao is Not Null) Set @BCXuHao=(Select BCXhuHao from bDBBC where LXcode=@XiaRLXCode and (@KQHour*60+@KQMinute) >=(24*60-(SBQFenZ-(SBXS*60+SBFZ))) and ((SBXS*60+SBFZ) < SBQFenZ) and isShangR=0 and BCXhuHao is Not Null) --上日上班,考勤截止时间在当日 ((SBXS*60+SBFZ+SBHFenZ)>=24*60) and isShangR=1 else if Exists(Select BCXhuHao from bDBBC where LXcode=@XiaRLXCode and (@KQHour*60+@KQMinute) >=(SBXS*60+SBFZ-SBQFenZ) and ((SBXS*60+SBFZ+SBHFenZ)>=24*60) and isShangR=1 and BCXhuHao is Not Null) begin set @ShangR=1 Set @BCXuHao=(Select BCXhuHao from bDBBC where LXcode=@XiaRLXCode and (@KQHour*60+@KQMinute) >=(SBXS*60+SBFZ-SBQFenZ) and ((SBXS*60+SBFZ+SBHFenZ)>=24*60) and isShangR=1 and BCXhuHao is Not Null) end --上日上班,考勤截止时间在上日 ((SBXS*60+SBFZ+SBHFenZ)<24*60) and isShangR=1 else if Exists(Select BCXhuHao from bDBBC where LXcode=@XiaRLXCode and (@KQHour*60+@KQMinute) between (SBXS*60+SBFZ-SBQFenZ) and (SBXS*60+SBFZ+SBHFenZ) and ((SBXS*60+SBFZ+SBHFenZ)<24*60) and isShangR=1 and BCXhuHao is Not Null) begin set @ShangR=1 Set @BCXuHao=(Select BCXhuHao from bDBBC where LXcode=@XiaRLXCode and (@KQHour*60+@KQMinute) between (SBXS*60+SBFZ-SBQFenZ) and (SBXS*60+SBFZ+SBHFenZ) and ((SBXS*60+SBFZ+SBHFenZ)<24*60) and isShangR=1 and BCXhuHao is Not Null) end else Set @BCXuHao=-1 -- 不存在的班次序号 end -- 3. 最后判断上日班次类型的下班 if @QianRLXCode<>'' and @BCXuHao=-1 begin set @WhatDayLX='0' -- 上日的班次类型 Set @SBorXB=1 --下班 ---- 下班时间段 -- 当日下班,且下班截止时间在次日((XBXS*60+XBFZ+XBHFenZ)>=24*60) and isCiR=0 if Exists(Select BCXhuHao from bDBBC where LXcode=@QianRLXCode and (@KQHour*60+@KQMinute) <=((XBXS*60+XBFZ+XBHFenZ)-24*60) and ((XBXS*60+XBFZ+XBHFenZ)>=24*60) and isCiR=0 and BCXhuHao is Not Null) Set @BCXuHao=(Select BCXhuHao from bDBBC where LXcode=@QianRLXCode and (@KQHour*60+@KQMinute) <=((XBXS*60+XBFZ+XBHFenZ)-24*60) and ((XBXS*60+XBFZ+XBHFenZ)>=24*60) and isCiR=0 and BCXhuHao is Not Null) -- 次日下班 isCiR=1 else if Exists(Select BCXhuHao from bDBBC where LXcode=@QianRLXCode and (@KQHour*60+@KQMinute) <=(XBXS*60+XBFZ+XBHFenZ) and isCiR=1 and BCXhuHao is Not Null) begin Set @CiR=1 Set @BCXuHao=(Select BCXhuHao from bDBBC where LXcode=@QianRLXCode and (@KQHour*60+@KQMinute) <=(XBXS*60+XBFZ+XBHFenZ) and isCiR=1 and BCXhuHao is Not Null) end else Set @BCXuHao=-1 -- 不存在的班次序号 end if @BCXuHao=-1 --找不到合适的班次 begin Set @Result=5 -- 5. 此时不考勤或班次设置错误 return end if @WhatDayLX='0' set @LXCode=@QianRLXCode if @WhatDayLX='2' set @LXCode=@XiaRLXCode if @SBorXB=0 --上班 -- 得到该班次上班信息 begin Set @isNotKQ=(Select isBeginKQ from bDBBC where LXcode=@LXcode and BCXhuHao=@BCXuHao) if @isNotKQ=0 begin Set @Result=4 -- 4. 该班次上班不考勤 return end Set @isXBKQ=(Select isEndKQ from bDBBC where LXcode=@LXcode and BCXhuHao=@BCXuHao) Set @XBTime=(Select XBXS from bDBBC where LXcode=@LXcode and BCXhuHao=@BCXuHao) +(Select XBFZ from bDBBC where LXcode=@LXcode and BCXhuHao=@BCXuHao)/100.00 Set @YingDXS=(Select SBXS from bDBBC where LXcode=@LXcode and BCXhuHao=@BCXuHao) Set @YingDFZ=(Select SBFZ from bDBBC where LXcode=@LXcode and BCXhuHao=@BCXuHao) end else --得到该班次下班信息 begin Set @isSBKQ=(Select isBeginKQ from bDBBC where LXcode=@LXcode and BCXhuHao=@BCXuHao) Set @SBTime=(Select SBXS from bDBBC where LXcode=@LXcode and BCXhuHao=@BCXuHao) +(Select SBFZ from bDBBC where LXcode=@LXcode and BCXhuHao=@BCXuHao)/100.00 Set @isNotKQ=(Select isEndKQ from bDBBC where LXcode=@LXcode and BCXhuHao=@BCXuHao) if @isNotKQ=0 begin Set @Result=6 -- 6. 该班次下班不考勤 return end Set @YingDXS=(Select XBXS from bDBBC where LXcode=@LXcode and BCXhuHao=@BCXuHao) Set @YingDFZ=(Select XBFZ from bDBBC where LXcode=@LXcode and BCXhuHao=@BCXuHao) end --五、得到各种上班、下班、旷工规定 Set @gdCDFZ=(Select ShuZ from bCD_ZT_GuiD where GDCode='01') set @isgdCD=(Select isSheZ from bCD_ZT_GuiD where GDCode='01') set @isgdSBKG=(Select isSheZ from bCD_ZT_GuiD where GDCode='02') set @gdSBKGFZ=(Select ShuZ from bCD_ZT_GuiD where GDCode='02') set @gdZTFZ=(Select ShuZ from bCD_ZT_GuiD where GDCode='03') set @isgdZT=(Select isSheZ from bCD_ZT_GuiD where GDCode='03') set @isgdXBKG=(Select isSheZ from bCD_ZT_GuiD where GDCode='04') Set @gdXBKGFZ=(Select ShuZ from bCD_ZT_GuiD where GDCode='04') if @WhatDayLX='2' and @ShangR=0 begin set @gdCDFZ=@gdCDFZ+24*60 Set @gdSBKGFZ=@gdSBKGFZ+24*60 end if @WhatDayLX='0' and @CiR=0 begin set @gdZTFZ=@gdztFZ+24*60 Set @gdxbKGFZ=@gdxBKGFZ+24*60 end if @WhatDayLX='1' and @DangRisCiR_XB=1 begin set @gdZTFZ=@gdztFZ-24*60 Set @gdxbKGFZ=@gdxBKGFZ-24*60 end if @WhatDayLX='1' and @DangRisShangR_SB=1 begin set @gdCDFZ=@gdCDFZ-24*60 Set @gdSBKGFZ=@gdSBKGFZ-24*60 end -- 得到实际建立考勤记录的日期 if @WhatDayLX='0' set @KQDate=@KQDate-1 if @WhatDayLX='2' set @KQDate=@KQDate+1 --六、处理调班考勤原始记录表(bTiaoBanJL) --1.得到表各字段的数值 set @BCType='倒班' if @SBorXB=0 --上班 begin --1. 判断是否存在此班次记录 if Exists(Select KQNO from bTiaoBanJL where KQNO=@KQNO and KQDate=@KQDate and BCCode=@LXCode and BCXH=@BCXuHao) begin Set @Result=7 --7: 该班次上班已经考勤 return end else begin --2. 得到考勤结果 if @isgdCD=1 -- 有迟到规定 begin if (@KQHour*60+@KQMinute)<=(@YingDXS*60+@YingDFZ+@gdCDFZ) Set @KQJieGuo='正常出勤' else begin Set @KQJieGuo='迟到' Set @CDTime=(@KQHour*60+@KQMinute)-(@YingDXS*60+@YingDFZ+@gdCDFZ) Set @Result=8 --8:迟到 end end -- end 有迟到规定 if @isgdSBKG=1 -- 有上班旷工规定 begin if (@KQHour*60+@KQMinute)>=(@YingDXS*60+@YingDFZ+@gdSBKGFZ) begin Set @KQJieGuo='旷工' Set @CDTime=(@KQHour*60+@KQMinute)-(@YingDXS*60+@YingDFZ+@gdCDFZ) Set @Result=9 --9:'上班旷工' end end -- end 有上班旷工规定 --3.新增加上班考勤记录 if @KQJieGuo<>'正常出勤' --有迟到时间 begin if @isXBKQ=1 begin if @isRGong=1 --人工补考勤把 SJQDtime=NULL Insert into bTiaoBanJL(KQNO,KQDate,BeiKQNO,BCCode,BCXH,YQDtime,SJQDtime,CDTime,BCJGCode) values(@KQNO,@KQDate,@YBKQNO,@LXcode,@BCXuHao,@YingDXS+@YingDFZ/100.00,NULL,@CDTime,@KQJieGuo) else Insert into bTiaoBanJL(KQNO,KQDate,BeiKQNO,BCCode,BCXH,YQDtime,SJQDtime,CDTime,BCJGCode) values(@KQNO,@KQDate,@YBKQNO,@LXcode,@BCXuHao,@YingDXS+@YingDFZ/100.00,@KQHour+@KQMinute/100.00,@CDTime,@KQJieGuo) end else begin if @isRGong=1 --人工补考勤把 SJQDtime=NULL Insert into bTiaoBanJL(KQNO,KQDate,BeiKQNO,BCCode,BCXH,YQDtime,SJQDtime,YQTTime,SJQTTime,CDTime,BCJGCode) values(@KQNO,@KQDate,@YBKQNO,@LXcode,@BCXuHao,@YingDXS+@YingDFZ/100.00,NULL,@XBTime,@XBTime,@CDTime,@KQJieGuo) else Insert into bTiaoBanJL(KQNO,KQDate,BeiKQNO,BCCode,BCXH,YQDtime,SJQDtime,YQTTime,SJQTTime,CDTime,BCJGCode) values(@KQNO,@KQDate,@YBKQNO,@LXcode,@BCXuHao,@YingDXS+@YingDFZ/100.00,@KQHour+@KQMinute/100.00,@XBTime,@XBTime,@CDTime,@KQJieGuo) end end else begin if @isXBKQ=1 begin if @isRGong=1 --人工补考勤把 SJQDtime=NULL Insert into bTiaoBanJL(KQNO,KQDate,BeiKQNO,BCCode,BCXH,YQDtime,SJQDtime,BCJGCode) values(@KQNO,@KQDate,@YBKQNO,@LXcode,@BCXuHao,@YingDXS+@YingDFZ/100.00,NULL,@KQJieGuo) else Insert into bTiaoBanJL(KQNO,KQDate,BeiKQNO,BCCode,BCXH,YQDtime,SJQDtime,BCJGCode) values(@KQNO,@KQDate,@YBKQNO,@LXcode,@BCXuHao,@YingDXS+@YingDFZ/100.00,@KQHour+@KQMinute/100.00,@KQJieGuo) end else begin if @isRGong=1 --人工补考勤把 SJQDtime=NULL Insert into bTiaoBanJL(KQNO,KQDate,BeiKQNO,BCCode,BCXH,YQDtime,SJQDtime,YQTTime,SJQTTime,BCJGCode) values(@KQNO,@KQDate,@YBKQNO,@LXcode,@BCXuHao,@YingDXS+@YingDFZ/100.00,NULL,@XBTime,@XBTime,@KQJieGuo) else Insert into bTiaoBanJL(KQNO,KQDate,BeiKQNO,BCCode,BCXH,YQDtime,SJQDtime,YQTTime,SJQTTime,BCJGCode) values(@KQNO,@KQDate,@YBKQNO,@LXcode,@BCXuHao,@YingDXS+@YingDFZ/100.00,@KQHour+@KQMinute/100.00,@XBTime,@XBTime,@KQJieGuo) end end end end --end 上班 else begin -- 下班 --1. 判断是否存在此班次下班记录 if @isCRiXB=1 --是否次日下班,如是检查考勤上日的上班考勤是否存在 Set @KQDate=@KQDate-1 if Exists(Select KQNO from bTiaoBanJL where KQNO=@KQNO and KQDate=@KQDate and BCCode=@LXCode and BCXH=@BCXuHao and YQTTime is not null) begin Set @Result=12 --12: 该班次下班已经考勤 return end else begin --2. 得到考勤结果 if @isgdZT=1 -- 有早退规定 begin if (@KQHour*60+@KQMinute)>=(@YingDXS*60+@YingDFZ-@gdZTFZ) Set @KQJieGuo='正常出勤' else begin Set @KQJieGuo='早退' Set @ZTTime=(@YingDXS*60+@YingDFZ-@gdZTFZ)-(@KQHour*60+@KQMinute) Set @Result=10 --10:迟到 end end -- end 有早退规定 if @isgdXBKG=1 -- 有下班旷工规定 begin if (@KQHour*60+@KQMinute)<=(@YingDXS*60+@YingDFZ-@gdXBKGFZ) begin Set @KQJieGuo='旷工' Set @ZTTime=(@YingDXS*60+@YingDFZ-@gdZTFZ)-(@KQHour*60+@KQMinute) Set @Result=11 --11:下班旷工' end end -- end 有下班旷工规定 -- 如上下班不为同一人退出 Set @SBKQNO=(Select KQNO from bTiaoBanJL where BeiKQNO=@YBKQNO and KQDate=@KQDate and BCCode=@LXCode and BCXH=@BCXuHao) if @SBKQNO<>@KQNO begin Set @Result=13 --13:下班同上班考勤不是同一个人 Return end --3.如无上班记录新增加下班考勤记录 if not Exists(Select KQNO from bTiaoBanJL where KQNO=@KQNO and KQDate=@KQDate and BCCode=@LXCode and BCXH=@BCXuHao) begin if @isSBKQ=1 Set @KQJieGuo='旷工' if @KQJieGuo<>'正常出勤' --有早退时间 begin if @isSBKQ=1 begin if @isRGong=1 --人工补考勤把 SJQTtime=NULL Insert into bTiaoBanJL(KQNO,KQDate,BeiKQNO,BCCode,BCXH,YQTtime,SJQTtime,ZTTime,BCJGCode) values(@KQNO,@KQDate,@YBKQNO,@LXcode,@BCXuHao,@YingDXS+@YingDFZ/100.00,NULL,@ZTtime,@KQJieGuo) else Insert into bTiaoBanJL(KQNO,KQDate,BeiKQNO,BCCode,BCXH,YQTtime,SJQTtime,ZTTime,BCJGCode) values(@KQNO,@KQDate,@YBKQNO,@LXcode,@BCXuHao,@YingDXS+@YingDFZ/100.00,@KQHour+@KQMinute/100.00,@ZTtime,@KQJieGuo) end else begin if @isRGong=1 --人工补考勤把 SJQTtime=NULL Insert into bTiaoBanJL(KQNO,KQDate,BeiKQNO,BCCode,BCXH,YQDTime,SJQDTime,YQTtime,SJQTtime,ZTTime,BCJGCode) values(@KQNO,@KQDate,@YBKQNO,@LXcode,@BCXuHao,@SBTime,@SBTime,@YingDXS+@YingDFZ/100.00,NULL,@ZTtime,@KQJieGuo) else Insert into bTiaoBanJL(KQNO,KQDate,BeiKQNO,BCCode,BCXH,YQDTime,SJQDTime,YQTtime,SJQTtime,ZTTime,BCJGCode) values(@KQNO,@KQDate,@YBKQNO,@LXcode,@BCXuHao,@SBTime,@SBTime,@YingDXS+@YingDFZ/100.00,@KQHour+@KQMinute/100.00,@ZTtime,@KQJieGuo) end end else begin if @isSBKQ=1 begin if @isRGong=1 --人工补考勤把 SJQTtime=NULL Insert into bTiaoBanJL(KQNO,KQDate,BeiKQNO,BCCode,BCXH,YQTtime,SJQTtime,BCJGCode) values(@KQNO,@KQDate,@YBKQNO,@LXcode,@BCXuHao,@YingDXS+@YingDFZ/100.00,NULL,@KQJieGuo) else Insert into bTiaoBanJL(KQNO,KQDate,BeiKQNO,BCCode,BCXH,YQTtime,SJQTtime,BCJGCode) values(@KQNO,@KQDate,@YBKQNO,@LXcode,@BCXuHao,@YingDXS+@YingDFZ/100.00,@KQHour+@KQMinute/100.00,@KQJieGuo) end else begin if @isRGong=1 --人工补考勤把 SJQTtime=NULL Insert into bTiaoBanJL(KQNO,KQDate,BeiKQNO,BCCode,BCXH,YQDTime,SJQDTime,YQTtime,SJQTtime,BCJGCode) values(@KQNO,@KQDate,@YBKQNO,@LXcode,@BCXuHao,@SBTime,@SBTime,@YingDXS+@YingDFZ/100.00,NULL,@KQJieGuo) else Insert into bTiaoBanJL(KQNO,KQDate,BeiKQNO,BCCode,BCXH,YQDTime,SJQDTime,YQTtime,SJQTtime,BCJGCode) values(@KQNO,@KQDate,@YBKQNO,@LXcode,@BCXuHao,@SBTime,@SBTime,@YingDXS+@YingDFZ/100.00,@KQHour+@KQMinute/100.00,@KQJieGuo) end end end else --更新此班次的下班考勤信息 begin if @KQJieGuo<>'正常出勤' --有早退时间或下班旷工 begin if @KQJieGuo='旷工' begin if @isRGong=1 --人工补考勤把 SJQTtime=NULL Update bTiaoBanJL Set YQTtime=@YingDXS+@YingDFZ/100.00,SJQTtime=NULL,ZTTime=@ZTTime,BCJGcode=@KQJieGuo where KQNO=@KQNO and KQDate=@KQDate and BCCode=@LXCode and BCXH=@BCXuHao else Update bTiaoBanJL Set YQTtime=@YingDXS+@YingDFZ/100.00,SJQTtime=@KQHour+@KQMinute/100.00,ZTTime=@ZTTime,BCJGcode=@KQJieGuo where KQNO=@KQNO and KQDate=@KQDate and BCCode=@LXCode and BCXH=@BCXuHao end else --根据上班考勤结果定 begin Set @tmpSBKQJieGuo=(Select BCJGcode from bTiaoBanJL where KQNO=@KQNO and KQDate=@KQDate and BCCode=@LXCode and BCXH=@BCXuHao) if @tmpSBKQJieGuo='旷工' --上班旷工显示为旷工 begin if @isRGong=1 --人工补考勤把 SJQTtime=NULL Update bTiaoBanJL Set YQTtime=@YingDXS+@YingDFZ/100.00,SJQTtime=NULL,ZTTime=@ZTTime where KQNO=@KQNO and KQDate=@KQDate and BCCode=@LXCode and BCXH=@BCXuHao else Update bTiaoBanJL Set YQTtime=@YingDXS+@YingDFZ/100.00,SJQTtime=@KQHour+@KQMinute/100.00,ZTTime=@ZTTime where KQNO=@KQNO and KQDate=@KQDate and BCCode=@LXCode and BCXH=@BCXuHao end else if @tmpSBKQJieGuo='迟到' --为迟到、早退 begin Set @KQJieGuo='迟到、早退' if @isRGong=1 --人工补考勤把 SJQTtime=NULL Update bTiaoBanJL Set YQTtime=@YingDXS+@YingDFZ/100.00,SJQTtime=NULL,ZTTime=@ZTTime,BCJGcode=@KQJieGuo where KQNO=@KQNO and KQDate=@KQDate and BCCode=@LXCode and BCXH=@BCXuHao else Update bTiaoBanJL Set YQTtime=@YingDXS+@YingDFZ/100.00,SJQTtime=@KQHour+@KQMinute/100.00,ZTTime=@ZTTime,BCJGcode=@KQJieGuo where KQNO=@KQNO and KQDate=@KQDate and BCCode=@LXCode and BCXH=@BCXuHao end else --为早退 begin if @isRGong=1 --人工补考勤把 SJQTtime=NULL Update bTiaoBanJL Set YQTtime=@YingDXS+@YingDFZ/100.00,SJQTtime=NULL,ZTTime=@ZTTime,BCJGcode=@KQJieGuo where KQNO=@KQNO and KQDate=@KQDate and BCCode=@LXCode and BCXH=@BCXuHao else Update bTiaoBanJL Set YQTtime=@YingDXS+@YingDFZ/100.00,SJQTtime=@KQHour+@KQMinute/100.00,ZTTime=@ZTTime,BCJGcode=@KQJieGuo where KQNO=@KQNO and KQDate=@KQDate and BCCode=@LXCode and BCXH=@BCXuHao end end end else begin if @isRGong=1 --人工补考勤把 SJQTtime=NULL Update bTiaoBanJL Set YQTtime=@YingDXS+@YingDFZ/100.00,SJQTtime=NULL where KQNO=@KQNO and KQDate=@KQDate and BCCode=@LXCode and BCXH=@BCXuHao else Update bTiaoBanJL Set YQTtime=@YingDXS+@YingDFZ/100.00,SJQTtime=@KQHour+@KQMinute/100.00 where KQNO=@KQNO and KQDate=@KQDate and BCCode=@LXCode and BCXH=@BCXuHao end end end end -- end 下班 -- @KQJieGuo--考勤结果 return end