www.gusucode.com > 精典源码Delphi130:顺某指纹考勤管理系统 > 精典源码Delphi130:顺某指纹考勤管理系统/11065顺某指纹考勤管理系统delphi/SP_NoMiMa/wbSP_KQ_ZhengChang.txt

    

/****** Object:  Stored Procedure dbo.wbSP_KQ_ZhengChang    Script Date: 2000-03-22 12:27:47 ******/

/****** Object:  Stored Procedure dbo.wbSP_KQ_ZhengChang    Script Date: 2000-02-24 11:48:00 ******/
CREATE PROCEDURE wbSP_KQ_ZhengChang
  @KQNO char(5),
  @KQDate DateTime,--得到考勤当日的日期(无时间部分)
  @isRGong bit, -- 是否人工补考勤
  @RGKQDate DateTime,
  @Result Int Output
  
AS
begin
 Declare @tmpXBJieGuo char(20)
 Declare @tmpZTTime Int
 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 @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 @WhatDayLX char(1) -- '0' 上日,'1' 当日, '2'下日的班次类型 
 Declare @QianRLXCode char(2) -- 前日排班类型
 Declare @XiaRLXCode char(2) -- 下日排班类型

 
 Declare @TmpRQ DateTime
 Declare @tmpYear int
 Declare @tmpMonth int
 Declare @tmpDay int

 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 @TmpRQ=@KQDate
 Set @Result=0 -- 0 考勤成功
 set @ShangR=0
 set @CiR=0

--EEEEEnd 变量定义 

--BBBBBegin 得到考勤日期
-- 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


--EEEEEEEen 得到考勤日期

 -- Get This Person BMCode 
 Set @BMcode=(Select BMCode from bYGongXX where KQNO=@KQNO) 
 
--1. 判断是正常班或倒班
 if Exists(Select KQNO from bYGongXX where KQNO=@KQNO and ZCBorDB="倒班") 
   Set @ZCBorDB=1
 else
   Set @ZCBorDB=0

 set @WhatDayLX='1' -- 当日班次类型
 set @DangRisCiR_XB=0
 Set @DangRisShangR_SB=0
 
--BBBBBegin  一、************得到正常班的班次类型代码

 --1. 如是正常班 判断是否公修日
 if @ZCBorDB=0
 begin
  if Exists(Select BMCode from bGXR Where BMcode=@BMCode and WeekOrder=@KQWeekDay and isGXR=1) --是公休日
  begin
   -- 是否公休日列外
   if not Exists(Select BMcode from bGXRLieWai where BMcode=@BMCode and DatePart(yy,LWaiRQ)=@KQYear and DatePart(mm,LWaiRQ)=@KQMonth and DatePart(dd,LWaiRQ)=@KQDay) 
   begin
      Set @Result=1 -- 1. 公休日
      return
   end  
   else  -- 是公休日列外 得到考勤班次类型代码
   begin
     -- 判断类型代码字段是否为空
     if Exists (Select LXCode from bGXRLieWai where BMcode=@BMCode and DatePart(yy,LWaiRQ)=@KQYear and DatePart(mm,LWaiRQ)=@KQMonth and DatePart(dd,LWaiRQ)=@KQDay and LXCode is Not Null)
        Set @LXCode=(Select LXCode from bGXRLieWai where BMcode=@BMCode and DatePart(yy,LWaiRQ)=@KQYear and DatePart(mm,LWaiRQ)=@KQMonth and DatePart(dd,LWaiRQ)=@KQDay) 
     else
     begin
        Set @Result=2 -- 2. 当日未排班
        return
     end
   end  end
  else --不是公休日 
  begin
  --3. 是否节假日 
   if Exists (Select JJRcode from bJJR where JJRYear=@KQYear and (@KQTime>= BeginDate) and (@KQTime<= EndDate+0.99999999))    
   begin
     Set @Result=3 -- 3. 节假日
     return
   end
  --不是公休和节假如 得到考勤班次类型代码
   else
   begin
     -- 判断类型代码字段是否为空
     if Exists (Select BCLXCode from bGXR where BMcode=@BMCode and WeekOrder=@KQWeekDay and BCLXCode is Not NUll)
        Set @LXCode=(Select BCLXCode from bGXR where BMcode=@BMCode and WeekOrder=@KQWeekDay)
     else
     begin
       Set @Result=2 -- 2. 当日未排班
       return
     end
   end
  end
 end 
