如何防止管理 Reporter 整合的正確資料錯誤

請注意--重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,且可能由 Microsoft Community 利用 Community Translation Framework技術或人工進行事後編修。翻譯過程並無專業譯者參與。Microsoft 同時提供使用者人為翻譯、機器翻譯及社群編修後的機器翻譯三種版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,所有翻譯文章都可能不盡完美,內容都可能出現詞彙、語意或文法上的錯誤。就翻譯內容之不正確或錯誤,或客戶因使用翻譯內容所產生的任何損害,微軟不負擔任何責任。Microsoft將依合理的商業努力不斷地更新機器翻譯軟體和工具,以期能為使用者提供更好的服務。

按一下這裡查看此文章的英文版本:2931999
結論
本文提供的 Microsoft 動態 SL 2011 管理 Reporter 2012 執行 Diagnostics.sql 指令碼的步驟。此指令碼可以識別可能會導致成功管理 Reporter 整合的資料錯誤。資料錯誤可以將來自許多來源,並可能會造成資料表間的不一致或建立無效的欄位值。

在這份文件底部也有一些用來尋找在 [MR] 可能會造成問題的小寫資料的指令碼。
解決方案
下載下列的指令碼檔案,並依照這些步驟來執行指令碼中管理 Reporter Microsoft 動態 SL 應用程式資料庫。更易於檢視,變更文字輸出的輸出類型。

注意這個相同的資訊包含在 Diagnostics2.Sql 檔案中,會包含在 MR2.zip 檔案中。

重要更新 Management Studio 中的任何資料之前,一律製作資料庫備份。

步驟 1

  • 您有一個以上的貨幣 ID 設定嗎吗?

    Select 'Step1a', CASE WHEN COUNT(*)>1 then 'YES' else 'NO' end, count(*) from currncy with (nolock)

    注意事項
    • 否 = 單一貨幣
    • 是 = 多種貨幣在貨幣維護設定,而且有所列出的號碼
  • Multicurrency 已啟用

    Select top 1 'Step1b',case isnull((select MAX(mcactivated) from cmsetup),-99) WHEN 1 then 'ENABLED' when -99 then 'NOT SETUP' else 'NOT ENABLED' end

    注意此指令碼傳回 [啟用] 或 「 未設定。

步驟 2

不正確的貨幣設定記錄的外觀。評估每一種狀況。若要執行這項操作的說明,請連絡 Microsoft 動態技術支援部門。
  • 這應該是應用程式資料庫的基底貨幣:

    Select 'Step2a',BaseCuryId from glsetup with (nolock)

  • 實際總帳的基底貨幣 (平衡型別 = 'a') 應該是資料庫的基底的貨幣。

    Select 'Step2b',BaseCuryID,LedgerID, BalanceType from ledger with (nolock)
  • 指定的應用程式資料庫中的所有公司的 [ BaseCuryID ] 欄位應該都是相同。

  • 這個指令碼會顯示系統資料庫與相關聯的所有應用程式資料庫中的 [ BaseCuryID ] 欄位。

    Select 'Step2c',BaseCuryID, CpnyID, databasename from vs_company with (nolock)
  • [ BaseCuryIDs ] 欄位必須存在於貨幣維護資料表。任何外幣應該還存在於此資料表中。

    Select 'Step2d',curyid from currncy with (nolock)

步驟 3

