Reservation of all lines of the document

adept_kzadept_kz Member Posts: 11
Hi. I create a lot of item shipments every day and I have to reserve manually each line in every document :(
Navision doesn't allow to reserve (to cancel reservation) all lines by one click. But I believe that it's possible. Help me please to realize this small solution. How to use properly reservation codeunits and functions?

Thanks in advance.

Comments

  • CuypzCuypz Member Posts: 56
    I made two extra functions on form 498 - Reservation to simulate a reservation button click. May I warn you that this is messy copy-paste code, but it does the job and might give you a clue how to solve it yourself.
    AutoReserve()
    IF ReservSummEntry.FIND('-') THEN
    BEGIN
       Rec := ReservSummEntry;
    
       RemainingQtyToReserve := QtyToReserve - QtyReserved;
       IF RemainingQtyToReserve = 0 THEN;
       QtyReservedBefore := QtyReserved;
       IF HandleItemTracking THEN
         ReservMgt.SetItemTrackingHandling(2);
       ReservMgt.AutoReserveOneLine(
         "Entry No.",RemainingQtyToReserve,ReservEntry.Description,
         ReservEntry."Shipment Date");
       UpdateReservFrom;
       IF QtyReservedBefore = QtyReserved THEN;
    END;
    
    AutoCancel()
    IF ReservSummEntry.FIND('-') THEN
    BEGIN
       Rec := ReservSummEntry;
    
       CLEAR(ReservEntry2);
       ReservEntry2 := ReservEntry;
       ReservMgt.SetPointerFilter(ReservEntry2);
       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
             ReservEngineMgt.CloseReservEntry2(ReservEntry2,TRUE,FALSE);
             RecordsFound := TRUE;
           END;
         UNTIL ReservEntry2.NEXT = 0;
    
       IF RecordsFound THEN
         UpdateReservFrom;
    
    END;
    


    Next, in the Sales Line table, I created these two functions:
    ReserveCompleteOrder()
    recSalesLine.RESET;
    recSalesLine.SETRANGE("Document No.","Document No.");
    recSalesLine.SETRANGE("Document Type","Document Type");
    recSalesLine.SETRANGE(Type,recSalesLine.Type::Item);
    recSalesLine.SETFILTER(Reserve,'<>%1',recSalesLine.Reserve::Never);
    recSalesLine.SETFILTER("No.",'<>%1','');
    
    IF recSalesLine.FIND('-') THEN
    REPEAT
       recSalesLine.TESTFIELD(Reserve);
       CLEAR(Reservation);
       Reservation.SetSalesLine(recSalesLine);
       Reservation.AutoReserve;
    UNTIL recSalesLine.NEXT = 0;`
    
    CancelCompleteOrder()
    recSalesLine.RESET;
    recSalesLine.SETRANGE("Document No.","Document No.");
    recSalesLine.SETRANGE("Document Type","Document Type");
    recSalesLine.SETRANGE(Type,recSalesLine.Type::Item);
    recSalesLine.SETFILTER(Reserve,'<>%1',recSalesLine.Reserve::Never);
    recSalesLine.SETFILTER("No.",'<>%1','');
    
    IF recSalesLine.FIND('-') THEN
    REPEAT
       recSalesLine.TESTFIELD(Reserve);
       CLEAR(Reservation);
       Reservation.SetSalesLine(recSalesLine);
       Reservation.AutoCancel;
    UNTIL recSalesLine.NEXT = 0;
    

    Next on the sales line subform, I created the follow two functions:
    ReserveCompleteOrder()
    Rec.ReserveCompleteOrder;
    
    CancelCompleteOrder()
    Rec.CancelCompleteOrder;
    

    And finally I created a menu button on the Sales Order form to call both functions in the sales line subform. Subsequently, those functions will call the functions in the Sales Line table, which will call the appropriate functions on the reservation form. This form never shows up. All this code above simulates the actions of opening that reservation form and clicking "Function" > "Reserve Current Line" and loops this simulation for every sales line available on the order.
  • adept_kzadept_kz Member Posts: 11
    Cuypz,

    Thanks a lot for your advice.
Sign In or Register to comment.