北米版の Microsoft Dynamics NAV 2009 で外貨銀行口座で銀行調整を作成すると、総勘定元帳残高が正しく計算されません

適用先
Dynamics NAV 2009

この記事は、以下の国と言語ロケールの Microsoft Dynamics NAV に適用されます。

  • 英語 (カナダ) (en-CA)
  • 英語 (米国) (en-us)
  • スペイン語 (メキシコ) (es-mx)
  • フランス語 (カナダ) (fr-ca)

現象

北米版の Microsoft Dynamics 2009 で外貨建て銀行口座を使用する現金領収書仕訳帳を転記するとします。 現金領収書仕訳帳の調整を作成するには、[ 通貨為替レートの調整... ] 関数を実行します。 この状況で、外貨銀行口座で銀行照合を作成すると、提案された明細の総勘定元帳残高が正しく計算されません。 銀行調整計算には、銀行口座の実現利益または実現損失は含まれません。
この問題は、次の製品で発生します。

  • Microsoft Dynamics NAV 2009 R2 の北米版
  • 北米版 Microsoft Dynamics NAV 2009 Service Pack 1 (SP1)

解決策

重要: 修正プログラム (2548309) は元のコードに戻されているため、この変更が適用されたデータベースから削除する必要があります。 「コードの変更」セクションで説明されているコードの変更を行った場合は、コードが「既存のコード」セクションと一致するようにコードを元に戻すことができます。 コードが元に戻されない場合は、銀行照合の [ 全般 ] タブに違いが表示され、投稿を行うことができません。
この記事の元の再作成シナリオでの北米データベース銀行調整の総勘定元帳 (G/L) の不均衡の問題が再検討され、調査されました。 さらなる分析により、Product Management and Development は、残高で報告された問題は、銀行調整計算の誤った標準コードの結果ではなく、銀行口座の初期設定によって引き起こされたデータの問題であると判断しました。 銀行口座の不適切な初期設定は、銀行口座元帳エントリと G/L 勘定元帳エントリの間のリンクを切断することで構成されました。 正しくない外貨銀行口座の設定手順には、次の手順が含まれる場合があります。

  1. 初期残高のために銀行口座の G/L 勘定 (G/L 勘定 11650 など) に G/L 仕訳帳を転記します。

    注: このトランザクションは通常、最初の G/L 試算表の設定の一部として含まれます。

  2. 銀行口座転記グループに一時的な G/L 勘定 (11000 など) が割り当てられ、未処理の小切手や現金領収書などの未調整トランザクションがある場合、銀行口座に現金領収書仕訳を転記します。 残高勘定も同じ勘定 (11000 など) に設定され、洗浄エントリが生成されます。

  3. 銀行口座転記グループ勘定は、一時 G/L 勘定から G/L 勘定 11650 に変更されます。 したがって、手順 2 で詳細な銀行口座の設定を確立するために転記された元のエントリは、別の G/L 勘定でした。 したがって、G/L エントリへのリンクは確立されなくなります。

外貨銀行口座の設定が間違っている場合、さらに次のようになります。

  1. 初期残高のために銀行口座の G/L 勘定 (G/L 勘定 11650 など) に G/L 仕訳帳を転記します。
  2. 次に、貸借勘定を銀行口座転記グループ内で指定されているのと同じ G/L 勘定 (この場合、G/L 勘定 11650) に設定して、一般仕訳帳を銀行口座に転記します。

やはり、手順 1 で転記された G/L エントリと、手順 2 で転記された銀行口座元帳エントリとの間にリンクはありません。

これらの手順は、新しい外国銀行口座の開始を処理するための正しくない方法です。 この正しくないプロセスを実行すると、この記事 (2548309) で説明されている問題が発生する可能性があります。 この修正プログラム (2548309) は、前のシナリオに似たセットアップによって発生した特定のシナリオを修正するために追加されました。 ただし、銀行口座を設定しても G/L 勘定を銀行転記グループに保持しない場合、または銀行口座エントリと G/L エントリの間に直接リンクがない場合は、さまざまな転記シナリオによって不均衡が続くという問題が発生しました。