尋找交易和摘要資料錄中的CuryIDledgerID欄位的值不正確。這些陳述式存取前 100 個資料錄。若要查看所有的記錄,請移除指令碼中的單字 「 頂端 100 」。
  • 有貨幣 ID 不在貨幣維護資料表中的 Accthist。

    Select top 100 'Step3a',CpnyID, LedgerID, FiscYr, Acct, SUB, CuryId, * from accthist with (nolock) where CuryId not in (select CuryId from Currncy with (nolock))

    修正: 您可能需要更新以符合 [ BaseCuryID ] 欄位的 [CuryID ] 欄位。不過,該記錄可能已存在。在此情況下,您會收到 6909 訊息。如果發生這種情況,判斷是否需要記錄。

  • 已與會計記錄 (或不在 [總帳] 表格中的總帳) 不相符的貨幣 ID 的 Accthist。

    Select top 100 'Step3b',a.CpnyID, a.LedgerID, a.FiscYr, a.Acct, a.SUB, a.CuryId, l.BaseCuryID,* from accthist a with (nolock) left join Ledger l with (nolock) on a.LedgerID=l.LedgerID where l.LedgerID is null OR l.BaseCuryID<>a.CuryId

    修正: 更新取決於每一種狀況。

  • 不在貨幣維護資料表中有 CuryID 的 CuryAcct。

    Select top 100 'Step3c',CpnyID, LedgerID, FiscYr, Acct, SUB,BaseCuryID, CuryId, * from curyacct with (nolock) where CuryId not in (select CuryId from Currncy with (nolock))

    修正: 更新取決於每一種狀況。您可能必須稍後刪除記錄,如果沒有對應的 AcctHist 記錄。此外,您可能必須更新CuryID ] 欄位。不過,該記錄可能已存在。在此情況下,您會收到 6909 訊息。如果發生這種情況,判斷是否需要資料錄。

  • CuryAcct 與 BasecuryID 不符合總帳記錄 (或不在 [總帳] 表格中的總帳)。

    Select top 100 'Step3d',c.CpnyID, c.LedgerID, c.FiscYr, c.Acct, c.SUB,c.BaseCuryID, c.CuryId,l.BaseCuryID, * from curyacct c with (nolock) left join Ledger l with (nolock) on c.LedgerID=l.LedgerID where l.LedgerID is null OR c.BaseCuryID<>l.BaseCuryId

    修正: 更新取決於每一種狀況。

  • 以貨幣維護資料表中找不到 CuryID 的 GLTran。

    Select top 100 'Step3e',CpnyID, LedgerID, FiscYr, Acct, SUB,BaseCuryID, CuryId,* from gltran with (nolock) where Posted='P' and CuryId not in (select CuryId from Currncy)

    修正: 更新取決於每一種狀況。您可能需要CuryId ] 欄位更新成有效的值。

  • GLTran 與BaseCuryID欄位值,這個值不相符的總帳記錄 (或不在 [總帳] 表格中的總帳)。

    Select top 100 'Step3f',g.CpnyID, g.LedgerID, g.FiscYr, g.Acct, g.SUB, g.BaseCuryID, g.CuryId, * from gltran g with (nolock) left join Ledger l with (nolock) on g.LedgerID=l.LedgerID where g.Posted='P' and g.LedgerID is null OR l.BaseCuryID<>g.BaseCuryId

    若要修正: 更新取決於每一種狀況。您可能需要BaseCuryID ] 欄位更新成有效的值。

步驟 4

