/*记录审核条数*/
set @CheckNum=@CheckNum+1
/*删除SellOpen中一个批号库存不够的记录*/
close id_Sum_Num_Barn
deallocate id_Sum_Num_Barn
end
else if (@Sum_Num_Barn=0) /*仓库库存为0时*/
begin
/* 审核入库记录*/
UPDATE SellOpen SET ifchecked = '0'  WHERE (id = @id)
if @@error<>0 goto GSP_ROLLBACK
/*统计审核结果*/
set @ZeroNum=@ZeroNum+1
/*记录审核条数*/
set @CheckNum=@CheckNum+1
end  
else/*仓库库存大于0但小于够进数量时*/
begin
set @ProNum=@Sum_Num_Barn
/* 审核入库记录*/
INSERT INTO SellOpen (SheetID,CreateDate,BranchCode,inputcode,SellOpenType,ProBarcode,Sum_Num,In_Num,Pei_Price,pihao,ifchecked) SELECT SheetID,CreateDate,BranchCode,inputcode,SellOpenType,ProBarcode,Sum_Num,(In_Num-@ProNum) as In_Num,Pei_Price,pihao,'1' as ifchecked FROM SellOpen WHERE (id = @id)
if @@error<>0 goto GSP_ROLLBACK
/*统计审核结果*/
set @NoMeetNum=@NoMeetNum+1
UPDATE SellOpen SET ifchecked = 'f',In_Num=@ProNum  WHERE (id = @id)                 
if @@error<>0 goto GSP_ROLLBACK
if @pricetype=1 --按批发价配送
begin
if @ProNum>=@jian_num
begin
DECLARE id_Sum_Num_Barn CURSOR FOR SELECT LTRIM(RTRIM(pihao)) AS pihao, Sum_Num AS Sum_Num_Barn_pihao,pi_price AS Barn_Dan_Price,dbo.GetZkPrice(Dan_Price, zk) AS Dan_Price_Barn,AvailabilityTime AS Barn_AvailabilityTime FROM Barn  WHERE (rtrim(ProBarcode)=rtrim(@ProBarcode)) AND (Sum_Num > 0) ORDER BY ROUND(Sum_Num / @jian_num, 0) desc, AvailabilityTime
end
else
begin
DECLARE id_Sum_Num_Barn CURSOR FOR SELECT LTRIM(RTRIM(pihao)) AS pihao, Sum_Num AS Sum_Num_Barn_pihao,pi_price AS Barn_Dan_Price,dbo.GetZkPrice(Dan_Price, zk) AS Dan_Price_Barn,AvailabilityTime AS Barn_AvailabilityTime FROM Barn  WHERE (rtrim(ProBarcode)=rtrim(@ProBarcode)) AND (Sum_Num > 0) ORDER BY  AvailabilityTime, ID
end
end
else    --按进价配送
begin 
if @ProNum>=@jian_num
begin
DECLARE id_Sum_Num_Barn CURSOR FOR SELECT LTRIM(RTRIM(pihao)) AS pihao, Sum_Num AS Sum_Num_Barn_pihao,dbo.GetZkPrice(Dan_Price, zk) AS Barn_Dan_Price,dbo.GetZkPrice(Dan_Price, zk) AS Dan_Price_Barn,AvailabilityTime AS Barn_AvailabilityTime FROM Barn  WHERE (rtrim(ProBarcode)=rtrim(@ProBarcode)) AND (Sum_Num > 0) ORDER BY ROUND(Sum_Num / @jian_num, 0) desc, AvailabilityTime
end
else
begin
DECLARE id_Sum_Num_Barn CURSOR FOR SELECT LTRIM(RTRIM(pihao)) AS pihao, Sum_Num AS Sum_Num_Barn_pihao,dbo.GetZkPrice(Dan_Price, zk) AS Barn_Dan_Price,dbo.GetZkPrice(Dan_Price, zk) AS Dan_Price_Barn,AvailabilityTime AS Barn_AvailabilityTime FROM Barn  WHERE (rtrim(ProBarcode)=rtrim(@ProBarcode)) AND (Sum_Num > 0) ORDER BY  AvailabilityTime, ID
end
end 
/*打开游标*/
OPEN id_Sum_Num_Barn FETCH id_Sum_Num_Barn INTO  @pihao,@Sum_Num_Barn_pihao,@Barn_Dan_Price,@Dan_Price_Barn,@Barn_AvailabilityTime
--if @@error<>0 goto GSP_ROLLBACK
while(@@fetch_status=0)
begin
if (@Sum_Num_Barn_pihao<@ProNum)
begin
set @ProNum=@ProNum-@Sum_Num_Barn_pihao  /*减少数量*/
INSERT INTO SellOpen (SheetID,CreateDate,BranchCode,inputcode,SellOpenType,ProBarcode,Sum_Num,In_Num,Dan_Price_barn,Dan_Price,Pei_Price,pihao,ifchecked) SELECT SheetID,CreateDate,BranchCode,inputcode,SellOpenType,ProBarcode,Sum_Num,@Sum_Num_Barn_pihao as In_Num,@Dan_Price_Barn as Dan_Price_barn ,@Barn_Dan_Price,Pei_Price,@pihao as pihao,'t' as ifchecked FROM SellOpen WHERE (id = @id)
if @@error<>0 goto GSP_ROLLBACK
/*统计审核结果*/
set @MeetNum=@MeetNum+1
UPDATE SellOpen SET In_Num = @ProNum  WHERE (id = @id)  /*修改记录*/
if @@error<>0 goto GSP_ROLLBACK
UPDATE Barn SET Sum_Num = Sum_Num-@Sum_Num_Barn_pihao  WHERE (rtrim(ProBarcode) = @ProBarcode) AND (rtrim(pihao) = @pihao)
if @@error<>0 goto GSP_ROLLBACK
/* 审核入库记录*/
set @Sum_Num=(SELECT count(*) as  Sum_Num  FROM Barn_Branch  WHERE rtrim(ProBarcode)=rtrim(@ProBarcode)  AND rtrim(pihao)=rtrim(@pihao) AND rtrim(BranchCode)=rtrim(@BranchCode)) 
 
