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

    SCMGitHub request for SCM area

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions