Skip to content

[Bug]: Subcontracting req. line dimension from ref #6783

@CaianiRiccardo

Description

@CaianiRiccardo

Describe the issue

There is a bug in the v27.4 version from the v26.5 that ignore the migration of dimension from the production order line to the requisition line.

The bug i think go back few versions for the integration ( event subscribers ) but now also the standard procedure is broken.

Expected behavior

If i create a requisition line from the Subcontracting Worksheet page i expect a merge of the dimensions between the one in the req. line and the one from the source no ( the production order in this case ).

Steps to reproduce

  • Create a production order with routing that use subcontracting.
  • Run the Calculate Subcontracts action in the Subcontracting Worksheet page

Additional context

The problem i think it is in the migration of the case in the procedure GetDimFromRefOrderLine in the Requisition line table.

V26.5 ( the case include the production order ):

procedure GetDimFromRefOrderLine(AddToExisting: Boolean)
    var
        PurchLine: Record "Purchase Line";
        ProdOrderLine: Record "Prod. Order Line";
        TransferLine: Record "Transfer Line";
        DimSetIDArr: array[10] of Integer;
        i: Integer;
        IsHandled: Boolean;
    begin
        if AddToExisting then begin
            i := 1;
            DimSetIDArr[i] := "Dimension Set ID";
        end;
        i := i + 1;

        case "Ref. Order Type" of
            "Ref. Order Type"::Purchase:
                if PurchLine.Get(PurchLine."Document Type"::Order, "Ref. Order No.", "Ref. Line No.") then
                    DimSetIDArr[i] := PurchLine."Dimension Set ID";
            "Ref. Order Type"::"Prod. Order":
                if ProdOrderLine.Get("Ref. Order Status", "Ref. Order No.", "Ref. Line No.") then
                    DimSetIDArr[i] := ProdOrderLine."Dimension Set ID";
            "Ref. Order Type"::Transfer:
                begin
                    IsHandled := false;
                    OnGetDimFromRefOrderLineOnBeforeSetDimSetIDTypeTransfer(Rec, DimSetIDArr, i, IsHandled);
                    if not IsHandled then
                        if TransferLine.Get("Ref. Order No.", "Ref. Line No.") then
                            DimSetIDArr[i] := TransferLine."Dimension Set ID";
                end;
            else
                OnGetDimFromRefOrderLineElseCase(Rec, DimSetIDArr, i);
        end;
        "Dimension Set ID" := DimMgt.GetCombinedDimensionSetID(DimSetIDArr, "Shortcut Dimension 1 Code", "Shortcut Dimension 2 Code");
    end;

V27.4 ( does not include the prod. order ):

procedure GetDimFromRefOrderLine(AddToExisting: Boolean)
    var
        PurchLine: Record "Purchase Line";
        TransferLine: Record "Transfer Line";
        DimSetIDArr: array[10] of Integer;
        i: Integer;
        IsHandled: Boolean;
    begin
        if AddToExisting then begin
            i := 1;
            DimSetIDArr[i] := "Dimension Set ID";
        end;
        i := i + 1;

        case "Ref. Order Type" of
            "Ref. Order Type"::Purchase:
                if PurchLine.Get(PurchLine."Document Type"::Order, "Ref. Order No.", "Ref. Line No.") then
                    DimSetIDArr[i] := PurchLine."Dimension Set ID";
            "Ref. Order Type"::Transfer:
                begin
                    IsHandled := false;
                    OnGetDimFromRefOrderLineOnBeforeSetDimSetIDTypeTransfer(Rec, DimSetIDArr, i, IsHandled);
                    if not IsHandled then
                        if TransferLine.Get("Ref. Order No.", "Ref. Line No.") then
                            DimSetIDArr[i] := TransferLine."Dimension Set ID";
                end;
            else
                OnGetDimFromRefOrderLineElseCase(Rec, DimSetIDArr, i);
        end;
        "Dimension Set ID" := DimMgt.GetCombinedDimensionSetID(DimSetIDArr, "Shortcut Dimension 1 Code", "Shortcut Dimension 2 Code");
    end;

the main problem is that the event OnGetDimFromRefOrderLineElseCase does not have the variable DimSetIDArr passed with var:

    [IntegrationEvent(false, false)]
    local procedure OnGetDimFromRefOrderLineElseCase(var RequisitionLine: Record "Requisition Line"; DimSetIDArr: array[10] of Integer; i: Integer)
    begin
    end;

this block every integration event the new one for the production order ( now moved in a different codeunit )

I will provide a fix for a bug

  • I will provide a fix for a bug

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions