microsoft / ALAppExtensions

Repository for collaboration on Microsoft AL application add-on and localization extensions for Microsoft Dynamics 365 Business Central.
MIT License
770 stars 610 forks source link

[Event Request] Сodeunit 7314 "Warehouse Availability Mgt." - procedure CalcReservQtyOnPicksShipsWithItemTracking #26990

Open Capitaller opened 1 month ago

Capitaller commented 1 month ago

Describe the request

We want to request an event in ??odeunit 7314 "Warehouse Availability Mgt." - procedure CalcReservQtyOnPicksShipsWithItemTracking and a new filter in Query 7314 CalcRsvQtyOnPicksShipsWithIT

Event:

procedure CalcReservQtyOnPicksShipsWithItemTracking(var WarehouseActivityLine: Record "Warehouse Activity Line"; var TrackingSpecification: Record "Tracking Specification"; LocationCode: Code[10]; ItemNo: Code[20]; VariantCode: Code[10]) Result: Decimal
    var
        TempReservEntryBuffer: Record "Reservation Entry Buffer" temporary;
        CalcRsvQtyOnPicksShipsWithIT: Query CalcRsvQtyOnPicksShipsWithIT;
        ResPickShipQty: Decimal;
        QtyPicked: Decimal;
        QtyToPick: Decimal;
        IsHandled: Boolean;
    begin
        IsHandled := false;
        OnBeforeCalcReservQtyOnPicksShipsWithItemTracking(LocationCode, ItemNo, VariantCode, Result, IsHandled);
        if IsHandled then
            exit(Result);

        CalcRsvQtyOnPicksShipsWithIT.SetRange(Item_No_, ItemNo);
        CalcRsvQtyOnPicksShipsWithIT.SetRange(Variant_Code, VariantCode);
        CalcRsvQtyOnPicksShipsWithIT.SetRange(Location_Code, LocationCode);
        CalcRsvQtyOnPicksShipsWithIT.SetRange(Reservation_Status, "Reservation Status"::Reservation);
        CalcRsvQtyOnPicksShipsWithIT.SetRange(Positive, false);

        CalcRsvQtyOnPicksShipsWithIT.SetRange(Positive_2, true);
        CalcRsvQtyOnPicksShipsWithIT.SetRange(Source_Type_2, Database::"Item Ledger Entry");

        if TrackingSpecification."Serial No." <> '' then
            CalcRsvQtyOnPicksShipsWithIT.SetRange(Serial_No_, TrackingSpecification."Serial No.");
        if TrackingSpecification."Lot No." <> '' then
            CalcRsvQtyOnPicksShipsWithIT.SetRange(Lot_No_, TrackingSpecification."Lot No.");
        if TrackingSpecification."Package No." <> '' then
            CalcRsvQtyOnPicksShipsWithIT.SetRange(Package_No_, TrackingSpecification."Package No.");

// NEW EVENT ->
        OnBeforeOpenCalcRsvQtyOnPickShipWithITQuery(CalcRsvQtyOnPicksShipsWithIT);
// NEW EVENT <-
        CalcRsvQtyOnPicksShipsWithIT.Open();

Event code:

    [IntegrationEvent(false, false)]
    local procedure OnBeforeOpenCalcRsvQtyOnPickShipWithITQuery(var CalcRsvQtyOnPicksShipsWithIT: Query "SMA CalcRsvQtyOnPickShipWithIT")
    begin
    end;

Filter:

query 7314 CalcRsvQtyOnPickShipWithIT
{
    QueryType = Normal;
    DataAccessIntent = ReadOnly;
    elements
    {
        dataitem(ReservEntry; "Reservation Entry")
        {
            column(Quantity__Base_; "Quantity (Base)")
            {

            }
            column(Source_Type; "Source Type")
            {

            }
            column(Source_Subtype; "Source Subtype")
            {

            }
            column(Source_ID; "Source ID")
            {

            }
            column(Source_Batch_Name; "Source Batch Name")
            {

            }
            column(Source_Prod__Order_Line; "Source Prod. Order Line")
            {

            }
            column(Source_Ref__No_; "Source Ref. No.")
            {

            }
            filter(Item_No_; "Item No.")
            {

            }
            filter(Variant_Code; "Variant Code")
            {

            }
            filter(Location_Code; "Location Code")
            {

            }
            filter(Reservation_Status; "Reservation Status")
            {

            }
            filter(Positive; Positive)
            {

            }
            // NEW FILTER  ->
            filter(Item_Tracking; "Item Tracking")
            {

            }
            // NEW FILTER <-
            dataitem(PositiveReservationEntry; "Reservation Entry")
            {
                DataItemLink = "Entry No." = ReservEntry."Entry No.";
                SqlJoinType = InnerJoin;

                filter(Positive_2; Positive)
                {

                }
                filter(Source_Type_2; "Source Type")
                {

                }
                filter(Serial_No_; "Serial No.")
                {

                }
                filter(Lot_No_; "Lot No.")
                {

                }
                filter(Package_No_; "Package No.")
                {

                }
            }
        }
    }

}

Also, to make query filtering possible, it`s access mode should be changed to Public

Additional context

We need these changes to apply filters before opening CalcRsvQtyOnPickShipWithIT to make custom Item Tracking calculations possible. Internal work item: AB#544592