推奨事項: 外貨銀行を設定するための推奨プロセスは、次のようになります (GL の現地通貨金額が $10,000 であると仮定します)。

注 – 以下は 1:1 の為替レートに基づいています。 G/L 金額は現地通貨で更新されます。 したがって、GL が正しい現地通貨金額で更新されるように、銀行口座には手動計算が必要です。

  1. GL に開始試算表を転記する場合は、銀行の GL 残高を G/L 勘定 11000 などの一時的な G/L 勘定に $10,000 で転記します。

  2. 銀行口座転記グループが目的の G/L 勘定 (この場合は G/L 勘定 11650) に設定されている銀行口座に一般仕訳帳を転記します。 ここでは、残高勘定を G/L 勘定 11000 に設定します。これは、もともと期初試算表の設定の一部として転記された最初の一時的な現金勘定です。

    - この $10,000 エントリを転記すると、外国銀行口座と G/L 口座 11650 の両方が $10,000 に更新されます。 また、トランザクションからの相殺残高勘定により、一時的な G/L 勘定 11000 が 0 ドルに減ります。 このように転記することにより、銀行元帳エントリと G/L 会計元帳エントリの間に直接リンクがあります。 これは、外国の銀行口座の設定を処理および処理する正しい方法です。

      

修正プログラムの情報

サポートされている修正プログラムが Microsoft から提供されています。 ただし、この記事で説明する問題を修正することのみを目的としています。 この特定の問題が発生しているシステムにのみ適用してください。 この修正プログラムは、追加のテストを受ける可能性があります。 したがって、この問題による深刻な影響がない場合は、次の Microsoft Dynamics NAV Service Pack またはこの修正プログラムを含む次の Microsoft Dynamics NAV バージョンを待つことをお勧めします。

注: Microsoft Dynamics および関連製品のテクニカル サポート担当者が、特定の更新プログラムを適用することにより問題が解決されると判断した場合、まれに通常サポート依頼にかかる料金が免除されることがあります。 ただし、特定の更新プログラムの対象とならない追加の質問および問題については、通常のサポート料金が適用されます。

            
          

インストール情報

Microsoft は、明示または黙示の保証なしで、説明のみを目的としてプログラミング例を提供しています。 これには、商品性または特定の目的への適合性に関する暗黙の保証が含まれますが、これらに限定されません。 この記事では、デモンストレーションされているプログラミング言語と、プロシージャの作成とデバッグに使用されるツールについてよく理解していることを前提としています。 マイクロソフト サポート窓口では、特定のプロシージャの機能説明に関するご質問に対して支援いたしますが、本例を特定の目的を満たすために機能を追加したり、プロシージャを構築することは行いません。

注: この修正プログラムをインストールする前に、すべての Microsoft Navision クライアント ユーザーがシステムからログオフしていることを確認してください。 これには、Microsoft Navision Application Services (NAS) クライアント ユーザーが含まれます。 この修正プログラムの実装時にログオンするクライアント ユーザーが、クライアント ユーザーになるのはお客様だけです。

この修正プログラムを実装するには、開発者ライセンスが必要です。

Windows ログイン ウィンドウまたはデータベース ログイン ウィンドウのユーザー アカウントに "SUPER" 役割 ID を割り当てることをお勧めします。 ユーザー アカウントに "SUPER" 役割 ID を割り当てることができない場合は、ユーザー アカウントに次のアクセス許可があることを確認する必要があります。

  • 変更するオブジェクトの [変更] アクセス許可。
  • システム オブジェクト ID 5210 オブジェクトとシステム オブジェクト ID 9015 オブジェクトに対する実行アクセス許可。

                
注: データの修復を実行する必要がある場合を除き、データ ストアに対するアクセス許可は必要ありません。

コード変更

