Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -558,7 +558,7 @@ report 99001501 "Subc. Create Transf. Order"
GetTransferToLocationCodeForPurchaseHeader(PurchaseHeader, VendorFromPurchOrder, TransferToLocationCode);

if TransferToLocationCode = '' then
exit(false);
VendorFromPurchOrder.TestField("Subc. Location Code");

PostedWIPQtyBase := GetWIPQtyBase(PurchaseLine, TransferToLocationCode);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1467,6 +1467,67 @@ codeunit 149911 "Subc. WIP Trans. Create Test"
'WIP Transfer Line description must not be cleared when Direct Transfer is enabled on the header.');
end;

[Test]
[HandlerFunctions('DoNotConfirmShowCreatedPurchOrderForSubcontracting')]
procedure WIPTransferCreationFailsWithTestFieldErrorWhenSubcLocationBlank()
var
Item: Record Item;
MachineCenter: array[2] of Record "Machine Center";
ProductionOrder: Record "Production Order";
PurchaseHeader: Record "Purchase Header";
PurchaseLine: Record "Purchase Line";
Vendor: Record Vendor;
WorkCenter: array[2] of Record "Work Center";
PurchaseHeaderPage: TestPage "Purchase Order";
begin
// [FEATURE] WIP Item Transfer for Subcontracting
// [SCENARIO 638815] When both the Vendor "Subc. Location Code" and the Purchase Header
// "Subc. Location Code" are blank, creating a WIP Transfer Order must raise a TestField
// error on Vendor "Subc. Location Code" instead of the generic "Nothing to create" error.

// [GIVEN] Complete subcontracting setup with Transfer WIP Item = true on the routing line
Initialize();

// [GIVEN] Work centers, machine centers, item with routing + BOM
SubcWarehouseLibrary.CreateAndCalculateNeededWorkAndMachineCenter(WorkCenter, MachineCenter, true);
SubcWarehouseLibrary.CreateItemForProductionIncludeRoutingAndProdBOM(Item, WorkCenter, MachineCenter);
SetTransferWIPItemOnRoutingLine(Item."Routing No.", WorkCenter[2]."No.", true);

// [GIVEN] Create and refresh released production order at the components location
LibraryManufacturing.CreateProductionOrder(
ProductionOrder, "Production Order Status"::Released,
ProductionOrder."Source Type"::Item, Item."No.", LibraryRandom.RandInt(10) + 5);
SetProdOrderLocationToCompSetupLocationAndRefresh(ProductionOrder);

// [GIVEN] Create Subcontracting Purchase Order from Prod. Order Routing
// (vendor already has a Subc. Location Code from CreateAndCalculateNeededWorkAndMachineCenter,
// so the purchase header inherits it; we will clear both afterwards)
SubcontractingMgmtLibrary.CreateSubcontractingOrderFromProdOrderRtngPage(Item."Routing No.", WorkCenter[2]."No.");

PurchaseLine.SetRange("Document Type", PurchaseLine."Document Type"::Order);
PurchaseLine.SetRange("Prod. Order No.", ProductionOrder."No.");
PurchaseLine.FindFirst();
PurchaseHeader.Get(PurchaseLine."Document Type", PurchaseLine."Document No.");

// [GIVEN] Both the Vendor "Subc. Location Code" and the Purchase Header "Subc. Location Code" are cleared
Vendor.Get(WorkCenter[2]."Subcontractor No.");
Vendor."Subc. Location Code" := '';
Vendor.Modify();

PurchaseHeader."Subc. Location Code" := '';
PurchaseHeader.Modify();

// [WHEN] Attempting to create a Transfer Order to the Subcontractor
PurchaseHeaderPage.OpenView();
PurchaseHeaderPage.GoToRecord(PurchaseHeader);
asserterror PurchaseHeaderPage.CreateTransfOrdToSubcontractor.Invoke();

// [THEN] A targeted TestField error on "Subc. Location Code" is raised
// (not the generic "Nothing to create" error — that is the current, unfixed behaviour)
Assert.ExpectedErrorCode('TestField');
Assert.ExpectedError('Subcontracting Location Code');
end;

[PageHandler]
procedure HandleTransferOrder(var TransfOrderPage: TestPage "Transfer Order")
begin
Expand Down
Loading