DBA · 2008年12月2日 0

用SQL存储过程实现SAP B1的序列号自动添加

这是大约半年前写在QQ空间里的,现在转过来吧

SAP Business One的序列号添加实在是太恶心了,难用又麻烦,不知道为啥,我们公司这个实施顾问一口咬定b1不能做序列号自动添加的功能,我算是服了,求人不如求己,自己来呗。东找找,西找找,这个问问,那个问问,终于还是有点收获,今天又头痛的厉害,昏睡一天,下午起来,突然有了灵感,大概知道怎么做了,于是乎动手,写,调试,5点半下班的时候搞出来了。下楼去跟使用的人说了,结果人先给我来了一句,“怎么别人下班的时候你才上班啊?”晕一个。。。

恩,把东西记录在这里,没准有人看见了会有需要呢。。

格式化查询语句:

execute UtmpGetSNArr $[$43.5.1] ,$[$43.37.69]


存储过程:

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

create PROCEDURE [dbo].[UtmpGetSNArr]
@tItemCode nvarchar(30),
@tNums int
AS
BEGIN
declare @tmpTable table (col1 varchar(40))
declare @tSN as nvarchar(50)
declare @fSN as nvarchar(50)
declare @str as nvarchar(10)
declare @tDate as nvarchar(50)
declare @tcount int
declare @i int

Select @tDate=LEFT(Convert(varchar(20),getdate(),12),4)
set @tSN=rtrim(@tItemCode)+rtrim(@tDate)
if exists(
  select IntrSerial from OSRI where IntrSerial LIKE @tSN+'____'
)
begin
  declare @tmp as nvarchar(20)
  select @tmp=right(max(IntrSerial),4)+1 from OSRI where IntrSerial LIKE @tSN+'____'
  set @str =right('0000'+rtrim(cast(@tmp   as   char)),   4)
end
ELSE
  set @str='0001'

if(@tNums=1)
  begin
   set @fSN=rtrim(@tSN)+rtrim(@str)
   select @fSN
  end
ELSE
  set @i=0
  while @i<@tNums
  begin
   set @str =right('0000'+rtrim(cast(@str as char)), 4)
   set @fSN=rtrim(@tSN)+rtrim(@str)  
   INSERT   INTO   @tmpTable   VALUES(@fSN)
   set @i=@i+1
   set @str=@str+1        
  end
select col1 from @tmpTable

END

1228207381_5182a216

在鼠标所在地方添加格式化搜索即可。

我这里序列号的规则是物料编号+4位年月+4位流水号,如果有其他的需求,修改那个存储过程即可。

自己还是比较满意的,最近学了不少东西,很有意思。不过我很不明白的就是,为什么很多人都喜欢私藏,其实这些代码并不难,怎么就有人总是不愿意给人分享,也不愿意告诉别人方法呢,这里我还得特别感谢群里的一个朋友,也是他开始给我的一些思路,才能完成这个东西。