Anda mengalami kinerja lambat saat Menjalankan pekerjaan batch "Sesuaikan entri item biaya" di Microsoft Dynamics NAV

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

Artikel ini berlaku untuk Microsoft Dynamics NAV untuk semua negara dan semua bahasa lokal.

Gejala

Saat Anda menjalankan pekerjaan kumpulan "Sesuaikan entri item biaya", Anda mengalami kinerja lambat ketika item yang menggunakan metode Biaya rata-rata dan penggunaan Transfer yang sering disesuaikan. Masalah ini terjadi pada produk berikut ini:

  • Microsoft Dynamics NAV 2009 R2
  • Microsoft Dynamics NAV 2009 Paket Layanan 1
  • Microsoft Dynamics NAV 2009
  • Microsoft Dynamics NAV 5.0 Paket Layanan 1

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:

  1. Tambahkan variabel lokal berikut dalam fungsi IsAvgCostException dalam Tabel Entri Nilai (5802):

    • ItemLedgEntry@1002 : Catatan 32;
    • xItemLedgEntry@1003 : Rekam 32;
    • TempItemLedgEntry@1005 : Catatan SEMENTARA 32;
    • GoThroughChain@1004 : Boolean;
  2. Ubah kode dalam fungsi IsAvgCostException dalam Tabel Entri Nilai (5802) sebagai berikut:
    Kode yang sudah ada

    ...
    IF "Partial Revaluation" THEN
      EXIT(TRUE);
    
    // Delete the following lines.
    IF "Item Ledger Entry Type" = "Item Ledger Entry Type"::Transfer THEN  
      EXIT(TRUE);  
    IF ItemApplnEntry.AppliedInbndEntryExists("Item Ledger Entry No.",TRUE) THEN  
      EXIT(TRUE);  
    // End of the lines.
    
    EXIT(FALSE);
    ...
    
    

    Kode pengganti

    ...
    IF "Partial Revaluation" THEN
      EXIT(TRUE);
    
    // Add the following lines.
    IF "Item Ledger Entry Type" = "Item Ledger Entry Type"::Consumption THEN
      GoThroughChain := ItemApplnEntry.AppliedFromEntryExists("Item Ledger Entry No.")
    ELSE
      GoThroughChain := ItemApplnEntry.AppliedInbndEntryExists("Item Ledger Entry No.",TRUE);
    
    IF GoThroughChain THEN
      REPEAT
        IF "Item Ledger Entry Type" = "Item Ledger Entry Type"::Transfer THEN
          ItemLedgEntry.GET(ItemApplnEntry."Inbound Item Entry No.")
        ELSE
          ItemLedgEntry.GET(ItemApplnEntry."Outbound Item Entry No.");
        IF ItemLedgEntry."Entry No." <> xItemLedgEntry."Entry No." THEN BEGIN
          xItemLedgEntry := ItemLedgEntry;
          ItemApplnEntry.GetVisitedEntries(ItemLedgEntry,TempItemLedgEntry);
          TempItemLedgEntry.SETCURRENTKEY("Item No.",Positive,"Location Code","Variant Code");
          TempItemLedgEntry.SETRANGE("Item No.","Item No.");
          TempItemLedgEntry.SETRANGE(Positive,TRUE);
          TempItemLedgEntry.SETRANGE("Location Code","Location Code");
          TempItemLedgEntry.SETRANGE("Variant Code","Variant Code");
          IF NOT TempItemLedgEntry.ISEMPTY THEN
            EXIT(TRUE);
        END;
      UNTIL ItemApplnEntry.NEXT = 0;
    // End of the lines.
    
    
    
    EXIT(FALSE);
    ...
    
    
  3. Tambahkan variabel global berikut dalam codeunit Penyesuaian Persediaan (5895):

    • RevaluationPoint@1022 : 2000000026 Catatan SEMENTARA;
  4. Tambahkan variabel lokal berikut dalam fungsi AvgValueEntriesToAdjustExist dalam codeunit Penyesuaian Inventaris (5895):

    • CurrIsException@1009 : Boolean;
    • NextIsException@1010 : Boolean;
  5. Ubah kode dalam fungsi AvgValueEntriesToAdjustExist dalam codeunit Penyesuaian Inventaris (5895) sebagai berikut:
    Kode yang sudah ada

    ...
        END;
    
        FINDSET;
        REPEAT
          IF "Valued By Average Cost" AND NOT Adjustment AND ("Valued Quantity" < 0) THEN BEGIN
            OutbndValueEntry := ValueEntry;
            OutbndValueEntry.INSERT;
            FindNextRange := FALSE;
          END;
    
    // Delete the following lines.
          IF IsAvgCostException THEN BEGIN  
            AvgCostExceptionBuf.Number := "Entry No.";  
            AvgCostExceptionBuf.INSERT;  
          END;  
    // End of the lines.
    
          IF ("Entry Type" = "Entry Type"::Revaluation) OR
    ...
    
    

    Kode pengganti

    ...
        END;
    
         CLEAR(RevaluationPoint);  
        RevaluationPoint.DELETEALL;  
    
    
    
        FINDSET;
        REPEAT
    
    // Add the following lines.
          IF "Partial Revaluation" THEN BEGIN  
            RevaluationPoint.Number := "Entry No.";  
            RevaluationPoint.INSERT;  
          END;  
    // End of the lines.
    
          IF "Valued By Average Cost" AND NOT Adjustment AND ("Valued Quantity" < 0) THEN BEGIN
            OutbndValueEntry := ValueEntry;
            OutbndValueEntry.INSERT;
            FindNextRange := FALSE;
          END;
    
     // Add the following lines.
          IF NOT Adjustment THEN BEGIN  
            CurrIsException := NextIsException;  
            NextIsException := IsAvgCostException;  
            IF NextIsException OR CurrIsException THEN BEGIN  
              AvgCostExceptionBuf.Number := "Entry No.";  
              AvgCostExceptionBuf.INSERT;  
            END;  
          END;  
    // End of the lines.
    
          IF ("Entry Type" = "Entry Type"::Revaluation) OR
    ...
    
    
  6. Ubah kode dalam fungsi IsExcludeEntryFromAvgCostCalc dalam codeunit Penyesuaian Inventaris (5895) sebagai berikut:
    Kode yang sudah ada

    ...
    WITH ValueEntry DO BEGIN
      IF "Partial Revaluation" THEN
    ...
    
    

    Kode pengganti

    ...
    WITH ValueEntry DO BEGIN
    
    // Add the following lines.
      RevaluationPoint.SETRANGE(Number,"Entry No.",OutbndValueEntry."Entry No.");  
      IF NOT RevaluationPoint.ISEMPTY THEN  
        EXIT(FALSE);  
    // End of the lines.
    
    
      IF "Partial Revaluation" THEN
    ...
    
    

Prasyarat

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

  • Microsoft Dynamics NAV 2009 R2
  • Microsoft Dynamics NAV 2009 Paket Layanan 1
  • Microsoft Dynamics NAV 2009
  • Microsoft Dynamics NAV 5.0 Paket Layanan 1

Selain itu, Anda harus menginstal hotfix 2481793 untuk menerapkan hotfix ini.
  Untuk informasi selengkapnya, klik nomor artikel berikut ini untuk menampilkan artikel di Pangkalan Pengetahuan Microsoft:

2481793 Biaya satuan item menjadi negatif setelah Anda menjalankan revaluasi item yang menggunakan metode Biaya rata-rata di Microsoft Dynamics NAV

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.