门诊收费窗口生成单号无标题的解决办法:在SQL的企业管理器对应的数据中运行以下语句:
ALTER procedure proc_BuildBillNo
@BillType varchar(64), -- 单据类型,必须是一个有效的单据的主表名
@FlagStr varchar(4), -- 店号、机号组合的标志字符串
@BillNo varchar(20) output, -- 生成的单据号,输出
@BillDate datetime=null -- 生成单据号的日期,为NULL时取当前日期
as
begin
----------------------------------------------------------------------------
-- 2006.12.26 修改为单据号字段名必须为:BillNo
-- 支持每天最多开9999张单,其格式如下:
-- SE 2004 03 12 01 01 0001
-- Prefix(2) + Year(4) + Month(2) + Day(2) + Shop(2) + Machine(2) + Serial(4)
-- 有前缀时,单号长18位,无前缀时长16位 by yyh 040811
----------------------------------------------------------------------------
declare
@Prefix varchar(2),
@year varchar(4),
@Month varchar(2),
@day varchar(2),
@SerialFlag varchar(6),
@DateFlag varchar(8),
@SerialVal int,
@Cmd varchar(2000)
set @Prefix=''
--如果没有指定生成单号的日期,则使用当前日期
if @BillDate is null
set @BillDate=GetDate()
--取得yyyymmdd格式的年月日
select @Year=Right(Str(Year(@BillDate)),4),
@Month=Replace(Str(Month(@BillDate), 2), ' ', '0'),
@Day=Replace(Str(Day(@BillDate), 2), ' ', '0'),
@DateFlag = @Year + @Month + @Day
-- @FlagStr必须为四位
if @FlagStr is null
set @FlagStr = '0000'
else
if len(@FlagStr) > 4
set @FlagStr = right(@FlagStr, 4)
else
if len(@FlagStr) < 4
set @FlagStr = replace(str(@FlagStr, 4), ' ', '0')
-- 检查@BillType是否为一个有效的表名
if not exists(select 1 from sysobjects with(nolock) where name=@BillType and type='u')
begin
raiserror('单据类型[%s]不是一个有效的单据表表名!', 16, 1, @BillType)
return
end
--取得最大流水号(取当天到最大,如果当天还没有开单,则从取0001。有个限制,每天最多开9999张单)
if object_id('TEMPDB..##TmpSerial') is Not Null
drop table ##TmpSerial
declare @TempFlag varchar(12)
set @TempFlag = right(@DateFlag, 4) + @FlagStr
set @Cmd = 'select max(right(BillNo, 4)) MaxSerial into ##TmpSerial from '
+ @BillType + ' with(nolock)'
+ ' where (BillNo not like ''%-%'') and (substring(BillNo,len(BillNo)-11, 8)='
+ @TempFlag + ')'
exec(@Cmd)
select @SerialFlag = replace(str(isnull(convert(int, right(MaxSerial, 4)), 0) + 1, 4), ' ', '0'),
@BillNo=@Prefix + @DateFlag + @FlagStr + @SerialFlag
from ##TmpSerial with(nolock)
print @BillNo
end
GO |