Jurnal Intrastat tidak berfungsi seperti yang diharapkan jika faktur berisi dua baris item yang sama dalam versi Bahasa Italia Microsoft Dynamics NAV

Berlaku Untuk
Dynamics NAV 2009 Service Pack 1 Microsoft Dynamics NAV 5.0 Service Pack 1

Artikel ini berlaku untuk Microsoft Dynamics NAV untuk lokal bahasa Italia (ini).

Gejala

Misalnya Anda memposting faktur yang berisi dua baris item yang sama dalam versi Bahasa Italia Microsoft Dynamics NAV. Saat Anda membuat jurnal Intrastat, jurnal Intrastat tidak berfungsi seperti yang diharapkan. Sistem hanya menampilkan baris pertama.
Masalah ini terjadi pada produk berikut ini:

  • Microsoft Dynamics NAV 2009 Service Pack 1 versi Italia
  • Microsoft Dynamics NAV 5.0 Service Pack 1 versi Italia

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 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, ubah kode dalam fungsi FromSentToOpen di Vend. Codeunit Status List-Change (12171) sebagai berikut:

Kode yang sudah ada

...
IF ValueEntry.FINDSET(FALSE,FALSE) THEN BEGIN
  CASE ValueEntry."Item Ledger Entry Type" OF
    ValueEntry."Item Ledger Entry Type" :: Purchase: BEGIN
      IF ValueEntry."Invoiced Quantity" > 0 THEN BEGIN
        PurchInvLine.SETRANGE("Document No.",ValueEntry."Document No.");
        PurchInvLine.SETRANGE(Type, PurchInvLine.Type::Item);
        PurchInvLine.SETRANGE("No.",ValueEntry."Item No.");

// Delete the following line.
        PurchInvLine.SETRANGE("Line No.",ValueEntry."Document Line No."); 

        IF PurchInvLine.FIND('-') THEN BEGIN
          PurchInvHeader.GET(ValueEntry."Document No.");
          REPEAT
            TotalInvoicedQty := TotalInvoicedQty + PurchInvLine.Quantity;
            IF PurchInvHeader."Currency Factor" <> 0 THEN
              TotalAmt := TotalAmt + (PurchInvLine.Amount / PurchInvHeader."Currency Factor")
            ELSE
              TotalAmt := TotalAmt + PurchInvLine.Amount;
          UNTIL PurchInvLine.NEXT = 0;
        END ELSE BEGIN
          PurchRcptLine.SETRANGE("Document No.",ValueEntry."Document No.");
          PurchRcptLine.SETRANGE(Type, PurchRcptLine.Type::Item);
          PurchRcptLine.SETRANGE("No.",ValueEntry."Item No.");

// Delete the following line.
          PurchRcptLine.SETRANGE("Line No.",ValueEntry."Document Line No."); 

          IF PurchRcptLine.FIND('-') THEN BEGIN
            REPEAT
              IF PurchRcptLine.Correction = TRUE THEN
                CorrectionFound := TRUE;
              DocItemSum += PurchRcptLine."Quantity Invoiced";
            UNTIL PurchRcptLine.NEXT = 0;
            IF (DocItemSum = 0) AND CorrectionFound THEN CurrReport.SKIP;
          END;
        END;
      END ELSE BEGIN
        PurchCrMemoLine.SETRANGE("Document No.",ValueEntry."Document No.");
        PurchCrMemoLine.SETRANGE(Type, PurchInvLine.Type::Item);
        PurchCrMemoLine.SETRANGE("No.",ValueEntry."Item No.");

