Pesan kesalahan "Entri Reservasi tidak ada" ketika Anda memposting output untuk pesanan produksi yang dibuat dari pesanan penjualan setelah Anda membatalkan reservasi untuk pesanan produksi di Microsoft Dynamics NAV 2009

Berlaku Untuk
Dynamics NAV 2009

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

Gejala

Misalnya Anda membuat pesanan produksi untuk item dari pesanan penjualan di Microsoft Dynamics NAV 2009. Anda membatalkan jumlah reservasi untuk pesanan produksi. Dalam situasi ini, ketika Anda memposting output untuk pesanan produksi, Anda menerima pesan kesalahan berikut:

Catatan

Entri Reservasi tidak ada. Bidang dan nilai identifikasi:Entri No.='nomor entri',Positif='Tidak'.

Masalah ini terjadi pada produk berikut ini:

  • Microsoft Dynamics NAV 2009 R2
  • Microsoft Dynamics NAV 2009 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. Ubah kode dalam kontrol dalam formulir Entri Reservasi (497) sebagai berikut:
    Kode yang sudah ada

    ...
    Text004 +
    Text005,FALSE,ReservEntry."Quantity (Base)",
    ReservEntry."Item No.",ReservEngineMgt.CreateForText(Rec),
    ReservEngineMgt.CreateFromText(Rec))
    THEN BEGIN
    
    // Delete the following line.
    ReservEngineMgt.CloseReservEntry2(ReservEntry);
    
    COMMIT;
    END;
    UNTIL ReservEntry.NEXT = 0;
    END;
    }
    ...
    

    Kode pengganti

    ...
    Text004 +
    Text005,FALSE,ReservEntry."Quantity (Base)",
    ReservEntry."Item No.",ReservEngineMgt.CreateForText(Rec),
    ReservEngineMgt.CreateFromText(Rec))
    THEN BEGIN
    
    // Add the following line.
    ReservEngineMgt.CancelReservation(ReservEntry);
    
    COMMIT;
    END;
    UNTIL ReservEntry.NEXT = 0;
    END;
    }
    ...
    
  2. Ubah kode dalam Kontrol dalam formulir Reservasi (498) sebagai berikut:
    Kode yang sudah ada

    ...
    ReservEntry2.SETRANGE("Reservation Status",ReservEntry2."Reservation Status"::Reservation);
    IF ReservEntry2.FIND('-') THEN
    REPEAT
    ReservEntry3.GET(ReservEntry2."Entry No.",NOT ReservEntry2.Positive);
    IF RelatesToSummEntry(ReservEntry3,Rec) THEN BEGIN
    
    // Delete the following line.
    ReservEngineMgt.CloseReservEntry2(ReservEntry2);
    
    RecordsFound := TRUE;
    END;
    UNTIL ReservEntry2.NEXT = 0;
    IF RecordsFound THEN
    ...
    

    Kode pengganti

    ...
    ReservEntry2.SETRANGE("Reservation Status",ReservEntry2."Reservation Status"::Reservation);
    IF ReservEntry2.FIND('-') THEN
    REPEAT
    ReservEntry3.GET(ReservEntry2."Entry No.",NOT ReservEntry2.Positive);
    IF RelatesToSummEntry(ReservEntry3,Rec) THEN BEGIN
    
    // Add the following line.
    ReservEngineMgt.CancelReservation(ReservEntry2);
    
    RecordsFound := TRUE;
    END;
    UNTIL ReservEntry2.NEXT = 0;
    IF RecordsFound THEN
    ...
    
  3. Ubah kode dalam Kontrol dalam formulir Tersedia - Baris Penjualan (499) sebagai berikut:
    Kode yang sudah ada

    ...
    ReserveSalesLine.FilterReservFor(ReservEntry2,Rec);
    IF ReservEntry2.FIND('-') THEN BEGIN
    UpdateReservMgt;
    REPEAT
    
    // Delete the following line.
    ReservEngineMgt.CloseReservEntry2(ReservEntry2);
    
    UNTIL ReservEntry2.NEXT = 0;
    UpdateReservFrom;
    END;
    END;
    ...
    

    Kode pengganti

    ...
    ReserveSalesLine.FilterReservFor(ReservEntry2,Rec);
    IF ReservEntry2.FIND('-') THEN BEGIN
    UpdateReservMgt;
    REPEAT
    
    // Add the following line.
    ReservEngineMgt.CancelReservation(ReservEntry2);
    
    UNTIL ReservEntry2.NEXT = 0;
    UpdateReservFrom;
    END;
    END;
    ...
    
  4. Ubah kode dalam Kontrol dalam formulir Tersedia - Baris Permintaan (500) sebagai berikut:
    Kode yang sudah ada

    ...
    ReserveReqLine.FilterReservFor(ReservEntry2,Rec);
    IF ReservEntry2.FIND('-') THEN BEGIN
    UpdateReservMgt;
    REPEAT
    
    // Delete the following line.
    ReservEngineMgt.CloseReservEntry2(ReservEntry2);
    
    UNTIL ReservEntry2.NEXT = 0;
    UpdateReservFrom;
    END;
    END;
    ...
    

    Kode pengganti

    ...
    ReserveReqLine.FilterReservFor(ReservEntry2,Rec);
    IF ReservEntry2.FIND('-') THEN BEGIN
    UpdateReservMgt;
    REPEAT
    
    // Add the following line.
    ReservEngineMgt.CancelReservation(ReservEntry2);
    
    UNTIL ReservEntry2.NEXT = 0;
    UpdateReservFrom;
    END;
    END;
    ...
    
  5. Ubah kode dalam Kontrol dalam formulir Tersedia - Baris Pembelian (501) sebagai berikut:
    Kode yang sudah ada

    ...
    ReservePurchLine.FilterReservFor(ReservEntry2,Rec);
    IF ReservEntry2.FIND('-') THEN BEGIN
    UpdateReservMgt;
    REPEAT
    
    // Delete the following line.
    ReservEngineMgt.CloseReservEntry2(ReservEntry2);
    
    UNTIL ReservEntry2.NEXT = 0;
    UpdateReservFrom;
    END;
    END;
    ...
    

    Kode pengganti

    ...
    ReservePurchLine.FilterReservFor(ReservEntry2,Rec);
    IF ReservEntry2.FIND('-') THEN BEGIN
    UpdateReservMgt;
    REPEAT
    
    // Add the following line.
    ReservEngineMgt.CancelReservation(ReservEntry2);
    
    UNTIL ReservEntry2.NEXT = 0;
    UpdateReservFrom;
    END;
    END;
    ...
    
  6. Ubah kode dalam Kontrol dalam formulir Tersedia - Baris Jurnal Item (502) sebagai berikut:
    Kode yang sudah ada

    ...
    ReservEntry2.COPY(ReservEntry);
    ReserveItemJnlLine.FilterReservFor(ReservEntry2,Rec);
    IF ReservEntry2.FIND('-') THEN BEGIN
    UpdateReservMgt;
    REPEAT
    
    // Delete the following line.
    ReservEngineMgt.CloseReservEntry2(ReservEntry2);
    
    UNTIL ReservEntry2.NEXT = 0;
    UpdateReservFrom;
    END;
    END;
    ...
    

    Kode pengganti

    ...
    ReservEntry2.COPY(ReservEntry);
    ReserveItemJnlLine.FilterReservFor(ReservEntry2,Rec);
    IF ReservEntry2.FIND('-') THEN BEGIN
    UpdateReservMgt;
    REPEAT
    
    // Add the following line.
    ReservEngineMgt.CancelReservation(ReservEntry2);
    
    UNTIL ReservEntry2.NEXT = 0;
    UpdateReservFrom;
    END;
    END;
    ...
    
  7. Ubah kode dalam Kontrol di Ledg Item - Tersedia. Formulir entri (504) sebagai berikut:
    Kode yang sudah ada

    ...
    ERROR(Text99000000);
    ReservEntry2.SETRANGE("Expected Receipt Date");
    IF ReservEntry2.FIND('-') THEN BEGIN
    UpdateReservMgt;
    REPEAT
    
    // Delete the following line.
    ReservEngineMgt.CloseReservEntry2(ReservEntry2);
    
    UNTIL ReservEntry2.NEXT = 0;
    TotalAvailQty := TotalAvailQty + QtyReservedThisLine;
    MaxQtyToReserve := MaxQtyToReserve + QtyReservedThisLine;
    UpdateReservFrom;
    ...
    

    Kode pengganti

    ...
    ERROR(Text99000000);
    ReservEntry2.SETRANGE("Expected Receipt Date");
    IF ReservEntry2.FIND('-') THEN BEGIN
    UpdateReservMgt;
    REPEAT
    
    // Add the following line.
    ReservEngineMgt.CancelReservation(ReservEntry2);
    
    UNTIL ReservEntry2.NEXT = 0;
    TotalAvailQty := TotalAvailQty + QtyReservedThisLine;
    MaxQtyToReserve := MaxQtyToReserve + QtyReservedThisLine;
    UpdateReservFrom;
    ...
    
  8. Ubah kode dalam Kontrol dalam formulir Tersedia - Baris Layanan (5999) sebagai berikut:
    Kode yang sudah ada

    ...
    ReserveServiceInvLine.FilterReservFor(ReservEntry2,Rec);
    IF ReservEntry2.FIND('-') THEN BEGIN
    UpdateReservMgt;
    REPEAT
    
    // Delete the following line.
    ReservEngineMgt.CloseReservEntry2(ReservEntry2);
    
    UNTIL ReservEntry2.NEXT = 0;
    UpdateReservFrom;
    END;
    END;
    ...
    

    Kode pengganti

    ...
    ReserveServiceInvLine.FilterReservFor(ReservEntry2,Rec);
    IF ReservEntry2.FIND('-') THEN BEGIN
    UpdateReservMgt;
    REPEAT
    
    // Add the following line.
    ReservEngineMgt.CancelReservation(ReservEntry2);
    
    UNTIL ReservEntry2.NEXT = 0;
    UpdateReservFrom;
    END;
    END;
    ...
    
  9. Ubah kode dalam Kontrol di Tersedia. - Formulir Baris Pelacakan Item (6503) sebagai berikut:
    Kode yang sudah ada

    ...
    OnPush=BEGIN
    IF NOT EnableReservations THEN
    EXIT;
    IF NOT CONFIRM(Text001,FALSE) THEN
    EXIT;
    
    // Delete the following line.
    ReservEngineMgt.CloseReservEntry2(Rec);
    
    UpdateReservFrom;
    END;
    }
    { ID=36;
    ShortCutKey=Shift+F5;
    ...
    

    Kode pengganti

    ...
    OnPush=BEGIN
    IF NOT EnableReservations THEN
    EXIT;
    IF NOT CONFIRM(Text001,FALSE) THEN
    EXIT;
    
    // Add the following line.
    ReservEngineMgt.CancelReservation(Rec);
    
    UpdateReservFrom;
    END;
    }
    { ID=36;
    ShortCutKey=Shift+F5;
    ...
    
  10. Ubah kode dalam Kontrol dalam formulir Tersedia - Baris Transfer (99000896) sebagai berikut:
    Kode yang sudah ada

    ...
    ReserveTransLine.FilterReservFor(ReservEntry2,Rec,Direction);
    IF ReservEntry2.FIND('-') THEN BEGIN
    UpdateReservMgt;
    REPEAT
    
    // Delete the following line.
    ReservEngineMgt.CloseReservEntry2(ReservEntry2);
    
    UNTIL ReservEntry2.NEXT = 0;
    UpdateReservFrom;
    END;
    END;
    ...
    

    Kode pengganti

    ...
    ReserveTransLine.FilterReservFor(ReservEntry2,Rec,Direction);
    IF ReservEntry2.FIND('-') THEN BEGIN
    UpdateReservMgt;
    REPEAT
    
    // Add the following line.
    ReservEngineMgt.CancelReservation(ReservEntry2);
    
    UNTIL ReservEntry2.NEXT = 0;
    UpdateReservFrom;
    END;
    END;
    ...
    
  11. Ubah kode dalam Kontrol dalam formulir Tersedia - Prod. Baris Pesanan (99000897) sebagai berikut:
    Kode yang sudah ada

    ...
    ReserveProdOrderLine.FilterReservFor(ReservEntry2,Rec);
    IF ReservEntry2.FIND('-') THEN BEGIN
    UpdateReservMgt;
    REPEAT
    
    // Delete the following line.
    ReservEngineMgt.CloseReservEntry2(ReservEntry2);
    
    UNTIL ReservEntry2.NEXT = 0;
    UpdateReservFrom;
    END;
    END;
    ...
    

    Kode pengganti

    ...
    ReserveProdOrderLine.FilterReservFor(ReservEntry2,Rec);
    
    IF ReservEntry2.FIND('-') THEN BEGIN
    UpdateReservMgt;
    REPEAT
    
    // Add the following line.
    ReservEngineMgt.CancelReservation(ReservEntry2);
    
    UNTIL ReservEntry2.NEXT = 0;
    UpdateReservFrom;
    END;
    END;
    ...
    
  12. Ubah kode dalam Kontrol di Prod. Order Comp yang Tersedia. formulir (99000898) sebagai berikut:
    Kode yang sudah ada

    ...
    ReserveProdOrderComp.FilterReservFor(ReservEntry2,Rec);
    IF ReservEntry2.FIND('-') THEN BEGIN
    UpdateReservMgt;
    REPEAT
    
    // Delete the following line.
    ReservEngineMgt.CloseReservEntry2(ReservEntry2);
    
    UNTIL ReservEntry2.NEXT = 0;
    UpdateReservFrom;
    END;
    END;
    ...
    

    Kode pengganti

    ...
    ReserveProdOrderComp.FilterReservFor(ReservEntry2,Rec);
    IF ReservEntry2.FIND('-') THEN BEGIN
    UpdateReservMgt;
    REPEAT
    
    // Add the following line.
    ReservEngineMgt.CancelReservation(ReservEntry2);
    
    UNTIL ReservEntry2.NEXT = 0;
    UpdateReservFrom;
    END;
    END;
    ...
    
  13. Ubah kode dalam Kontrol di Tersedia. - Formulir Komponen Perencanaan (99000900) sebagai berikut:
    Kode yang sudah ada

    ...
    IF ReservEntry2.FIND('-') THEN BEGIN
    UpdateReservMgt;
    REPEAT
    IF ReservEntry2."Quantity (Base)" < 0 THEN
    ERROR(Text002);
    
    // Delete the following line.
    ReservEngineMgt.CloseReservEntry2(ReservEntry2);
    
    UNTIL ReservEntry2.NEXT = 0;
    UpdateReservFrom;
    END;
    END;
    ...
    

    Kode pengganti

    ...
    IF ReservEntry2.FIND('-') THEN BEGIN
    UpdateReservMgt;
    REPEAT
    IF ReservEntry2."Quantity (Base)" < 0 THEN
    ERROR(Text002);
    
    // Add the following line.
    ReservEngineMgt.CancelReservation(ReservEntry2);
    
    UNTIL ReservEntry2.NEXT = 0;
    UpdateReservFrom;
    END;
    END;
    ...
    
  14. Ubah kode dalam fungsi CloseReservEntry2 di Reservation Engine Mgt. codeunit (99000831) sebagai berikut:
    Kode yang sudah ada 1

    ...
    LostReservationQty@1019 : Decimal;
    Text008@1020 : TextConst 'ENU="You cannot state %1 or %2 on a demand when it is linked to a supply by %3 = %4."';
    ReservationsModified@1021 : Boolean;
    IsPick@1022 : Boolean;
    
    // Delete the following line.
    PROCEDURE CloseReservEntry2@9(ReservEntry@1002 : Record 337);
    
    VAR
    ReservEntry3@1003 : Record 337;
    LastEntryNo@1004 : Integer;
    BEGIN
    ReservEntry.TESTFIELD("Reservation Status",ReservEntry."Reservation Status"::Reservation);
    ...
    

    Kode pengganti 1

    ...
    LostReservationQty@1019 : Decimal;
    Text008@1020 : TextConst 'ENU="You cannot state %1 or %2 on a demand when it is linked to a supply by %3 = %4."';
    ReservationsModified@1021 : Boolean;
    IsPick@1022 : Boolean;
    
    // Add the following line.
    PROCEDURE CancelReservation@9(ReservEntry@1002 : Record 337);
    
    VAR
    ReservEntry3@1003 : Record 337;
    LastEntryNo@1004 : Integer;
    BEGIN
    ReservEntry.TESTFIELD("Reservation Status",ReservEntry."Reservation Status"::Reservation);
    ...
    

    Kode yang sudah ada 2

    ...
    ReservEntry3.GET(ReservEntry."Entry No.",NOT ReservEntry.Positive);
    IF (ReservEntry3."Lot No." <> '') OR (ReservEntry3."Serial No." <> '') OR
    (ReservEntry."Lot No." <> '') OR (ReservEntry."Serial No." <> '') THEN BEGIN
    ReservEntry."Reservation Status" := ReservEntry."Reservation Status"::Surplus;
    
    // Delete the following lines.
    ReservEntry3."Reservation Status" := ReservEntry3."Reservation Status"::Surplus;
    ReservEntry.MODIFY;
    ReservEntry3.DELETE;
    ReservEntry3."Entry No." := LastEntryNo + 1;
    // End of the lines.
    
    ReservEntry3.INSERT;
    TempSurplusEntry.DELETEALL;
    UpdateTempSurplusEntry(ReservEntry);
    UpdateTempSurplusEntry(ReservEntry3);
    UpdateOrderTracking(TempSurplusEntry);
    ...
    

    Kode pengganti 2

    ...
    ReservEntry3.GET(ReservEntry."Entry No.",NOT ReservEntry.Positive);
    IF (ReservEntry3."Lot No." <> '') OR (ReservEntry3."Serial No." <> '') OR
    (ReservEntry."Lot No." <> '') OR (ReservEntry."Serial No." <> '') THEN BEGIN
    ReservEntry."Reservation Status" := ReservEntry."Reservation Status"::Surplus;
    
    // Add the following lines.
    ReservEntry.Binding := ReservEntry.Binding::" ";
    ReservEntry3."Reservation Status" := ReservEntry3."Reservation Status"::Surplus;
    ReservEntry3.Binding := ReservEntry3.Binding::" ";
    RevertDateToSourceDate(ReservEntry);
    ReservEntry.MODIFY;
    ReservEntry3.DELETE;
    ReservEntry3."Entry No." := LastEntryNo + 1;
    RevertDateToSourceDate(ReservEntry3);
    // End of the lines.
    
    ReservEntry3.INSERT;
    TempSurplusEntry.DELETEALL;
    UpdateTempSurplusEntry(ReservEntry);
    UpdateTempSurplusEntry(ReservEntry3);
    UpdateOrderTracking(TempSurplusEntry);
    ...
    
  15. Ubah kode dalam fungsi CloseReservEntry di Reservation Engine Mgt. codeunit (99000831) sebagai berikut:
    Kode yang sudah ada

    ...
    UpdateOrderTracking(TempSurplusEntry);
    END ELSE
    CloseReservEntry(ReservEntry,TRUE,FALSE);
    END;
    
    // Delete the following lines.
    PROCEDURE CloseReservEntry@20(ReservEntry@1000 : Record 337;ReTrack@1001 : Boolean;DeleteAll@1002 : Boolean);
    VAR
    ReservEntry2@1003 : Record 337;
    SurplusReservEntry@1004 : Record 337;
    DummyReservEntry@1005 : Record 337;
    TotalQty@1006 : Decimal;
    AvailabilityDate@1007 : Date;
    BEGIN
    ReservEntry.DELETE;
    GetItem(ReservEntry."Item No.");
    IF ReservEntry."Reservation Status" = ReservEntry."Reservation Status"::Prospect THEN
    EXIT;
    IF ReservEntry."Reservation Status" = ReservEntry."Reservation Status"::Surplus THEN BEGIN
    IF Item."Order Tracking Policy" = Item."Order Tracking Policy"::"Tracking & Action Msg." THEN
    ReservMgt.ModifyActionMessage(ReservEntry."Entry No.",0,TRUE); // Delete related action messages
    END ELSE BEGIN
    IF ReservEntry.Binding = ReservEntry.Binding::"Order-to-Order" THEN
    IF Item."Order Tracking Policy" = Item."Order Tracking Policy"::"Tracking & Action Msg." THEN
    ReservMgt.ModifyActionMessage(ReservEntry."Entry No.",0,TRUE); // Delete related action messages
    ReservEntry2.GET(ReservEntry."Entry No.",NOT ReservEntry.Positive);
    IF (Item."Order Tracking Policy" = Item."Order Tracking Policy"::None) AND
    (((ReservEntry.Binding = ReservEntry.Binding::"Order-to-Order") AND ReservEntry2.Positive )OR
    ((ReservEntry2."Serial No." = '') AND (ReservEntry2."Lot No." = ''))) THEN
    ReservEntry2.DELETE
    ELSE BEGIN
    ReservEntry2."Reservation Status" := ReservEntry2."Reservation Status"::Surplus;
    IF ReservEntry2.Positive THEN BEGIN
    AvailabilityDate := ReservEntry2."Expected Receipt Date";
    ReservEntry2."Shipment Date" := 0D
    END ELSE BEGIN
    AvailabilityDate := ReservEntry2."Shipment Date";
    ReservEntry2."Expected Receipt Date" := 0D;
    END;
    ReservEntry2.MODIFY;
    ReservEntry2."Quantity (Base)" :=
    ReservMgt.MatchSurplus(ReservEntry2,SurplusReservEntry,ReservEntry2."Quantity (Base)",NOT ReservEntry2.Positive,
    AvailabilityDate,Item."Order Tracking Policy");
    IF ReservEntry2."Quantity (Base)" = 0 THEN BEGIN
    ReservEntry2.DELETE(TRUE);
    END ELSE BEGIN
    ReservEntry2.MODIFY;
    IF Item."Order Tracking Policy" = Item."Order Tracking Policy"::"Tracking & Action Msg." THEN BEGIN
    ModifyActionMessageDating(ReservEntry2);
    IF DeleteAll THEN
    ReservMgt.IssueActionMessage(ReservEntry2,FALSE,ReservEntry)
    ELSE
    ReservMgt.IssueActionMessage(ReservEntry2,FALSE,DummyReservEntry);
    END;
    END;
    END;
    END;
    IF ReTrack THEN BEGIN
    TotalQty := ReservMgt.SourceQuantity(ReservEntry,TRUE);
    ReservMgt.AutoTrack(TotalQty);
    END;
    END;
    PROCEDURE ModifyReservEntry@68(ReservEntry@1000 : Record 337;NewQuantity@1001 : Decimal;NewDescription@1002 : Text[50];ModifyReserved@1003 : Boolean);
    VAR
    TotalQty@1004 : Decimal;
    BEGIN
    ReservEntry.TESTFIELD("Reservation Status",ReservEntry."Reservation Status"::Reservation);
    IF NewQuantity * ReservEntry."Quantity (Base)" < 0 THEN
    IF NewQuantity < 0 THEN
    ERROR(Text000,ReservEntry.FIELDCAPTION("Quantity (Base)"))
    ELSE
    ERROR(Text001,ReservEntry.FIELDCAPTION("Quantity (Base)"));
    IF NewQuantity = 0 THEN
    ERROR(Text002);
    IF ABS(NewQuantity) > ABS(ReservEntry."Quantity (Base)") THEN
    ERROR(Text003,ReservEntry.FIELDCAPTION("Quantity (Base)"));
    IF ModifyReserved THEN BEGIN
    IF ReservEntry."Item No." <> Item."No." THEN
    GetItem(ReservEntry."Item No.");
    ReservEntry.GET(ReservEntry."Entry No.",ReservEntry.Positive); // Get existing entry
    ReservEntry.VALIDATE("Quantity (Base)",NewQuantity);
    ReservEntry.Description := NewDescription;
    ReservEntry."Changed By" := USERID;
    ReservEntry.MODIFY;
    IF Item."Order Tracking Policy" > Item."Order Tracking Policy"::None THEN BEGIN
    TotalQty := ReservMgt.SourceQuantity(ReservEntry,TRUE);
    ReservMgt.AutoTrack(TotalQty);
    END;
    IF ReservEntry.GET(ReservEntry."Entry No.",NOT ReservEntry.Positive) THEN BEGIN // Get related entry
    ReservEntry.VALIDATE("Quantity (Base)",-NewQuantity);
    ReservEntry.Description := NewDescription;
    ReservEntry."Changed By" := USERID;
    ReservEntry.MODIFY;
    IF Item."Order Tracking Policy" > Item."Order Tracking Policy"::None THEN BEGIN
    TotalQty := ReservMgt.SourceQuantity(ReservEntry,TRUE);
    ReservMgt.AutoTrack(TotalQty);
    END;
    // End of the lines.
    
    END;
    END;
    END;
    ...
    

    Kode pengganti

    ...
    UpdateOrderTracking(TempSurplusEntry);
    END ELSE
    CloseReservEntry(ReservEntry,TRUE,FALSE);
    END;
    
    // Add the following lines.
    LOCAL PROCEDURE RevertDateToSourceDate@49(VAR ReservEntry@1000 : Record 337);
    VAR
    SalesLine@1002 : Record 37;
    PurchaseLine@1003 : Record 39;
    TransferLine@1004 : Record 5741;
    ServiceLine@1005 : Record 5902;
    ProdOrderLine@1006 : Record 5406;
    RequisitionLine@1007 : Record 246;
    ProdOrderComponent@1008 : Record 5407;
    PlanningComponent@1009 : Record 99000829;
    JobJournalLine@1010 : Record 210;
    ItemJournalLine@1011 : Record 83;
    BOMJournalLine@1012 : Record 89;
    ItemLedgerEntry@1013 : Record 32;
    BEGIN
    WITH ReservEntry DO BEGIN
    CASE "Source Type" OF
    DATABASE::"Sales Line":
    BEGIN
    SalesLine.GET("Source Subtype","Source ID","Source Ref. No.");
    IF SalesLine.Quantity < 0 THEN
    ChangeDateFieldOnResEntry(ReservEntry,ReservEntry."Expected Receipt Date",TRUE)
    ELSE
    ChangeDateFieldOnResEntry(ReservEntry,SalesLine."Shipment Date",FALSE);
    END;
    DATABASE::"Purchase Line":
    BEGIN
    PurchaseLine.GET("Source Subtype","Source ID","Source Ref. No.");
    IF PurchaseLine.Quantity < 0 THEN
    ChangeDateFieldOnResEntry(ReservEntry,"Shipment Date",TRUE)
    ELSE
    ChangeDateFieldOnResEntry(ReservEntry,PurchaseLine."Expected Receipt Date",FALSE);
    END;
    DATABASE::"Requisition Line":
    BEGIN
    RequisitionLine.GET("Source ID","Source Batch Name","Source Ref. No.");
    ChangeDateFieldOnResEntry(ReservEntry,RequisitionLine."Due Date",FALSE);
    END;
    DATABASE::"Planning Component":
    BEGIN
    PlanningComponent.GET("Source ID","Source Batch Name","Source Prod. Order Line","Source Ref. No.");
    ChangeDateFieldOnResEntry(ReservEntry,PlanningComponent."Due Date",FALSE);
    END;
    DATABASE::"BOM Journal Line":
    BEGIN
    BOMJournalLine.GET("Source ID","Source Batch Name","Source Ref. No.");
    ChangeDateFieldOnResEntry(ReservEntry,BOMJournalLine."Posting Date",FALSE);
    END;
    DATABASE::"Item Journal Line":
    BEGIN
    ItemJournalLine.GET("Source ID","Source Batch Name","Source Ref. No.");
    ChangeDateFieldOnResEntry(ReservEntry,ItemJournalLine."Posting Date",FALSE);
    END;
    DATABASE::"Job Journal Line":
    BEGIN
    JobJournalLine.GET("Source ID","Source Batch Name","Source Ref. No.");
    ChangeDateFieldOnResEntry(ReservEntry,JobJournalLine."Posting Date",FALSE);
    END;
    DATABASE::"Item Ledger Entry":
    BEGIN
    ItemLedgerEntry.GET("Source Ref. No.");
    ChangeDateFieldOnResEntry(ReservEntry,ItemLedgerEntry."Posting Date",FALSE);
    END;
    DATABASE::"Prod. Order Line":
    BEGIN
    ProdOrderLine.GET("Source Subtype","Source ID","Source Prod. Order Line");
    ChangeDateFieldOnResEntry(ReservEntry,ProdOrderLine."Due Date",FALSE);
    END;
    DATABASE::"Prod. Order Component":
    BEGIN
    ProdOrderComponent.GET("Source Subtype","Source ID","Source Prod. Order Line","Source Ref. No.");
    ChangeDateFieldOnResEntry(ReservEntry,ProdOrderComponent."Due Date",FALSE);
    EXIT;
    END;
    DATABASE::"Transfer Line":
    BEGIN
    TransferLine.GET("Source ID","Source Ref. No.");
    IF ReservEntry.Positive THEN
    ChangeDateFieldOnResEntry(ReservEntry,TransferLine."Receipt Date",FALSE)
    ELSE
    ChangeDateFieldOnResEntry(ReservEntry,TransferLine."Shipment Date",FALSE);
    END;
    DATABASE::"Service Line":
    BEGIN
    ServiceLine.GET("Source Subtype","Source ID","Source Ref. No.");
    ChangeDateFieldOnResEntry(ReservEntry,ServiceLine."Posting Date",FALSE);
    END;
    // End of the lines.
    
    END;
    END;
    END;
    ...
    
  16. Ubah kode dalam fungsi ChangeDateFieldOnResEntry di Reservation Engine Mgt. codeunit (99000831) sebagai berikut:
    Kode yang sudah ada

    ...
    END;
    END;
    END;
    PROCEDURE CreateForText@70(ReservEntry@1000 : Record 337) : Text[80];
    BEGIN
    IF ReservEntry.GET(ReservEntry."Entry No.",FALSE) THEN
    EXIT(CreateText(ReservEntry))
    ELSE
    ...
    

    Kode pengganti

    ...
    END;
    END;
    END;
    
    // Add the following lines.
    LOCAL PROCEDURE ChangeDateFieldOnResEntry@50(VAR ReservEntry@1000 : Record 337;NewDate@1002 : Date;Reversal@1003 : Boolean);
    BEGIN
    IF ReservEntry.Positive XOR Reversal THEN BEGIN
    ReservEntry."Expected Receipt Date" := NewDate;
    ReservEntry."Shipment Date" := 0D;
    END ELSE BEGIN
    ReservEntry."Expected Receipt Date" := 0D;
    ReservEntry."Shipment Date" := NewDate;
    END;
    END;
    PROCEDURE CloseReservEntry@20(ReservEntry@1000 : Record 337;ReTrack@1001 : Boolean;DeleteAll@1002 : Boolean);
    VAR
    ReservEntry2@1003 : Record 337;
    SurplusReservEntry@1004 : Record 337;
    DummyReservEntry@1005 : Record 337;
    TotalQty@1006 : Decimal;
    AvailabilityDate@1007 : Date;
    BEGIN
    ReservEntry.DELETE;
    GetItem(ReservEntry."Item No.");
    IF ReservEntry."Reservation Status" = ReservEntry."Reservation Status"::Prospect THEN
    EXIT;
    IF ReservEntry."Reservation Status" = ReservEntry."Reservation Status"::Surplus THEN BEGIN
    IF Item."Order Tracking Policy" = Item."Order Tracking Policy"::"Tracking & Action Msg." THEN
    ReservMgt.ModifyActionMessage(ReservEntry."Entry No.",0,TRUE); // Delete related action messages
    END ELSE BEGIN
    IF ReservEntry.Binding = ReservEntry.Binding::"Order-to-Order" THEN
    IF Item."Order Tracking Policy" = Item."Order Tracking Policy"::"Tracking & Action Msg." THEN
    ReservMgt.ModifyActionMessage(ReservEntry."Entry No.",0,TRUE); // Delete related action messages
    ReservEntry2.GET(ReservEntry."Entry No.",NOT ReservEntry.Positive);
    IF (Item."Order Tracking Policy" = Item."Order Tracking Policy"::None) AND
    (((ReservEntry.Binding = ReservEntry.Binding::"Order-to-Order") AND ReservEntry2.Positive )OR
    ((ReservEntry2."Serial No." = '') AND (ReservEntry2."Lot No." = ''))) THEN
    ReservEntry2.DELETE
    ELSE BEGIN
    ReservEntry2."Reservation Status" := ReservEntry2."Reservation Status"::Surplus;
    IF ReservEntry2.Positive THEN BEGIN
    AvailabilityDate := ReservEntry2."Expected Receipt Date";
    ReservEntry2."Shipment Date" := 0D
    END ELSE BEGIN
    AvailabilityDate := ReservEntry2."Shipment Date";
    ReservEntry2."Expected Receipt Date" := 0D;
    END;
    ReservEntry2.MODIFY;
    ReservEntry2."Quantity (Base)" :=
    ReservMgt.MatchSurplus(ReservEntry2,SurplusReservEntry,ReservEntry2."Quantity (Base)",NOT ReservEntry2.Positive,
    AvailabilityDate,Item."Order Tracking Policy");
    IF ReservEntry2."Quantity (Base)" = 0 THEN BEGIN
    ReservEntry2.DELETE(TRUE);
    END ELSE BEGIN
    ReservEntry2.MODIFY;
    IF Item."Order Tracking Policy" = Item."Order Tracking Policy"::"Tracking & Action Msg." THEN BEGIN
    ModifyActionMessageDating(ReservEntry2);
    IF DeleteAll THEN
    ReservMgt.IssueActionMessage(ReservEntry2,FALSE,ReservEntry)
    ELSE
    ReservMgt.IssueActionMessage(ReservEntry2,FALSE,DummyReservEntry);
    END;
    END;
    END;
    END;
    IF ReTrack THEN BEGIN
    TotalQty := ReservMgt.SourceQuantity(ReservEntry,TRUE);
    ReservMgt.AutoTrack(TotalQty);
    END;
    END;
    PROCEDURE ModifyReservEntry@68(ReservEntry@1000 : Record 337;NewQuantity@1001 : Decimal;NewDescription@1002 : Text[50];ModifyReserved@1003 : Boolean);
    VAR
    TotalQty@1004 : Decimal;
    BEGIN
    ReservEntry.TESTFIELD("Reservation Status",ReservEntry."Reservation Status"::Reservation);
    IF NewQuantity * ReservEntry."Quantity (Base)" < 0 THEN
    IF NewQuantity < 0 THEN
    ERROR(Text000,ReservEntry.FIELDCAPTION("Quantity (Base)"))
    ELSE
    ERROR(Text001,ReservEntry.FIELDCAPTION("Quantity (Base)"));
    IF NewQuantity = 0 THEN
    ERROR(Text002);
    IF ABS(NewQuantity) > ABS(ReservEntry."Quantity (Base)") THEN
    ERROR(Text003,ReservEntry.FIELDCAPTION("Quantity (Base)"));
    IF ModifyReserved THEN BEGIN
    IF ReservEntry."Item No." <> Item."No." THEN
    GetItem(ReservEntry."Item No.");
    ReservEntry.GET(ReservEntry."Entry No.",ReservEntry.Positive); // Get existing entry
    ReservEntry.VALIDATE("Quantity (Base)",NewQuantity);
    ReservEntry.Description := NewDescription;
    ReservEntry."Changed By" := USERID;
    ReservEntry.MODIFY;
    IF Item."Order Tracking Policy" > Item."Order Tracking Policy"::None THEN BEGIN
    TotalQty := ReservMgt.SourceQuantity(ReservEntry,TRUE);
    ReservMgt.AutoTrack(TotalQty);
    END;
    IF ReservEntry.GET(ReservEntry."Entry No.",NOT ReservEntry.Positive) THEN BEGIN // Get related entry
    ReservEntry.VALIDATE("Quantity (Base)",-NewQuantity);
    ReservEntry.Description := NewDescription;
    ReservEntry."Changed By" := USERID;
    ReservEntry.MODIFY;
    IF Item."Order Tracking Policy" > Item."Order Tracking Policy"::None THEN BEGIN
    TotalQty := ReservMgt.SourceQuantity(ReservEntry,TRUE);
    ReservMgt.AutoTrack(TotalQty);
    END;
    END;
    END;
    END;
    // End of the lines.
    
    PROCEDURE CreateForText@70(ReservEntry@1000 : Record 337) : Text[80];
    BEGIN
    IF ReservEntry.GET(ReservEntry."Entry No.",FALSE) THEN
    EXIT(CreateText(ReservEntry))
    ELSE
    ...
    

          

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

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.