百科问答

百科问答 国内资讯 公司资讯 政策法规 培训资料 产品下载

t3普及版数据升级标准版提示“错误信息 -2147217855 对象名ST_CalBegInvAge无效”处理方法?

发布时间:2025-12-31 

特价活动:>>>> 用友U8、T6、T+、T3软件产品4折优惠,畅捷通T+cloud、好会计、好业财、好生意云产品8折优惠,另有话费赠送。

 

用友t3普及版数据升级标准版提示“错误信息 -2147217855 对象名ST_CalBegInvAge无效”处理方法?

问题现象:



问题分析:升级数据库中缺少存储过程ST_CalBegInvAge。

解决方案:执行如下SQL语句,假设998为出现问题帐套。

USE [UFDATA_998_2013]

GO

/****** 对象:  StoredProcedure [dbo].[ST_CalBegInvAge]    脚本日期: 03/22/2017 11:00:02 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO


--计算上年结存库龄

CREATE PROCEDURE [dbo].[ST_CalBegInvAge]

@cDBName Varchar(20),     --上一个账套名称

@CurrentDate Datetime,     --计算日期

@cCurDBName  varchar(20)    --当前账套名称

As


Declare @strLeftQty nVarchar(4000)


Declare @StockStartDate datetime


declare @cWhCode nvarchar(50)

declare @cInvCode nvarchar(50)

declare @cBatch nvarchar(50)

declare @cFree1 nvarchar(120)

declare @cFree2 nvarchar(120)

declare @iQtty float

declare @iNum float


declare @autoId int

declare @iVouchQtty float

declare @iVouchNum float

declare @iTempQtty float

declare @iTempNum float


declare @strSQLInvAge nVarchar(4000)

declare @strInvAge nVarchar(4000)

declare @strSQLIn  nVarchar(4000)

declare @strSQLOut nVarchar(4000)

declare @strNewRecord nVarchar(4000)


declare @strSql nVarchar(200)

declare @sSQL  nVarchar(200)

declare @sBegdate As nVarchar(200)


declare @iCou int


--取库存启用日期

Set @sBegdate = N'select @StockStartDate = cast(cValue as Datetime)  from ' + @cDBName + '..accinformation ' + ' Where cSysid=''ST'' and cName= ''dSTStartDate'' '


exec sp_executesql @sBegdate,N'@StockStartDate datetime output', @StockStartDate output 


If @StockStartDate is Null 

Begin

Return 

End


--计算本期当前结存


Set @strNewRecord = N'Insert Into ' +@cDBName+'..STStockAgeTempTable(autoid, iqtty, inum) 

values(@autoid, @iTempQtty, @iTempNum) '

set @strLeftQty =

' SELECT cWhCode,

cInvCode,

IsNull(cBatch,'''') As cBatch,

IsNull(cFree1,'''') As cFree1,

IsNull(cFree2,'''') As cFree2,

SUM(case when bRdFlag = 1 then iQuantity else -iQuantity end) as iQtty,

SUM(case when bRdFlag = 1 then iNum else - iNum end) AS iNum

  From(  Select bRdFlag, cWhCode, cInvCode, iQuantity, INum, cBatch, cFree1, cFree2

 From '+ @cDBName+'..ST_BegInvAge 

 Union ALL

 Select R.bRdFlag, R.cWhCode, Rs.cInvCode, Rs.iQuantity, Rs.INum, Rs.cBatch, Rs.cFree1, Rs.cFree2

 From ' + @cDBName+ '..RdRecord R inner join '+@cDBName+'..RdRecords Rs on R.id = Rs.id 

 Where R.dDate >= @StartDate And R.dDate <= @CurrentDate And cVouchType <> ''33'' And cVouchType <> ''34'' 

 ) X

 group by cWhCode, cInvCode, IsNull(cBatch,''''),IsNull(cFree1,''''), IsNull(cFree2,'''') '


--取入库语句

Set @strSQLIn = ' Select AutoId, iQtty, iNum

  From (Select dDate, AutoId, abs(iQuantity) As iQtty, abs(iNum) As iNum 

From '+@cDBName+'..ST_BegInvAge

Where cWhCode = @cWhCode and cInvCode = @cInvCode and isnull(cBatch,'''') = @cBatch

and isnull(cFree1,'''') = @cFree1 and isnull(cFree2,'''') = @cFree2

Union ALL

Select d.dDate,ds.autoid, Abs(ds.iQuantity) as iQtty, Abs(ds.iNum) as iNum

from '+@cDBName+'..RdRecord d join ' + @cDBName + '..RdRecords ds on (d.id = ds.id) 

where ( (d.bRdFlag = 1 and ds.iQuantity > 0) or (d.bRdFlag <> 1 and ds.iQuantity < 0))

And d.dDate >= @StartDate and d.dDate <= @CurrentDate and d.cWhCode = @cWhCode 

and ds.cInvCode = @cInvCode and IsNull(ds.cBatch,'''') = @cBatch and IsNull(ds.cFree1,'''') = @cFree1

and IsNull(ds.cFree2,'''') = @cFree2) X

order by dDate Desc,AutoID Desc for read only '


Set @strSQLIn = N' declare curInvIn insensitive cursor for ' + @strSQLIn


set @strLeftQty = N'declare curRd cursor for ' + @strLeftQty

execute sp_executesql @strLeftQty,

N'@CurrentDate Datetime, @StartDate Datetime',

@CurrentDate, @StockStartDate


open curRd



fetch next from curRd into  

@cWhCode,@cInvCode,@cBatch,

@cFree1,@cFree2,@iQtty, @iNum


--建立计算结果临时表

Set @sSQL = N'select @Num = count(1) from ' + @cDBName + '..sysobjects ' + ' Where name = ''STStockAgeTempTable'' '


exec sp_executesql @sSQL,N'@Num int output', @iCou output 


If @iCou <> 0 

Begin

Exec (' Drop Table ' + @cDBName+'..STStockAgeTempTable')

End


Exec (' Create Table '+@cDBName+'..STStockAgeTempTable (autoId int , iQtty float,  iNum float)')


--sp_help ST_BegInvAge


while @@fetch_status = 0 

begin

if(@iQtty < 0 ) set @iQtty = 0 


if(@iNum < 0 or @iNum is null) set @iNum = 0 


Set @iTempQtty = 0.0

Set @iTempNum = 0.0


--按降序取入库

execute sp_executesql @strSQLIn,

N'@CurrentDate Datetime, @StartDate Datetime, @cWhCode varchar(50), 

@cInvCode varchar(20), @cBatch varchar(50), 

@cFree1 varchar(120), @cFree2 varchar(120)',

@CurrentDate, @StockStartDate, @cWhCode, @cInvCode, @cBatch, @cFree1, @cFree2

 

open curInvIn

fetch next from curInvIn into @autoId, @iVouchQtty, @iVouchNum


while (round(@iQtty,6) > 0 or round(@iNum,6) > 0) and @@fetch_status =0 

begin

if Round(@iQtty, 6) > Round(@iVouchQtty, 6)

begin

set @iTempQtty = @iVouchQtty

set @iQtty = Round(@iQtty, 6) - Round(@iVouchQtty, 6)

end 

else begin

set @iTempQtty = @iQtty

set @iQtty = 0.0

end 



if Round(@iNum, 6) > Round(@iVouchNum,6)

begin

set @iTempNum = @iVouchNum

set @iNum = Round(@iNum, 6) - Round(@iVouchNum, 6)

end 

else begin

set @iTempNum = @iNum

set @iNum = 0.0

end 


--增加计算结果

execute sp_executesql @strNewRecord,

N'@autoid int, @iTempQtty float, @iTempNum float',

@autoid, @iTempQtty, @iTempNum


Set @iTempQtty = 0.0

Set @iTempNum = 0.0


fetch next from curInvIn into @autoid, @iVouchQtty, @iVouchNum


end 

close curInvIn

deallocate curInvIn


fetch next from curRd into  

@cWhCode,@cInvCode,@cBatch,@cFree1,@cFree2,@iQtty, @iNum

end


close curRd

deallocate curRd


--将结果数据输出


set @strSQLInvAge =N'

Select  [ID], [bRdFlag],[cVouchType],[cWhCode] ,[dDate] ,

[cCode],[cRdCode],[cDepCode] ,[cPersonCode] ,[cVenCode] ,

[cHandler] ,[cMemo] ,[cMaker] ,[cDefine1] ,[cDefine2] ,

[cDefine3]  ,[cDefine4] ,[cDefine5] ,[cDefine6] ,[cDefine7]  ,

[cDefine8] ,[cDefine9] ,[cDefine10] , RT.[AutoID] ,[cInvCode],

(case when x.bRdFlag = 0 then -1 * RT.[iNum] else RT.[iNum] end)  As iNum,

(case when x.bRdFlag = 0 then -1 * RT.[iQtty] else RT.[iQtty] end) As iQuantity ,

[iUnitCost] ,[iPrice]  ,[cBatch],[cFree1] ,

[cFree2] ,[dVDate] ,[cDefine22] ,[cDefine23] ,[cDefine24] ,

[cDefine25] ,[cDefine26] ,[cDefine27] ,[cItem_class]  , [cItemCode]  ,

[cName] ,[cItemCName]

Into '+ @cCurDBName+'..ST_BegInvAge


From '+@cDBName+'..STStockAgeTempTable RT Inner Join (

Select  [ID], [bRdFlag],[cVouchType],[cWhCode] ,[dDate] ,

[cCode],[cRdCode],[cDepCode] ,[cPersonCode] ,[cVenCode] ,

[cHandler] ,[cMemo] ,[cMaker] ,[cDefine1] ,[cDefine2] ,

[cDefine3]  ,[cDefine4] ,[cDefine5] ,[cDefine6] ,[cDefine7]  ,

[cDefine8] ,[cDefine9] ,[cDefine10] ,[AutoID] ,[cInvCode],

[iNum] ,[iQuantity] ,[iUnitCost] ,[iPrice]  ,[cBatch],[cFree1] ,

[cFree2] ,[dVDate] ,[cDefine22] ,[cDefine23] ,[cDefine24] ,

[cDefine25] ,[cDefine26] ,[cDefine27] ,[cItem_class]  , [cItemCode]  ,

[cName] ,[cItemCName]

From '+@cDBName+'..ST_BegInvAge

Union All

Select  R.[ID], [bRdFlag],[cVouchType],[cWhCode] ,[dDate] ,

[cCode],[cRdCode],[cDepCode] ,[cPersonCode] ,[cVenCode] ,

[cHandler] ,[cMemo] ,[cMaker] ,[cDefine1] ,[cDefine2] ,

[cDefine3]  ,[cDefine4] ,[cDefine5] ,[cDefine6] ,[cDefine7]  ,

[cDefine8] ,[cDefine9] ,[cDefine10] ,[AutoID] ,[cInvCode],

[iNum] ,[iQuantity] ,[iUnitCost] ,[iPrice]  ,[cBatch],[cFree1] ,

[cFree2] ,[dVDate] ,[cDefine22] ,[cDefine23] ,[cDefine24] ,

[cDefine25] ,[cDefine26] ,[cDefine27] ,[cItem_class]  , [cItemCode]  ,

[cName] ,[cItemCName]

From '+@cDBName+'..RdRecords Rs inner join '+@cDBName+'..RdRecord R On (R.ID = Rs.ID)

Where dDate >= @StartDate And dDate <= @CurrentDate And cVouchType <> ''33'' And cVouchType <> ''34'' 

) X On RT.autoId = X.autoId     

'

execute sp_executesql @strSQLInvAge, 

N'@CurrentDate Datetime, @StartDate Datetime',

@CurrentDate,

@StockStartDate






X畅捷通软件官方正版.用友软件.企业云服务

截屏,微信识别二维码

客服QQ:5151867

(点击QQ号复制,添加好友)