// Delete the following line.
        PurchCrMemoLine.SETRANGE("Line No.",ValueEntry."Document Line No."); 

        IF PurchCrMemoLine.FIND('-') THEN BEGIN
          PurchCrMemoHdr.GET(ValueEntry."Document No.");
          REPEAT
            TotalInvoicedQty := TotalInvoicedQty - PurchCrMemoLine.Quantity;
            IF PurchCrMemoHdr."Currency Factor" <> 0 THEN
              TotalAmt := TotalAmt - (PurchCrMemoLine.Amount / PurchCrMemoHdr."Currency Factor")
            ELSE
              TotalAmt := TotalAmt - PurchCrMemoLine.Amount;
          UNTIL PurchCrMemoLine.NEXT = 0;
        END ELSE BEGIN
          PurchRcptLine.SETRANGE("Document No.",ValueEntry."Document No.");
          PurchRcptLine.SETRANGE(Type, PurchRcptLine.Type::Item);
          PurchRcptLine.SETRANGE("No.",ValueEntry."Item No.");

// Delete the following line.
          PurchRcptLine.SETRANGE("Line No.",ValueEntry."Document Line No."); 

          IF PurchRcptLine.FIND('-')  THEN BEGIN
            REPEAT
              IF PurchRcptLine.Correction = TRUE THEN
                CorrectionFound := TRUE;
              DocItemSum += PurchRcptLine."Quantity Invoiced";
            UNTIL PurchRcptLine.NEXT = 0;
            IF (DocItemSum = 0) AND CorrectionFound THEN CurrReport.SKIP;
          END;
        END;
      END;
    END;

    ValueEntry."Item Ledger Entry Type" :: Sale: BEGIN
      IF ValueEntry."Invoiced Quantity" < 0 THEN BEGIN
        SalesInvoiceLine.SETRANGE("Document No.",ValueEntry."Document No.");
        SalesInvoiceLine.SETRANGE(Type, SalesInvoiceLine.Type::Item);
        SalesInvoiceLine.SETRANGE("No.",ValueEntry."Item No.");

// Delete the following line.
        SalesInvoiceLine.SETRANGE("Line No.",ValueEntry."Document Line No.");

        IF SalesInvoiceLine.FIND('-') THEN BEGIN
          SalesInvoiceHeader.GET(ValueEntry."Document No.");
          REPEAT
            TotalInvoicedQty :=  TotalInvoicedQty - SalesInvoiceLine.Quantity;
            IF  SalesInvoiceHeader."Currency Factor" <> 0 THEN
              TotalAmt := TotalAmt - (SalesInvoiceLine.Amount / SalesInvoiceHeader."Currency Factor")
            ELSE
              TotalAmt := TotalAmt - (SalesInvoiceLine.Amount);
          UNTIL SalesInvoiceLine.NEXT = 0;
        END ELSE BEGIN
          SalesShipLine.SETRANGE("Document No.",ValueEntry."Document No.");
          SalesShipLine.SETRANGE(Type, SalesShipLine.Type::Item);
          SalesShipLine.SETRANGE("No.",ValueEntry."Item No.");

// Delete the following line.
          SalesShipLine.SETRANGE("Line No.",ValueEntry."Document Line No."); 

          IF SalesShipLine.FIND('-') THEN BEGIN
            REPEAT
              IF SalesShipLine.Correction = TRUE THEN
                CorrectionFound := TRUE;
              DocItemSum += SalesShipLine."Quantity Invoiced";
            UNTIL SalesShipLine.NEXT = 0;
            IF (DocItemSum = 0) AND CorrectionFound THEN CurrReport.SKIP;
          END;
        END;
      END ELSE BEGIN
        SalesCrMemoLine.SETRANGE("Document No.",ValueEntry."Document No.");
        SalesCrMemoLine.SETRANGE(Type,SalesCrMemoLine.Type::Item);
        SalesCrMemoLine.SETRANGE("No.",ValueEntry."Item No.");

// Delete the following line.
        SalesCrMemoLine.SETRANGE("Line No.",ValueEntry."Document Line No."); 

        IF SalesCrMemoLine.FIND('-') THEN BEGIN
          SalesCrMemoHeader.GET(ValueEntry."Document No.");
          REPEAT
            TotalInvoicedQty := TotalInvoicedQty + SalesCrMemoLine.Quantity;
            IF SalesCrMemoHeader."Currency Factor" <>0 THEN
              TotalAmt := TotalAmt + (SalesCrMemoLine.Amount / SalesCrMemoHeader."Currency Factor")
            ELSE
              TotalAmt := TotalAmt + SalesCrMemoLine.Amount;
          UNTIL SalesCrMemoLine.NEXT = 0;
        END ELSE BEGIN
          SalesShipLine.SETRANGE("Document No.",ValueEntry."Document No.");
          SalesShipLine.SETRANGE(Type, SalesShipLine.Type::Item);
          SalesShipLine.SETRANGE("No.",ValueEntry."Item No.");

// Delete the following line.
          SalesShipLine.SETRANGE("Line No.",ValueEntry."Document Line No."); 

          IF SalesShipLine.FIND('-') THEN BEGIN
...

Kode pengganti

...
IF ValueEntry.FINDSET(FALSE,FALSE) THEN BEGIN
  CASE ValueEntry."Item Ledger Entry Type" OF
    ValueEntry."Item Ledger Entry Type" :: Purchase: BEGIN
      IF ValueEntry."Invoiced Quantity" > 0 THEN BEGIN
        PurchInvLine.SETRANGE("Document No.",ValueEntry."Document No.");
        PurchInvLine.SETRANGE(Type, PurchInvLine.Type::Item);
        PurchInvLine.SETRANGE("No.",ValueEntry."Item No.");

// Add the following line.
        PurchInvLine.SETFILTER(PurchInvLine."Service Tariff No.",'%1', ' ');

        IF PurchInvLine.FIND('-') THEN BEGIN
          PurchInvHeader.GET(ValueEntry."Document No.");
          REPEAT
            TotalInvoicedQty := TotalInvoicedQty + PurchInvLine.Quantity;
            IF PurchInvHeader."Currency Factor" <> 0 THEN
              TotalAmt := TotalAmt + (PurchInvLine.Amount / PurchInvHeader."Currency Factor")
            ELSE
              TotalAmt := TotalAmt + PurchInvLine.Amount;
          UNTIL PurchInvLine.NEXT = 0;
        END ELSE BEGIN
          PurchRcptLine.SETRANGE("Document No.",ValueEntry."Document No.");
          PurchRcptLine.SETRANGE(Type, PurchRcptLine.Type::Item);
          PurchRcptLine.SETRANGE("No.",ValueEntry."Item No.");
          IF PurchRcptLine.FIND('-') THEN BEGIN
            REPEAT
              IF PurchRcptLine.Correction = TRUE THEN
                CorrectionFound := TRUE;
              DocItemSum += PurchRcptLine."Quantity Invoiced";
            UNTIL PurchRcptLine.NEXT = 0;
            IF (DocItemSum = 0) AND CorrectionFound THEN CurrReport.SKIP;
          END;
        END;
      END ELSE BEGIN
        PurchCrMemoLine.SETRANGE("Document No.",ValueEntry."Document No.");
        PurchCrMemoLine.SETRANGE(Type, PurchInvLine.Type::Item);
        PurchCrMemoLine.SETRANGE("No.",ValueEntry."Item No.");

