UPDATE [oldk3seorder0714] SET [专票金额1]=NULL,[普票金额1]=NULL; --TRUNCATE TABLE [ZZZ_ZZ_FaPiaoLosed]; DECLARE @FDATE DATETIME,@FSourceBillNo NVARCHAR(200),@FSourceTranType INT,@FSourceInterId INT ,@F_contractnumber NVARCHAR(2000) ,@F_contractnumber2 NVARCHAR(2000),@F_contractnumber3 NVARCHAR(2000),@F_contractnumber4 NVARCHAR(2000),@FOrderInterID INT,@FOrderEntryID INT,@frob INT,@FNumber NVARCHAR(200),@FAuxQty DECIMAL(18,2) ,@amount DECIMAL(18,2),@hexiao DECIMAL(18,2),@FTranType INT,@saleBill NVARCHAR(200),@ifok INT=0,@id INT,@fid1 INT ,@fid2 INT,@row INT=0,@row2 INT=0,@row3 INT=0,@id2 INT ,@zhuanPiao DECIMAL(18,2),@PuPiao DECIMAL(18,2),@qty INT ; -- 1. 声明游标 DECLARE cursor_name2 CURSOR FOR SELECT b.FNumber,FAuxQty [数量] ,a.FStdAmountIncludeTax [价税合计(本位币)] ,aa.FHeadSelfI0456 [合同号] ,frob,aa.FTranType,ddd.[FInterID] ,ddd.[FEntryID] FROM k3.AIS20130323140156.dbo.icsaleentry a LEFT JOIN k3.AIS20130323140156.dbo.icsale aa ON a.FInterID=aa.FInterID LEFT JOIN k3.AIS20130323140156.dbo.t_icitem b ON a.FItemID=b.FItemID INNER JOIN [AIS2025].[dbo].[ZZZ_ZZ_FaPiaoLosed] ddd ON a.FInterID=ddd.[FInterID] AND a.[FEntryID]=ddd.[FEntryID] INNER JOIN (SELECT DISTINCT 合同号 FROM [AIS20250707104732].[dbo].[oldk3seorder0714]) vv ON aa.FHeadSelfI0456=vv.合同号 -- AND vv.物料编码= b.FNumber WHERE a.FStdAmountIncludeTax !=0 ORDER BY a.FInterID,b.FNumber OPEN cursor_name2; FETCH NEXT FROM cursor_name2 INTO @FNumber,@FAuxQty,@amount,@F_contractnumber ,@frob,@FTranType,@fid1,@fid2 WHILE @@FETCH_STATUS = 0 BEGIN SELECT @row=@row+1,@row2=0; SELECT @ifok=0,@id=0; DECLARE cursor_name3 CURSOR FOR SELECT [id],[合同号],[数量],[专票金额],[普票金额] FROM [oldk3seorder0714] WHERE [合同号]=@F_contractnumber AND [物料编码]=@FNumber OPEN cursor_name3; FETCH NEXT FROM cursor_name3 INTO @id2 ,@F_contractnumber,@qty,@zhuanPiao,@PuPiao WHILE @@FETCH_STATUS = 0 BEGIN SET @row2=@row2+1; PRINT CONCAT('id=',@id2,' 第几行: ',@row,' FInterID: ',@fid1,' FEntryID: ',@fid2,' [价税合计(本位币)] ',@amount); SELECT @row3=COUNT(1) FROM [oldk3seorder0714] WHERE [合同号]=@F_contractnumber AND [物料编码]=@FNumber PRINT CONCAT('update id=',@id2,' @row2= ',@row2,' @row3=',@row3,' FTranType: ',@FTranType,' @zhuanPiao: ',@zhuanPiao,' @PuPiao ',@PuPiao ,' [价税合计(本位币)] ',@amount); IF(@amount>0) BEGIN -- @FTranType 80 专票 86 普票 602 专票 601 普票 IF(@FTranType IN (80,602) AND @id>0) BEGIN UPDATE [oldk3seorder0714] SET [专票金额1]=ISNULL([专票金额1],0)+ @amount WHERE id=@id2 end IF(@FTranType IN (86,601) AND @id>0) BEGIN UPDATE [oldk3seorder0714] SET [普票金额1]=ISNULL([专票金额1],0)+ @amount WHERE id=@id2 end SELECT @amount=0; END ELSE IF(@amount<0) BEGIN IF(@row2<@row3) BEGIN -- @FTranType 80 专票 86 普票 602 专票 601 普票 IF(@FTranType IN (80,602) ) BEGIN IF(ABS(@amount)>= ABS(@zhuanPiao)) begin SELECT @amount=@amount+ABS(@zhuanPiao) UPDATE [oldk3seorder0714] SET [专票金额1]=ISNULL([专票金额1],0) -ABS(@zhuanPiao) WHERE id=@id2; END ELSE begin UPDATE [oldk3seorder0714] SET [专票金额1]=ISNULL([专票金额1],0)+ @amount WHERE id=@id2; end end IF(@FTranType IN (86,601) ) BEGIN IF(ABS(@amount)>= ABS(@PuPiao)) BEGIN SELECT @amount=@amount+ABS(@PuPiao) UPDATE [oldk3seorder0714] SET [普票金额1]=ISNULL([普票金额1],0) -ABS(@PuPiao) WHERE id=@id2 END ELSE begin UPDATE [oldk3seorder0714] SET [普票金额1]=ISNULL([普票金额1],0)+ @amount WHERE id=@id2 end end end IF(@row2=@row3) BEGIN -- @FTranType 80 专票 86 普票 602 专票 601 普票 IF(@FTranType IN (80,602) ) BEGIN UPDATE [oldk3seorder0714] SET [专票金额1]=ISNULL([专票金额1],0)+@amount WHERE id=@id2 end IF(@FTranType IN (86,601) ) BEGIN UPDATE [oldk3seorder0714] SET [普票金额1]=ISNULL([普票金额1],0)+@amount WHERE id=@id2 end end end -- 获取下一条记录 FETCH NEXT FROM cursor_name3 INTO @id2 ,@F_contractnumber,@qty,@zhuanPiao,@PuPiao; END -- 4. 关闭游标 CLOSE cursor_name3; -- 5. 释放游标资源 DEALLOCATE cursor_name3; -- 获取下一条记录 FETCH NEXT FROM cursor_name2 INTO @FNumber,@FAuxQty,@amount,@F_contractnumber ,@frob,@FTranType,@fid1,@fid2; END -- 4. 关闭游标 CLOSE cursor_name2; -- 5. 释放游标资源 DEALLOCATE cursor_name2;