--EEEEEnd  一、************得到正常班的班次类型代码
 else

-- 二、************得到倒班的 "上日,当日,下日"的班次类型代码
 begin

    Set @QianRLXCode=''
    Set @LXCode=''
    Set @XiaRLXCode=''
   -- 得到当日的班次类型代码
    exec wbSp_GetDBRenY_BCLXCode  @KQNO,@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  @KQNO,@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  @KQNO,@tmpYear,@tmpMonth,@tmpDay,@HaveorNot output,@XiaRLXCode output
  -- 如前日,当日,下日都没有排班 退出  
    if @QianRLXCode='' and @LXCode='' and @XiaRLXCode='' 
    begin
      Set @Result=2 -- 2. 当日未排班
      return
    end
 end     
--************结束得到倒班的班次类型代码


--四、判断是否有考勤班次或是否在考勤时间段内 
--********正常班班次判断开始
  if @ZCBorDB=0 -- 正常班
  begin
    --1. 先判断上班时间段  
    if Exists(Select BCXhuHao from bZCBBC where LXcode=@LXcode and (@KQHour*60+@KQMinute) Between (SBXS*60+SBFZ-SBQFenZ) and (SBXS*60+SBFZ+SBHFenZ) and BCXhuHao is Not Null)
    begin -- 得到该班次上班信息
      Set @isNotKQ=(Select isBeginKQ from bZCBBC where LXcode=@LXcode and (@KQHour*60+@KQMinute) Between (SBXS*60+SBFZ-SBQFenZ) and (SBXS*60+SBFZ+SBHFenZ) and BCXhuHao is Not Null)
      if @isNotKQ=0 
      begin
        Set @Result=4 -- 4. 该班次上班不考勤
        return
      end
      Set @SBorXB=0 --上班
      Set @isXBKQ=(Select isEndKQ from bZCBBC where LXcode=@LXcode and (@KQHour*60+@KQMinute) Between (SBXS*60+SBFZ-SBQFenZ) and (SBXS*60+SBFZ+SBHFenZ) and BCXhuHao is Not Null)
      Set @XBTime=(Select XBXS from bZCBBC where LXcode=@LXcode and (@KQHour*60+@KQMinute) Between (SBXS*60+SBFZ-SBQFenZ) and (SBXS*60+SBFZ+SBHFenZ) and BCXhuHao is Not Null)
           +(Select XBFZ from bZCBBC where LXcode=@LXcode and (@KQHour*60+@KQMinute) Between (SBXS*60+SBFZ-SBQFenZ) and (SBXS*60+SBFZ+SBHFenZ) and BCXhuHao is Not Null)/100.0
      Set @BCXuHao=(Select BCXhuHao from bZCBBC where LXcode=@LXcode and (@KQHour*60+@KQMinute) Between (SBXS*60+SBFZ-SBQFenZ) and (SBXS*60+SBFZ+SBHFenZ) and BCXhuHao is Not Null)
      Set @YingDXS=(Select SBXS from bZCBBC where LXcode=@LXcode and (@KQHour*60+@KQMinute) Between (SBXS*60+SBFZ-SBQFenZ) and (SBXS*60+SBFZ+SBHFenZ) and BCXhuHao is Not Null)
      Set @YingDFZ=(Select SBFZ from bZCBBC where LXcode=@LXcode and (@KQHour*60+@KQMinute) Between (SBXS*60+SBFZ-SBQFenZ) and (SBXS*60+SBFZ+SBHFenZ) and BCXhuHao is Not Null)
    end
    --2.判断下班时间段  
    else
    begin
      if Exists(Select BCXhuHao from bZCBBC where LXcode=@LXcode and (@KQHour*60+@KQMinute) Between (XBXS*60+XBFZ-XBQFenZ) and (XBXS*60+XBFZ+XBHFenZ) and BCXhuHao is Not Null)
      begin -- 得到该班次下班信息
        Set @isSBKQ=(Select isBeginKQ from bZCBBC where LXcode=@LXcode and (@KQHour*60+@KQMinute) Between (XBXS*60+XBFZ-XBQFenZ) and (XBXS*60+XBFZ+XBHFenZ) and BCXhuHao is Not Null)
        Set @SBTime=(Select SBXS from bZCBBC where LXcode=@LXcode and (@KQHour*60+@KQMinute) Between (XBXS*60+XBFZ-XBQFenZ) and (XBXS*60+XBFZ+XBHFenZ) and BCXhuHao is Not Null)
                     +(Select SBFZ from bZCBBC where LXcode=@LXcode and (@KQHour*60+@KQMinute) Between (XBXS*60+XBFZ-XBQFenZ) and (XBXS*60+XBFZ+XBHFenZ) and BCXhuHao is Not Null)/100.00
        Set @isCRiXB=(Select isCiR from bZCBBC where LXcode=@LXcode and (@KQHour*60+@KQMinute) Between (XBXS*60+XBFZ-XBQFenZ) and (XBXS*60+XBFZ+XBHFenZ) and BCXhuHao is Not Null)
        Set @isNotKQ=(Select isEndKQ from bZCBBC where LXcode=@LXcode and (@KQHour*60+@KQMinute) Between (XBXS*60+XBFZ-XBQFenZ) and (XBXS*60+XBFZ+XBHFenZ) and BCXhuHao is Not Null)
        if @isNotKQ=0 
        begin
          Set @Result=6 -- 4. 该班次下班不考勤
          return
        end
        Set @SBorXB=1 --下班
        Set @BCXuHao=(Select BCXhuHao from bZCBBC where LXcode=@LXcode and (@KQHour*60+@KQMinute) Between (XBXS*60+XBFZ-XBQFenZ) and (XBXS*60+XBFZ+XBHFenZ) and BCXhuHao is Not Null)
        Set @YingDXS=(Select XBXS from bZCBBC where LXcode=@LXcode and (@KQHour*60+@KQMinute) Between (XBXS*60+XBFZ-XBQFenZ) and (XBXS*60+XBFZ+XBHFenZ) and BCXhuHao is Not Null)
        Set @YingDFZ=(Select XBFZ from bZCBBC where LXcode=@LXcode and (@KQHour*60+@KQMinute) Between (XBXS*60+XBFZ-XBQFenZ) and (XBXS*60+XBFZ+XBHFenZ) and BCXhuHao is Not Null)
      end
      else --找不到合适的班次
      begin
          Set @Result=5 -- 5. 此时不考勤或班次设置错误
          return
      end  
    end
  end  --********正常班班次判断结束


