-
Notifications
You must be signed in to change notification settings - Fork 338
Description
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 Subcontractsaction in theSubcontracting Worksheetpage
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