尋找不相符的摘要資料錄。
  • 尋找沒有 AcctHist 記錄的 CuryAcct 記錄。

    Select top 100 'Step4a',c.CpnyID, c.LedgerID, c.FiscYr, c.Acct, c.Sub, c.BaseCuryID, c.CuryId,*from CuryAcct c with (nolock)left join AcctHist a with (nolock) on c.CpnyID=a.CpnyID and c.Acct=a.Acct and c.Sub=a.Sub and c.LedgerID=a.LedgerID and c.FiscYr=a.FiscYrwhere a.CpnyID is null order by c.CpnyID, c.Acct, c.SUB, c.ledgerid, c.FiscYr

    修正: Fix4a.SQL 上執行指令碼從 MR2.zip 單一貨幣和多重貨幣資料庫如果報告錯誤。

  • 尋找沒有 CuryAcct 記錄的 Accthist。

    Select top 100 'Step4b',a.CpnyID, a.LedgerID, a.FiscYr, a.Acct, a.Sub, a.CuryId, *from AcctHist a with (nolock)left join Curyacct c with (nolock) on c.CpnyID=a.CpnyID and c.Acct=a.Acct and c.Sub=a.Sub and c.LedgerID=a.LedgerID and c.FiscYr=a.FiscYrwhere a.BalanceType='A' and c.CpnyID is null order by a.CpnyID, a.Acct, a.SUB, a.ledgerid, a.FiscYr

    修正: Multicurrency 資料庫,或是初始化 curyacct 中的資料錄中 GL 的初始化模式 > 帳戶歷程記錄] 或 [張貼到帳戶/sub/總帳/fiscyr/cpnyid/curyid 交易。若要建立或更新 curyacct 中的資料錄 GL > 帳戶歷程記錄 > 貨幣] 索引標籤,您必須為每個期間輸入資料。當您建立的批次,以公佈其異動的帳戶時,這應該建立 CuryAcct 筆記錄,每段期間內包含的值。請確定您張貼的年份為使用中報告錯誤的年份。然後,反向移除登出帳號美金批次。

    單一貨幣資料庫,請同時開啟資料錄 GL > 期間如果僅有一或兩個記錄的初始化模式的帳戶歷程記錄。某些數量來變更開始餘額,儲存記錄、 還原,,然後重新儲存。這會建立 curyacct 筆記錄。或者,您可以從這一節的步驟 6a 執行指令碼。

  • 沒有 AcctHist GLTrans

    如果有許多的 gltrans 項目,而且所有的項目都是有效時,將會變慢執行這項查詢。(查詢實際執行速度是否有不正確的資料。)

    Select top 100 'Step4c',g.CpnyID, g.LedgerID, g.FiscYr, g.Acct, g.Sub, g.BaseCuryID, g.CuryId,* from GLTran g with (nolock)left join AcctHist a with (nolock) on g.CpnyID=a.CpnyID and g.Acct=a.Acct and g.Sub=a.Sub and g.LedgerID=a.LedgerID and g.FiscYr=a.FiscYrinner join vs_company c with (nolock) on g.CpnyID=c.CpnyID and c.CpnyCOA in (select CpnyID from glsetup with (nolock)) -- only companies in this application DBwhere g.posted='P' and a.CpnyID is null order by g.CpnyID, g.LedgerID, g.FiscYr, g.Acct, g.Suboption (force order) -- added for performance in larger databases

    修正: 評估的GLtrans欄位項目。如果沒有 AcctHist 資料錄,財務情況不使用這些交易報告
  • 這通常是因為交易為舊。您可以決定要將其刪除,或採取其他動作。請仔細評估這些項目。

步驟 5

尋找有無效的日期或期間的 GLTrans 記錄。這種資料錄會導致管理 Reporter 下列錯誤:
  • 錯誤文字: 年、 月和日的參數描述無法表示的日期時間。
  • 錯誤文字: 物件參考未設定至物件的執行個體。
  • GLTrans 有空白的FiscYr欄位的記錄。

    Select top 100 'Step5a',CpnyID, LedgerID, FiscYr, Acct, Sub, perpost, perent, trandate, Posted, Rlsed, BatNbr, Module, * from GLTran with (nolock) where FiscYr='' and (Rlsed=1 or Posted='P')

    若要修正: 請考慮更新根據 perpost 值的 [ FiscYr] 欄位。

  • GLTrans 有遠超出一般範圍的 perpost 值的記錄。

    Select top 100 'Step5b',CpnyID, LedgerID, FiscYr, Acct, Sub, perpost, perent, trandate, Posted, Rlsed, BatNbr, Module, *from GLTran with (nolock) where (PerPost>='204812' or PerPost<='195001') and (Rlsed=1 or Posted='P')

    修正: 這些批次都可能會有張貼未來的期間。您可以開啟這些批次中 GL > 日誌交易期間的初始化模式。
    將其刪除、 變更期間張貼,或適當地處理它們。

  • GLTrans 是遠超過正常範圍 (通常由 2079 年) 的 transdate 值的記錄。

    Select top 100 'Step5c',CpnyID, LedgerID, FiscYr, Acct, Sub, perpost, perent, trandate,Posted, Rlsed, BatNbr, Module, *from GLTran with (nolock) where (trandate>='01/01/2048' or trandate<='01/01/1950') and (Rlsed=1 or Posted='P') and TranDate<>'1/1/1900'

    修正: 更新 crtd_datetime trandate。這個指令碼顯示如何。

    update gltran set trandate=crtd_datetime where (trandate>='01/01/2048' or trandate<='01/01/1950') and (Rlsed=1 or Posted='P') and TranDate<>'1/1/1900' 

  • AcctHist 與 FiscYr 欄位遠超過正常範圍的記錄。

    Select top 100 'Step5d',a.CpnyID, a.LedgerID, a.FiscYr, a.Acct, a.Sub, a.CuryId, *from AcctHist a with (nolock) where a.FiscYr>'2048' or a.FiscYr<'1950'

    修正: 這些是可能不想要的記錄。在歷史上操作資料,您可能已經設定會計年度保留供稍後可能檢閱記錄為未來年份。