--********倒班班次班次判断开始
  else
  begin
    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
  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

--六、处理在考勤原始记录表(bKQJL)
 --1.得到表各字段的数值
  if @ZCBorDB=0 
    set @BCType='固定班'
  else
    set @BCType='倒班'
-- 得到实际建立考勤记录的日期
    if @WhatDayLX='0' 
      set @KQDate=@KQDate-1
    if @WhatDayLX='2' 
      set @KQDate=@KQDate+1

  
  if @SBorXB=0 --上班
  begin
    --1. 判断是否存在此班次记录
    if Exists(Select KQNO from  bKQJL  where KQNO=@KQNO and KQDate=@KQDate and BCCode=@LXCode and BCXH=@BCXuHao) and @isRgong=0
    begin 
      Set @Result=7 --7: 该班次上班已经考勤
      return
    end
  -- 人工补考勤
    else if Exists(Select KQNO from  bKQJL  where KQNO=@KQNO and KQDate=@KQDate and BCCode=@LXCode and BCXH=@BCXuHao and YQDTime is null) and @isRgong=1
    begin
--???????????
   
     -- 得到考勤结果
      Set @KQJieGuo='正常出勤'   
      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 有上班旷工规定
      
      Set @tmpXBJieGuo=(Select BCJGcode from  bKQJL  where KQNO=@KQNO and KQDate=@KQDate and BCCode=@LXCode and BCXH=@BCXuHao and YQDTime is null)
      Set @tmpZTTime=(Select ZTTime from  bKQJL  where KQNO=@KQNO and KQDate=@KQDate and BCCode=@LXCode and BCXH=@BCXuHao and YQDTime is null)
      if @tmpZTTime=null
      begin
        if  @KQJieGuo='正常出勤'
          Update  bKQJL Set YQDtime=@YingDXS+@YingDFZ/100.00,SJQDtime=NULL,CDTime=NULL,BCJGcode=@KQJieGuo  where  KQNO=@KQNO and KQDate=@KQDate and BCCode=@LXCode and BCXH=@BCXuHao    
        else
          Update  bKQJL Set YQDtime=@YingDXS+@YingDFZ/100.00,SJQDtime=NULL,CDTime=@CDTime  where  KQNO=@KQNO and KQDate=@KQDate and BCCode=@LXCode and BCXH=@BCXuHao     
      end
      else -- 下班为有早退时间
      begin
        if @KQJieGuo='旷工'
          Update  bKQJL Set YQDtime=@YingDXS+@YingDFZ/100.00,SJQDtime=NULL,CDTime=@CDTime,BCJGcode=@KQJieGuo  where  KQNO=@KQNO and KQDate=@KQDate and BCCode=@LXCode and BCXH=@BCXuHao     
        else if @KQJieGuo='迟到' 
        begin
          if @isgdXBKG=1 and @tmpZTTime>=@gdXBKGFZ -- 下班旷工
             Update  bKQJL Set YQDtime=@YingDXS+@YingDFZ/100.00,SJQDtime=NULL,CDTime=@CDTime  where  KQNO=@KQNO and KQDate=@KQDate and BCCode=@LXCode and BCXH=@BCXuHao      
          else if @isgdZT=1 and @tmpZTTime>=@gdZTFZ -- 下班早退
             Update  bKQJL Set YQDtime=@YingDXS+@YingDFZ/100.00,SJQDtime=NULL,CDTime=@CDTime,BCJGcode='迟到、早退'  where  KQNO=@KQNO and KQDate=@KQDate and BCCode=@LXCode and BCXH=@BCXuHao      
          else
             Update  bKQJL Set YQDtime=@YingDXS+@YingDFZ/100.00,SJQDtime=NULL,CDTime=@CDTime,BCJGcode='迟到'  where  KQNO=@KQNO and KQDate=@KQDate and BCCode=@LXCode and BCXH=@BCXuHao      
        end 
        else -- 上班正常
        begin
          if @isgdXBKG=1 and @tmpZTTime>=@gdXBKGFZ -- 下班旷工
             Update  bKQJL Set YQDtime=@YingDXS+@YingDFZ/100.00,SJQDtime=NULL,CDTime=@CDTime  where  KQNO=@KQNO and KQDate=@KQDate and BCCode=@LXCode and BCXH=@BCXuHao      
          else if @isgdZT=1 and @tmpZTTime>=@gdZTFZ -- 下班早退
             Update  bKQJL Set YQDtime=@YingDXS+@YingDFZ/100.00,SJQDtime=NULL,CDTime=@CDTime,BCJGcode='早退'  where  KQNO=@KQNO and KQDate=@KQDate and BCCode=@LXCode and BCXH=@BCXuHao      
          else
             Update  bKQJL Set YQDtime=@YingDXS+@YingDFZ/100.00,SJQDtime=NULL,CDTime=@CDTime,BCJGcode=@KQJieGuo  where  KQNO=@KQNO and KQDate=@KQDate and BCCode=@LXCode and BCXH=@BCXuHao      
        end   
      end
