www.gusucode.com > 精典源码Delphi130:顺某指纹考勤管理系统 > 精典源码Delphi130:顺某指纹考勤管理系统/11065顺某指纹考勤管理系统delphi/SP_NoMiMa/wbSP_GetQueBanData.txt
/****** Object: Stored Procedure dbo.wbSP_GetQueBanData Script Date: 2000-03-22 12:27:47 ******/ CREATE PROCEDURE wbSP_GetQueBanData @KQNO Char(5), @KQDate DateTime AS Declare @BMcode Char(4) -- 部门代码 Declare @ZCBorDB Int -- 0:正常班 1:倒班 Declare @BCType char(6) Declare @isSBKQ bit -- 是否上班考勤 Declare @isXBKQ bit -- 是否下班考勤 Declare @ShangBXS Int --上班时间 declare @ShangBFZ int Declare @XiaBXS Int --下班时间 declare @XiaBFZ int Declare @KQYear int Declare @KQMonth int Declare @KQDay int Declare @KQWeekDay int Declare @HaveOrNot bit Declare @LXCode char(2) Declare @LXName varChar(30) Declare @BCJGCode varChar(30) Declare @BCXH Int Declare @BCName varChar(30) Declare @InsertFlag Bit Declare @YGName Char(20) begin Set @KQYear=datepart(yy,@KQDate) Set @KQMonth=datepart(mm,@KQDate) Set @KQDay=datepart(dd,@KQDate) Set @KQWeekDay=datepart(dw,@KQDate) -- Get This Person BMCode Set @BMcode=(Select BMCode from bYGongXX where KQNO=@KQNO) Set @YGName=(Select YGName from bYGongXX where KQNO=@KQNO) if Exists(Select KQNO from bYGongXX where KQNO=@KQNO and KQBeginDate<=@KQDate) -- 是否在考勤日期后 Set @InsertFlag=1 else Set @InsertFlag=0 --1. 判断是正常班或倒班 if Exists(Select KQNO from bYGongXX where KQNO=@KQNO and ZCBorDB="固定班") begin Set @ZCBorDB=1 Set @BCType='固定班' end else begin Set @ZCBorDB=0 Set @BCType='倒班' end -- 一、************得到正常班的班次类型代码 --2. 当日是否排班 if @ZCBorDB=1 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) Set @InsertFlag=0 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) begin Set @LXCode=(Select LXCode from bGXRLieWai where BMcode=@BMCode and DatePart(yy,LWaiRQ)=@KQYear and DatePart(mm,LWaiRQ)=@KQMonth and DatePart(dd,LWaiRQ)=@KQDay) Set @LXName=(Select LXName from bZCBLX where LXCode=@LXCode) end else Set @InsertFlag=0 end end else --不是公休日 begin --3. 是否节假日 if Exists (Select JJRcode from bJJR where JJRYear=@KQYear and (@KQDate>= BeginDate) and (@KQDate<= EndDate+0.99999999)) Set @InsertFlag=0 --不是公休和节假 得到考勤班次类型代码 else begin -- 判断类型代码字段是否为空 if Exists (Select BCLXCode from bGXR where BMcode=@BMCode and WeekOrder=@KQWeekDay and BCLXCode is Not NUll) begin Set @LXCode=(Select BCLXCode from bGXR where BMcode=@BMCode and WeekOrder=@KQWeekDay) Set @LXName=(Select LXName from bZCBLX where LXCode=@LXCode) end else Set @InsertFlag=0 end end end --************结束得到正常班的班次类型代码 else -- 二、************得到倒班的班次类型代码 begin exec wbSp_GetDBRenY_BCLXCode @KQNO,@KQYear,@KQMonth,@KQDay,@HaveorNot output,@LXcode output if @HaveorNot=0 Set @InsertFlag=0 else Set @LXName=(Select LXName from bDBLX where LXCode=@LXCode) end -- 创建临时表 Select @KQNO as KQNO,@YGName as YGName,@BCType as BCType,@LXCode as LXCode,@LXName as LXName,@BCXH as BCXH,@BCName as BCName, @ShangBXS+@ShangBFZ/100.00 as YQDTime,@XiaBXS+@XiaBFZ/100.00 as YQTTime,@BCJGCode as BCJGcode into #tmpQueB Delete from #tmpQueB --************结束得到倒班的班次类型代码 --3.对各班次排班是否缺班处理 if @InsertFlag=1 begin --/////处理正常班 if @ZCBorDB=1 begin --定义正常班各班次光标 Declare ZCBEveryBCXH CURSOR FOR Select BCXhuHao,BCName,isBeginKQ,isEndKQ,SBXS,SBFZ,XBXS,XBFZ from bZCBBC where LXCode =@LXCode OPEN ZCBEveryBCXH Fetch Next From ZCBEveryBCXH INTO @BCXH,@BCName,@isSBKQ,@isXBKQ,@ShangBXS,@ShangBFZ,@XiaBXS,@XiaBFZ while (@@FETCH_STATUS=0) begin Set @InsertFlag=1 if @isSBKQ=1 or @isXBKQ=1 --上下班有要考勤 begin -- 该班次无考勤原始记录 if not Exists(Select KQNO from bKQJL where KQNO=@KQNO and KQDate=@KQDate and BCCode=@LXCode and BCXH=@BCXH) begin --有无请假记录 if Exists( Select KQNO from bQingJ where KQNO=@KQNO and @KQDate Between BeginTime and EndTime and DWei='天') Set @InsertFlag=0 else if Exists( Select KQNO from bQingJ where KQNO=@KQNO and @KQDate =BeginTime and @KQDate=EndTime and DWei='班次' and LXCode=@LXCode and ( @BCXH between BeginBCXH and EndBCXH))--请假在同一天结束 Set @InsertFlag=0 else if Exists( Select KQNO from bQingJ where KQNO=@KQNO and @KQDate =BeginTime and DWei='班次' and LXCode=@LXCode and @BCXH>=BeginBCXH) --请假第一天 Set @InsertFlag=0 else if Exists( Select KQNO from bQingJ where KQNO=@KQNO and @KQDate =EndTime and DWei='班次' and LXCode=@LXCode and @BCXH<=EndBCXH) --请假最后一天 Set @InsertFlag=0 else if Exists( Select KQNO from bQingJ where KQNO=@KQNO and @KQDate >BeginTime and @KQDate<EndTime and DWei='班次' and LXCode=@LXCode) --请假中间秒天 Set @InsertFlag=0 --有无外出记录 else if Exists(Select KQNO from bWaiChu where KQNO=@KQNO and @KQDate Between BeginTime and EndTime and DWei='天') Set @InsertFlag=0 else if Exists( Select KQNO from bWaiChu where KQNO=@KQNO and @KQDate =BeginTime and @KQDate=EndTime and DWei='班次' and LXCode=@LXCode and ( @BCXH between BeginBCXH and EndBCXH))--外出在同一天结束 Set @InsertFlag=0 else if Exists( Select KQNO from bWaiChu where KQNO=@KQNO and @KQDate =BeginTime and DWei='班次' and LXCode=@LXCode and @BCXH>=BeginBCXH) --外出第一天 Set @InsertFlag=0 else if Exists( Select KQNO from bWaiChu where KQNO=@KQNO and @KQDate =EndTime and DWei='班次' and LXCode=@LXCode and @BCXH<=EndBCXH) --外出最后一天 Set @InsertFlag=0 else if Exists( Select KQNO from bWaiChu where KQNO=@KQNO and @KQDate >BeginTime and @KQDate<EndTime and DWei='班次' and LXCode=@LXCode) --外出中间天 Set @InsertFlag=0 else Set @InsertFlag=1 -- Add Que Ban Record if @InsertFlag=1 Insert into #tmpQueB(KQNO,YGName,BCType,LXCode,LXName,BCXH,BCName,YQDTime,YQTTime) Values(@KQNO,@YGName,@BCType,@LXCode,@LXName,@BCXH,@BCName,@ShangBXS+@ShangBFZ/100.00,@XiaBXS+@XiaBFZ/100.00) end -- 该班次无考勤原始记录 end -- end if @isSBKQ=1 or @isXBKQ=1 --上下班有要考勤 Fetch Next From ZCBEveryBCXH INTO @BCXH,@BCName,@isSBKQ,@isXBKQ,@ShangBXS,@ShangBFZ,@XiaBXS,@XiaBFZ end -- end Curror While (@@FETCH_STATUS=0) Close ZCBEveryBCXH Deallocate ZCBEveryBCXH end -- end if @ZCBorDB=1 --/////处理倒班 else begin --????? --定义倒班各班次光标 Declare DBEveryBCXH CURSOR FOR Select BCXhuHao,BCName,isBeginKQ,isEndKQ,SBXS,SBFZ,XBXS,XBFZ from bDBBC where LXCode =@LXCode OPEN DBEveryBCXH Fetch Next From DBEveryBCXH INTO @BCXH,@BCName,@isSBKQ,@isXBKQ,@ShangBXS,@ShangBFZ,@XiaBXS,@XiaBFZ while (@@FETCH_STATUS=0) begin Set @InsertFlag=1 if @isSBKQ=1 or @isXBKQ=1 --上下班有要考勤 begin -- 该班次无考勤原始记录 if not Exists(Select KQNO from bKQJL where KQNO=@KQNO and KQDate=@KQDate and BCCode=@LXCode and BCXH=@BCXH) begin --有无请假记录 if Exists( Select KQNO from bQingJ where KQNO=@KQNO and @KQDate Between BeginTime and EndTime and DWei='天') Set @InsertFlag=0 --有无外出记录 else if Exists(Select KQNO from bWaiChu where KQNO=@KQNO and @KQDate Between BeginTime and EndTime and DWei='天') Set @InsertFlag=0 -- 有无调班 else if Exists(Select BeiKQNO from bTiaoBanJL where BeiKQNO=@KQNO and KQDate=@KQDate and BCCode=@LXCode and BCXH=@BCXH) Set @InsertFlag=0 else Set @InsertFlag=1 -- Add Que Ban Record if @InsertFlag=1 Insert into #tmpQueB(KQNO,YGName,BCType,LXCode,LXName,BCXH,BCName,YQDTime,YQTTime) Values(@KQNO,@YGName,@BCType,@LXCode,@LXName,@BCXH,@BCName,@ShangBXS+@ShangBFZ/100.00,@XiaBXS+@XiaBFZ/100.00) end -- 该班次无考勤原始记录 end -- end if @isSBKQ=1 or @isXBKQ=1 --上下班有要考勤 Fetch Next From DBEveryBCXH INTO @BCXH,@BCName,@isSBKQ,@isXBKQ,@ShangBXS,@ShangBFZ,@XiaBXS,@XiaBFZ end -- end Curror While (@@FETCH_STATUS=0) Close DBEveryBCXH Deallocate DBEveryBCXH --???? end -- end /////处理倒班 end -- end if @InsertFlag=1 -- 返回结果 Select * from #tmpQueB end