由于业务流程需要在入库前做销售单(草稿,并未审核过账),并且收款(实际为预收款) 或者在生产完工前做领料单(草稿,并未审核过账),假设实际库存为0,允许负虚拟库存保存草稿. 接着在完工入库或者报溢入库后(可能是第二天),审核过账前一张销售的或者领料单,这时候是有 实际库存的,所以能过账成功,但是会造成库存明细表查询销售单或者领料单对应日期的结存库存 为负数,可能会影响成本的计算.所以需要用下面代码修复,原理为自动修改过账的销售的和领料单 单据日期/索引,并删除原来旧单据,对明细和其他无影响.
--gmT9top22 单据重写修复vchcode不是最新问题 -- 判断要创建的存储过程名是否存在 if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[_reovrridebill]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo]._reovrridebill -- SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER OFF GO create PROCEDURE [dbo]._reovrridebill ( -- 重写 单据,修改vchcode为最大 -- 单据type in 11,172 @Vchcode Numeric(18,0) , @Vchtype int ) AS SET NOCOUNT ON if(@Vchtype not in (11,172)) return CREATE TABLE #Tmp_dlyndx_new( Vchcode numeric(10, 0) NOT NULL, DATE nvarchar(10) NULL, NUMBER nvarchar(60) NULL, VchType int NOT NULL, summary nvarchar(256) NULL, btypeid nvarchar(25) NULL, etypeid nvarchar(25) NULL, ktypeid nvarchar(25) NULL, ktypeid2 nvarchar(25) NULL, ifcheck nvarchar(50) NULL, period int NOT NULL, RedWord nvarchar(1) NULL, RedOld nvarchar(1) NULL, InputNo nvarchar(100) NULL, draft int NOT NULL, Total numeric(18, 2) NOT NULL, GatheringDate nvarchar(10) NULL, projectid nvarchar(25) NULL, ETypeID2 nvarchar(25) NULL, SourceVchcode int NOT NULL, SourceVchType int NOT NULL, BillTotal numeric(18, 2) NOT NULL, WtypeID nvarchar(50) NULL, Compact nvarchar(100) NULL, UserDefined01 nvarchar(50) NULL, UserDefined02 nvarchar(50) NULL, UserDefined03 nvarchar(50) NULL, MatchQty numeric(18, 4) NOT NULL, AuditLeveal smallint NOT NULL, BTypeID2 nvarchar(25) NULL, ProjectId2 nvarchar(50) NULL, Pubufts timestamp NULL, SaveTime datetime NULL, DifAType int NOT NULL, Appoint tinyint NOT NULL, Acc int NOT NULL, NoteCode nvarchar(50) NOT NULL, isPreARAP tinyint NOT NULL, InvoiceType tinyint NOT NULL, CancelType tinyint NOT NULL, SettleType tinyint NOT NULL, NormCost tinyint NOT NULL, UserDefined04 nvarchar(50) NOT NULL, UserDefined05 nvarchar(50) NOT NULL, UserDefined06 nvarchar(50) NOT NULL, UserDefined07 nvarchar(50) NOT NULL, UserDefined08 nvarchar(50) NOT NULL, UserDefined09 nvarchar(50) NOT NULL, UserDefined10 nvarchar(50) NOT NULL, UserDefined11 nvarchar(10) NOT NULL, UserDefined12 nvarchar(10) NOT NULL, UserDefined13 nvarchar(10) NOT NULL, UserDefined14 numeric(18, 8) NOT NULL, UserDefined15 numeric(18, 8) NOT NULL, UserDefined16 numeric(18, 8) NOT NULL, SettleBtypeId nvarchar(50) NOT NULL, IsCheckOut bit NOT NULL, ModifyPerson nvarchar(100) NOT NULL, ModifyDate datetime NULL, LastYear tinyint NOT NULL, BuildType int NOT NULL, BuildNo int NOT NULL, IsAutoBuild tinyint NOT NULL, InstockBackSign tinyint NOT NULL, AuditDate datetime NULL, mtypeid nvarchar(50) NOT NULL, BillType int NOT NULL, IsRejected bit NOT NULL, ParVchtype int NOT NULL, DataCheck nvarchar(256) NULL) ON [PRIMARY] -- 可无 CREATE TABLE dbo.#Tmp_T_CW_IntfDlyndx_new( Vchcode int NOT NULL, ModeNo tinyint NOT NULL, OriginVchcode int NOT NULL, Date nvarchar(10) NULL, VchType int NOT NULL, summary nvarchar(256) NULL, counttype int NOT NULL, VoucherNo int NOT NULL, period int NOT NULL, RedWord nvarchar(1) NULL, RedOld nvarchar(1) NULL, checke nvarchar(25) NULL, accounte nvarchar(25) NULL, InputNo nvarchar(100) NULL, draft tinyint NOT NULL, attach int NOT NULL, Total numeric(18, 2) NOT NULL, casherid nvarchar(25) NULL, cashfloweid nvarchar(25) NULL, cashflowlock int NOT NULL, CheckError nvarchar(25) NULL, WorkSign nvarchar(1) NULL, CWVchcode int NOT NULL, AutoOrNot nvarchar(1) NULL) ON [PRIMARY] Declare @newvchcode int set @newvchcode = (select MAX(vchcode)+1 from dlyndx) if (@Vchcode = @newvchcode -1) return INSERT INTO #Tmp_dlyndx_new(Vchcode, DATE, NUMBER, VchType, summary , btypeid, etypeid, ktypeid, ktypeid2, ifcheck , period, RedWord, RedOld, InputNo, draft , Total, GatheringDate, projectid, ETypeID2, SourceVchcode , SourceVchType, BillTotal, WtypeID, Compact, UserDefined01 , UserDefined02, UserDefined03, MatchQty, AuditLeveal, BTypeID2 , ProjectId2, Pubufts, SaveTime, DifAType, Appoint , Acc, NoteCode, isPreARAP, InvoiceType, CancelType , SettleType, NormCost, UserDefined04, UserDefined05, UserDefined06 , UserDefined07, UserDefined08, UserDefined09, UserDefined10, UserDefined11 , UserDefined12, UserDefined13, UserDefined14, UserDefined15, UserDefined16 , SettleBtypeId, IsCheckOut, ModifyPerson, ModifyDate, LastYear , BuildType, BuildNo, IsAutoBuild, InstockBackSign, AuditDate , mtypeid, BillType, IsRejected, ParVchtype, DataCheck) SELECT Vchcode, DATE, NUMBER, VchType, summary , btypeid, etypeid, ktypeid, ktypeid2, ifcheck , period, RedWord, RedOld, InputNo, draft , Total, GatheringDate, projectid, ETypeID2, SourceVchcode , SourceVchType, BillTotal, WtypeID, Compact, UserDefined01 , UserDefined02, UserDefined03, MatchQty, AuditLeveal, BTypeID2 , ProjectId2, NULL, SaveTime, DifAType, Appoint , Acc, NoteCode, isPreARAP, InvoiceType, CancelType , SettleType, NormCost, UserDefined04, UserDefined05, UserDefined06 , UserDefined07, UserDefined08, UserDefined09, UserDefined10, UserDefined11 , UserDefined12, UserDefined13, UserDefined14, UserDefined15, UserDefined16 , SettleBtypeId, IsCheckOut, ModifyPerson, ModifyDate, LastYear , BuildType, BuildNo, IsAutoBuild, InstockBackSign, AuditDate , mtypeid, BillType, IsRejected, ParVchtype, DataCheck FROM dlyndx WHERE Vchcode = @Vchcode update #Tmp_dlyndx_new set Vchcode = @newvchcode where Vchcode = @Vchcode delete dlyndx where Vchcode = @Vchcode SET IDENTITY_Insert dlyndx ON INSERT INTO dlyndx(Vchcode, DATE, NUMBER, VchType, summary , btypeid, etypeid, ktypeid, ktypeid2, ifcheck , period, RedWord, RedOld, InputNo, draft , Total, GatheringDate, projectid, ETypeID2, SourceVchcode , SourceVchType, BillTotal, WtypeID, Compact, UserDefined01 , UserDefined02, UserDefined03, MatchQty, AuditLeveal, BTypeID2 , ProjectId2, Pubufts, SaveTime, DifAType, Appoint , Acc, NoteCode, isPreARAP, InvoiceType, CancelType , SettleType, NormCost, UserDefined04, UserDefined05, UserDefined06 , UserDefined07, UserDefined08, UserDefined09, UserDefined10, UserDefined11 , UserDefined12, UserDefined13, UserDefined14, UserDefined15, UserDefined16 , SettleBtypeId, IsCheckOut, ModifyPerson, ModifyDate, LastYear , BuildType, BuildNo, IsAutoBuild, InstockBackSign, AuditDate , mtypeid, BillType, IsRejected, ParVchtype, DataCheck) SELECT Vchcode, DATE, NUMBER, VchType, summary , btypeid, etypeid, ktypeid, ktypeid2, ifcheck , period, RedWord, RedOld, InputNo, draft , Total, GatheringDate, projectid, ETypeID2, SourceVchcode , SourceVchType, BillTotal, WtypeID, Compact, UserDefined01 , UserDefined02, UserDefined03, MatchQty, AuditLeveal, BTypeID2 , ProjectId2, NULL, SaveTime, DifAType, Appoint , Acc, NoteCode, isPreARAP, InvoiceType, CancelType , SettleType, NormCost, UserDefined04, UserDefined05, UserDefined06 , UserDefined07, UserDefined08, UserDefined09, UserDefined10, UserDefined11 , UserDefined12, UserDefined13, UserDefined14, UserDefined15, UserDefined16 , SettleBtypeId, IsCheckOut, ModifyPerson, ModifyDate, LastYear , BuildType, BuildNo, IsAutoBuild, InstockBackSign, AuditDate , mtypeid, BillType, IsRejected, ParVchtype, DataCheck FROM #Tmp_dlyndx_new WHERE Vchcode = @newVchcode SET IDENTITY_Insert dlyndx Off update dlyndx set DATE = CONVERT(varchar(100), AuditDate, 23) where vchcode = @newvchcode update [DlyA] set vchcode = @newvchcode where vchcode = @Vchcode update [DlySale] set Vchcode = @newvchcode where Vchcode =@Vchcode update DlySale set date = (select CONVERT(varchar(100), AuditDate, 23) from Dlyndx where Dlyndx.vchcode = DlySale.vchcode) where DlySale.vchcode = @newvchcode update DlyA set date = (select CONVERT(varchar(100), AuditDate, 23) from Dlyndx where Dlyndx.vchcode = DlyA.vchcode) where DlyA.vchcode = @newvchcode update AuditProcess set Vchcode = @newvchcode where Vchcode = @Vchcode update BillAuditProcessNdx set Vchcode = @newvchcode where Vchcode = @Vchcode update BillAuditDetailRecord set Vchcode = @newvchcode where Vchcode = @Vchcode update T_OA_NotReadMessage set Vchcode = @newvchcode where Vchcode = @Vchcode update Dlyother set Vchcode = @newvchcode where Vchcode = @Vchcode update T_SC_LLDDYRWD set Vchcode = @newvchcode where Vchcode = @Vchcode update T_CW_IntfDlyndx set OriginVchcode = @newvchcode where OriginVchcode = @Vchcode update ARSettles set Vchcode = @newvchcode where Vchcode = @Vchcode update ARSettle set Vchcode = @newvchcode where Vchcode = @Vchcode -- select * from T_FIFO_OutList_Stock drop table #Tmp_dlyndx_new drop table #Tmp_T_CW_IntfDlyndx_new -- GO GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[P_BS_OA_SendSysMessage] ( @Receiver nvarchar(100), --接收人 @Content nvarchar(500),--内容 @Vchcode int, @Vchtype int, @IsCallDll INT, @Type TINYINT, --0 系统(15.8后无用) 1.普通消息 2.审核消息 3.预警消息 4.报警消息 @CreateTime datetime out ) as SET NOCOUNT ON set @CreateTime = Getdate() insert into dbo.T_OA_NotReadMessage ( CreateTime, Sender, Receiver, Content, [Type], vchcode, vchtype ) VALUES ( @CreateTime, '系统', --系统 @Receiver, @Content, @Type, @Vchcode, @Vchtype ) if @@Error<>0 goto Error1 IF @IsCallDll = 1 BEGIN DECLARE @MsgXML NVARCHAR(MAX) Select @MsgXML = '<Root><Record Sender = "系统" Receiver = "'+@Receiver+'" Content = "' + @Content + '" Type = "'+ CAST(@Type AS NVARCHAR) +'" ' + 'vchcode = "' + CAST(@Vchcode AS NVARCHAR) +'" vchtype = "' + CAST(@Vchtype AS NVARCHAR) + '"/></Root>' Declare @PlugInProcName nVarchar(50) Declare my_cursor Cursor For Select ProcName From T_Inf_PlugIn_MessageToDll Open my_cursor Fetch Next From my_cursor Into @PlugInProcName While @@Fetch_Status = 0 Begin Exec @PlugInProcName @MsgXML, NULL Fetch Next From my_cursor Into @PlugInProcName End Close my_cursor Deallocate my_cursor END exec _reovrridebill @vchcode,@Vchtype -- fix return SCOPE_IDENTITY() Error1: return -1