--??????????      

    end

    else if Exists(Select KQNO from  bKQJL  where KQNO=@KQNO and KQDate=@KQDate and BCCode=@LXCode and BCXH=@BCXuHao and YQDTime is not null) and @isRgong=1
    begin
      Set @Result=7 --7: 该班次上班已经考勤
      return
    end
    else
    begin
    --2. 得到考勤结果
      Set @KQJieGuo='正常出勤'
      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 -- set SJQDtime=NULL 便于注释和考勤分开
            Insert into bKQJL(KQNO,KQDate,BCType,BCCode,BCXH,YQDtime,SJQDtime,CDTime,BCJGCode) values(@KQNO,@KQDate,@BCType,@LXcode,@BCXuHao,@YingDXS+@YingDFZ/100.00,NULL,@CDTime,@KQJieGuo)
          else  
            Insert into bKQJL(KQNO,KQDate,BCType,BCCode,BCXH,YQDtime,SJQDtime,CDTime,BCJGCode) values(@KQNO,@KQDate,@BCType,@LXcode,@BCXuHao,@YingDXS+@YingDFZ/100.00,@KQHour+@KQMinute/100.00,@CDTime,@KQJieGuo)
        end
        else -- 下班不考勤,把下班时间天上
        begin
          if @isRGong=1 -- set SJQDtime=NULL 便于注释和考勤分开            Insert into bKQJL(KQNO,KQDate,BCType,BCCode,BCXH,YQDtime,SJQDtime,YQTTime,SJQTTime,CDTime,BCJGCode) values(@KQNO,@KQDate,@BCType,@LXcode,@BCXuHao,@YingDXS+@YingDFZ/100.00,NULL,@XBTime,@XBTime,@CDTime,@KQJieGuo)
          else  
            Insert into bKQJL(KQNO,KQDate,BCType,BCCode,BCXH,YQDtime,SJQDtime,YQTTime,SJQTTime,CDTime,BCJGCode) values(@KQNO,@KQDate,@BCType,@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 -- set SJQDtime=NULL 便于注释和考勤分开
            Insert into bKQJL(KQNO,KQDate,BCType,BCCode,BCXH,YQDtime,SJQDtime,BCJGCode) values(@KQNO,@KQDate,@BCType,@LXcode,@BCXuHao,@YingDXS+@YingDFZ/100.00,NULL,@KQJieGuo)          else
            Insert into bKQJL(KQNO,KQDate,BCType,BCCode,BCXH,YQDtime,SJQDtime,BCJGCode) values(@KQNO,@KQDate,@BCType,@LXcode,@BCXuHao,@YingDXS+@YingDFZ/100.00,@KQHour+@KQMinute/100.00,@KQJieGuo)
        end
        else
        begin
          if  @isRGong=1 -- set SJQDtime=NULL 便于注释和考勤分开
            Insert into bKQJL(KQNO,KQDate,BCType,BCCode,BCXH,YQDtime,SJQDtime,YQTTime,SJQTTime,BCJGCode) values(@KQNO,@KQDate,@BCType,@LXcode,@BCXuHao,@YingDXS+@YingDFZ/100.00,NULL,@XBTime,@XBTime,@KQJieGuo)
          else
            Insert into bKQJL(KQNO,KQDate,BCType,BCCode,BCXH,YQDtime,SJQDtime,YQTTime,SJQTTime,BCJGCode) values(@KQNO,@KQDate,@BCType,@LXcode,@BCXuHao,@YingDXS+@YingDFZ/100.00,@KQHour+@KQMinute/100.00,@XBTime,@XBTime,@KQJieGuo)
        end

      end
      Return -- 结束考勤
    end
  end --end 上班




  else
  begin -- 下班
    --1. 判断是否存在此班次下班记录
    if Exists(Select KQNO from  bKQJL  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. 得到考勤结果
      Set @KQJieGuo='正常出勤'
      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 有下班旷工规定
    --3.如无上班记录新增加下班考勤记录
      if not Exists(Select KQNO from  bKQJL  where KQNO=@KQNO and KQDate=@KQDate and BCCode=@LXCode and BCXH=@BCXuHao)
      begin
        IF @isSBKQ=1 -- 上班要考勤
        begin 
          Set @KQJieGuo='旷工'
          if @KQJieGuo<>'正常出勤' --有早退时间
          begin
            if  @isRGong=1 -- set SJQTtime=NULL 便于注释和考勤分开
              Insert into bKQJL(KQNO,KQDate,BCType,BCCode,BCXH,YQTTime,SJQTtime,ZTTime,BCJGCode) values(@KQNO,@KQDate,@BCType,@LXcode,@BCXuHao,@YingDXS+@YingDFZ/100.00,NULL,@ZTtime,@KQJieGuo)
            else
              Insert into bKQJL(KQNO,KQDate,BCType,BCCode,BCXH,YQTTime,SJQTtime,ZTTime,BCJGCode) values(@KQNO,@KQDate,@BCType,@LXcode,@BCXuHao,@YingDXS+@YingDFZ/100.00,@KQHour+@KQMinute/100.00,@ZTtime,@KQJieGuo)
          end
          else
          begin
            if  @isRGong=1 -- set SJQTtime=NULL 便于注释和考勤分开
              Insert into bKQJL(KQNO,KQDate,BCType,BCCode,BCXH,YQDTime,SJQDTime,YQTtime,SJQTtime,BCJGCode) values(@KQNO,@KQDate,@BCType,@LXcode,@BCXuHao,@SBTime,@SBTime,@YingDXS+@YingDFZ/100.00,NULL,@KQJieGuo)            else
              Insert into bKQJL(KQNO,KQDate,BCType,BCCode,BCXH,YQDTime,SJQDTime,YQTtime,SJQTtime,BCJGCode) values(@KQNO,@KQDate,@BCType,@LXcode,@BCXuHao,@SBTime,@SBTime,@YingDXS+@YingDFZ/100.00,@KQHour+@KQMinute/100.00,@KQJieGuo)
          end
        end
        else --上班不考勤
        begin
         
          if @KQJieGuo<>'正常出勤' --有早退时间
          begin
            if  @isRGong=1 -- set SJQTtime=NULL 便于注释和考勤分开
              Insert into bKQJL(KQNO,KQDate,BCType,BCCode,BCXH,YQDTime,SJQDTime,YQTtime,SJQTtime,ZTTime,BCJGCode) values(@KQNO,@KQDate,@BCType,@LXcode,@BCXuHao,@SBTime,@SBTime,@YingDXS+@YingDFZ/100.00,NULL,@ZTtime,@KQJieGuo)
            else
              Insert into bKQJL(KQNO,KQDate,BCType,BCCode,BCXH,YQDTime,SJQDTime,YQTtime,SJQTtime,ZTTime,BCJGCode) values(@KQNO,@KQDate,@BCType,@LXcode,@BCXuHao,@SBTime,@SBTime,@YingDXS+@YingDFZ/100.00,@KQHour+@KQMinute/100.00,@ZTtime,@KQJieGuo)
          end
          else
          begin
            if  @isRGong=1 -- set SJQTtime=NULL 便于注释和考勤分开
              Insert into bKQJL(KQNO,KQDate,BCType,BCCode,BCXH,YQDTime,SJQDTime,YQTtime,SJQTtime,BCJGCode) values(@KQNO,@KQDate,@BCType,@LXcode,@BCXuHao,@SBTime,@SBTime,@YingDXS+@YingDFZ/100.00,NULL,@KQJieGuo)
            else
              Insert into bKQJL(KQNO,KQDate,BCType,BCCode,BCXH,YQDTime,SJQDTime,YQTtime,SJQTtime,BCJGCode) values(@KQNO,@KQDate,@BCType,@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 -- set SJQTtime=NULL 便于注释和考勤分开
              Update  bKQJL 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  bKQJL 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 bKQJL  where KQNO=@KQNO and KQDate=@KQDate and BCCode=@LXCode and BCXH=@BCXuHao)
            if @tmpSBKQJieGuo='旷工' --上班旷工显示为旷工
            begin              if   @isRGong=1 -- set SJQTtime=NULL 便于注释和考勤分开
                Update  bKQJL Set YQTtime=@YingDXS+@YingDFZ/100.00,SJQTtime=NULL,ZTTime=@ZTTime  where  KQNO=@KQNO and KQDate=@KQDate and BCCode=@LXCode and BCXH=@BCXuHao  
              else
                Update  bKQJL 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 -- set SJQTtime=NULL 便于注释和考勤分开
                Update  bKQJL 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  bKQJL 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 -- set SJQTtime=NULL 便于注释和考勤分开
                Update  bKQJL 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  bKQJL 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 -- set SJQTtime=NULL 便于注释和考勤分开
             Update  bKQJL Set YQTtime=@YingDXS+@YingDFZ/100.00,SJQTtime=NULL where  KQNO=@KQNO and KQDate=@KQDate and BCCode=@LXCode and BCXH=@BCXuHao 
           else
             Update  bKQJL 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