この資料では、すべての国と言語ロケールのすべての Microsoft Dynamics NAV に該当します。
現象
税込価格が設定されていることを想定しており、Microsoft Dynamics NAV 2009 年に前払請求書が圧縮されていません。前払請求書を転記すると、次のエラー メッセージが表示されます。
容量は Gen. 仕訳帳明細行に正である必要があります。
この問題は、次の製品で発生します。
-
Microsoft Dynamics NAV 2009 サービス パック 1 (SP1)
-
Microsoft Dynamics NAV 2009 R2
解決策
修正プログラムの情報
サポートされている修正プログラムはマイクロソフトから現在入手可能です。ただし、この資料に記載されている問題を解決するためのものはのみ。この特定の問題が発生したシステムにのみ適用してください。この修正プログラムは、今後さらにテストを行うことがあります。この問題で深刻な影響を受けていない場合は、次の Microsoft Dynamics NAV 2009 サービス パックまたは修正プログラムを含む次の Microsoft Dynamics NAV バージョン待つことを勧めします。
注: かかる料金が免除されるテクニカル サポート担当者 Microsoft Dynamics および関連製品のことは、通常は特別な場合は、特定の更新プログラムは、問題を解決するにを決定します。追加の質問および問題の特定のアップデートの対象にはなりませんが、通常のサポート料金が適用されます。
インストール情報
マイクロソフトでは解説することのみを目的としてプログラミング例を提供しています。暗示あるいは明示していることに対しての保証はしておりません。ここで言う保証とは、特定の目的に対する商品性や適合性の暗示的保証を含んでいますが、それに限定されるわけではありません。この資料では、例示されているプログラミング言語およびプロシージャの作成やデバッグに使用するツールにお客様が精通していることを前提としています。マイクロソフトのサポート エンジニアは、特定のプロシージャの機能を説明することができますが、機能の追加またはお客様固有の要件を満たすようにプロシージャを作成するこれらの例は変更されません。
注: この修正プログラムをインストールする前に、Microsoft Navision のすべてのクライアント ユーザーがシステムの電源を記録することを確認します。これには、Microsoft Navision アプリケーション サービス (NAS) クライアントのユーザーが含まれます。この修正プログラムを実装すると、ログオンしている唯一のクライアント ユーザーが必要です。
この修正プログラムを実装するには、開発者用のライセンスが必要です。
ユーザー アカウントまたはデータベース ログイン ウィンドウに Windows のログイン ウィンドウにある「スーパー」ロール id を割り当てられていることをお勧めします。ユーザー アカウントには、「スーパー」ロール ID を割り当てることができません、する場合は、ユーザー アカウントが次のアクセス許可を持っているを確認する必要があります。
-
変更するオブジェクトの変更のアクセス許可。
-
システム オブジェクトの ID 5210オブジェクトおよびシステム オブジェクトの ID 9015オブジェクトの実行が許可されます。
注:
データの修復を実行する必要があるない限り、データ ストアへの権限を持っている必要はありません。
コードの変更
注: 常にテスト コードを修正、管理された環境で適用する前に、運用コンピューターに修正プログラムします。
この問題を解決するには、次の手順を実行します。
-
販売ポスト Codeuint (80) 内のAdjustPrepmtAmountLCY関数内のコードを次のように変更します。
既存のコード 1...TotalPrepmtAmount@1002 : ARRAY [2] OF Decimal;
BEGIN
...置換用コード 1
...TotalPrepmtAmount@1002 : ARRAY [2] OF Decimal;
// Add the following line.
PricesInclVATRoundingAmount@1170000000 : ARRAY [2] OF Decimal;
// End of the added line.
BEGIN
...既存のコード 2
...TotalPrepmtAmount[1] += "Prepmt. Amount Inv. (LCY)";
...置換用コード 2
...
// Add the following lines.IF SalesHeader."Prices Including VAT" THEN
IF (("Prepayment %" <> 100) OR IsFinalInvoice) AND (DeductionFactor = 1) THEN BEGIN
PricesInclVATRoundingAmount[1] := TotalRoundingAmount[1];
PricesInclVATRoundingAmount[2] := TotalRoundingAmount[2];
END;
// End of the added lines.
TotalPrepmtAmount[1] += "Prepmt. Amount Inv. (LCY)";
...既存のコード 3
...UpdatePrepmtSalesLineWithRound(
// Delete the following line.
PrepmtSalesLine,TotalRoundingAmount,TotalPrepmtAmount,TempPrepmtDeductLCYSalesLine.IsFinalInvoice);
// End of the deleted line.
END;
...置換用コード 3
...UpdatePrepmtSalesLineWithRound(
// Add the following lines.
PrepmtSalesLine,TotalRoundingAmount,TotalPrepmtAmount,
TempPrepmtDeductLCYSalesLine.IsFinalInvoice,PricesInclVATRoundingAmount);
// End of the added lines.
END;
... -
販売ポスト Codeuint (80) 内のUpdatePrepmtSalesLineWithRound関数内のコードを次のように変更します。
既存のコード 1...
// Delete the following line.
LOCAL PROCEDURE UpdatePrepmtSalesLineWithRound@89(VAR PrepmtSalesLine@1002 : Record 37;TotalRoundingAmount@1001 : ARRAY [2] OF Decimal;TotalPrepmtAmount@1000 : ARRAY [2] OF Decimal;FinalInvoice@1170000000 : Boolean);
// End of the deleted line.
VAR
...置換用コード 1
...
// Add the following line.
LOCAL PROCEDURE UpdatePrepmtSalesLineWithRound@89(VAR PrepmtSalesLine@1002 : Record 37;TotalRoundingAmount@1001 : ARRAY [2] OF Decimal;TotalPrepmtAmount@1000 : ARRAY [2] OF Decimal;FinalInvoice@1170000000 : Boolean;PricesInclVATRoundingAmount@1170000001 : ARRAY [2] OF Decimal);
// End of the added line.
VAR
...既存のコード 2
...
// Delete the following line.IF (ABS(TotalRoundingAmount[2]) <= GLSetup."Amount Rounding Precision") OR FinalInvoice THEN BEGIN
// End of the deleted line.
IF ("Prepayment %" = 100) AND ("Prepmt. Amount Inv. (LCY)" = 0) THEN
...置換用コード 2
...
// Add the following lines.
IF (PricesInclVATRoundingAmount[1] <> 0) AND (TotalRoundingAmount[1] = 0) THEN BEGIN
Prepmt100PctVATRoundingAmt := 0;
PricesInclVATRoundingAmount[1] := 0;
END;
IF (ABS(TotalRoundingAmount[2]) <= GLSetup."Amount Rounding Precision") OR
(FinalInvoice AND (TotalRoundingAmount[1] = 0))
THEN BEGIN
// End of the added lines.
IF ("Prepayment %" = 100) AND ("Prepmt. Amount Inv. (LCY)" = 0) THEN
...既存のコード 3
...END;
// Delete the following lines.
"Prepmt. VAT Amount Inv. (LCY)" := TotalRoundingAmount[2] + Prepmt100PctVATRoundingAmt;
NewAmountIncludingVAT := Amount + TotalPrepmtAmount[2] + TotalRoundingAmount[2];
Increment(TotalSalesLineLCY."Amount Including VAT","Amount Including VAT" - NewAmountIncludingVAT - Prepmt100PctVATRoundingAmt);
// End of the deleted lines.
IF "Currency Code" = '' THEN
...置換用コード 3
...END;
// Add the following lines.
IF (PricesInclVATRoundingAmount[2] <> 0) AND (TotalRoundingAmount[2] = 0) THEN BEGIN
Prepmt100PctVATRoundingAmt := 0;
PricesInclVATRoundingAmount[2] := 0;
END;
"Prepmt. VAT Amount Inv. (LCY)" := TotalRoundingAmount[2] + Prepmt100PctVATRoundingAmt;
NewAmountIncludingVAT := Amount + TotalPrepmtAmount[2] + TotalRoundingAmount[2];
IF (PricesInclVATRoundingAmount[1] = 0) AND (PricesInclVATRoundingAmount[2] = 0) THEN
Increment(TotalSalesLineLCY."Amount Including VAT","Amount Including VAT" - NewAmountIncludingVAT - Prepmt100PctVATRoundingAmt
);
// End of the added lines.
IF "Currency Code" = '' THEN
... -
購買のAdjustPrepmtAmountLCY関数内のコードを変更する-次のように Post Codeunit (90)。
既存のコード 1...TotalPrepmtAmount@1003 : ARRAY [2] OF Decimal;
BEGIN
...置換用コード 1
...TotalPrepmtAmount@1003 : ARRAY [2] OF Decimal;
// Add the following line.
PricesInclVATRoundingAmount@1170000000 : ARRAY [2] OF Decimal;
// End of the added line.
BEGIN
...既存のコード 2
...TotalPrepmtAmount[1] += "Prepmt. Amount Inv. (LCY)";
...置換用コード 2
...
// Add the following lines.
IF PurchHeader."Prices Including VAT" THEN
IF (("Prepayment %" <> 100) OR IsFinalInvoice) AND (DeductionFactor = 1) THEN BEGIN
PricesInclVATRoundingAmount[1] := TotalRoundingAmount[1];
PricesInclVATRoundingAmount[2] := TotalRoundingAmount[2];
END;
// End of the added lines.
TotalPrepmtAmount[1] += "Prepmt. Amount Inv. (LCY)";
...既存のコード 3
...
// Delete the following line.
UpdatePrepmtPurchLineWithRound(PrepmtPurchLine,TotalRoundingAmount,TotalPrepmtAmount);
// End of the deleted line.
END;
...置換用コード 3
...
// Add the following lines.
UpdatePrepmtPurchLineWithRound(
PrepmtPurchLine,TotalRoundingAmount,TotalPrepmtAmount,
TempPrepmtDeductLCYPurchLine.IsFinalInvoice,PricesInclVATRoundingAmount);
// End of the added lines.
END;
... -
購買のUpdatePrepmtPurchLineWithRound関数内のコードを変更する-次のように Post Codeunit (90)。
既存のコード 1...
// Delete the following line.LOCAL PROCEDURE UpdatePrepmtPurchLineWithRound@89(VAR PrepmtPurchLine@1002 : Record 39;TotalRoundingAmount@1001 : ARRAY [2] OF Decimal;TotalPrepmtAmount@1000 : ARRAY [2] OF Decimal);
// End of the deleted line.
VAR
...置換用コード 1
...
// Add the following line.
LOCAL PROCEDURE UpdatePrepmtPurchLineWithRound@89(VAR PrepmtPurchLine@1002 : Record 39;TotalRoundingAmount@1001 : ARRAY [2] OF Decimal;TotalPrepmtAmount@1000 : ARRAY [2] OF Decimal;FinalInvoice@1170000001 : Boolean;PricesInclVATRoundingAmount@1170000000 : ARRAY [2] OF Decimal);
// End of the added line.
VAR
...既存のコード 2
...
// Delete the following line.
IF ABS(TotalRoundingAmount[2]) <= GLSetup."Amount Rounding Precision" THEN BEGIN
// End of the deleted line.
IF ("Prepayment %" = 100) AND ("Prepmt. Amount Inv. (LCY)" = 0) THEN
...置換用コード 2
...
// Add the following lines.
IF (PricesInclVATRoundingAmount[1] <> 0) AND (TotalRoundingAmount[1] = 0) THEN BEGIN
Prepmt100PctVATRoundingAmt := 0;
PricesInclVATRoundingAmount[1] := 0;
END;
IF (ABS(TotalRoundingAmount[2]) <= GLSetup."Amount Rounding Precision") OR
(FinalInvoice AND (TotalRoundingAmount[1] = 0))
THEN BEGIN
// End of the added lines.
IF ("Prepayment %" = 100) AND ("Prepmt. Amount Inv. (LCY)" = 0) THEN
...既存のコード 3
...END;
// Delete the following lines.
"Prepmt. VAT Amount Inv. (LCY)" := -(TotalRoundingAmount[2] + Prepmt100PctVATRoundingAmt);
NewAmountIncludingVAT := Amount - (TotalPrepmtAmount[2] + TotalRoundingAmount[2]);
Increment(
TotalPurchLineLCY."Amount Including VAT",-("Amount Including VAT" - NewAmountIncludingVAT + Prepmt100PctVATRoundingAmt));
// End of the deleted lines.
IF "Currency Code" = '' THEN
...置換用コード 3
...END;
// Add the following lines.
IF (PricesInclVATRoundingAmount[2] <> 0) AND (TotalRoundingAmount[2] = 0) THEN BEGIN
Prepmt100PctVATRoundingAmt := 0;
PricesInclVATRoundingAmount[2] := 0;
END;
"Prepmt. VAT Amount Inv. (LCY)" := -(TotalRoundingAmount[2] + Prepmt100PctVATRoundingAmt);
NewAmountIncludingVAT := Amount - (TotalPrepmtAmount[2] + TotalRoundingAmount[2]);
IF (PricesInclVATRoundingAmount[1] = 0) AND (PricesInclVATRoundingAmount[2] = 0) THEN
Increment(
TotalPurchLineLCY."Amount Including VAT",-("Amount Including VAT" - NewAmountIncludingVAT + Prepmt100PctVATRoundingAmt));
// End of the added lnies.
IF "Currency Code" = '' THEN
...
必要条件
この修正プログラムを適用するのにはインストールされている製品は次のいずれかが必要です。
-
Microsoft Dynamics NAV 2009 サービス パック 1 (SP1)
-
Microsoft Dynamics NAV 2009 R2
アンインストール情報
この修正プログラムを削除することはできません。
状況
マイクロソフトは、この問題を「対象製品」セクションに記載されているマイクロソフト製品の問題として認識しています。
注: これは、マイクロソフト サポートの組織内から直接作成した「高速公開」の資料です。ここに含まれる情報は、新たに発生している問題に応じて現状のまま提供されています。速やかに利用できるようにした結果として、内容には誤植が含まれている可能性があり、事前告知なしで改訂する場合があります。その他の考慮事項については、使用条件を参照してください。