SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO --======================================================================================================================= --Author <...8065> --Alter Date <...2016-07-26 > --Description<...获取新的票据号> --2014.09.23 <...检索票据号支持按调整后顺序进行> --2015.11.10 <...获取下一个票据号时,支持返回票据领用ID及应用场合> --2016.07.18 <...减小数据库锁粒度> --======================================================================================================================= alter PROC [HORate_NextBill_Data] --取得新的票据号 @BillId int out, --票据领用记录Id @Bill varchar(20) out , --新票据号 @BCE01 int , --操作员Id @HostId int , --主机Id @BillApplyPlace varchar(20) = '' out --票据应用场合 AS DECLARE @NumberCount int , @CurrValue numeric(20,0) , @currNo numeric(20,0) , @rcount int , @FAA15 varchar(20), @tmpBillNo varchar(30), @EnjoyBillList varchar(1024), @AAK01 int select @FAA15 = CASE WHEN (FAA15 IS NULL) THEN FAA05 ELSE FAA15 END,@CurrValue= CASE WHEN (FAA16 IS NULL ) THEN 0 ELSE FAA16 END , @AAK01 = AAK01 FROM FAA1 with(nolock) WHERE FAA01 = @BillId SELECT @NumberCount = FAA10- len(FAA05) FROM FAA1 WHERE FAA01 = @BillId --IF EXISTS(SELECT * FROM FAA1 WHERE FAA01 = @BillId AND FAA17 <= 0) IF NOT EXISTS(SELECT * FROM FAE1 with(nolock) WHERE FAA01 = @BillId AND DFLAG = 0) BEGIN If @AAK01 = 1 --挂号 select @EnjoyBillList = dbo.GetSysParamValueEx(100 , 103005 , 58 , 0 , 0 , @HostId) ELSE If @AAK01 = 2 --门诊结账 select @EnjoyBillList = dbo.GetSysParamValueEx(100 , 103010 , 85 , 0 , 0 , @HostId) ELSE If @AAK01 = 3 --预交款 select @EnjoyBillList = dbo.GetSysParamValueEx(100 , 104006 , 2 , 0 , 0 , @HostId) ELSE If @AAK01 = 4 --住院结账 select @EnjoyBillList = dbo.GetSysParamValueEx(100 , 103017 , 31 , 0 , 0 , @HostId) Exec HOPatient_GetBillID @BillId out ,@AAK01 ,@BCE01 ,0 ,0 , 0 , @BillApplyPlace out ,@EnjoyBillList If @BillId <= 0 BEGIN --RAISERROR('该批次领用票据已经使用完,请使用下一批次票据.', 16, 1) with nowait RAISERROR('当前操作员没有可使用的票据记录,请到票据管理中领用.', 16, 1) with nowait RETURN 2 END END IF EXISTS(SELECT * FROM FAA1 with(nolock) WHERE FAA01 = @BillId and @CurrValue >= FAA09) BEGIN IF NOT EXISTS(SELECT * from FAE1 WHERE FAA01 = @BillId and DFLAG = 0) BEGIN RETURN 3 END END --如果存在票据领用明细,则按票据领用明细记录查找可用票据,否则不变 If EXISTS(SELECT TOP 1 * FROM FAE1 with(nolock) WHERE FAA01 = @BillId and DFLAG = 0) BEGIN SELECT TOP 1 @Bill = FAB03 FROM FAE1 with(nolock) WHERE FAA01 = @BillId and DFLAG = 0 and FAB03 > @FAA15 ORDER BY ROWNR If ISNULL(@Bill , '') = '' BEGIN SELECT TOP 1 @Bill = FAB03 FROM FAE1 with(nolock) WHERE FAA01 = @BillId and DFLAG = 0 ORDER BY ROWNR END END ELSE If NOT EXISTS(SELECT * FROM FAE1 with(nolock) WHERE FAA01 = @BillId) BEGIN --如果领用票据当前号码与当前值为空,取票据开始值 IF (@CurrValue = 0) AND (isnull(@FAA15,'')= '') BEGIN SELECT @Bill= FAA06 FROM FAA1 with(nolock) WHERE FAA01 = @BillId END ELSE BEGIN SET @rcount = 1 SET @currNo = @CurrValue WHILE @rcount > 0 BEGIN SET @currNo= @currNo + 1 SELECT @rcount = count(1) FROM FAB1 with(nolock) WHERE RIGHT(FAB03,@NumberCount)= cast(@currNo as varchar(20)) AND FAA01 = @BillId END SET @tmpBillNo='00000000000' + cast(@currNo AS varchar) SET @Bill = RIGHT(@tmpBillNo , @NumberCount) SELECT @Bill= FAA05 + @Bill FROM FAA1 with(nolock) WHERE FAA01 = @BillId END END GO