// Add the following line.
        PurchCrMemoLine.SETFILTER(PurchCrMemoLine."Service Tariff No.",'%1', ' ');

        IF PurchCrMemoLine.FIND('-') THEN BEGIN
          PurchCrMemoHdr.GET(ValueEntry."Document No.");
          REPEAT
            TotalInvoicedQty := TotalInvoicedQty - PurchCrMemoLine.Quantity;
            IF PurchCrMemoHdr."Currency Factor" <> 0 THEN
              TotalAmt := TotalAmt - (PurchCrMemoLine.Amount / PurchCrMemoHdr."Currency Factor")
            ELSE
              TotalAmt := TotalAmt - PurchCrMemoLine.Amount;
          UNTIL PurchCrMemoLine.NEXT = 0;
        END ELSE BEGIN
          PurchRcptLine.SETRANGE("Document No.",ValueEntry."Document No.");
          PurchRcptLine.SETRANGE(Type, PurchRcptLine.Type::Item);
          PurchRcptLine.SETRANGE("No.",ValueEntry."Item No.");
          IF PurchRcptLine.FIND('-')  THEN BEGIN
            REPEAT
              IF PurchRcptLine.Correction = TRUE THEN
                CorrectionFound := TRUE;
              DocItemSum += PurchRcptLine."Quantity Invoiced";
            UNTIL PurchRcptLine.NEXT = 0;
            IF (DocItemSum = 0) AND CorrectionFound THEN CurrReport.SKIP;
          END;
        END;
      END;
    END; 

    ValueEntry."Item Ledger Entry Type" :: Sale: BEGIN
      IF ValueEntry."Invoiced Quantity" < 0 THEN BEGIN
        SalesInvoiceLine.SETRANGE("Document No.",ValueEntry."Document No.");
        SalesInvoiceLine.SETRANGE(Type, SalesInvoiceLine.Type::Item);
        SalesInvoiceLine.SETRANGE("No.",ValueEntry."Item No.");
        SalesInvoiceLine.SETFILTER(SalesInvoiceLine."Service Tariff No.",'%1', '  ');
        IF SalesInvoiceLine.FIND('-') THEN BEGIN
          SalesInvoiceHeader.GET(ValueEntry."Document No.");
          REPEAT
            TotalInvoicedQty :=  TotalInvoicedQty - SalesInvoiceLine.Quantity;
            IF  SalesInvoiceHeader."Currency Factor" <> 0 THEN
              TotalAmt := TotalAmt - (SalesInvoiceLine.Amount / SalesInvoiceHeader."Currency Factor")
            ELSE
              TotalAmt := TotalAmt - (SalesInvoiceLine.Amount);
          UNTIL SalesInvoiceLine.NEXT = 0;
        END ELSE BEGIN
          SalesShipLine.SETRANGE("Document No.",ValueEntry."Document No.");
          SalesShipLine.SETRANGE(Type, SalesShipLine.Type::Item);
          SalesShipLine.SETRANGE("No.",ValueEntry."Item No.");
          IF SalesShipLine.FIND('-') THEN BEGIN
            REPEAT
              IF SalesShipLine.Correction = TRUE THEN
                CorrectionFound := TRUE;
              DocItemSum += SalesShipLine."Quantity Invoiced";
            UNTIL SalesShipLine.NEXT = 0;
            IF (DocItemSum = 0) AND CorrectionFound THEN CurrReport.SKIP;
          END;
        END;
      END ELSE BEGIN
        SalesCrMemoLine.SETRANGE("Document No.",ValueEntry."Document No.");
        SalesCrMemoLine.SETRANGE(Type,SalesCrMemoLine.Type::Item);
        SalesCrMemoLine.SETRANGE("No.",ValueEntry."Item No.");

// Add the following line.
        SalesCrMemoLine.SETFILTER(SalesCrMemoLine."Service Tariff No.",'%1', '  '); 

        IF SalesCrMemoLine.FIND('-') THEN BEGIN
          SalesCrMemoHeader.GET(ValueEntry."Document No.");
          REPEAT
            TotalInvoicedQty := TotalInvoicedQty + SalesCrMemoLine.Quantity;
            IF SalesCrMemoHeader."Currency Factor" <>0 THEN
              TotalAmt := TotalAmt + (SalesCrMemoLine.Amount / SalesCrMemoHeader."Currency Factor")
            ELSE
              TotalAmt := TotalAmt + SalesCrMemoLine.Amount;
          UNTIL SalesCrMemoLine.NEXT = 0;

        END ELSE BEGIN
          SalesShipLine.SETRANGE("Document No.",ValueEntry."Document No.");
          SalesShipLine.SETRANGE(Type, SalesShipLine.Type::Item);
          SalesShipLine.SETRANGE("No.",ValueEntry."Item No.");
          IF SalesShipLine.FIND('-') THEN BEGIN
...

Prasyarat

Anda harus memiliki salah satu produk berikut yang terinstal untuk menerapkan hotfix ini:

  • Microsoft Dynamics NAV 2009 Service Pack 1 versi Italia
  • Microsoft Dynamics NAV 5.0 Service Pack 1 versi Italia

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.