步驟 6

找出AcctHist筆記錄中的量並相符的金額CuryAcct筆記錄中的執行個體。

注意在步驟 1 到 5 的問題已經加以修正之後,才要執行此陳述式。

select top 1000 'Step6a', a.CpnyID, a.Acct, a.Sub, a.LedgerID, a.FiscYr, c.numCuryAcct, a.BegBal, c.begbal, a.PtdBal00, c.ptdbal00, a.PtdBal01, c.ptdbal01, a.PtdBal02, c.ptdbal02,   a.PtdBal03, c.ptdbal03, a.PtdBal04, c.ptdbal04, a.PtdBal05, c.ptdbal05, a.PtdBal06, c.ptdbal06, a.PtdBal07, c.ptdbal07, a.PtdBal08, c.ptdbal08,   a.PtdBal09, c.ptdbal09, a.PtdBal10, c.ptdbal10, a.PtdBal11, c.ptdbal11, a.PtdBal12, c.ptdbal12, a.ytdBal00, c.ytdbal00, a.ytdBal01, c.ytdbal01,  a.ytdBal02, c.ytdbal02, a.ytdBal03, c.ytdbal03, a.ytdBal04, c.ytdbal04, a.ytdBal05, c.ytdbal05, a.ytdBal06, c.ytdbal06, a.ytdBal07, c.ytdbal07,   a.ytdBal08, c.ytdbal08, a.ytdBal09, c.ytdbal09, a.ytdBal10, c.ytdbal10, a.ytdBal11, c.ytdbal11, a.ytdBal12, c.ytdbal12  from AcctHist a inner join (select count(*) as numCuryAcct, CpnyID, Acct, Sub, LedgerID, FiscYr, SUM(begbal) as begbal, SUM(ptdbal00) as ptdbal00, SUM(ptdbal01) as ptdbal01, SUM(ptdbal02) as ptdbal02, SUM(ptdbal03) as ptdbal03, SUM(ptdbal04) as ptdbal04, SUM(ptdbal05) as ptdbal05, SUM(ptdbal06) as ptdbal06, SUM(ptdbal07) as ptdbal07, SUM(ptdbal08) as ptdbal08, SUM(ptdbal09) as ptdbal09, SUM(ptdbal10) as ptdbal10, SUM(ptdbal11) as ptdbal11,SUM(ptdbal12) as ptdbal12, SUM(ytdbal00) as ytdbal00, SUM(ytdbal01) as ytdbal01, SUM(ytdbal02) as ytdbal02, SUM(ytdbal03) as ytdbal03, SUM(ytdbal04) as ytdbal04, SUM(ytdbal05) as ytdbal05, SUM(ytdbal06) as ytdbal06, SUM(ytdbal07) as ytdbal07, SUM(ytdbal08) as ytdbal08, SUM(ytdbal09) as ytdbal09, SUM(ytdbal10) as ytdbal10, SUM(ytdbal11) as ytdbal11, SUM(ytdbal12) as ytdbal12from curyacct group by CpnyID, Acct, Sub, LedgerID, FiscYr) c   on a.CpnyID=c.CpnyID and a.Acct=c.Acct and a.Sub=c.Sub and a.LedgerID=c.LedgerID and a.FiscYr=c.FiscYr  where round(a.BegBal,2)<>round(c.begbal,2) or round(a.PtdBal00,2)<>round(c.PtdBal00,2) or round(a.PtdBal01,2)<>round(c.PtdBal01,2) or   round(a.PtdBal02,2)<>round(c.PtdBal02,2) or round(a.PtdBal03,2)<>round(c.PtdBal03,2) or round(a.PtdBal04,2)<>round(c.ptdbal04,2) or   round(a.PtdBal05,2)<>round(c.PtdBal05,2) or round(a.PtdBal06,2)<>round(c.PtdBal06,2) or round(a.PtdBal07,2)<>round(c.PtdBal07,2) or   round(a.PtdBal08,2)<>round(c.PtdBal08,2) or round(a.PtdBal09,2)<>round(c.PtdBal09,2) or round(a.PtdBal10,2)<>round(c.PtdBal10,2) or   round(a.PtdBal11,2)<>round(c.PtdBal11,2) or round(a.PtdBal12,2)<>round(c.PtdBal12,2) or round(a.ytdBal00,2)<>round(c.ytdBal00,2) or   round(a.ytdBal01,2)<>round(c.ytdBal01,2) or round(a.ytdBal02,2)<>round(c.ytdBal02,2) or round(a.ytdBal03,2)<>round(c.ytdBal03,2) or   round(a.ytdBal04,2)<>round(c.ytdbal04,2) or round(a.ytdBal05,2)<>round(c.ytdBal05,2) or round(a.ytdBal06,2)<>round(c.ytdBal06,2) or   round(a.ytdBal07,2)<>round(c.ytdBal07,2) or round(a.ytdBal08,2)<>round(c.ytdBal08,2) or round(a.ytdBal09,2)<>round(c.ytdBal09,2) or   round(a.ytdBal10,2)<>round(c.ytdBal10,2) or round(a.ytdBal11,2)<>round(c.ytdBal11,2) or round(a.ytdBal12,2)<>round(c.ytdBal12,2)

