Skip to content

[Event Request + Request for External] Report 5756 "Create Warehouse Location" #30098

@jasonchen-sudo

Description

@jasonchen-sudo

Why do you need this change?

We would like to customise logic around TempWhseJnlLine."Unit of Measure Code" assignment inside CreateWhseJnlLine() in Report 5756 "Create Warehouse Location" , so we would need to have an event OnCreateWhseJnlLineOnBeforeGetItemUnitofMeasure() along with exposing GetItem() and GetItemUnitOfMeasure() procedures which are both currently local.

Describe the request

Hi Microsoft BC Dev Team,

Could you add this integration event OnCreateWhseJnlLineOnBeforeGetItemUnitofMeasure() with a IsHandled boolean inside procedure CreateWhseJnlLine() like below?

    local procedure CreateWhseJnlLine(GroupedItemLedgerEntries: Query "Grouped Item Ledger Entries")
+   var
+       IsHandled: Boolean;
    begin
        LastLineNo += 10000;

        TempWhseJnlLine.Init();
        TempWhseJnlLine."Entry Type" := TempWhseJnlLine."Entry Type"::"Positive Adjmt.";
        TempWhseJnlLine."Line No." := LastLineNo;
        TempWhseJnlLine."Location Code" := GroupedItemLedgerEntries.Location_Code;
        TempWhseJnlLine."Item No." := GroupedItemLedgerEntries.Item_No;
        TempWhseJnlLine."Variant Code" := GroupedItemLedgerEntries.Variant_Code;

+       IsHandled := false;
+       OnCreateWhseJnlLineOnBeforeGetItemUnitofMeasure(TempWhseJnlLine, GroupedItemLedgerEntries, IsHandled);
+       if not IsHandled then begin
            TempWhseJnlLine."Unit of Measure Code" := GroupedItemLedgerEntries.Unit_of_Measure_Code;
            if TempWhseJnlLine."Unit of Measure Code" = '' then begin
                GetItem(GroupedItemLedgerEntries.Item_No);
                TempWhseJnlLine."Unit of Measure Code" := Item."Base Unit of Measure";
            end;
            GetItemUnitOfMeasure(GroupedItemLedgerEntries.Item_No, GroupedItemLedgerEntries.Unit_of_Measure_Code);
            TempWhseJnlLine.Quantity := UOMMgt.CalcQtyFromBase(GroupedItemLedgerEntries.Remaining_Quantity, ItemUnitOfMeasure."Qty. per Unit of Measure");
+        end;

        TempWhseJnlLine."Qty. (Base)" := GroupedItemLedgerEntries.Remaining_Quantity;
        TempWhseJnlLine."Qty. (Absolute)" := Abs(TempWhseJnlLine.Quantity);
        TempWhseJnlLine."Qty. (Absolute, Base)" := Abs(TempWhseJnlLine."Qty. (Base)");
        TempWhseJnlLine.Cubage := TempWhseJnlLine."Qty. (Absolute)" * ItemUnitOfMeasure.Cubage;
        TempWhseJnlLine.Weight := TempWhseJnlLine."Qty. (Absolute)" * ItemUnitOfMeasure.Weight;

        TempWhseJnlLine."Serial No." := GroupedItemLedgerEntries.Serial_No_;
        TempWhseJnlLine."Lot No." := GroupedItemLedgerEntries.Lot_No_;
        TempWhseJnlLine."Package No." := GroupedItemLedgerEntries.Package_No_;

        TempWhseJnlLine.Validate("Zone Code", Bin."Zone Code");
        TempWhseJnlLine."Bin Code" := AdjBinCode;
        TempWhseJnlLine."To Bin Code" := AdjBinCode;
        WMSMgt.CheckWhseJnlLine(TempWhseJnlLine, 0, 0, false);

        TempWhseJnlLine."User ID" := CopyStr(UserId(), 1, MaxStrLen(TempWhseJnlLine."User ID"));
        TempWhseJnlLine."Registering Date" := WorkDate();
        OnCreateWhseJnlLineOnBeforeTempWhseJnlLineInsert(TempWhseJnlLine);
        TempWhseJnlLine.Insert();
    end;
    [IntegrationEvent(false, false)]
    local procedure OnCreateWhseJnlLineOnBeforeGetItemUnitofMeasure(var WarehouseJournalLine: Record "Warehouse Journal Line"; GroupedItemLedgerEntries: Query "Grouped Item Ledger Entries"; var IsHandled: Boolean)
    begin
    end;

Also can we please expose both GetItem() and GetItemUnitOfMeasure() procedures in Report "Create Warehouse Location" to be external so they could get called from outside?

    local procedure GetItem(ItemNo: Code[20])
    begin
        if Item."No." <> ItemNo then
            Item.Get(ItemNo);
    end;

    local procedure GetItemUnitOfMeasure(ItemNo: Code[20]; UOMCode: Code[10])
    begin
        if (ItemUnitOfMeasure."Item No." <> ItemNo) or
           (ItemUnitOfMeasure.Code <> UOMCode)
        then
            if not ItemUnitOfMeasure.Get(ItemNo, UOMCode) then
                ItemUnitOfMeasure.Init();
    end;

Regards,
Jason

Metadata

Metadata

Assignees

No one assigned

    Labels

    missing-infoThe issue misses information that prevents it from completion.

    Type

    No fields configured for Task.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions