一段出库单冲减现存量的存储过程源码

CREATE proc spSF_OutWarehouseCheck(

                    @vOutWarehouseNo varchar(255), --出库单号


                    @vAuditor varchar(255),        --审核人名称


                    @UseDbTRAN bit=0               --启动数据库事务(默认不启动为0)


) AS


begin


  Set noCount on                          --兼容ADO 原生 COM对象


  declare @dtAuditDate DateTime           --审核日期


  


  declare @OldvSingleID varchar(255)      --源表ID


  declare @vSingleID int                  --单表流水号 


  declare @vOrganizationCode varchar(255) --分支机构代码 


  declare @vWarehouseCode varchar(255)    --仓库编码 


  declare @vInvCode varchar(255)          --商品编码 


  declare @vColorCode varchar(255)        --花色编码 


  declare @nSurplusNumber varchar(255)    --结存数量 


  declare @bInsert varchar(255)           --写入新数据


  declare @Direction varchar(255)         --方向


  


  declare @isError bit                    --是否有错误


  declare @ErrorInfo varchar(1024)        --错误信息


  declare @CanNegative bit                --允许负出库


 


--  外部参数


--  declare @UseDbTRAN bit                  --使用数据库事务


--  declare @vOutWarehouseNo varchar(255)   --出库单号


--  declare @vAuditor varchar(255)          --审核人


  


  set @CanNegative = 1                    --0不允许,1允许


  set @isError = 0                        --默认无错误


  set @ErrorInfo = ''                     --错误信息


  set @dtAuditDate = GetDate()            --审核日期


  


--  调试开关


--  set @vOutWarehouseNo = 'XSCK0012004000000001'


--  set @vAuditor = 'S.F.'


--  set @UseDbTRAN = 0


  


  if not Exists(Select * from OutWareHouse where (vOutWarehouseNo = @vOutWarehouseNo) and (isNull(vAuditor,'') = ''))


  begin


    Set @isError = 1


    Set @ErrorInfo = '单据不存在或者已审核!'


  end


  


  if @isError=0


  begin


  


    -- 获取现存量表流水号


    -- 1. 获取现存量编号


    -- 2. 写入临时记录到现存量表


    -- 3. 删除刚刚写入的临时记录


    -- 4. 编号递增


    


    -- 开始事务


    if @UseDbTRAN=1 BEGIN TRANSACTION


    declare cur cursor for


        select 


          c.vSingleID as 现存量编号,


            b.vOrganizationCode as 分支机构代码,


            b.vWarehouseCode as 仓库编码,


            a.vInvCode as 商品编码,


            a.vColorCode as 花色编码,


            a.nOutNumber as 出库数量,


            IsNull(Convert(varchar(255),c.nSurplusNumber),'现存量无') as 结存数量,


            (Case when b.bRBFlag=1 then '+' else '-' end) as 方向


        from     OutWarehouses as a left join OutWarehouse as b on a.vOutWarehouseNo=b.vOutWarehouseNo


                                    left join CurrentStock as c on (b.vOrganizationCode=c.vOrganizationCode) and (b.vWarehouseCode=c.vWarehouseCode) and (a.vInvCode=c.vInvCode) and (a.vColorCode=c.vColorCode)


        where (b.vOutWarehouseNo = @vOutWarehouseNo) And (isNull(b.vAuditor,'') = '')


    


    Open Cur Fetch Next From Cur 


      Into @OldvSingleID,


           @vOrganizationCode,


           @vWarehouseCode,


           @vInvCode,


           @vColorCode,


           @nSurplusNumber,


           @bInsert,


           @Direction


    


    -- 插入临时记录,锁定现存量表


    Select @vSingleID=Convert(decimal(38),isNull(Max(Convert(decimal(38),


        Case when vSingleID>0 and Convert(varChar(38),Convert(decimal(38),vSingleID))=Convert(varChar(38),vSingleID) then vSingleID end)),0)+1) 


        from CurrentStock <span lang="EN" style="FONT-SIZE: 9pt; BACK
Published At
Categories with 数据库类
comments powered by Disqus