北米バージョンの 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) の不均衡に関する問題を再検討し、調査しました。 さらなる分析を通じて、製品管理と開発は、不均衡で報告された問題は、銀行調整計算の正しくない標準コードの結果ではなく、銀行口座の初期設定によって引き起こされるデータの問題であると判断しました。 銀行口座の不正な初期設定は、銀行口座台帳エントリと G/L 勘定台帳エントリの間のリンクを解除することで構成されました。 正しくない外貨銀行口座の設定手順には、次のような手順が含まれる場合があります。

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

    注 このトランザクションは、通常、初期 G/L 試用版のセットアップの一部として含まれます。

  2. 銀行勘定転記グループに一時的な G/L 勘定 (11000 など) を割り当て、未調整トランザクション (未処理小切手や現金受領書など) を銀行口座に転記します。 また、バランス勘定は、洗浄エントリを生成するために、同じアカウント(例えば11000)に設定される。

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

外貨銀行口座の追加の正しくない設定は、次のようになります。

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

ここでも、手順 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 オブジェクトの Execute アクセス許可。

                
メモ データ修復を実行する必要がない限り、データ ストアに対する権限は必要ありません。

コードの変更

メモ 運用環境のコンピューターに修正プログラムを適用する前に、制御された環境でコード修正を常にテストします。
この問題を解決するには、Bank Rec. Header テーブル (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 製品の問題であることを確認しました。

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