適用先
Dynamics NAV 2009

Microsoft Dynamics NAV 2009 年に通貨を使用するときに適用されているが正しく計算されないお客様に適用、またはを適用した場合、支払通貨での請求書に現地通貨では、仕入先のエントリ ページを適用します。この問題は、次の製品で発生します。

  • Microsoft Dynamics NAV 2009 R2

  • Microsoft Dynamics NAV 2009 サービス パック 1 (SP1)

解決策

修正プログラムの情報

サポートされている修正プログラムはマイクロソフトから現在入手可能です。ただし、この資料に記載されている問題を解決するためのものはのみ。この特定の問題が発生したシステムにのみ適用してください。この修正プログラムは、今後さらにテストを行うことがあります。この問題で深刻な影響を受けていない場合は、次の Microsoft Dynamics NAV 2009 サービス パックまたは修正プログラムを含む次の Microsoft Dynamics NAV バージョン待つことを勧めします。注: かかる料金が免除されるテクニカル サポート担当者 Microsoft Dynamics および関連製品のことは、通常は特別な場合は、特定の更新プログラムは、問題を解決するにを決定します。追加の質問および問題の特定のアップデートの対象にはなりませんが、通常のサポート料金が適用されます。

インストール情報

マイクロソフトでは解説することのみを目的としてプログラミング例を提供しています。暗示あるいは明示していることに対しての保証はしておりません。ここで言う保証とは、特定の目的に対する商品性や適合性の暗示的保証を含んでいますが、それに限定されるわけではありません。この資料では、例示されているプログラミング言語およびプロシージャの作成やデバッグに使用するツールにお客様が精通していることを前提としています。マイクロソフトのサポート エンジニアは、特定のプロシージャの機能について説明することができます。ただし、お客様固有の要件を満たすために、追加機能の提供またはプロシージャの作成のために、これらの例に変更を加えたりはしません。注: この修正プログラムをインストールする前に、Microsoft Dynamics NAV のすべてのクライアント ユーザーがシステムの電源を記録することを確認します。これには、Microsoft Dynamics NAV アプリケーション サーバー (NAS) のサービスが含まれます。この修正プログラムを実装すると、ログオンしている唯一のクライアント ユーザーが必要です。この修正プログラムを実装するには、開発者用のライセンスが必要です。ユーザー アカウントまたはデータベース ログイン ウィンドウに Windows のログイン ウィンドウにある「スーパー」ロール id を割り当てられていることをお勧めします。ユーザー アカウントには、「スーパー」ロール ID を割り当てることができません、する場合は、ユーザー アカウントが次のアクセス許可を持っているを確認する必要があります。

  • 変更するオブジェクトの変更のアクセス許可。

  • 実行のアクセス許可、システム オブジェクトの ID 5210オブジェクトおよびシステム オブジェクトの ID 9015オブジェクトです。

注: データの修復を実行する必要があるない限り、データ ストアへの権限を持っている必要はありません。

コードの変更

