Microsoft Dynamics NAV 2009'da üretim siparişi için rezervasyonu iptal ettikten sonra satış siparişinden oluşturulan bir üretim emrinin çıkışını deftere naklettiğinizde "Rezervasyon Girdisi yok" hata iletisi

Uygulandığı Öğe
Dynamics NAV 2009

Bu makale tüm ülkelerde ve tüm dil yerel ayarlarında Microsoft için geçerlidir.

Belirtiler

Microsoft Dynamics NAV 2009'da satış siparişinden bir madde için üretim emri oluşturduğunuzu varsayalım. Üretim emri için rezervasyon miktarını iptal ettiniz. Bu durumda, üretim emrinin çıkışını deftere naklettiğinizde aşağıdaki hata iletisini alırsınız:

Not

Rezervasyon Girişi mevcut değil. Tanımlama alanları ve değerleri:Giriş No.='giriş numarası',Pozitif='Hayır'.

Bu sorun aşağıdaki ürünlerde oluşur:

  • Microsoft Dynamics NAV 2009 R2
  • Microsoft Dynamics NAV 2009 Service Pack 1

      

Çözüm

Düzeltme bilgileri

Artık Microsoft, desteklenen bir düzeltme sunmaktadır. Ancak, yalnızca bu makalede açıklanan sorunu düzeltmeye yöneliktir. Bunu yalnızca bu özel sorunun yaşandığı sistemlere uygulayın. Bu düzeltme için ek sınamalar gerekebilir. Bu nedenle, bu sorundan ciddi bir şekilde etkilenmiyorsanız, bir sonraki Microsoft Dynamics NAV 2009 hizmet paketini veya bu düzeltmeyi içeren bir sonraki Microsoft Dynamics NAV sürümünü beklemenizi öneririz.

Not Özel durumlarda, Microsoft Dynamics ve ilgili ürünler için bir Teknik Destek Uzmanı belirli bir güncelleştirmenin sorunu çözeceğini belirlerse, normalde destek aramaları için yapılan ücretler iptal edilebilir. Ek destek soruları ve söz konusu güncelleştirme için uygun olmayan sorunlara normal destek ücretleri uygulanır.

            
          

Yükleme bilgileri

Microsoft, programlama örneklerini yalnızca gösterim amacıyla sağlar; açık veya zımni hiçbir garanti vermez. Bu, satılabilirlik veya belirli bir amaca uygunluk ile ilgili zımni garantileri içerir, ancak bunlarla sınırlı değildir. Bu makale, gösterilen programlama diline ve prosedürler oluşturmak ve prosedürlerde hata ayıklamak için kullanılan araçlara aşina olduğunuzu varsaymaktadır. Microsoft destek mühendisleri, belirli bir yordamın işlevselliğinin açıklanmasına yardımcı olabilir, ancak gereksinimlerinizi karşılamaya yönelik ek işlevsellik sağlamak veya yordamlar geliştirmek amacıyla bu örnekleri değiştirmezler.

Not Bu düzeltmeyi yüklemeden önce, tüm Microsoft Navision istemcisi kullanıcılarının sistem oturumunu kapattığını doğrulayın. Bu, Microsoft Navision Application Services (NAS) istemci kullanıcılarını içerir. Bu düzeltmeyi uyguladığınızda oturum açan tek istemci kullanıcı siz olmalısınız.

Bu düzeltmeyi uygulamak için bir geliştirici lisansınız olmalıdır.

Windows Oturum Açma veya Veritabanı Oturum Açma penceresindeki kullanıcı hesabına "SUPER" rol kimliğinin atanmasını öneririz. Kullanıcı hesabına "SUPER" rol kimliği atanamıyorsa, kullanıcı hesabının aşağıdaki izinlere sahip olduğunu doğrulamanız gerekir:

  • Değiştireceğiniz nesnenin Değiştirme izni.
  • Sistem Nesne Kimliği 5210 nesnesi ve Sistem Nesne Kimliği 9015 nesnesi için Yürütme izni.

                
Not: Veri onarımı gerçekleştirmeniz gerekmediği sürece, veri depoları üzerinde haklarınız olması gerekmez.

Kod değişiklikleri