注: コード修正を運用コンピューターに適用する前に、必ず制御された環境でコード修正プログラムをテストしてください。
この問題を解決するには、銀行計算ヘッダー テーブル (10120) の CalculateBalance 関数のコードを次のように変更します。
既存のコード

...
          REPEAT
            IF BankAccLedgEntry.GET(GLEntry."Entry No.") THEN BEGIN
              IF "Currency Code" <> BankAccLedgEntry."Currency Code" THEN BEGIN
                IF BankAccLedgEntry."Currency Code" <> '' THEN
                  "G/L Balance" += ROUND(CurrExchRate.ExchangeAmtFCYToFCY("Statement Date",
                                                                          BankAccLedgEntry."Currency Code",
                                                                          "Currency Code",
                                                                          BankAccLedgEntry.Amount),
                                         Currency."Amount Rounding Precision")
                ELSE
                  "G/L Balance" += ROUND(CurrExchRate.ExchangeAmtLCYToFCY("Statement Date",
                                                                          "Currency Code",
                                                                          BankAccLedgEntry.Amount,
                                                                          "Currency Factor"),
                                         Currency."Amount Rounding Precision");
              END ELSE BEGIN

                // Delete the folloiwng line.
                "G/L Balance" += BankAccLedgEntry.Amount;

              END;
            END ELSE BEGIN
              "G/L Balance" += ROUND(CurrExchRate.ExchangeAmtLCYToFCY("Statement Date",
                                                                      "Currency Code",
                                                                      GLEntry.Amount,
                                                                      "Currency Factor"),
                                     Currency."Amount Rounding Precision");
            END;
          UNTIL GLEntry.NEXT = 0;
...

交換コード

...
          REPEAT
            IF BankAccLedgEntry.GET(GLEntry."Entry No.") THEN BEGIN
              IF "Currency Code" <> BankAccLedgEntry."Currency Code" THEN BEGIN
                IF BankAccLedgEntry."Currency Code" <> '' THEN
                  "G/L Balance" += ROUND(CurrExchRate.ExchangeAmtFCYToFCY("Statement Date",
                                                                          BankAccLedgEntry."Currency Code",
                                                                          "Currency Code",
                                                                          BankAccLedgEntry.Amount),
                                         Currency."Amount Rounding Precision")
                ELSE
                  "G/L Balance" += ROUND(CurrExchRate.ExchangeAmtLCYToFCY("Statement Date",
                                                                          "Currency Code",
                                                                          BankAccLedgEntry.Amount,
                                                                          "Currency Factor"),
                                         Currency."Amount Rounding Precision");
              END ELSE BEGIN

                // Add the following lines.
                "G/L Balance" += ROUND(CurrExchRate.ExchangeAmtLCYToFCY("Statement Date",
                                                                        "Currency Code",
                                                                        GLEntry.Amount,
                                                                        "Currency Factor"),
                                       Currency."Amount Rounding Precision");
                // End of the lines.

              END;
            END ELSE BEGIN
              "G/L Balance" += ROUND(CurrExchRate.ExchangeAmtLCYToFCY("Statement Date",
                                                                      "Currency Code",
                                                                      GLEntry.Amount,
                                                                      "Currency Factor"),
                                     Currency."Amount Rounding Precision");
            END;
          UNTIL GLEntry.NEXT = 0;
...

          

前提条件

この修正プログラムを適用するには、次のいずれかの製品がインストールされている必要があります。

  • Microsoft Dynamics NAV 2009 R2 の北米版
  • 北米版 Microsoft Dynamics NAV 2009 Service Pack 1

アンインストール情報

この修正プログラムは削除できません。

状態

Microsoft は、これが "適用対象" セクションに記載されている Microsoft 製品の問題であることを確認しました。

注: この資料は、"迅速な公開" を目的としてマイクロソフト サポート組織により直接作成されたものです。 ここに含まれる情報は、新しい問題に対応するため、そのままの状態で提供されます。 情報を迅速に公開するため、この資料には誤植などが含まれる可能性があり、また、予告なく改訂される場合があります。 その他の注意事項については、使用条件を参照してください。