if (@Sum_Num>0)
begin
UPDATE Barn_Branch SET  Sum_Num = Sum_Num +@Sum_Num_Barn_pihao,Dan_Price=(Sum_Num*Dan_Price+@Barn_Dan_Price*@Sum_Num_Barn_pihao)/(Sum_Num +@Sum_Num_Barn_pihao)  WHERE (rtrim(ProBarcode) = @ProBarcode) AND (rtrim(pihao) = @pihao)  AND rtrim(BranchCode)=rtrim(@BranchCode)
if @@error<>0 goto GSP_ROLLBACK
end
else
begin
INSERT INTO Barn_Branch (inputDate,inputcode,BranchCode,ProBarcode,Dan_Price,Pei_Price,pihao,Sum_Num,AvailabilityTime) SELECT CreateDate,inputcode,BranchCode,ProBarcode,@Barn_Dan_Price,Pei_Price,@pihao,@Sum_Num_Barn_pihao as In_Num,@Barn_AvailabilityTime FROM SellOpen WHERE (id = @id)
if @@error<>0 goto GSP_ROLLBACK
end 
end
else
begin
UPDATE SellOpen SET pihao = @pihao,Dan_Price=@Barn_Dan_Price,Dan_Price_barn=@Dan_Price_Barn,ifchecked = 't'  WHERE (id=@id)
if @@error<>0 goto GSP_ROLLBACK
/*统计审核结果*/
set @MeetNum=@MeetNum+1
UPDATE Barn SET Sum_Num = Sum_Num-@ProNum  WHERE (rtrim(ProBarcode) = @ProBarcode) AND (rtrim(pihao) = @pihao)
if @@error<>0 goto GSP_ROLLBACK
/* 审核入库记录*/
UPDATE SellOpen SET ifchecked = 't'  WHERE (id=@id)
if @@error<>0 goto GSP_ROLLBACK
set @Sum_Num=(SELECT count(*) as  Sum_Num  FROM Barn_Branch  WHERE rtrim(ProBarcode)=rtrim(@ProBarcode)  AND rtrim(pihao)=rtrim(@pihao) AND rtrim(BranchCode)=rtrim(@BranchCode)) 

