Gejala
Jenis dokumen yang salah yang digunakan ketika Anda mengimpor berkas LSV DD (debit langsung) dan pembayaran ditolak ada di Swiss versi Microsoft Dynamics NAV 2009. Ketika pembayaran dibatalkan, jenis dokumen tersebut masih akan ditetapkan ke pembayaran. Namun, Anda tidak dapat mengirim entri tersebut karena tanda salah jumlah. Ikuti langkah-langkah di bagian perubahan kode untuk memecahkan masalah ini. Masalah ini terjadi di dalam produk berikut ini:
-
Swiss versi Microsoft Dynamics NAV 2009 R2
-
Swiss versi Microsoft Dynamics NAV 2009 SP1
Pemecahan masalah
Informasi Hotfix
Sekarang tersedia hotfix yang didukung dari Microsoft. Namun, hanya ditujukan untuk memperbaiki masalah yang dijelaskan di artikel ini. Terapkan hanya ke sistem yang mengalami masalah khusus ini. Perbaikan terbaru ini dapat menerima pengujian tambahan. Oleh karena itu, jika Anda tidak terlalu dipengaruhi oleh masalah ini, kami sarankan Anda menunggu paket layanan Microsoft Dynamics NAV 2009 atau versi Microsoft Dynamics NAV berikutnya yang berisi perbaikan terbaru ini.
Catatan Dalam kasus tertentu, biaya yang biasanya diadakan untuk panggilan mungkin dibatalkan apabila profesional dukungan teknis untuk Microsoft Dynamics dan produk-produk terkait dukungan menentukan bahwa pembaruan khusus akan memecahkan masalah Anda. Biaya dukungan biasa akan berlaku untuk pertanyaan dan masalah yang tidak termasuk pada pembaruan tertentu yang dimaksud dukungan tambahan.
Informasi penginstalan
Microsoft menyediakan contoh pemrogaman hanya untuk ilustrasi, tanpa garansi baik tersurat maupun tersirat. Ini mencakup, namun tidak terbatas pada, garansi yang tersirat dapat diperjualbelikan atau kesesuaian untuk tujuan tertentu. Artikel ini menganggap bahwa Anda sudah terbiasa dengan bahasa pemrograman yang ditunjukkan dan terbiasa dengan alat-alat yang digunakan untuk membuat dan prosedur debug. Teknisi dukungan Microsoft dapat membantu menjelaskan fungsionalitas prosedur tertentu. Namun, mereka tidak akan mengubah contoh tersebut untuk memberikan fungsionalitas tambahan atau menyusun prosedur untuk memenuhi persyaratan khusus Anda.
Catatan Sebelum Anda menginstal perbaikan terbaru ini, verifikasi bahwa semua pengguna klien Microsoft Dynamics NAV log off sistem. Ini termasuk layanan Microsoft Dynamics NAV aplikasi Server (NAS). Anda harus klien hanya pengguna yang masuk saat Anda menerapkan perbaikan terbaru ini.
Untuk menerapkan hotfix ini, Anda harus memiliki lisensi pengembang.
Kami menyarankan bahwa akun pengguna di jendela login Windows atau jendela login Database ditetapkan id peran "SUPER" Jika account pengguna tidak dapat menetapkan ID peran "SUPER", Anda harus memverifikasi bahwa account pengguna yang memiliki izin berikut ini:
-
Ubah izin untuk objek yang Anda akan berubah.
-
Izin eksekusi untuk objek sistem objek ID 5210 dan sistem objek ID 9015
objek.
Catatan Anda tidak harus memiliki hak untuk penyimpanan data kecuali jika Anda harus melakukan perbaikan data.
Perubahan kode
Catatan Selalu menguji kode perbaikan di lingkungan yang dikontrol sebelum menerapkan perbaikan untuk komputer produksi.
Untuk mengatasi masalah ini, ikuti langkah-langkah berikut:
-
Ubah kode di variabel Global di LSVMgt Codeunit (3010831) sebagai berikut:
Kode yang ada...Text11500@1150080 : TextConst 'ENU=Could not find Transaction No. %1 in Debit Direct Order No. %2.';
FileMgt@1150042 : Codeunit 419;
FileSystemObject@1150081 : Automation "{420B2830-E718-11CF-893D-00A0C9054228} 1.0:{0D43FE01-F093-11CF-8940-00A0C9054228}:'Microsoft Scripting Runtime'.FileSystemObject";
PROCEDURE ReleaseCustLedgEntries@1(_GenJnlLine@1150000 : Record 81);
BEGIN
...Penggantian kode
...Text11500@1150080 : TextConst 'ENU=Could not find Transaction No. %1 in Debit Direct Order No. %2.';
FileMgt@1150042 : Codeunit 419;
FileSystemObject@1150081 : Automation "{420B2830-E718-11CF-893D-00A0C9054228} 1.0:{0D43FE01-F093-11CF-8940-00A0C9054228}:'Microsoft Scripting Runtime'.FileSystemObject";
// Add the following line.
IsCancellationExist@1150082 : Boolean;
// End of the added line.
PROCEDURE ReleaseCustLedgEntries@1(_GenJnlLine@1150000 : Record 81);
BEGIN
... -
Ubah kode di ImportDebitDirectFile fungsi LSVMgt Codeunit (3010831) sebagai berikut:
Kode yang ada 1...FeeAmount := 0;
TotalRecRecords := 0;
TotalRecRecordsRev := 0;
// Journal name for no serie
GlBatchName.GET(ActGenJnlLine."Journal Template Name",ActGenJnlLine."Journal Batch Name");
...Penggantian kode 1
...FeeAmount := 0;
TotalRecRecords := 0;
TotalRecRecordsRev := 0;
// Add the following line.
IsCancellationExist := FALSE;
// End of the added line.
// Journal name for no serie
GlBatchName.GET(ActGenJnlLine."Journal Template Name",ActGenJnlLine."Journal Batch Name");
...Kode yang ada 2
...// Split File line into fields
// Delete the following lines.
FileID := COPYSTR(Line,1,3);
IF FileID <> '036' THEN
ERROR(Text049 + Text011);
TA := COPYSTR(Line,36,2);
IF NOT (TA = '97') THEN BEGIN
TotalRecord := FALSE;
EVALUATE(InvoiceAmt,COPYSTR(Line,54,13));
EVALUATE(yyCR,COPYSTR(Line,4,2));
EVALUATE(mmCR,COPYSTR(Line,6,2));
EVALUATE(ddCR,COPYSTR(Line,8,2));
IF yyCR > 98 THEN
PostDate := DMY2DATE(ddCR,mmCR,1900 + yyCR)
ELSE
PostDate := DMY2DATE(ddCR,mmCR,2000 + yyCR);
DebitDirectOrderNo := COPYSTR(Line,34,2);
EVALUATE(DebitDirectRecordNo,COPYSTR(Line,38,6));
EVALUATE(RejectionCode,COPYSTR(Line,543,2));
Currency := COPYSTR(Line,51,3);
// DEBIT DIRECT
LsvJour.RESET;
LsvJour.SETRANGE("Credit Date",PostDate);
LsvJour.SETRANGE("DebitDirect Orderno.",DebitDirectOrderNo);
IF NOT LsvJour.FIND('+') THEN
ERROR(Text059,DebitDirectOrderNo,PostDate);
LsvJournalLine.RESET;
//CH0001.begin
LsvJournalLine.SETCURRENTKEY("LSV Journal No.","Transaction No.");
LsvJournalLine.SETRANGE("LSV Journal No.",LsvJour."No.");
//LsvJournalLine.SETRANGE("Line No.",DebitDirectRecordNo);
LsvJournalLine.SETRANGE("Transaction No.",DebitDirectRecordNo);
//LsvJournalLine.FIND('-');
IF NOT LsvJournalLine.FINDFIRST THEN BEGIN
d.CLOSE;
ERROR(Text11500, DebitDirectRecordNo, DebitDirectOrderNo);
END;
//CH0001.end
InInvoiceNo := LsvJournalLine."Applies-to Doc. No.";
// END DEBIT DIRECT
// Process transaction of credit record
CASE TA OF
'81': // Credit
BEGIN
Transaction := Transaction::Credit;
LsvJournalLine."LSV Status" := LsvJournalLine."LSV Status"::Open;
LsvJournalLine."DD Rejection Reason" := LsvJournalLine."DD Rejection Reason"::" ";
LsvJournalLine.MODIFY;
IF LSVSetup.READPERMISSION THEN BEGIN
ClosedByESR(InInvoiceNo);
END;
END;
'84': // Cancellation "Storno"
BEGIN
IF RejectionCode <> 2 THEN
Transaction := Transaction::Correction
ELSE
Transaction := Transaction::Cancellation;
LsvJournalLine."LSV Status" := LsvJournalLine."LSV Status"::Rejected;
LsvJournalLine."DD Rejection Reason" := RejectionCode;
LsvJournalLine.MODIFY;
END;
ELSE
ERROR(Text023 + Text011);
END;
END ELSE BEGIN
TotalRecord := TRUE;
EVALUATE(TempAmount,COPYSTR(Line,60,13));
CreditAmount := CreditAmount + TempAmount / 100;
EVALUATE(TempAmount,COPYSTR(Line,82,13));
RejectionAmount := RejectionAmount + TempAmount / 100;
EVALUATE(TempAmount,COPYSTR(Line,104,13));
ReversalAmount := ReversalAmount + TempAmount / 100;
EVALUATE(TempAmount,COPYSTR(Line,120,11));
FeeAmount := FeeAmount + TempAmount / 100;
// Credit Count
EVALUATE(TempAmount,COPYSTR(Line,54,6));
TotalRecRecords := TotalRecRecords + TempAmount;
// Rejection Count
EVALUATE(TempAmount,COPYSTR(Line,76,6));
TotalRecRecordsRev := TotalRecRecordsRev + TempAmount;
// Reversal Count
EVALUATE(TempAmount,COPYSTR(Line,98,6));
TotalRecRecordsRev := TotalRecRecordsRev + TempAmount;
END;
// END OF SPLIT
IF NOT (TotalRecord) AND (Transaction <> Transaction::Correction) THEN BEGIN
// End of the deleted lines.
// Insert GL line
GenJournalLine.INIT;
GenJournalLine."Journal Template Name" := ActGenJnlLine."Journal Template Name";
...Penggantian kode 2
...// Split File line into fields
// Add the following lines.
FileID := COPYSTR(Line,1,3);
IF FileID <> '036' THEN
ERROR(Text049 + Text011);
TA := COPYSTR(Line,36,2);
IF NOT (TA = '97') THEN BEGIN
TotalRecord := FALSE;
EVALUATE(InvoiceAmt,COPYSTR(Line,54,13));
EVALUATE(yyCR,COPYSTR(Line,4,2));
EVALUATE(mmCR,COPYSTR(Line,6,2));
EVALUATE(ddCR,COPYSTR(Line,8,2));
IF yyCR > 98 THEN
PostDate := DMY2DATE(ddCR,mmCR,1900 + yyCR)
ELSE
PostDate := DMY2DATE(ddCR,mmCR,2000 + yyCR);
DebitDirectOrderNo := COPYSTR(Line,34,2);
EVALUATE(DebitDirectRecordNo,COPYSTR(Line,38,6));
EVALUATE(RejectionCode,COPYSTR(Line,543,2));
Currency := COPYSTR(Line,51,3);
// DEBIT DIRECT
LsvJour.RESET;
LsvJour.SETRANGE("Credit Date",PostDate);
LsvJour.SETRANGE("DebitDirect Orderno.",DebitDirectOrderNo);
IF NOT LsvJour.FIND('+') THEN
ERROR(Text059,DebitDirectOrderNo,PostDate);
LsvJournalLine.RESET;
//CH0001.begin
LsvJournalLine.SETCURRENTKEY("LSV Journal No.","Transaction No.");
LsvJournalLine.SETRANGE("LSV Journal No.",LsvJour."No.");
//LsvJournalLine.SETRANGE("Line No.",DebitDirectRecordNo);
LsvJournalLine.SETRANGE("Transaction No.",DebitDirectRecordNo);
//LsvJournalLine.FIND('-');
IF NOT LsvJournalLine.FINDFIRST THEN BEGIN
d.CLOSE;
ERROR(Text11500, DebitDirectRecordNo, DebitDirectOrderNo);
END;
//CH0001.end
InInvoiceNo := LsvJournalLine."Applies-to Doc. No.";
// END DEBIT DIRECT
// Process transaction of credit record
CASE TA OF
'81': // Credit
BEGIN
Transaction := Transaction::Credit;
LsvJournalLine."LSV Status" := LsvJournalLine."LSV Status"::Open;
LsvJournalLine."DD Rejection Reason" := LsvJournalLine."DD Rejection Reason"::" ";
LsvJournalLine.MODIFY;
IF LSVSetup.READPERMISSION THEN BEGIN
ClosedByESR(InInvoiceNo);
END;
END;
'84': // Cancellation "Storno"
BEGIN
IF RejectionCode <> 2 THEN
Transaction := Transaction::Correction
ELSE
Transaction := Transaction::Cancellation;
LsvJournalLine."LSV Status" := LsvJournalLine."LSV Status"::Rejected;
LsvJournalLine."DD Rejection Reason" := RejectionCode;
LsvJournalLine.MODIFY;
END;
ELSE
ERROR(Text023 + Text011);
END;
END ELSE BEGIN
TotalRecord := TRUE;
EVALUATE(TempAmount,COPYSTR(Line,60,13));
CreditAmount := CreditAmount + TempAmount / 100;
EVALUATE(TempAmount,COPYSTR(Line,82,13));
RejectionAmount := RejectionAmount + TempAmount / 100;
EVALUATE(TempAmount,COPYSTR(Line,104,13));
ReversalAmount := ReversalAmount + TempAmount / 100;
EVALUATE(TempAmount,COPYSTR(Line,120,11));
FeeAmount := FeeAmount + TempAmount / 100;
// Credit Count
EVALUATE(TempAmount,COPYSTR(Line,54,6));
TotalRecRecords := TotalRecRecords + TempAmount;
// Rejection Count
EVALUATE(TempAmount,COPYSTR(Line,76,6));
TotalRecRecordsRev := TotalRecRecordsRev + TempAmount;
// Reversal Count
EVALUATE(TempAmount,COPYSTR(Line,98,6));
TotalRecRecordsRev := TotalRecRecordsRev + TempAmount;
END;
// END OF SPLIT
IF NOT (TotalRecord) AND (Transaction <> Transaction::Correction) THEN BEGIN
// End of the added lines.
// Insert GL line
GenJournalLine.INIT;
GenJournalLine."Journal Template Name" := ActGenJnlLine."Journal Template Name";
...Kode yang ada 3
...GenJournalLine.INIT;
GenJournalLine."Journal Template Name" := ActGenJnlLine."Journal Template Name";
GenJournalLine."Journal Batch Name" := ActGenJnlLine."Journal Batch Name";
LastLineNo := LastLineNo + 10000;
GenJournalLine."Line No." := LastLineNo;
GenJournalLine."Document No." := NextDocNo;
...Penggantian kode 3
... GenJournalLine.INIT;
GenJournalLine."Journal Template Name" := ActGenJnlLine."Journal Template Name";
GenJournalLine."Journal Batch Name" := ActGenJnlLine."Journal Batch Name";
// Add the following lines.
GenJournalLine."Posting Date" := PostDate;
GenJournalLine."Account Type" := GenJournalLine."Account Type"::Customer;
IF Transaction = Transaction::Cancellation THEN BEGIN
IsCancellationExist := TRUE;
GenJournalLine."Document Type" := GenJournalLine."Document Type"::Refund;
NextDocNo := NoSeriesMgt.GetNextNo(GlBatchName."No. Series",PostDate,FALSE);
END ELSE
GenJournalLine."Document Type" := GenJournalLine."Document Type"::Payment;
// End of the added lines.
LastLineNo := LastLineNo + 10000;
GenJournalLine."Line No." := LastLineNo;
GenJournalLine."Document No." := NextDocNo;
...Ada kode 4
...LastLineNo := LastLineNo + 10000;
GenJournalLine."Line No." := LastLineNo;
GenJournalLine."Document No." := NextDocNo;
// Delete the following lines.
GenJournalLine."Posting Date" := PostDate;
GenJournalLine."Account Type" := GenJournalLine."Account Type"::Customer;
GenJournalLine."Document Type" := GenJournalLine."Document Type"::Payment;
// End of the deleted lines.
GeneralLedgerSetup.GET;
IF GeneralLedgerSetup."LCY Code" <> Currency THEN
...Penggantian kode 4
... LastLineNo := LastLineNo + 10000;
GenJournalLine."Line No." := LastLineNo;
GenJournalLine."Document No." := NextDocNo;
// Add the following lines.
IF Transaction = Transaction::Cancellation THEN
NextDocNo := NoSeriesMgt.GetNextNo(GlBatchName."No. Series",PostDate,FALSE);
// End of the added lines.
GeneralLedgerSetup.GET;
IF GeneralLedgerSetup."LCY Code" <> Currency THEN
...Ada kode 5
... IF CustLedgerEntry.FIND('-') THEN
GenJournalLine.VALIDATE("Account No.",CustLedgerEntry."Customer No.");
// Delete the following lines.
GenJournalLine."Applies-to Doc. Type" := GenJournalLine."Applies-to Doc. Type"::Invoice;
GenJournalLine."Applies-to Doc. No." := InInvoiceNo;
// End of the deleted lines.
IF GenJournalLine."Currency Code" <> CustLedgerEntry."Currency Code" THEN
GenJournalLine.VALIDATE("Currency Code",CustLedgerEntry."Currency Code");
...Penggantian kode 5
... IF CustLedgerEntry.FIND('-') THEN
GenJournalLine.VALIDATE("Account No.",CustLedgerEntry."Customer No.");
// Add the following lines.
IF Transaction <> Transaction::Cancellation THEN BEGIN
GenJournalLine."Applies-to Doc. Type" := GenJournalLine."Applies-to Doc. Type"::Invoice;
GenJournalLine."Applies-to Doc. No." := InInvoiceNo;
END;
// End of the added lines.
IF GenJournalLine."Currency Code" <> CustLedgerEntry."Currency Code" THEN
GenJournalLine.VALIDATE("Currency Code",CustLedgerEntry."Currency Code");
...Kode yang ada 6
...// *** Bal account per line or as combined entry
// Delete the following line.
IF MultiplePostingDates THEN BEGIN
// End of the deleted line.
// Bal Account per line
IF GenJournalLine.FIND('-') THEN
REPEAT
...Penggantian kode 6
...// *** Bal account per line or as combined entry
// Add the following line.
IF MultiplePostingDates OR IsCancellationExist THEN BEGIN
// End of the added line.
// Bal Account per line
IF GenJournalLine.FIND('-') THEN
REPEAT
...
Prasyarat
Anda harus memiliki salah satu produk berikut ini diinstal untuk menerapkan perbaikan terbaru ini:
-
Swiss versi Microsoft Dynamics NAV 2009 R2
-
Swiss versi Microsoft Dynamics NAV 2009 SP1
Informasi penghapusan
Anda tidak dapat menghapus hotfix ini.
Status
Microsoft telah memastikan bahwa ini merupakan masalah di dalam produk Microsoft sebagaimana tercantum di bagian "Berlaku untuk".
Catatan Ini adalah artikel "Penerbitan cepat" dibuat langsung dari dalam organisasi dukungan Microsoft. Informasi yang terkandung di dalamnya disediakan sebagai tanggapan masalah yang muncul. Sebagai akibat dari kecepatan untuk menjadikannya tersedia, materi dapat mengandung kesalahan ketik dan dapat direvisi setiap saat tanpa pemberitahuan. Lihat Ketentuanuntuk pertimbangan lainnya.