注常にテスト コードの修正プログラムの制御された環境で、運用コンピューターに修正プログラムを適用する前にします。変更を適用するには、前に SEPA のすべての更新プログラムをインポートしてください。この問題を解決するには、次の手順を実行します。

  1. 次のようにプロパティとして、顧客のエントリを適用 (232) のコードを変更します。既存のコード

    ...OnModifyRecord=BEGIN                     CODEUNIT.RUN(CODEUNIT::"Cust. Entry-Edit",Rec);                     EXIT(FALSE);                   END;...

    置換用コード

    ...OnModifyRecord=BEGIN                     CODEUNIT.RUN(CODEUNIT::"Cust. Entry-Edit",Rec);                     IF "Applies-to ID" <> xRec."Applies-to ID" THEN                       CalcApplnAmount;                     EXIT(FALSE);                   END;...
  2. 顧客のエントリを適用 (232) フォームのHandlChosenEntries関数内のコードを次のように変更します。既存のコード 1

    ...IF NOT FromZeroGenJnl THEN          AppliedCustLedgEntryTemp.SETRANGE(Positive,CurrentAmount < 0);        IF AppliedCustLedgEntryTemp.FINDFIRST THEN BEGIN          AppliedCustLedgEntryTemp.CALCFIELDS("Remaining Amount");          IF Type = Type::Direct THEN            CalculateCurrency := ApplyingCustLedgEntry."Entry No." <> 0          ELSE            CalculateCurrency := TRUE;          IF (CurrencyCode <> AppliedCustLedgEntryTemp."Currency Code") AND CalculateCurrency THEN BEGIN            AppliedCustLedgEntryTemp."Remaining Amount" :=              GenJnlPostLine.ExchAmount(                AppliedCustLedgEntryTemp."Remaining Amount",                AppliedCustLedgEntryTemp."Currency Code",                CurrencyCode,"Posting Date");            AppliedCustLedgEntryTemp."Remaining Pmt. Disc. Possible" :=              GenJnlPostLine.ExchAmount(                AppliedCustLedgEntryTemp."Remaining Pmt. Disc. Possible",                AppliedCustLedgEntryTemp."Currency Code",                CurrencyCode,"Posting Date");            AppliedCustLedgEntryTemp."Amount to Apply" :=              GenJnlPostLine.ExchAmount(                AppliedCustLedgEntryTemp."Amount to Apply",                AppliedCustLedgEntryTemp."Currency Code",                CurrencyCode,"Posting Date");          END;          CASE Type OF            Type::Direct:...

    置換用コード 1

    ...IF NOT FromZeroGenJnl THEN          AppliedCustLedgEntryTemp.SETRANGE(Positive,CurrentAmount < 0);        IF AppliedCustLedgEntryTemp.FINDFIRST THEN BEGIN          ExchangeAmountsOnLedgerEntry(Type,CurrencyCode,AppliedCustLedgEntryTemp);          CASE Type OF            Type::Direct:...

    既存のコード 2

    ...END ELSE BEGIN          AppliedCustLedgEntryTemp.SETRANGE(Positive);          AppliedCustLedgEntryTemp.FINDFIRST;        END;        IF (OldPmtDisc <> PmtDiscAmount) THEN...

    置換用コード 2

    ...END ELSE BEGIN          AppliedCustLedgEntryTemp.SETRANGE(Positive);          AppliedCustLedgEntryTemp.FINDFIRST;          ExchangeAmountsOnLedgerEntry(Type,CurrencyCode,AppliedCustLedgEntryTemp);        END;        IF (OldPmtDisc <> PmtDiscAmount) THEN...
  3. 顧客のエントリを適用 (232) フォームのExchangeAmountsOnLedgerEntry関数内のコードを次のように変更します。既存のコード

    ...CheckRounding;    END;    BEGIN    END.  }...

    置換用コード

    ...CheckRounding;    END;    LOCAL PROCEDURE ExchangeAmountsOnLedgerEntry@20(Type@1003 : 'Direct,GenJnlLine,SalesHeader';CurrencyCode@1000 : Code[10];VAR AppliedCustLedgEntryTemp@1001 : Record 21);    VAR      CalculateCurrency@1002 : Boolean;    BEGIN      AppliedCustLedgEntryTemp.CALCFIELDS("Remaining Amount");      IF Type = Type::Direct THEN        CalculateCurrency := ApplyingCustLedgEntry."Entry No." <> 0      ELSE        CalculateCurrency := TRUE;      IF (CurrencyCode <> AppliedCustLedgEntryTemp."Currency Code") AND CalculateCurrency THEN BEGIN        AppliedCustLedgEntryTemp."Remaining Amount" :=          GenJnlPostLine.ExchAmount(            AppliedCustLedgEntryTemp."Remaining Amount",            AppliedCustLedgEntryTemp."Currency Code",            CurrencyCode,"Posting Date");        AppliedCustLedgEntryTemp."Remaining Pmt. Disc. Possible" :=          GenJnlPostLine.ExchAmount(            AppliedCustLedgEntryTemp."Remaining Pmt. Disc. Possible",            AppliedCustLedgEntryTemp."Currency Code",            CurrencyCode,"Posting Date");        AppliedCustLedgEntryTemp."Amount to Apply" :=          GenJnlPostLine.ExchAmount(            AppliedCustLedgEntryTemp."Amount to Apply",            AppliedCustLedgEntryTemp."Currency Code",            CurrencyCode,"Posting Date");      END;    END;    BEGIN    END.  }...
  4. 次のようにフォームで仕入先のエントリを適用 (233) のプロパティのコードを変更します。既存のコード

    ...OnModifyRecord=BEGIN                     CODEUNIT.RUN(CODEUNIT::"Vend. Entry-Edit",Rec);                     EXIT(FALSE);                   END;...

    置換用コード

    ...OnModifyRecord=BEGIN                     CODEUNIT.RUN(CODEUNIT::"Vend. Entry-Edit",Rec);                     IF "Applies-to ID" <> xRec."Applies-to ID" THEN                       CalcApplnAmount;                     EXIT(FALSE);                   END;...
  5. 仕入先エントリの適用 (233) フォームのHandlChosenEntries関数内のコードを次のように変更します。既存のコード 1

    ...IF NOT FromZeroGenJnl THEN          AppliedVendLedgEntryTemp.SETRANGE(Positive,CurrentAmount < 0);        IF AppliedVendLedgEntryTemp.FINDFIRST THEN BEGIN          AppliedVendLedgEntryTemp.CALCFIELDS("Remaining Amount");          IF Type = Type::Direct THEN            CalculateCurrency := ApplyingVendLedgEntry."Entry No." <> 0          ELSE            CalculateCurrency := TRUE;          IF (CurrencyCode <> AppliedVendLedgEntryTemp."Currency Code") AND CalculateCurrency THEN BEGIN            AppliedVendLedgEntryTemp."Remaining Amount" :=              GenJnlPostLine.ExchAmount(                AppliedVendLedgEntryTemp."Remaining Amount",                AppliedVendLedgEntryTemp."Currency Code",                CurrencyCode,"Posting Date");            AppliedVendLedgEntryTemp."Remaining Pmt. Disc. Possible" :=              GenJnlPostLine.ExchAmount(                AppliedVendLedgEntryTemp."Remaining Pmt. Disc. Possible",                AppliedVendLedgEntryTemp."Currency Code",                CurrencyCode,"Posting Date");            AppliedVendLedgEntryTemp."Amount to Apply" :=              GenJnlPostLine.ExchAmount(                AppliedVendLedgEntryTemp."Amount to Apply",                AppliedVendLedgEntryTemp."Currency Code",                CurrencyCode,"Posting Date");          END;          CASE Type OF            Type::Direct:...

    置換用コード 1

    ...IF NOT FromZeroGenJnl THEN          AppliedVendLedgEntryTemp.SETRANGE(Positive,CurrentAmount < 0);        IF AppliedVendLedgEntryTemp.FINDFIRST THEN BEGIN          ExchangeAmountsOnLedgerEntry(Type,CurrencyCode,AppliedVendLedgEntryTemp);          CASE Type OF            Type::Direct:...

    既存のコード 2

    ...END ELSE BEGIN          AppliedVendLedgEntryTemp.SETRANGE(Positive);          AppliedVendLedgEntryTemp.FINDFIRST;        END;        IF (OldPmtdisc <> PmtDiscAmount) THEN...

    置換用コード 2

    ...END ELSE BEGIN          AppliedVendLedgEntryTemp.SETRANGE(Positive);          AppliedVendLedgEntryTemp.FINDFIRST;          ExchangeAmountsOnLedgerEntry(Type,CurrencyCode,AppliedVendLedgEntryTemp);        END;        IF (OldPmtdisc <> PmtDiscAmount) THEN...
  6. 仕入先エントリの適用 (233) フォームのExchangeAmountsOnLedgerEntry関数内のコードを次のように変更します。既存のコード

    ...AppliesToID := AppliesToID2;    END;    BEGIN    END.  }...

    置換用コード

    ...AppliesToID := AppliesToID2;    END;    PROCEDURE ExchangeAmountsOnLedgerEntry@14(Type@1000 : 'Direct,GenJnlLine,PurchHeader';CurrencyCode@1001 : Code[10];VAR AppliedVendLedgEntryTemp@1002 : Record 25);    VAR      CalculateCurrency@1003 : Boolean;    BEGIN      AppliedVendLedgEntryTemp.CALCFIELDS("Remaining Amount");      IF Type = Type::Direct THEN        CalculateCurrency := ApplyingVendLedgEntry."Entry No." <> 0      ELSE        CalculateCurrency := TRUE;      IF (CurrencyCode <> AppliedVendLedgEntryTemp."Currency Code") AND CalculateCurrency THEN BEGIN        AppliedVendLedgEntryTemp."Remaining Amount" :=          GenJnlPostLine.ExchAmount(            AppliedVendLedgEntryTemp."Remaining Amount",            AppliedVendLedgEntryTemp."Currency Code",            CurrencyCode,"Posting Date");        AppliedVendLedgEntryTemp."Remaining Pmt. Disc. Possible" :=          GenJnlPostLine.ExchAmount(            AppliedVendLedgEntryTemp."Remaining Pmt. Disc. Possible",            AppliedVendLedgEntryTemp."Currency Code",            CurrencyCode,"Posting Date");        AppliedVendLedgEntryTemp."Amount to Apply" :=          GenJnlPostLine.ExchAmount(            AppliedVendLedgEntryTemp."Amount to Apply",            AppliedVendLedgEntryTemp."Currency Code",            CurrencyCode,"Posting Date");      END;    END;    BEGIN    END.  }...

必要条件

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

  • Microsoft Dynamics NAV 2009 R2

  • Microsoft Dynamics NAV 2009 SP1

アンインストール情報

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

状況

マイクロソフトは、この問題を「対象製品」セクションに記載されているマイクロソフト製品の問題として認識しています。

注: これは、マイクロソフト サポートの組織内から直接作成した「高速公開」の資料です。ここに含まれる情報は、新たに発生している問題に応じて現状のまま提供されています。速やかに利用できるようにした結果として、内容には誤植が含まれている可能性があり、事前告知なしで改訂する場合があります。その他の考慮事項については、使用条件を参照してください。

ヘルプを表示

その他のオプションが必要ですか?

サブスクリプションの特典の参照、トレーニング コースの閲覧、デバイスのセキュリティ保護方法などについて説明します。