この記事は、東ヨーロッパ (ee) 言語ロケールの Microsoft Dynamics NAV に適用されます。
現象
Microsoft Dynamics NAV 2009 R2 の東ヨーロッパバージョンで、支払いまたは払い戻しの現金受領仕訳帳を作成することを想定しています。 前払として現金受領仕訳帳を転記します。 この状況では、適用された支払いまたは払い戻しに対して Unapply Entries 関数を実行すると、次のエラー メッセージが表示されます。
注
前払は、Cust で No にする必要があります。台帳エントリエントリ No.='XXXX'。
解決策
修正プログラムの情報
サポートされている修正プログラムが Microsoft から入手できるようになりました。 ただし、この記事で説明されている問題を修正することのみを目的としています。 この特定の問題が発生しているシステムにのみ適用します。 この修正プログラムは、追加のテストを受け取る場合があります。 したがって、この問題の影響を大きく受けない場合は、次の Microsoft Dynamics NAV 2009 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 アクセス許可。
メモ データ修復を実行する必要がない限り、データ ストアに対する権限は必要ありません。
コードの変更
メモ 運用環境のコンピューターに修正プログラムを適用する前に、制御された環境でコード修正を常にテストします。
この問題を解決するには、次の手順を実行します。
Gen の UnapplyCustLedgEntry 関数のコードを変更します。 Jnl.-Post Line codeunit (12) を次に示します。
既存のコード 1... NextDtldLedgEntryEntryNo := DtldCustLedgEntry2."Entry No." + 1; DtldCustLedgEntry2.SETCURRENTKEY("Transaction No.","Customer No.","Entry Type"); IF GenJnlLine."Prepmt. Appl. Transaction No." <> 0 THEN DtldCustLedgEntry2.SETRANGE("Transaction No.",GenJnlLine."Prepmt. Appl. Transaction No.",DtldCustLedgEntry."Transaction No.") ELSE DtldCustLedgEntry2.SETRANGE("Transaction No.",DtldCustLedgEntry."Transaction No."); DtldCustLedgEntry2.SETRANGE("Customer No.",DtldCustLedgEntry."Customer No."); DtldCustLedgEntry2.SETRANGE("Entry Type",DtldCustLedgEntry."Entry Type"::Application); DtldCustLedgEntry2.FINDSET; ...置換コード 1
... NextDtldLedgEntryEntryNo := DtldCustLedgEntry2."Entry No." + 1; DtldCustLedgEntry2.SETCURRENTKEY("Transaction No.","Customer No.","Entry Type"); IF GenJnlLine."Prepmt. Appl. Transaction No." <> 0 THEN // Add the following line. IF GenJnlLine."Prepmt. Appl. Transaction No." < DtldCustLedgEntry."Transaction No." THEN DtldCustLedgEntry2.SETRANGE("Transaction No.",GenJnlLine."Prepmt. Appl. Transaction No.",DtldCustLedgEntry."Transaction No.") // Add the following lines. ELSE DtldCustLedgEntry2.SETRANGE("Transaction No.",DtldCustLedgEntry."Transaction No.",GenJnlLine."Prepmt. Appl. Transaction No.") // End of the lines. ELSE DtldCustLedgEntry2.SETRANGE("Transaction No.",DtldCustLedgEntry."Transaction No."); DtldCustLedgEntry2.SETRANGE("Customer No.",DtldCustLedgEntry."Customer No."); DtldCustLedgEntry2.SETRANGE("Entry Type",DtldCustLedgEntry."Entry Type"::Application); DtldCustLedgEntry2.FINDSET; ...既存のコード 2
... IF DtldCustLedgEntry2."Entry Type" = DtldCustLedgEntry2."Entry Type"::Application THEN PrepareAdvCustUnapply( DtldCustLedgEntry2."Cust. Ledger Entry No.",TempCustLedgEntryForAppln, UnapplyAdvVATEntries,ReverseAdvVATTransNo,ApplCustLedgEntryNo,CurrencyCode); ...置換コード 2
... IF DtldCustLedgEntry2."Entry Type" = DtldCustLedgEntry2."Entry Type"::Application THEN // Add the following line. IF GenJnlLine."Prepmt. Appl. Transaction No." <> 0 THEN PrepareAdvCustUnapply( DtldCustLedgEntry2."Cust. Ledger Entry No.",TempCustLedgEntryForAppln, UnapplyAdvVATEntries,ReverseAdvVATTransNo,ApplCustLedgEntryNo,CurrencyCode); ...既存のコード 3
... NegativeLCYAppAmt := NegativeLCYAppAmt + DtldCVLedgEntryBuf."Amount (LCY)"; NegativeACYAppAmt := NegativeACYAppAmt + DtldCVLedgEntryBuf."Additional-Currency Amount"; END; IF GenJnlLine."Prepmt. Appl. Transaction No." = 0 THEN BEGIN CustLedgEntry.GET(DtldCustLedgEntry2."Cust. Ledger Entry No."); IF DtldCVLedgEntryBuf.Advance AND (CustLedgEntry."Document Type" = CustLedgEntry."Document Type"::Payment) THEN SalesPostAdvances.InsertTempApplnAdvanceLink(DtldCVLedgEntryBuf."Entry No.") END; END; ...置換コード 3
... NegativeLCYAppAmt := NegativeLCYAppAmt + DtldCVLedgEntryBuf."Amount (LCY)"; NegativeACYAppAmt := NegativeACYAppAmt + DtldCVLedgEntryBuf."Additional-Currency Amount"; END; IF GenJnlLine."Prepmt. Appl. Transaction No." = 0 THEN BEGIN CustLedgEntry.GET(DtldCustLedgEntry2."Cust. Ledger Entry No."); IF DtldCVLedgEntryBuf.Advance AND (CustLedgEntry."Document Type" = CustLedgEntry."Document Type"::Payment) THEN SalesPostAdvances.InsertTempApplnAdvanceLink(DtldCVLedgEntryBuf."Entry No.") END; END; ...Gen の AutoEntrForDtldCustLedgEntries 関数のコードを変更します。 Jnl.-Post Line codeunit (12) を次に示します。
既存のコード... CASE DtldCVLedgEntryBuf."Entry Type" OF DtldCVLedgEntryBuf."Entry Type"::"Initial Entry":; DtldCVLedgEntryBuf."Entry Type"::Application: IF MultiplePostingGrApplied THEN BEGIN InitGLEntry(AccNo,DtldCVLedgEntryBuf."Amount (LCY)",0,FALSE,TRUE); InsertGLEntry(TRUE); END; DtldCVLedgEntryBuf."Entry Type"::"Unrealized Loss": ...置換コード
... CASE DtldCVLedgEntryBuf."Entry Type" OF DtldCVLedgEntryBuf."Entry Type"::"Initial Entry":; DtldCVLedgEntryBuf."Entry Type"::Application: // Add the following line. BEGIN IF MultiplePostingGrApplied THEN BEGIN InitGLEntry(AccNo,DtldCVLedgEntryBuf."Amount (LCY)",0,FALSE,TRUE); InsertGLEntry(TRUE); // Add the following lines. END; SalesPostAdvances.InsertApplnAdvanceLink(DtldCVLedgEntryBuf); // EAST0001 // End of the lines. END; DtldCVLedgEntryBuf."Entry Type"::"Unrealized Loss": ...Gen の UnapplyVendLedgEntry 関数のコードを変更します。 Jnl.-Post Line codeunit (12) を次に示します。
既存のコード 1... DtldVendLedgEntry2.SETCURRENTKEY("Transaction No.","Vendor No.","Entry Type"); IF GenJnlLine."Prepmt. Appl. Transaction No." <> 0 THEN DtldVendLedgEntry2.SETRANGE( "Transaction No.",GenJnlLine."Prepmt. Appl. Transaction No.",DtldVendLedgEntry."Transaction No.") ELSE DtldVendLedgEntry2.SETRANGE("Transaction No.",DtldVendLedgEntry."Transaction No."); DtldVendLedgEntry2.SETRANGE("Vendor No.",DtldVendLedgEntry."Vendor No."); ...置換コード 1
... DtldVendLedgEntry2.SETCURRENTKEY("Transaction No.","Vendor No.","Entry Type"); IF GenJnlLine."Prepmt. Appl. Transaction No." <> 0 THEN // Add the following line. IF GenJnlLine."Prepmt. Appl. Transaction No." < DtldVendLedgEntry."Transaction No." THEN DtldVendLedgEntry2.SETRANGE( "Transaction No.",GenJnlLine."Prepmt. Appl. Transaction No.",DtldVendLedgEntry."Transaction No.") ELSE // Add the following lines. DtldVendLedgEntry2.SETRANGE( "Transaction No.", DtldVendLedgEntry."Transaction No.", GenJnlLine."Prepmt. Appl. Transaction No.") ELSE // End of the lines. DtldVendLedgEntry2.SETRANGE("Transaction No.",DtldVendLedgEntry."Transaction No."); DtldVendLedgEntry2.SETRANGE("Vendor No.",DtldVendLedgEntry."Vendor No."); ...既存のコード 2
... IF DtldVendLedgEntry2."Entry Type" = DtldVendLedgEntry2."Entry Type"::Application THEN PrepareAdvVendUnapply( DtldVendLedgEntry2."Vendor Ledger Entry No.",TempVendLedgEntryForAppln, UnapplyAdvVATEntries,ReverseAdvVATTransNo,ApplVendLedgEntryNo,CurrencyCode); UNTIL DtldVendLedgEntry2.NEXT = 0; ...置換コード 2
... IF DtldVendLedgEntry2."Entry Type" = DtldVendLedgEntry2."Entry Type"::Application THEN // Add the following line. IF GenJnlLine."Prepmt. Appl. Transaction No." <> 0 THEN PrepareAdvVendUnapply( DtldVendLedgEntry2."Vendor Ledger Entry No.",TempVendLedgEntryForAppln, UnapplyAdvVATEntries,ReverseAdvVATTransNo,ApplVendLedgEntryNo,CurrencyCode); UNTIL DtldVendLedgEntry2.NEXT = 0; ...既存のコード 3
... NegativeACYAppAmt := NegativeACYAppAmt + DtldCVLedgEntryBuf."Additional-Currency Amount"; END; END; IF NOT SkipCollectAmount THEN IF NOT (DtldCVLedgEntryBuf."Entry Type" IN [ ...置換コード
... NegativeACYAppAmt := NegativeACYAppAmt + DtldCVLedgEntryBuf."Additional-Currency Amount"; END; // Add the following lines. IF GenJnlLine."Prepmt. Appl. Transaction No." = 0 THEN BEGIN VendLedgEntry.GET(DtldVendLedgEntry2."Vendor Ledger Entry No."); IF DtldCVLedgEntryBuf.Advance AND (VendLedgEntry."Document Type" = VendLedgEntry."Document Type"::Payment) THEN PurchPostAdvances.InsertTempApplnAdvanceLink(DtldCVLedgEntryBuf."Entry No.") END; // End of the lines. END; IF NOT SkipCollectAmount THEN IF NOT (DtldCVLedgEntryBuf."Entry Type" IN [ ...Gen の AutoEntrForDtldVendLedgEntries 関数のコードを変更します。 Jnl.-Post Line codeunit (12) を次に示します。
既存のコード... CASE DtldCVLedgEntryBuf."Entry Type" OF DtldCVLedgEntryBuf."Entry Type"::"Initial Entry":; DtldCVLedgEntryBuf."Entry Type"::Application: IF MultiplePostingGrApplied THEN BEGIN InitGLEntry(AccNo,DtldCVLedgEntryBuf."Amount (LCY)",0,FALSE,TRUE); InsertGLEntry(TRUE); END; DtldCVLedgEntryBuf."Entry Type"::"Unrealized Loss": ...置換コード
... CASE DtldCVLedgEntryBuf."Entry Type" OF DtldCVLedgEntryBuf."Entry Type"::"Initial Entry":; DtldCVLedgEntryBuf."Entry Type"::Application: // Add the following line. BEGIN IF MultiplePostingGrApplied THEN BEGIN InitGLEntry(AccNo,DtldCVLedgEntryBuf."Amount (LCY)",0,FALSE,TRUE); InsertGLEntry(TRUE); // Add the following lines. END; PurchPostAdvances.InsertApplnAdvanceLink(DtldCVLedgEntryBuf); // End of the lines. END; DtldCVLedgEntryBuf."Entry Type"::"Unrealized Loss": ...CustEntry-Apply Posted Entries codeunit (226) の PostUnApplyCustomer 関数のコードを次のように変更します。
既存のコード 1... DtldCustLedgEntry.LOCKTABLE; CustLedgEntry.LOCKTABLE; CustLedgEntry.GET(DtldCustLedgEntry2."Cust. Ledger Entry No."); // Delete the following line. CustLedgEntry.TESTFIELD(Prepayment,FALSE); // EAST0001 CheckPostingDate(PostingDate,'',0); IF PostingDate < DtldCustLedgEntry2."Posting Date" THEN ERROR(Text003, ...置換コード 1
... DtldCustLedgEntry.LOCKTABLE; CustLedgEntry.LOCKTABLE; CustLedgEntry.GET(DtldCustLedgEntry2."Cust. Ledger Entry No."); CheckPostingDate(PostingDate,'',0); IF PostingDate < DtldCustLedgEntry2."Posting Date" THEN ERROR(Text003, ...既存のコード 2
... CustLedgEntry.TABLECAPTION, DtldCustLedgEntry."Cust. Ledger Entry No.", CustLedgEntry.FIELDCAPTION("Transaction No.")); // Delete the following line. DtldCustLedgEntry.TESTFIELD(Advance,FALSE); GetPrepmtApplTransNo(DtldCustLedgEntry."Cust. Ledger Entry No.",GenJnlLine."Prepmt. Appl. Transaction No."); END; UNTIL DtldCustLedgEntry.NEXT = 0; ...置換コード 2
... CustLedgEntry.TABLECAPTION, DtldCustLedgEntry."Cust. Ledger Entry No.", CustLedgEntry.FIELDCAPTION("Transaction No.")); // Add the following line. DtldCustLedgEntry.TESTFIELD(Advance,CustLedgEntry.Prepayment); GetPrepmtApplTransNo(DtldCustLedgEntry."Cust. Ledger Entry No.",GenJnlLine."Prepmt. Appl. Transaction No."); END; UNTIL DtldCustLedgEntry.NEXT = 0; ...CustEntry-Apply Posted Entries codeunit (226) の GetPrepmtApplTransNo 関数のコードを次のように変更します。
既存のコード... CustLedgEntry.GET(CustLedgEntryNo); // Delete the following lines. IF NOT CustLedgEntry.Prepayment AND (CustLedgEntry."Prepayment Type" = CustLedgEntry."Prepayment Type"::Advance) THEN BEGIN TransactionNo := CustLedgEntry."Transaction No." - 1; END; // End of the lines. ...置換コード
... CustLedgEntry.GET(CustLedgEntryNo); // Add the following lines. IF CustLedgEntry."Prepayment Type" = CustLedgEntry."Prepayment Type"::Advance THEN IF CustLedgEntry.Prepayment THEN BEGIN CustLedgEntry.SETCURRENTKEY("Transaction No."); CustLedgEntry.SETRANGE("Transaction No.",CustLedgEntry."Transaction No." + 1); IF CustLedgEntry.FINDFIRST THEN IF NOT CustLedgEntry.Prepayment AND (CustLedgEntry."Prepayment Type" = CustLedgEntry."Prepayment Type"::Advance) THEN TransactionNo := CustLedgEntry."Transaction No."; END ELSE TransactionNo := CustLedgEntry."Transaction No." - 1; // End of the lines. ...VendEntry-Apply Posted Entries codeunit (227) の PostUnApplyVendor 関数のコードを次のように変更します。
既存のコード... DtldVendLedgEntry."Vendor Ledger Entry No.", VendLedgEntry.FIELDCAPTION("Transaction No.")); // Delete the following line. DtldVendLedgEntry.TESTFIELD(Advance,FALSE); GetPrepmtApplTransNo(DtldVendLedgEntry."Vendor Ledger Entry No.",GenJnlLine."Prepmt. Appl. Transaction No."); END; UNTIL DtldVendLedgEntry.NEXT = 0; ...置換コード
... DtldVendLedgEntry."Vendor Ledger Entry No.", VendLedgEntry.FIELDCAPTION("Transaction No.")); // Add the following line. DtldVendLedgEntry.TESTFIELD(Advance, VendLedgEntry.Prepayment); GetPrepmtApplTransNo(DtldVendLedgEntry."Vendor Ledger Entry No.",GenJnlLine."Prepmt. Appl. Transaction No."); END; UNTIL DtldVendLedgEntry.NEXT = 0; ...VendEntry-Apply Posted Entries codeunit (227) の GetPrepmtApplTransNo 関数のコードを次のように変更します。
既存のコード... // Delete the following lines. VendLedgEntry.GET(VendLedgEntryNo); IF NOT VendLedgEntry.Prepayment AND (VendLedgEntry."Prepayment Type" = VendLedgEntry."Prepayment Type"::Advance) THEN BEGIN TransactionNo := VendLedgEntry."Transaction No." - 1; END; // End of the lines. ...置換コード
... // Add the following lines. VendLedgEntry.GET(VendLedgEntryNo); IF VendLedgEntry."Prepayment Type" = VendLedgEntry."Prepayment Type"::Advance THEN IF VendLedgEntry.Prepayment THEN BEGIN VendLedgEntry.SETCURRENTKEY("Transaction No."); VendLedgEntry.SETRANGE("Transaction No.", VendLedgEntry."Transaction No." + 1); IF VendLedgEntry.FINDFIRST THEN IF NOT VendLedgEntry.Prepayment AND (VendLedgEntry."Prepayment Type" = VendLedgEntry."Prepayment Type"::Advance) THEN TransactionNo := VendLedgEntry."Transaction No."; END ELSE TransactionNo := VendLedgEntry."Transaction No." - 1; // End of the lines. ...Purchase-Post Advances codeunit (26586) に新しいグローバル変数を追加し、次のように変数を指定します。
名前: TempAdvanceLink
DataType: レコード
サブタイプ: アドバンス リンク
次のように、Purchase-Post Advances codeunit (26586) で InsertTempApplnAdvanceLink 関数を作成します。
PROCEDURE InsertTempApplnAdvanceLink@1470034(DtldEntryBufEntryNo@1470002 : Integer); BEGIN TempAdvanceLink.INIT; TempAdvanceLink."Entry No." := DtldEntryBufEntryNo; TempAdvanceLink.INSERT; END;次のように、Purchase-Post Advances codeunit (26586) で InsertApplnAdvanceLink 関数を作成します。
PROCEDURE InsertApplnAdvanceLink@140049(DtldCVLedgEntryBuf@1102601000 : Record 383); VAR AdvanceLink@1470001 : Record 26590; BEGIN WITH AdvanceLink DO BEGIN IF TempAdvanceLink.GET(DtldCVLedgEntryBuf."Entry No.") THEN BEGIN IF FINDLAST THEN NextLinkEntryNo := AdvanceLink."Entry No." + 1 ELSE NextLinkEntryNo := 1; INIT; "Entry No." := NextLinkEntryNo; "Entry Type" := "Entry Type"::Application; "Document No." := DtldCVLedgEntryBuf."Document No."; "CV Ledger Entry No." := DtldCVLedgEntryBuf."Cust. Ledger Entry No."; Amount := DtldCVLedgEntryBuf.Amount; "Amount (LCY)" := DtldCVLedgEntryBuf."Amount (LCY)"; INSERT; TempAdvanceLink.DELETE; END; END; END;
前提条件
この修正プログラムを適用するには、東ヨーロッパバージョンの Microsoft Dynamics NAV 2009 R2 がインストールされている必要があります。
アンインストール情報
この修正プログラムを削除することはできません。
追加情報
修正プログラム 2543219の詳細については、次の記事番号をクリックして、Microsoft サポート技術情報の記事を表示します。
2543219 Microsoft Dynamics NAV 2009 R2 の東ヨーロッパバージョンでは、想定どおりに過払い前払いを処理することはできません
状態
Microsoft は、これが "適用対象" セクションに記載されている Microsoft 製品の問題であることを確認しました。
注: この資料は、"迅速な公開" を目的としてマイクロソフト サポート組織により直接作成されたものです。 ここに含まれる情報は、新しい問題に対応するため、そのままの状態で提供されます。 情報を迅速に公開するため、この資料には誤植などが含まれる可能性があり、また、予告なく改訂される場合があります。 その他の注意事項については、使用条件を参照してください。