-- 应该让事务尽可能小, 包含最小的处理语句
-- 楼主这个可以改成这样的ALTER PROCEDURE SOF_getmaxbh
@biaoshi varchar(3), --单据类型标识
@addflag integer, --0,1 在前台使用;2 组成一个号返回,序号不加1(结转号),3 序号加 1 返回(单据编号);
@maxbh varchar(11)=NULL output --直接返回编号
AS
/***************************************************************/
--过程主题:获得单据编号 errorID=1800
/***************************************************************/
--内部变量声明
declare @recnum integer,
@rowcount integer
set @recnum=0
/*非事务内容执行*/
--每一过程拥有一唯一区界号,过程内的异常编号在此基础上增加
declare @errcode integer
set @errcode=1800
declare @return integer
set @return=0
IF @addflag=1 or @addflag=3
BEGIN
--启动事务处理
declare @tran_point int --控制事务嵌套 set @tran_point=@@trancount --保存事务点
if @tran_point=0
begin tran tran_SOF_getmaxbh
else
save tran tran_SOF_getmaxbh DECLARE @err int
update maxbh set @recnum=recnum=recnum+1 where biaoshi=@biaoshi
SELECT @rowcount=@@rowcount, @err = @@ERROR
if @err<>0
begin
set @return=1
goto err_lab
end if @rowcount=0
begin
set @recnum=0
insert into maxbh (biaoshi,maxbh,mkbh,recnum) values (@biaoshi,'','',@recnum)
end
if @@ERROR<>0
begin
set @return=1
goto err_lab
end --结束事务处理
if @tran_point=0
commit tran tran_SOF_getmaxbh
END
ELSE
begin
select @recnum=recnum from maxbh(nolock) where biaoshi=@biaoshi
end --返回结果
declare @s_recnum varchar(11)
set @s_recnum=LTRIM(str(@recnum))
if @addflag>1
set @maxbh=@biaoshi+ REPLICATE('0',11-len(@biaoshi)-len(@s_recnum))+@s_recnum
else
select @biaoshi+ REPLICATE('0',11-len(@biaoshi)-len(@s_recnum))+@s_recnum as recnum
--结束
goto return_lab
err_lab:
if @return<100 set @return=@errcode +@return
rollback tran tran_SOF_getmaxbh return_lab:
return @return
GO
-- 楼主这个可以改成这样的ALTER PROCEDURE SOF_getmaxbh
@biaoshi varchar(3), --单据类型标识
@addflag integer, --0,1 在前台使用;2 组成一个号返回,序号不加1(结转号),3 序号加 1 返回(单据编号);
@maxbh varchar(11)=NULL output --直接返回编号
AS
/***************************************************************/
--过程主题:获得单据编号 errorID=1800
/***************************************************************/
--内部变量声明
declare @recnum integer,
@rowcount integer
set @recnum=0
/*非事务内容执行*/
--每一过程拥有一唯一区界号,过程内的异常编号在此基础上增加
declare @errcode integer
set @errcode=1800
declare @return integer
set @return=0
IF @addflag=1 or @addflag=3
BEGIN
--启动事务处理
declare @tran_point int --控制事务嵌套 set @tran_point=@@trancount --保存事务点
if @tran_point=0
begin tran tran_SOF_getmaxbh
else
save tran tran_SOF_getmaxbh DECLARE @err int
update maxbh set @recnum=recnum=recnum+1 where biaoshi=@biaoshi
SELECT @rowcount=@@rowcount, @err = @@ERROR
if @err<>0
begin
set @return=1
goto err_lab
end if @rowcount=0
begin
set @recnum=0
insert into maxbh (biaoshi,maxbh,mkbh,recnum) values (@biaoshi,'','',@recnum)
end
if @@ERROR<>0
begin
set @return=1
goto err_lab
end --结束事务处理
if @tran_point=0
commit tran tran_SOF_getmaxbh
END
ELSE
begin
select @recnum=recnum from maxbh(nolock) where biaoshi=@biaoshi
end --返回结果
declare @s_recnum varchar(11)
set @s_recnum=LTRIM(str(@recnum))
if @addflag>1
set @maxbh=@biaoshi+ REPLICATE('0',11-len(@biaoshi)-len(@s_recnum))+@s_recnum
else
select @biaoshi+ REPLICATE('0',11-len(@biaoshi)-len(@s_recnum))+@s_recnum as recnum
--结束
goto return_lab
err_lab:
if @return<100 set @return=@errcode +@return
rollback tran tran_SOF_getmaxbh return_lab:
return @return
GO
update maxbh set @recnum=recnum=recnum+1 where biaoshi=@biaoshi
set @rowcount=@@rowcount
if @@error<>0 -- 这里得到的是上面那个SET赋值是否有错误, 如果UPDATE出错, 则不会被捕获到
begin
set @return=1
goto err_lab
end
GO
SET ANSI_NULLS OFF
GO-- 进销单据存储
ALTER procedure SBP_jx_dj
@gzid char(20),
@djlxbs char(3)
as
/***************************************************************
过程主题:进销单据存储 errorID=900
2002-11-21 zxm 出库且结算登记 cwk 时单据号记录错误。
2002-12-04 zxm 机器号辅助录入应根据高级选项进行存盘。
2003-01-06 liush 增加换货管理,换货标志登记在cwk中。
2004-12-15 lixd 增加else语句,连接多个IF语句
2005-04-28 Victor Ben 登记ywjsmx前,计算yisfje错误,退回单增加(@isth<>-1)判断
***************************************************************/
--每一过程拥有一唯一区界号,过程内的异常编号在此基础上增加
declare @errcode integer
set @errcode=900 /* 进销单据存储*/
declare @return integer /*返回结果的初始化*/
set @return=0
declare
@djbh char(14),
@jsdjlx char(3),
@jsdjbh char(14),
@jxlx char(1),
@djlx char(3),
@rq char(10),
@dwbh char(11),
@bm char(20),
@ywy char(20),
@username char(20),
@jzhh char(11),
@zhy char(30),
@isjs char(2),
@jsfsid char(11),
@jiesje dec(14,2),
@zhph char(12),
@cor_ysh dec(20,2),
@cor_yf dec(20,2),
@tmp_zoo dec(14,2),
@lastsj char(2), --最后售价管理
@mu_dingd char(2), --允许订单多次执行
@chonghong char(2), --冲红
@ck_auto_ph char(2), --出库自动分摊批号
@autoph int, --自动分摊批号
@djmxfzjqh char(2), --机器号辅助录入
@m int,
@isth int, --退货
@istbj int, --退补价
@is_hh char(2),
@bendian char(3)
set @zhph=''
set @djbh=''
set @bm=''
set @ywy=''
set @zhy=''
set @rq=''
set @isjs='否'
set @jsfsid=''
set @jiesje=0
set @cor_ysh=0
set @cor_yf=0
set @tmp_zoo=0
set @m=0
set @isth=1
set @istbj=1
set @lastsj='否'
set @chonghong='否'
set @mu_dingd='否'
set @ck_auto_ph='否'
set @autoph=0
set @djmxfzjqh='否' --机器号辅助录入
set @is_hh='否'
set @bendian=''
--增加一临时缓存
select @djbh=case fieldname when 'djbh' then left(fieldvalue,14) else @djbh end,
@dwbh=case fieldname when 'dwbh' then left(fieldvalue,11) else @dwbh end,
@bm=case fieldname when 'bm'then left(fieldvalue,20) else @bm end,
@ywy=case fieldname when 'ywy'then left(fieldvalue,20) else @ywy end,
@username=case fieldname when 'username'then left(fieldvalue,20) else @username end,
@zhy=case fieldname when 'zhy'then left(fieldvalue,30) else @zhy end,
@rq=case fieldname when 'rq' then left(fieldvalue,10) else @rq end,
@isjs=case fieldname when 'isjs'then left(fieldvalue,2) else @isjs end,
@jsfsid=case fieldname when 'jsfsid'then left(fieldvalue,11) else @jsfsid end,
@zhph=case fieldname when 'zhph'then left(fieldvalue,12) else @zhph end,
@mu_dingd=case fieldname when 'MU_DINGD'then left(fieldvalue,2) else @mu_dingd end,
@chonghong=case fieldname when 'dj_chonghong'then left(fieldvalue,2) else @chonghong end,
@ck_auto_ph=case fieldname when 'ck_auto_ph'then left(fieldvalue,2) else @ck_auto_ph end,
@djmxfzjqh=case fieldname when 'DJMXFZ'then left(fieldvalue,2) else @djmxfzjqh end,
@lastsj=case fieldname when 'ZHSHJ'then left(fieldvalue,2) else @lastsj end,
@bendian=case fieldname when 'bendian' then left(fieldvalue,3) else @bendian end,
@jiesje=case fieldname when 'sjsz' then round(convert(decimal(14,2),rtrim(fieldvalue)),2) else @jiesje end,
@is_hh=case fieldname when 'is_hh' then left(fieldvalue,2) else @is_hh end
from tmp_dj_mast (nolock)
where gzid=@gzid and fieldname in ('djbh','dwbh','bm','ywy','username','zhy','rq','isjs','jsfsid','zhph','sjsz','ZHSHJ','MU_DINGD','dj_chonghong','ck_auto_ph','DJMXFZ','is_hh','bendian')
set @jxlx=left(@djbh,1)
set @djlx=left(@djbh,3)
--select @istbj=case @djlx when 'JHB' then 0 when 'XSB' then 0 end,@isth=case @djlx when 'JHC' then -1 when 'XSC' then -1 end,@isjs=case @isjs when '' then '否' end
if @djlx='JHB' or @djlx='XSB'
begin
set @istbj=0
end if @djlx='JHC' or @djlx='XSC'
begin
set @isth=-1
end
if @isjs=''
begin
set @isjs='否'
end
if @djlx='XSA'
begin
if @ck_auto_ph='是'
set @autoph=1
end
exec @return=SOF_getmaxbh 'JZH',2,@jzhh OUTPUT if @return>0
goto err_lab
--启动事务处理
declare @tran_point int --控制事务嵌套
set @tran_point=@@trancount --保存事务点
if @tran_point=0
begin tran tran_jxdj
else
save tran tran_jxdj
--创建临时结构
create table #t_djmx (
djbh char(14) null default '',
rq char(10) null default '',
dwbh char(11) null default '',
bm char(20) null default '',
ywy char(20) null default '',
username char(20) null default '',
zhy char(30) null default '',
spid char(11) null default '',
xgdjbh char(14) null default '',
isjs char(2) null default '否',
hw char(11) null default '',
pihao char(20) null default '',
pici char(20) null default '',
baozhiqi char(10) null default '',
miejph char(12) null default '',
sxrq char(10) null default '',
dj_sn integer null default 0,
dj_sort integer null default 0,
recnum integer null default 0,
shl decimal(14,2) null default 0,
dj decimal(16,6) null default 0,
je decimal(14,2) null default 0,
shlv decimal(14,2) null default 0,
hshj decimal(16,6) null default 0,
hsje decimal(14,2) null default 0,
she decimal(14,2) null default 0,
lshje decimal(14,2) null default 0,
ml decimal(14,2) null default 0,
plcj decimal(14,2) null default 0,
lshj decimal(14,2) null default 0,
buckcb decimal(14,2) null default 0,
bukccb decimal(14,2) null default 0,
canssl decimal(14,2) null default 0,
quxsl decimal(14,2) null default 0,
duiydjbh char(14) null default '',
duiydj_cn int null default 0
)