if (@Sum_Num>0)
begin
UPDATE Barn_Branch SET  Sum_Num = Sum_Num +@ProNum,Dan_Price=(Sum_Num*Dan_Price+@Barn_Dan_Price*@ProNum)/(Sum_Num +@ProNum)  WHERE (rtrim(ProBarcode) = @ProBarcode) AND (rtrim(pihao) = @pihao)  AND rtrim(BranchCode)=rtrim(@BranchCode)
if @@error<>0 goto GSP_ROLLBACK
end
else
begin
INSERT INTO Barn_Branch (inputDate,inputcode,BranchCode,ProBarcode,Dan_Price,Pei_Price,pihao,Sum_Num,AvailabilityTime) SELECT CreateDate,inputcode,BranchCode,ProBarcode,@Barn_Dan_Price,Pei_Price,@pihao,@ProNum as In_Num,@Barn_AvailabilityTime FROM SellOpen WHERE (id = @id)
if @@error<>0 goto GSP_ROLLBACK
end 
break
end
FETCH id_Sum_Num_Barn INTO  @pihao,@Sum_Num_Barn_pihao,@Barn_Dan_Price,@Dan_Price_Barn,@Barn_AvailabilityTime
--if @@error<>0 goto GSP_ROLLBACK
end
/*记录审核条数*/
set @CheckNum=@CheckNum+1
/*删除SellOpen中一个批号库存不够的记录*/
close id_Sum_Num_Barn
deallocate id_Sum_Num_Barn
   end
commit tran
SET NOCOUNT  OFF 
goto GSP_NEXT

