Artikel ini berlaku untuk Microsoft Dynamics NAV untuk bahasa lokal Spanyol (es).
Gejala
Jika nilai Diskon Pembayaran % tidak nol dalam versi Bahasa Spanyol Microsoft Dynamics NAV 2009 Service Pack 1 (SP1), diskon pembayaran dihitung secara tidak benar dalam faktur pembelian dan faktur penjualan.
Resolusi
Informasi hotfix
Hotfix yang didukung kini tersedia dari Microsoft. Namun, hanya dimaksudkan untuk memperbaiki masalah yang dijelaskan dalam artikel ini. Terapkan hanya ke sistem yang mengalami masalah khusus ini. Hotfix ini mungkin menerima pengujian tambahan. Oleh karena itu, jika Anda tidak terpengaruh oleh masalah ini, kami menyarankan agar Anda menunggu paket layanan Microsoft Dynamics NAV 2009 berikutnya atau versi Microsoft Dynamics NAV berikutnya yang berisi hotfix ini.
Catatan Dalam kasus khusus, biaya yang biasanya ditimbulkan untuk panggilan dukungan mungkin dibatalkan jika Profesional Dukungan Teknis untuk Microsoft Dynamics dan produk terkait menentukan bahwa pembaruan tertentu akan mengatasi masalah Anda. Biaya dukungan biasa akan berlaku untuk pertanyaan dan masalah dukungan tambahan yang tidak memenuhi syarat untuk pembaruan tertentu yang dimaksud.
Informasi penginstalan
Microsoft menyediakan contoh pemrograman untuk ilustrasi saja, tanpa jaminan baik tersurat maupun tersirat. Ini termasuk, tetapi tidak terbatas pada, jaminan tersirat dari kelayakan jual atau kesesuaian untuk tujuan tertentu. Artikel ini mengasumsikan bahwa Anda sudah terbiasa dengan bahasa pemrograman yang ditunjukkan dan dengan alat yang digunakan untuk membuat dan men-debug prosedur. Teknisi dukungan Microsoft dapat membantu menjelaskan fungsionalitas prosedur tertentu, tetapi mereka tidak akan mengubah contoh ini untuk menyediakan fungsionalitas tambahan atau prosedur konstruksi untuk memenuhi persyaratan tertentu Anda.
Catatan Sebelum Anda menginstal hotfix ini, verifikasi bahwa semua pengguna klien Microsoft Navision telah keluar dari sistem. Ini termasuk pengguna klien Microsoft Navision Application Services (NAS). Anda harus menjadi satu-satunya pengguna klien yang masuk ketika Anda menerapkan hotfix ini.
Untuk menerapkan hotfix ini, Anda harus memiliki lisensi pengembang.
Kami menyarankan agar akun pengguna di jendela Windows Logins atau di jendela Login Database diberi ID peran "SUPER". Jika akun pengguna tidak dapat ditetapkan sebagai ID peran "SUPER", Anda harus memverifikasi bahwa akun pengguna memiliki izin berikut:
- Izin Ubah untuk objek yang akan Anda ubah.
- Izin Jalankan untuk objek System Object ID 5210 dan untuk objek System Object ID 9015.
Catatan Anda tidak harus memiliki hak untuk penyimpanan data kecuali Anda harus melakukan perbaikan data.
Perubahan kode
Catatan Selalu uji perbaikan kode di lingkungan terkontrol sebelum Anda menerapkan perbaikan pada komputer produksi Anda.
Untuk mengatasi masalah ini, ikuti langkah-langkah ini:
Ubah kode dalam fungsi CalculateInvoiceDiscount di Sales-Calc. Codeunit diskon (60) sebagai berikut:
Kode yang sudah ada 1... SalesSetup@1003 : Record 311; TempServiceChargeLine@1005 : TEMPORARY Record 37; GLAcc@1100000 : Record 15; BEGIN SalesSetup.GET; WITH SalesLine DO BEGIN ...Kode pengganti 1
... SalesSetup@1003 : Record 311; TempServiceChargeLine@1005 : TEMPORARY Record 37; GLAcc@1100000 : Record 15; // Add the following line. TempSalesLine@1100001 : TEMPORARY Record 37; // End of the line. BEGIN SalesSetup.GET; WITH SalesLine DO BEGIN ...Kode yang sudah ada 2
... (SalesLine2."Prepayment %" = 0) THEN SalesLine2.VALIDATE("Inv. Discount Amount"); // Delete the following lines. IF SalesLine2."Allow Invoice Disc." THEN CASE GLSetup."Discount Calculation" OF GLSetup."Discount Calculation"::" ", GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. + Payment Disc.", GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. * Payment Disc.": SalesLine2."Inv. Discount Amount" := ROUND(SalesLine2."Line Amount" * CustInvDisc."Discount %" / 100,0.000001); GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. + Payment Disc.", GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. * Payment Disc.": SalesLine2."Inv. Discount Amount" := ROUND( (SalesLine2."Line Amount" + SalesLine2."Line Discount Amount" ) * CustInvDisc."Discount %" / 100,0.000001); END; IF GLSetup."Payment Discount Type" = GLSetup."Payment Discount Type"::"Calc. Pmt. Disc. on Lines" THEN BEGIN GLSetup.TESTFIELD("Discount Calculation"); CASE GLSetup."Discount Calculation" OF GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. + Payment Disc.", GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. + Payment Disc.": SalesLine2."Pmt. Disc. Given Amount" := ROUND( (SalesLine2."Line Amount" + SalesLine2."Line Discount Amount") * SalesHeader."Payment Discount %" / 100,0.01); GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. * Payment Disc.", GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. * Payment Disc.": SalesLine2."Pmt. Disc. Given Amount" := ROUND( (SalesLine2."Line Amount" - SalesLine2."Inv. Discount Amount") * SalesHeader."Payment Discount %" / 100,0.01); END; END; // End of the lines. IF (SalesLine2.Type <> SalesLine2.Type::"Charge (Item)") AND (SalesLine2."Prepayment %" = 0) ...Kode pengganti 2
... (SalesLine2."Prepayment %" = 0) THEN SalesLine2.VALIDATE("Inv. Discount Amount"); // Add the following lines. IF SalesLine2."Allow Invoice Disc." THEN BEGIN CASE GLSetup."Discount Calculation" OF GLSetup."Discount Calculation"::" ", GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. + Payment Disc.", GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. * Payment Disc.": BEGIN TempSalesLine."Inv. Discount Amount" := TempSalesLine."Inv. Discount Amount" + SalesLine2."Line Amount" * CustInvDisc."Discount %" / 100; SalesLine2."Inv. Discount Amount" := ROUND(TempSalesLine."Inv. Discount Amount",0.000001); END; GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. + Payment Disc.", GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. * Payment Disc.": BEGIN TempSalesLine."Inv. Discount Amount" := TempSalesLine."Inv. Discount Amount" + (SalesLine2."Line Amount" + SalesLine2."Line Discount Amount") * CustInvDisc."Discount %" / 100; SalesLine2."Inv. Discount Amount" := ROUND(TempSalesLine."Inv. Discount Amount",0.000001); END; END; TempSalesLine."Inv. Discount Amount" := TempSalesLine."Inv. Discount Amount" - SalesLine2."Inv. Discount Amount"; END; IF GLSetup."Payment Discount Type" = GLSetup."Payment Discount Type"::"Calc. Pmt. Disc. on Lines" THEN BEGIN GLSetup.TESTFIELD("Discount Calculation"); CASE GLSetup."Discount Calculation" OF GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. + Payment Disc.", GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. + Payment Disc.": BEGIN TempSalesLine."Pmt. Disc. Given Amount" := TempSalesLine."Pmt. Disc. Given Amount" + (SalesLine2."Line Amount" + SalesLine2."Line Discount Amount") * SalesHeader."Payment Discount %" / 100; SalesLine2."Pmt. Disc. Given Amount" := ROUND(TempSalesLine."Pmt. Disc. Given Amount",0.01); END; GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. * Payment Disc.", GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. * Payment Disc.": BEGIN TempSalesLine."Pmt. Disc. Given Amount" := TempSalesLine."Pmt. Disc. Given Amount" + (SalesLine2."Line Amount" - SalesLine2."Inv. Discount Amount") * SalesHeader."Payment Discount %" / 100; SalesLine2."Pmt. Disc. Given Amount" := ROUND(TempSalesLine."Pmt. Disc. Given Amount",0.01); END; END; TempSalesLine."Pmt. Disc. Given Amount" := TempSalesLine."Pmt. Disc. Given Amount" - SalesLine2."Pmt. Disc. Given Amount"; END; // End of the lines. IF (SalesLine2.Type <> SalesLine2.Type::"Charge (Item)") AND (SalesLine2."Prepayment %" = 0) ...Ubah kode dalam fungsi CalculateInvoiceDiscount di Purch.-Calc.Discount codeunit (70) sebagai berikut:
Kode yang sudah ada 1... PurchSetup@1003 : Record 312; TempServiceChargeLine@1005 : TEMPORARY Record 39; GLAcc@1100000 : Record 15; BEGIN PurchSetup.GET; WITH PurchLine DO BEGIN ...Kode pengganti 1
... PurchSetup@1003 : Record 312; TempServiceChargeLine@1005 : TEMPORARY Record 39; GLAcc@1100000 : Record 15; // Add the following line. TempPurchLine@1100001 : TEMPORARY Record 39; // End of the line. BEGIN PurchSetup.GET; WITH PurchLine DO BEGIN ...Kode yang sudah ada 2
... (PurchLine2."Prepayment %" = 0) THEN PurchLine2.VALIDATE("Inv. Discount Amount"); // Delete the following lines. IF PurchLine2."Allow Invoice Disc." THEN CASE GLSetup."Discount Calculation" OF GLSetup."Discount Calculation"::" ", GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. + Payment Disc.", GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. * Payment Disc.": PurchLine2."Inv. Discount Amount" := ROUND(PurchLine2."Line Amount" * VendInvDisc."Discount %" / 100,0.01); GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. + Payment Disc.", GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. * Payment Disc.": PurchLine2."Inv. Discount Amount" := ROUND( (PurchLine2."Line Amount" + PurchLine2."Line Discount Amount" ) * VendInvDisc."Discount %" / 100,0.01); END; IF GLSetup."Payment Discount Type" = GLSetup."Payment Discount Type"::"Calc. Pmt. Disc. on Lines" THEN BEGIN GLSetup.TESTFIELD("Discount Calculation"); CASE GLSetup."Discount Calculation" OF GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. + Payment Disc.", GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. + Payment Disc.": PurchLine2."Pmt. Disc. Rcd. Amount" := ROUND( (PurchLine2."Line Amount" + PurchLine2."Line Discount Amount") * PurchHeader."Payment Discount %" / 100,0.01); GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. * Payment Disc.", GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. * Payment Disc.": PurchLine2."Pmt. Disc. Rcd. Amount" := ROUND( (PurchLine2."Line Amount" - PurchLine2."Inv. Discount Amount") * PurchHeader."Payment Discount %" / 100,0.01); END; END; // End of the lines. IF (PurchLine2.Type <> PurchLine2.Type::"Charge (Item)") AND ...Kode pengganti 2
... (PurchLine2."Prepayment %" = 0) THEN PurchLine2.VALIDATE("Inv. Discount Amount"); // Add the following lines. IF PurchLine2."Allow Invoice Disc." THEN BEGIN CASE GLSetup."Discount Calculation" OF GLSetup."Discount Calculation"::" ", GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. + Payment Disc.", GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. * Payment Disc.": BEGIN TempPurchLine."Inv. Discount Amount" := TempPurchLine."Inv. Discount Amount" + PurchLine2."Line Amount" * VendInvDisc."Discount %" / 100; PurchLine2."Inv. Discount Amount" := ROUND(TempPurchLine."Inv. Discount Amount",0.01); END; GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. + Payment Disc.", GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. * Payment Disc.": BEGIN TempPurchLine."Inv. Discount Amount" := TempPurchLine."Inv. Discount Amount" + (PurchLine2."Line Amount" + PurchLine2."Line Discount Amount") * VendInvDisc."Discount %" / 100; PurchLine2."Inv. Discount Amount" := ROUND(TempPurchLine."Inv. Discount Amount",0.01); END; END; TempPurchLine."Inv. Discount Amount" := TempPurchLine."Inv. Discount Amount" - PurchLine2."Inv. Discount Amount"; END; IF GLSetup."Payment Discount Type" = GLSetup."Payment Discount Type"::"Calc. Pmt. Disc. on Lines" THEN BEGIN GLSetup.TESTFIELD("Discount Calculation"); CASE GLSetup."Discount Calculation" OF GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. + Payment Disc.", GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. + Payment Disc.": BEGIN TempPurchLine."Pmt. Disc. Rcd. Amount" := TempPurchLine."Pmt. Disc. Rcd. Amount" + (PurchLine2."Line Amount" + PurchLine2."Line Discount Amount") * PurchHeader."Payment Discount %" / 100; PurchLine2."Pmt. Disc. Rcd. Amount" := ROUND(TempPurchLine."Pmt. Disc. Rcd. Amount",0.01); END; GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. * Payment Disc.", GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. * Payment Disc.": BEGIN TempPurchLine."Pmt. Disc. Rcd. Amount" := TempPurchLine."Pmt. Disc. Rcd. Amount" + (PurchLine2."Line Amount" - PurchLine2."Inv. Discount Amount") * PurchHeader."Payment Discount %" / 100; PurchLine2."Pmt. Disc. Rcd. Amount" := ROUND(TempPurchLine."Pmt. Disc. Rcd. Amount",0.01); END; END; TempPurchLine."Pmt. Disc. Rcd. Amount" := TempPurchLine."Pmt. Disc. Rcd. Amount" - PurchLine2."Pmt. Disc. Rcd. Amount"; END; // End of the lines. IF (PurchLine2.Type <> PurchLine2.Type::"Charge (Item)") AND ...Ubah kode dalam fungsi CalculateInvoiceDiscount di Service-Calc. Codeunit diskon (5950) sebagai berikut:
Kode yang sudah ada 1... SalesSetup@1005 : Record 311; ServiceChargeLineNo@1004 : Integer; GLAcc@1100000 : Record 15; BEGIN ServSetup.GET; WITH ServiceLine DO BEGIN ...Kode pengganti 1
... SalesSetup@1005 : Record 311; ServiceChargeLineNo@1004 : Integer; GLAcc@1100000 : Record 15; // Add the following line. TempServiceLine@1100001 : TEMPORARY Record 5902; // End of the line. BEGIN ServSetup.GET; WITH ServiceLine DO BEGIN ...Kode yang sudah ada 2
... IF (ServiceLine2.Quantity <> 0) AND NOT InvAllow THEN BEGIN ServiceLine2."Pmt. Disc. Given Amount" := 0; ServiceLine2.VALIDATE("Inv. Discount Amount"); // Delete the following lines. IF ServiceLine2."Allow Invoice Disc." THEN CASE GLSetup."Discount Calculation" OF GLSetup."Discount Calculation"::" ", GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. + Payment Disc.", GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. * Payment Disc.": ServiceLine2."Inv. Discount Amount" := ROUND(ServiceLine2."Line Amount" * CustInvDisc."Discount %" / 100,0.000001); GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. + Payment Disc.", GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. * Payment Disc.": ServiceLine2."Inv. Discount Amount" := ROUND( (ServiceLine2."Line Amount" + ServiceLine2."Line Discount Amount" ) * CustInvDisc."Discount %" / 100,0.000001); END; IF GLSetup."Payment Discount Type" = GLSetup."Payment Discount Type"::"Calc. Pmt. Disc. on Lines" THEN BEGIN GLSetup.TESTFIELD("Discount Calculation"); CASE GLSetup."Discount Calculation" OF GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. + Payment Disc.", GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. + Payment Disc.": ServiceLine2."Pmt. Disc. Given Amount" := ROUND( (ServiceLine2."Line Amount" + ServiceLine2."Line Discount Amount") * ServHeader."Payment Discount %" / 100,0.01); GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. * Payment Disc.", GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. * Payment Disc.": ServiceLine2."Pmt. Disc. Given Amount" := ROUND( (ServiceLine2."Line Amount" - ServiceLine2."Inv. Discount Amount") * ServHeader."Payment Discount %" / 100,0.01); END; END; // End of the lines. ServiceLine2.VALIDATE("Inv. Discount Amount"); ServiceLine2.MODIFY; ...Kode pengganti 2
... IF (ServiceLine2.Quantity <> 0) AND NOT InvAllow THEN BEGIN ServiceLine2."Pmt. Disc. Given Amount" := 0; ServiceLine2.VALIDATE("Inv. Discount Amount"); // Add the following lines. IF ServiceLine2."Allow Invoice Disc." THEN BEGIN CASE GLSetup."Discount Calculation" OF GLSetup."Discount Calculation"::" ", GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. + Payment Disc.", GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. * Payment Disc.": BEGIN TempServiceLine."Inv. Discount Amount" := TempServiceLine."Inv. Discount Amount" + ServiceLine2."Line Amount" * CustInvDisc."Discount %" / 100; ServiceLine2."Inv. Discount Amount" := ROUND(TempServiceLine."Inv. Discount Amount",0.000001); END; GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. + Payment Disc.", GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. * Payment Disc.": BEGIN TempServiceLine."Inv. Discount Amount" := TempServiceLine."Inv. Discount Amount" + (ServiceLine2."Line Amount" + ServiceLine2."Line Discount Amount") * CustInvDisc."Discount %" / 100; ServiceLine2."Inv. Discount Amount" := ROUND(TempServiceLine."Inv. Discount Amount",0.000001); END; END; TempServiceLine."Inv. Discount Amount" := TempServiceLine."Inv. Discount Amount" - ServiceLine2."Inv. Discount Amount"; END; IF GLSetup."Payment Discount Type" = GLSetup."Payment Discount Type"::"Calc. Pmt. Disc. on Lines" THEN BEGIN GLSetup.TESTFIELD("Discount Calculation"); CASE GLSetup."Discount Calculation" OF GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. + Payment Disc.", GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. + Payment Disc.": BEGIN TempServiceLine."Pmt. Disc. Given Amount" := TempServiceLine."Pmt. Disc. Given Amount" + (ServiceLine2."Line Amount" + ServiceLine2."Line Discount Amount") * ServHeader."Payment Discount %" / 100; ServiceLine2."Pmt. Disc. Given Amount" := ROUND(TempServiceLine."Pmt. Disc. Given Amount",0.01); END; GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. * Payment Disc.", GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. * Payment Disc.": BEGIN TempServiceLine."Pmt. Disc. Given Amount" := TempServiceLine."Pmt. Disc. Given Amount" + (ServiceLine2."Line Amount" - ServiceLine2."Inv. Discount Amount") * ServHeader."Payment Discount %" / 100; ServiceLine2."Pmt. Disc. Given Amount" := ROUND(TempServiceLine."Pmt. Disc. Given Amount",0.01); END; END; TempServiceLine."Pmt. Disc. Given Amount" := TempServiceLine."Pmt. Disc. Given Amount" - ServiceLine2."Pmt. Disc. Given Amount"; END; // End of the lines. ServiceLine2.VALIDATE("Inv. Discount Amount"); ServiceLine2.MODIFY; ...
Prasyarat
Anda harus menginstal Microsoft Dynamics NAV 2009 Service Pack 1 versi Spanyol untuk menerapkan hotfix ini.
Informasi penghapusan
Anda tidak dapat menghapus hotfix ini.
Status
Microsoft telah mengonfirmasi bahwa ini adalah masalah dalam produk Microsoft sebagaimana tercantum di bagian "Berlaku untuk".
Catatan Ini adalah artikel "FAST PUBLISH" yang dibuat langsung dari dalam organisasi dukungan Microsoft. Informasi yang dimuat di sini disediakan sebagaimana adanya sebagai respons terhadap masalah yang muncul. Sebagai akibat dari kecepatan dalam membuatnya tersedia, materi mungkin menyertakan kesalahan pengetikan dan dapat direvisi kapan saja tanpa pemberitahuan. Lihat Ketentuan Penggunaan untuk pertimbangan lain.