Not: Kod düzeltmelerini üretim bilgisayarlarınıza uygulamadan önce her zaman denetimli bir ortamda sınayın.
Bu sorunu gidermek için aşağıdaki adımları izleyin:

  1. Rezervasyon Girişleri formundaki Denetimler'de (497) yer alan kodu aşağıdaki gibi değiştirin:
    Mevcut kod

    ...
    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;
    }
    ...
    

    Değişim kodu

    ...
    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. Rezervasyon formundaki Denetimler'de (498) bulunan kodu aşağıdaki gibi değiştirin:
    Mevcut kod

    ...
    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
    ...
    

    Değişim kodu

    ...
    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. Kullanılabilir - Satış Satırları formundaki (499) Denetimler'de yer alan kodu aşağıdaki gibi değiştirin:
    Mevcut kod

    ...
    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;
    ...
    

    Değişim kodu

    ...
    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. Kullanılabilir - Talep Satırları formundaki (500) Denetimler'deki kodu aşağıdaki gibi değiştirin:
    Mevcut kod

    ...
    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;
    ...
    

    Değişim kodu

    ...
    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. Kullanılabilir - Satın Alma Satırları formundaki (501) Denetimler'deki kodu aşağıdaki gibi değiştirin:
    Mevcut kod

    ...
    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;
    ...
    

    Değişim kodu

    ...
    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. Kullanılabilir - Öğe Günlüğü Satırları formundaki (502) Denetimler'deki kodu aşağıdaki gibi değiştirin:
    Mevcut kod

    ...
    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;
    ...
    

    Değişim kodu

    ...
    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. Kullanılabilir - Öğe Ledg'deki Kontrollerdeki kodu değiştirin. Girişler formu (504) aşağıdaki gibidir:
    Mevcut kod

    ...
    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;
    ...
    

    Değişim kodu

    ...
    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. Kullanılabilir - Hizmet Satırları formundaki (5999) Denetimler'deki kodu aşağıdaki gibi değiştirin:
    Mevcut kod

    ...
    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;
    ...
    

    Değişim kodu

    ...
    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. Boştaki Denetimler'deki kodu değiştirin. - Ürün Takip Çizgileri formu (6503) aşağıdaki gibidir:
    Mevcut kod

    ...
    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;
    ...
    

    Değişim kodu

    ...
    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. Kullanılabilir - Aktarma Satırları formundaki (99000896) Denetimler'deki kodu aşağıdaki gibi değiştirin:
    Mevcut kod

    ...
    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;
    ...
    

    Değişim kodu

    ...
    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. Kullanılabilir - Üretim Sipariş Satırları formundaki (99000897) Denetimler'deki kodu aşağıdaki gibi değiştirin:
    Mevcut kod

    ...
    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;
    ...
    

    Değişim kodu

    ...
    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. Kullanılabilir - Üretim Sipariş Kompozisyonu'ndaki Denetimlerdeki kodu değiştirin. form (99000898) aşağıdaki gibidir:
    Mevcut kod

    ...
    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;
    ...
    

    Değişim kodu

    ...
    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. Boştaki Denetimler'deki kodu değiştirin. - Planlama Bileşenleri formu (99000900) aşağıdaki gibidir:
    Mevcut kod

    ...
    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;
    ...
    

    Değişim kodu

    ...
    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. Reservation Engine Mgt. kod birimindeki (99000831) CloseReservEntry2 işlevindeki kodu aşağıdaki gibi değiştirin:
    Mevcut kod 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);
    ...
    

    Değiştirme kodu 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);
    ...
    

    Mevcut kod 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);
    ...
    

    Değiştirme kodu 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. Reservation Engine Mgt. kod birimindeki (99000831) CloseReservEntry işlevindeki kodu aşağıdaki gibi değiştirin:
    Mevcut kod

    ...
    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;
    ...
    

    Değişim kodu

    ...
    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. Reservation Engine Mgt. kod birimindeki (99000831) ChangeDateFieldOnResEntry işlevindeki kodu aşağıdaki gibi değiştirin:
    Mevcut kod

    ...
    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
    ...
    

    Değişim kodu

    ...
    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
    ...
    

          

Önkoşullar

Bu düzeltmeyi uygulamak için aşağıdaki ürünlerden birini yüklemiş olmanız gerekir:

  • Microsoft Dynamics NAV 2009 R2
  • Microsoft Dynamics NAV 2009 Service Pack 1

Kaldırma bilgileri

Bu düzeltmeyi kaldıramazsınız.

Durum

Microsoft bunun, "Şunlar için geçerlidir" bölümünde listelenen Microsoft ürünlerinde sorun olduğunu doğrulamıştır.

Not: Bu, doğrudan Microsoft destek kuruluşu tarafından hazırlanmış bir "HIZLI YAYIMLAMA" makalesidir. Burada yer alan bilgiler acil sorunlar karşısında bu şekliyle verilir. Kullanıma sunma hızının bir sonucu olarak, materyaller yazım hataları içerebilir ve herhangi bir zamanda önceden haber verilmeksizin revize edilebilir. Göz önünde bulundurulması gereken diğer hususlar için Kullanım Koşulları'na bakın.