單一貨幣資料庫,請同時開啟資料錄 GL > 帳戶歷程記錄時如果有一些記錄的初始化模式。某些數量來變更開始餘額、 儲存記錄、 還原記錄,然後重新儲存。這會更新以符合Accthist記錄的Curyacct記錄。如果有許多記錄,請從 MR2.zip 檔案中執行 ResetCuryAcctfromAcctHistStep6a.sql 指令碼。

在 multicurrency 資料庫中,開啟 [GL > 期間如果只有少數的記錄,然後按一下 [貨幣] 索引標籤個別,視需要更正每個期間的初始化模式的帳戶歷程記錄。如果有許多記錄,請從 MR2.zip 檔案中執行指令碼 MultiCurrencyStep6aFix.sql。基底CuryID筆記錄中,會進行任何變更。

完成步驟 6 之後,請重新執行 Diagnostics2.SQL 指令碼,以確認它不會再報告錯誤。



若要尋找在 [MR] 可能會造成問題的小寫資料的其他指令碼。

此指令碼會尋找多筆資料錄位置Company.DatabaseName不具有相同的大小寫 (ex: SLDemoApp 和 SLDEMOAPP)。系統資料庫上執行此指令碼。

選取 c.DatabaseName,從公司 c 的左外部聯結 sys.databases c.CpnyID c.DatabaseName 上的 sd 自動分頁的 Latin1_General_CS_AS = sd.name 自動分頁的 Latin1_General_CS_AS

其中 sd.name 為 null,且資料庫中 (選取 c1。從公司 c1 左外部聯結公司 c2 c1 上的資料庫名稱。資料庫名稱 = c2。資料庫位置 c1。資料庫名稱 = c2。資料庫名稱及 c1。資料庫分頁 Latin1_General_CS_AS! = c2。資料庫分頁 Latin1_General_CS_AS)

若要修正: 更新資料庫為大寫。




此指令碼會尋找小寫的公司 IDsubaccount accthist、 curyacct 和 gltran 資料表中。系統資料庫上執行此指令碼。


宣告 @DbName VARCHAR(50)
宣告 @useStatement VARCHAR(256)
宣告 @fullStatement VARCHAR(8000)

宣告資料指標的 db_cursor
從公司中選取不同的資料庫名稱

開啟 db_cursor
擷取下一個從 db_cursor 成 @DbName

同時 @@FETCH_STATUS = 0
開始

設定 @DbName = LTRIM(RTRIM(@DbName))
設定 @useStatement = 'USE' + @DbName + '
設定 @fullStatement = '
選取子為 'Sub-AcctHist-' + @DbName +' ',*
從 AcctHist
WHERE UPPER(sub)<>子自動分頁的 Latin1_General_CS_AS

選取子為 'Sub-GLTran-' + @DbName +' ',*
從 GLTran
WHERE UPPER(sub)<>子自動分頁的 Latin1_General_CS_AS


選取子為 'Sub-CuryAcct-' + @DbName +' ',*
從 CuryAcct
WHERE UPPER(sub)<>子自動分頁的 Latin1_General_CS_AS

為選取 CpnyID 'CpnyID-AcctHist-' + @DbName +' ',*
從 AcctHist
其中 UPPER(CpnyID) <> CpnyID 自動分頁 Latin1_General_CS_AS

為選取 CpnyID 'CpnyID-GLTran-' + @DbName +' ',*
從 GLTran
其中 UPPER(CpnyID) <> CpnyID 自動分頁 Latin1_General_CS_AS


為選取 CpnyID 'CpnyID-CuryAcct-' + @DbName +' ',*
從 CuryAcct
其中 UPPER(CpnyID) <> CpnyID 自動分頁 Latin1_General_CS_AS


選取子為 'Sub-SubAcct-' + @DbName +' ',* 從 SubAcct 位置 (SUB 自動分頁 sql_latin1_general_cp1_cs_as <> upper(SUB))
或 (ConsolSub 自動分頁 sql_latin1_general_cp1_cs_as <> upper(ConsolSub))
'

exec (@useStatement + @fullStatement)

擷取下一個從 db_cursor 成 @DbName
End 鍵

關閉 db_cursor
解除配置 db_cursor




若要修正: 如果您發現任何小寫的subaccounts可以執行這些將它們放入大寫。


更新 GLTran 設定子 = UPPER(Sub)

更新 AcctHist 設定子 = UPPER(Sub)

更新 CuryAcct 設定子 = UPPER(Sub)



如果您發現任何小寫公司 ID您可以執行這些將它們放入大寫。

更新 accthist 設定 cpnyid = UPPER(cpnyid),UPPER(CpnyID) <> CpnyID 自動分頁 Latin1_General_CS_AS

更新 curyacct 設定 cpnyid = UPPER(cpnyid),UPPER(CpnyID) <> CpnyID 自動分頁 Latin1_General_CS_AS

更新 gltran 設定 cpnyid = UPPER(cpnyid),UPPER(CpnyID) <> CpnyID 自動分頁 Latin1_General_CS_AS



此指令碼會尋找小寫LedgerID accthist、 curyacct 和 gltran 資料表中。針對應用程式資料庫中執行此指令碼。

選取最上層 1 LedgerID 從 AcctHist 的 UPPER(LedgerID) <> LedgerID 自動分頁 Latin1_General_CS_AS

選取最上層 1 LedgerID 從 GLTran 的 UPPER(LedgerID) <> LedgerID 自動分頁 Latin1_General_CS_AS

選取最上層 1 LedgerID 從 CuryAcct 的 UPPER(LedgerID) <> LedgerID 自動分頁 Latin1_General_CS_AS



若要修正: 如果您發現任何小寫LedgerID 的可執行這些將它們放入大寫。

更新 GLTran 設定 LedgerID = 的 UPPER(LedgerID) LedgerID 自動分頁 Latin1_General_BIN 要 '%[a-z] %' 的位置

更新 AcctHist 設定 LedgerID = 的 UPPER(LedgerID) LedgerID 自動分頁 Latin1_General_BIN 要 '%[a-z] %' 的位置

更新 CuryAcct 設定 LedgerID = 的 UPPER(LedgerID) LedgerID 自動分頁 Latin1_General_BIN 要 '%[a-z] %' 的位置


此指令碼會尋找小寫CuryID accthist、 curyacct 和 gltran 資料表中。針對應用程式資料庫中執行此指令碼。

選取最上層 1 CuryID 從 AcctHist 的 UPPER(CuryID) <> CuryID 自動分頁 Latin1_General_CS_AS

選取最上層 1 CuryID 從 GLTran 的 UPPER(CuryID) <> CuryID 自動分頁 Latin1_General_CS_AS

選取最上層 1 CuryID 從 CuryAcct 的 UPPER(CuryID) <> CuryID 自動分頁 Latin1_General_CS_AS



若要修正2964624.

警告:本文為自動翻譯

內容

文章識別碼:2931999 - 最後檢閱時間:06/17/2015 01:03:00 - 修訂: 7.0

Microsoft Dynamics SL 2011 Service Pack 2, Microsoft Dynamics SL 2011 Service Pack 1, Microsoft Dynamics SL 2011 Feature Pack 1, Microsoft Dynamics SL 2011

  • kbmbsmigrate kbsurveynew kbmt KB2931999 KbMtzh
意見反應