解决方案 »

  1.   


    /*错误处理*/
    GSP_ROLLBACK:
    insert into Errorlog (sqlstr,result) values(@DataID+'|'+@SheetID+'|'+@checker+'|'+@pricetype,'error1')
    rollback tran 
    insert into Errorlog (sqlstr,result) values(@DataID+'|'+@SheetID+'|'+@checker+'|'+@pricetype,'error')
    /*设置状态*/
    update Danju_SellOpen set checking='f' where sheetid=@SheetID
    /*生成未核单据*/
    DELETE  FROM Danju_SellOpen  WHERE (SheetID=replace(@SheetID,'-L','')+'-L' )
    insert into Danju_SellOpen (SheetID,CreateDate,CheckDate,BranchCode,inputcode,checker,SellOpenType,Dan_Type,Dan_Sum_je,Dan_Sum_Num,ifchecked,ifshow) select replace(@SheetID,'-L','') +'-L' AS SheetID,CreateDate,getdate() as CheckDate,BranchCode,inputcode,checker,'xsd' as SellOpenType,'SellOpen' as Dan_Type,(select sum(isnull(Dan_Price*In_Num,0)) from SellOpen where  SheetID=@SheetID and ifchecked = 'f')  AS Dan_Sum_je,(select sum(isnull(In_Num,0)) from SellOpen where  SheetID=@SheetID and ifchecked = 'f')  AS  Dan_Sum_Num,'f' as ifchecked,'f' as ifshow from Danju_SellOpen WHERE (SheetID=replace(@SheetID,'-L',''))
    /*修改未核的记录的单据编号*/
    UPDATE SellOpen SET SheetID =replace(@SheetID,'-L','')+'-L'  WHERE (SheetID=@SheetID)  and (ifchecked = 'f')  
    /*修改已核的记录的单据编号*/
    UPDATE SellOpen SET SheetID =replace(@SheetID,'-L','')  WHERE (SheetID=@SheetID)  and (ifchecked = 't' or ifchecked = '0'  or ifchecked = '1' )  
    /*修改已核单据的汇总值并把单据设置成已核*/
    UPDATE Danju_SellOpen SET ifchecked = 't' ,checking='1'  , CheckDate=getdate(),checker= @checker,Dan_Sum_je =(select sum(isnull(Dan_Price*In_Num,0)) from SellOpen where  SheetID=replace(@SheetID,'-L','') and ifchecked = 't'),Dan_Sum_Num=(select sum(isnull(In_Num,0)) from SellOpen where  SheetID=replace(@SheetID,'-L','') and ifchecked = 't')  WHERE (SheetID=replace(@SheetID,'-L',''))
    update SellOpen  set SellOpen .checkdate= Danju_SellOpen .checkdate  from Danju_SellOpen  where Danju_SellOpen .sheetid=SellOpen .sheetid and Danju_SellOpen .sheetid=replace(@SheetID,'-L','')  and SellOpen .sheetid=replace(@SheetID,'-L','')  and  Danju_SellOpen .ifchecked='t'
    set @result='checkloss'
    close id_Sum_Num
    deallocate id_Sum_Num
    return
    GSP_NEXT: /*正常则读取游标*/
    FETCH id_Sum_Num INTO  @id,@ProBarcode,@ProNum,@BranchCode
    end
    close id_Sum_Num
    deallocate id_Sum_Num
    /* 审核单据*/
    set @SheetNum=(SELECT COUNT(id) AS SheetNum FROM SellOpen where SheetID=@SheetID and  ifchecked = 'f'  )
    if (@SheetNum=0) and (right(@SheetID,2)='-L')   --非一次审完
    begin
    /*修改临时单据记录*/
    UPDATE SellOpen SET SheetID =replace(@SheetID,'-L','')  WHERE (SheetID=@SheetID)
    /*删除临时单据记录*/
    DELETE  FROM Danju_SellOpen  WHERE  (SheetID=replace(@SheetID,'-L','')+'-L' )
    /*修改单据汇总*/
    UPDATE Danju_SellOpen SET ifchecked = 't' ,checking='1' ,checker= @checker,CheckDate=getdate(),Dan_Sum_je =(select sum(isnull(Dan_Price*In_Num,0)) from SellOpen where  SheetID=replace(@SheetID,'-L','') and ifchecked = 't'),Dan_Sum_Num=(select sum(isnull(In_Num,0)) from SellOpen where  SheetID=replace(@SheetID,'-L','') and ifchecked = 't')  WHERE (SheetID=replace(@SheetID,'-L',''))
    end
    if (@SheetNum=0) and (right(@SheetID,2)<>'-L')  --一次审完
    begin
    /*修改单据状态*/
    UPDATE Danju_SellOpen SET ifchecked = 't',checking='1'  ,checker= @checker,CheckDate=getdate(),Dan_Sum_je =(select sum(isnull(Dan_Price*In_Num,0)) from SellOpen where  SheetID=@SheetID AND  ifchecked = 't'),Dan_Sum_Num=(select sum(isnull(In_Num,0)) from SellOpen where  SheetID=@SheetID AND  ifchecked = 't')  WHERE (SheetID=@SheetID)
    end 
    if (@SheetNum>0)   --一次未审完
    begin
    /*生成未核单据*/
    DELETE  FROM Danju_SellOpen  WHERE (SheetID=replace(@SheetID,'-L','')+'-L' )
    insert into Danju_SellOpen (SheetID,CreateDate,CheckDate,BranchCode,inputcode,checker,SellOpenType,Dan_Type,Dan_Sum_je,Dan_Sum_Num,ifchecked,ifshow) select replace(@SheetID,'-L','') +'-L' AS SheetID,CreateDate,getdate() as CheckDate,BranchCode,inputcode,checker,'xsd' as SellOpenType,'SellOpen' as Dan_Type,(select sum(isnull(Dan_Price*In_Num,0)) from SellOpen where  SheetID=@SheetID and ifchecked = 'f')  AS Dan_Sum_je,(select sum(isnull(In_Num,0)) from SellOpen where  SheetID=@SheetID and ifchecked = 'f')  AS  Dan_Sum_Num,'f' as ifchecked,'f' as ifshow from Danju_SellOpen WHERE (SheetID=replace(@SheetID,'-L',''))
    /*修改未核的记录的单据编号*/
    UPDATE SellOpen SET SheetID =replace(@SheetID,'-L','')+'-L'  WHERE (SheetID=@SheetID)  and (ifchecked = 'f')  
    /*修改已核的记录的单据编号*/
    UPDATE SellOpen SET SheetID =replace(@SheetID,'-L','')  WHERE (SheetID=@SheetID)  and (ifchecked = 't' or ifchecked = '0'  or ifchecked = '1' )  
    /*修改已核单据的汇总值并把单据设置成已核*/
    UPDATE Danju_SellOpen SET ifchecked = 't' ,checking='1'  , CheckDate=getdate(),checker= @checker,Dan_Sum_je =(select sum(isnull(Dan_Price*In_Num,0)) from SellOpen where  SheetID=replace(@SheetID,'-L','') and ifchecked = 't'),Dan_Sum_Num=(select sum(isnull(In_Num,0)) from SellOpen where  SheetID=replace(@SheetID,'-L','') and ifchecked = 't')  WHERE (SheetID=replace(@SheetID,'-L',''))
    end
    /*记录审核时间*/ 
    declare @dt as  datetime
    set @dt=getdate()
    UPDATE Danju_SellOpen SET CheckDate=@dt  where  SheetID=replace(@SheetID,'-L','')
    UPDATE SellOpen SET CheckDate=@dt  where  SheetID=replace(@SheetID,'-L','')
    set @result=CAST(@CheckNum AS VARCHAR(10))+'|'+cast(@MeetNum as varchar(10))+'|'+cast(@NoMeetNum as varchar(10))+'|'+cast(@ZeroNum as varchar(10))
    end  
        end
        else
    set @result='checked'
    GO 
      

  2.   

    这是一个商品出库审核过程,按有效期先进先出,多批号处理。
    具体步骤是:先将单据设为正在审核中(checking=t),这样不允许别人对此单操作。
    然后逐条审核,门店要货数量不足时仓库有多少开多少,足时,如果一个批号不够(门店要货单并没有批号),开出多个批号。最后checking=1,既已审核过。
    现在问题是老是出现正在审核中,就是说checking=t。
    错误处理没有用。
    出现这种错误时过程没有返回值。
    拜托拜托。
      

  3.   

    还有几点我先说清,大家容易理解些,
    if @pricetype=1 --按批发价配送
    用户可以选择按批发价(pi_price)配送与进价(dan_price)配送。
    if @ProNum>=@jian_num
    门店要货数量大于一件时,按整件发。
    要货时批号是空的。
    配送时自动按批号配送。Barn 仓库库存表
    Barn_Branch 门店库存表
    Danju_SellOpen 门店要货单据表
    SellOpen 门店要货明细表
    Product 商品表
      

  4.   

    Product 商品表
    CREATE TABLE [Product] (
    [id] [int] IDENTITY (1, 1) NOT NULL ,
    [Barcode] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,--商品编号 对应其它表里的probarcode
    [Barcode_new] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
    [Name] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
    [Code] [varchar] (30) COLLATE Chinese_PRC_CI_AS NULL ,
    [Name_English] [varchar] (200) COLLATE Chinese_PRC_CI_AS NULL ,
    [SimpleName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [SimpleNameCode] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [Specs] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [jian_num] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL CONSTRAINT [DF_Product_jian_num] DEFAULT (0),--每件数 就是一件有多少个
    [Type] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [ProductUnit] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [Manufacturers] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
    [BatchMark] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [bz_num] [int] NULL CONSTRAINT [DF_Product_bz_num] DEFAULT (0),
    [Dan_Price] [decimal](18, 4) NULL CONSTRAINT [DF_Product_Dan_Price] DEFAULT (0),--进价
    [Pei_Price] [decimal](18, 4) NULL CONSTRAINT [DF_Product_Pei_Price] DEFAULT (0),--苓售价
    [Pi_Price] [decimal](18, 4) NULL CONSTRAINT [DF_Product_Pi_Price] DEFAULT (0),--批发价
    [jiliang] [varchar] (500) COLLATE Chinese_PRC_CI_AS NULL ,
    [zhiliang] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [gongneng] [varchar] (500) COLLATE Chinese_PRC_CI_AS NULL ,
    [BarnCode] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [Up_Num] [int] NULL CONSTRAINT [DF_Product_Up_Num] DEFAULT (0),
    [Down_Num] [int] NULL CONSTRAINT [DF_Product_Down_Num] DEFAULT (0),
    [Zc_Num] [int] NULL CONSTRAINT [DF_Product_Zc_Num] DEFAULT (0),
    [AheadDay] [int] NULL CONSTRAINT [DF_Product_AheadDay] DEFAULT (0),
    [if_jk] [varchar] (2) COLLATE Chinese_PRC_CI_AS NULL ,
    [if_eljs] [varchar] (2) COLLATE Chinese_PRC_CI_AS NULL ,
    [if_xt] [varchar] (2) COLLATE Chinese_PRC_CI_AS NULL ,
    [otc_rx] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
    [CreateDate] [datetime] NULL CONSTRAINT [DF_Product_CreateDate] DEFAULT (getdate()),
    [fanwei] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [ProState] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [inputcode] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
    [ifling] [varchar] (1) COLLATE Chinese_PRC_CI_AS NULL CONSTRAINT [DF_Product_ifling] DEFAULT (0),
    [map_barcode] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
    [tiaoma] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [Rx_Measure] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL CONSTRAINT [DF_Product_Rx_Measure_1] DEFAULT ('0'),
    [Storage_Condition] [varchar] (500) COLLATE Chinese_PRC_CI_AS NULL ,
    [Conserve_Mode] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [ifzhong] [int] NULL ,
    CONSTRAINT [PK_Product] PRIMARY KEY  CLUSTERED 
    (
    [id]
    ) WITH  FILLFACTOR = 90  ON [PRIMARY] 
    ) ON [PRIMARY]
    GO
    Barn 仓库库存表 
    CREATE TABLE [Barn] (
    [id] [int] IDENTITY (1, 1) NOT NULL ,
    [inputDate] [datetime] NULL CONSTRAINT [DF_Barn_inputDate] DEFAULT (getdate()),
    [Departmentcode] [char] (15) COLLATE Chinese_PRC_CI_AS NULL ,
    [inputcode] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
    [ProviderBh] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [BalanceMode] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [StorageInType] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [ProBarcode] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,--商品编号
    [BarnCode] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
    [Dan_Price] [decimal](18, 4) NULL CONSTRAINT [DF_Barn_Dan_Price] DEFAULT (0),--进价
    [Pei_Price] [decimal](18, 4) NULL CONSTRAINT [DF_Barn_Pei_Price] DEFAULT (0),--零售价
    [Pi_Price] [decimal](18, 4) NULL CONSTRAINT [DF_Barn_Pi_Price] DEFAULT (0),--批发价
    [pihao] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,--批号
    [AvailabilityTime] [datetime] NULL ,--效期
    [Sum_Num] [float] NULL CONSTRAINT [DF_Barn_Sum_Num] DEFAULT (0),--数量
    [zk] [decimal](18, 2) NULL CONSTRAINT [DF_Barn_zk] DEFAULT (0),--折扣 
    [memo] [varchar] (200) COLLATE Chinese_PRC_CI_AS NULL ,
    [ifpan] [varchar] (1) COLLATE Chinese_PRC_CI_AS NULL ,
    [ifmaintain] [varchar] (1000) COLLATE Chinese_PRC_CI_AS NULL ,
    [ifpiao] [varchar] (1) COLLATE Chinese_PRC_CI_AS NULL CONSTRAINT [DF_Barn_ifpiao_1] DEFAULT (0),
    CONSTRAINT [PK_Barn] PRIMARY KEY  CLUSTERED 
    (
    [id]
    ) WITH  FILLFACTOR = 90  ON [PRIMARY] 
    ) ON [PRIMARY]
    GO
      

  5.   

     Barn_Branch 门店库存表
    CREATE TABLE [Barn_Branch] (
    [id] [int] IDENTITY (1, 1) NOT NULL ,
    [inputDate] [datetime] NULL CONSTRAINT [DF_Barn_Branch_putDate] DEFAULT (getdate()),
    [inputcode] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
    [BranchCode] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,--门店编号
    [ProBarcode] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,--商品编号
    [Pei_Price] [decimal](19, 4) NULL CONSTRAINT [DF_Barn_Branch_Pei_Price] DEFAULT (0),--苓售价
    [Dan_Price] [decimal](19, 4) NULL CONSTRAINT [DF_Barn_Branch_Dan_Price] DEFAULT (0),--门店进价
    [pihao] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,--批号
    [Sum_Num] [int] NULL ,--数量
    [AvailabilityTime] [datetime] NULL ,--效期
    [ifpan] [varchar] (1) COLLATE Chinese_PRC_CI_AS NULL ,
    [ifpiao] [varchar] (1) COLLATE Chinese_PRC_CI_AS NULL CONSTRAINT [DF_Barn_Branch_ifpiao_1] DEFAULT (0),
    [ifweb] [varchar] (1) COLLATE Chinese_PRC_CI_AS NULL CONSTRAINT [DF_Barn_Branch_ifweb] DEFAULT ('t'),
    [ifbedit] [varchar] (1) COLLATE Chinese_PRC_CI_AS NULL CONSTRAINT [DF_Barn_Branch_ifbedit] DEFAULT ('f'),
    CONSTRAINT [PK_Barn_Branch] PRIMARY KEY  CLUSTERED 
    (
    [id]
    ) WITH  FILLFACTOR = 90  ON [PRIMARY] 
    ) ON [PRIMARY]
    GO
    Danju_SellOpen 门店要货单据表 CREATE TABLE [Danju_SellOpen] (
    [id] [int] IDENTITY (1, 1) NOT NULL ,
    [SheetID] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [CreateDate] [datetime] NULL CONSTRAINT [DF_Danju_SellOpen_CreateDate] DEFAULT (getdate()),--制单日期
    [CheckDate] [datetime] NULL CONSTRAINT [DF_Danju_SellOpen_CheckDate] DEFAULT (getdate()),--审核日期
    [BranchCode] [char] (15) COLLATE Chinese_PRC_CI_AS NULL ,--门店编号
    [inputcode] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,--制单人编号
    [checker] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,--审核人编号
    [SellOpenType] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [Dan_Type] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [Dan_Sum_je] [decimal](18, 2) NULL CONSTRAINT [DF_Danju_Branch_Dan_Sum_je] DEFAULT (0),--单据总金额
    [Dan_Sum_Num] [int] NULL ,--单据总数量
    [ifchecked] [char] (1) COLLATE Chinese_PRC_CI_AS NULL CONSTRAINT [DF_Danju_Branch_ifchecked] DEFAULT ('f'),--是否审核
    [ifshow] [varchar] (1) COLLATE Chinese_PRC_CI_AS NULL CONSTRAINT [DF_Danju_SellOpen_ifshow] DEFAULT ('f'),
    [Protype] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
    [checking] [varchar] (1) COLLATE Chinese_PRC_CI_AS NULL CONSTRAINT [DF_Danju_SellOpen_checking] DEFAULT ('f'),--单据状态是否正在审核中
    CONSTRAINT [PK_Danju_Branch] PRIMARY KEY  CLUSTERED 
    (
    [id]
    ) WITH  FILLFACTOR = 90  ON [PRIMARY] 
    ) ON [PRIMARY]
    GOSellOpen 门店要货明细表
    CREATE TABLE [SellOpen] (
    [id] [int] IDENTITY (1, 1) NOT NULL ,
    [SheetID] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,--单据号
    [CreateDate] [datetime] NULL CONSTRAINT [DF_SellOpen_CreateDate] DEFAULT (getdate()),--制单日期
    [CheckDate] [datetime] NULL CONSTRAINT [DF_SellOpen_CheckDate] DEFAULT (getdate()),--审核日期
    [BranchCode] [char] (15) COLLATE Chinese_PRC_CI_AS NULL ,--门店编号
    [inputcode] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,--制单人编号
    [SellOpenType] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [ProBarcode] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,--商品编号
    [Sum_Num] [int] NULL CONSTRAINT [DF_SellOpen_Sum_Num] DEFAULT (0),--制单时门店库存
    [In_Num] [int] NULL CONSTRAINT [DF_SellOpen_In_Num] DEFAULT (0),--要货数量,
    [Dan_Price_Barn] [decimal](18, 4) NULL CONSTRAINT [DF_SellOpen_Dan_Price1] DEFAULT (0),--仓库进价
    [Dan_Price] [decimal](18, 4) NULL CONSTRAINT [DF_SellOpen_Dan_Price] DEFAULT (0),--本次配送价
    [Pei_Price] [decimal](18, 4) NULL CONSTRAINT [DF_SellOpen_Pei_Price] DEFAULT (0),--苓售价
    [pihao] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,--批号
    [ifchecked] [char] (1) COLLATE Chinese_PRC_CI_AS NULL CONSTRAINT [DF_SellOpen_ifchecked] DEFAULT ('f'),
    [Protype] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
    CONSTRAINT [PK_SellOpen] PRIMARY KEY  CLUSTERED 
    (
    [id]
    ) WITH  FILLFACTOR = 90  ON [PRIMARY] 
    ) ON [PRIMARY]
    GO
      

  6.   

    目的:审核出错时只回滚出错的那一个商品,前面正常审核通过的重新汇总。
    ----------------
    没见过这么玩的,严重错误,Rollback未提交的事务,SQL立马就中止存储过程了,轮不到你在出错后,进行一大堆的现场处理。
    唯一的办法就是一次审一个SheetID——我觉得这算效率低的了,如果是我,我会一张表一起审。如果你非要这么干,那就把审明细的部分,写成一个独立的存储过程,出了错也好追踪。
    另外,你不要搞临时表单这种东西了,所谓的临时表单,是可以通过查询出来的。我没法看下去了,你好好查查,我觉得很99%的可能是SheetID的问题,一会SheetID-L,一会SheetID。你自己模拟个错误出来追踪一下。
      

  7.   

                            /*错误处理*/
                            GSP_ROLLBACK:
                                    insert into Errorlog (sqlstr,result) values(@DataID+'|'+@SheetID+'|'+@checker+'|'+@pricetype,'error1')
                                    rollback tran 
                                    insert into Errorlog (sqlstr,result) values(@DataID+'|'+@SheetID+'|'+@checker+'|'+@pricetype,'error')还有你这里将error1回滚了。