Skip to content
Closed
Show file tree
Hide file tree
Changes from 4 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 @@ -216,14 +216,7 @@ pageextension 99001503 "Subc. Prod. Order Rtng." extends "Prod. Order Routing"
PurchaseLine.SetRange("Operation No.", Rec."Operation No.");
if PurchaseLine.IsEmpty() then
Message(NoPurchOrderCreatedMsg, ProdOrderRoutingLine."Prod. Order No.")
end else begin
if NoOfCreatedPurchOrder = 1 then begin
SubcPurchaseOrderCreator.ClearOperationNoForCreatedPurchaseOrder();
SubcPurchaseOrderCreator.SetOperationNoForCreatedPurchaseOrder(Rec."Operation No.");
SubcPurchaseOrderCreator.ClearRoutingReferenceNoForCreatedPurchaseOrder();
SubcPurchaseOrderCreator.SetRoutingReferenceNoForCreatedPurchaseOrder(Rec."Routing Reference No.");
end;
end else
SubcPurchaseOrderCreator.ShowCreatedPurchaseOrder(Rec."Prod. Order No.", NoOfCreatedPurchOrder);
end;
end;
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ codeunit 99001557 "Subc. Purchase Order Creator"
{
var
ManufacturingSetup: Record "Manufacturing Setup";
CreatedPurchaseHeader: Record "Purchase Header";
PageManagement: Codeunit "Page Management";
UnitofMeasureManagement: Codeunit "Unit of Measure Management";
#if not CLEAN29
Expand All @@ -34,8 +35,6 @@ codeunit 99001557 "Subc. Purchase Order Creator"
#pragma warning restore AL0432
#endif
HasManufacturingSetup: Boolean;
OperationNo: Code[10];
RoutingReferenceNo: Integer;
PurchOrderCreatedSingularTxt: Label 'A purchase order was created.\\Do you want to view it?';
PurchOrderCreatedPluralTxt: Label '%1 purchase orders were created.\\Do you want to view them?', Comment = '%1 = number of purchase orders created';
PurchOrderAlreadyCreatedQst: Label 'Purchase orders have already been created.\\Do you want to view them?';
Expand Down Expand Up @@ -192,8 +191,6 @@ codeunit 99001557 "Subc. Purchase Order Creator"

procedure ShowCreatedPurchaseOrder(ProdOrderNo: Code[20]; NoOfCreatedPurchOrder: Integer)
Comment thread
6CRIPT marked this conversation as resolved.
var
PurchaseHeader: Record "Purchase Header";
PurchaseLine: Record "Purchase Line";
InstructionMgt: Codeunit "Instruction Mgt.";
SubcNotificationMgmt: Codeunit "Subc. Notification Mgmt.";
IsHandled: Boolean;
Expand All @@ -214,22 +211,13 @@ codeunit 99001557 "Subc. Purchase Order Creator"
if InstructionMgt.ShowConfirm(GetPurchOrderCreatedMessage(NoOfCreatedPurchOrder), SubcNotificationMgmt.GetShowCreatedSubContPurchOrderCode()) and
GuiAllowed()
Comment thread
6CRIPT marked this conversation as resolved.
Outdated
then begin
PurchaseLine.SetCurrentKey("Document Type", Type, "Prod. Order No.");
PurchaseLine.SetRange("Document Type", "Purchase Document Type"::Order);
PurchaseLine.SetRange(Type, "Purchase Line Type"::Item);
PurchaseLine.SetRange("Prod. Order No.", ProdOrderNo);
if NoOfCreatedPurchOrder > 1 then
PageManagement.PageRun(PurchaseLine)
else begin
PurchaseLine.SetLoadFields(SystemId);
if (NoOfCreatedPurchOrder = 1) and (OperationNo <> '') then
PurchaseLine.SetRange("Operation No.", OperationNo);
if (NoOfCreatedPurchOrder = 1) and (RoutingReferenceNo <> 0) then
PurchaseLine.SetRange("Routing Reference No.", RoutingReferenceNo);
PurchaseLine.FindFirst();
PurchaseHeader.Get(PurchaseLine."Document Type", PurchaseLine."Document No.");
PageManagement.PageRun(PurchaseHeader);
end;
CreatedPurchaseHeader.MarkedOnly(true);
if CreatedPurchaseHeader.Count() > 1 then
Page.Run(Page::"Purchase Order List", CreatedPurchaseHeader)
else
if CreatedPurchaseHeader.FindFirst() then
PageManagement.PageRun(CreatedPurchaseHeader);
CreatedPurchaseHeader.MarkedOnly(false);
end;
end;

Expand All @@ -240,26 +228,6 @@ codeunit 99001557 "Subc. Purchase Order Creator"
exit(PurchOrderCreatedSingularTxt);
end;

internal procedure SetOperationNoForCreatedPurchaseOrder(OperationNoToSet: Code[10])
begin
OperationNo := OperationNoToSet;
end;

internal procedure ClearOperationNoForCreatedPurchaseOrder()
begin
Clear(OperationNo);
end;

internal procedure SetRoutingReferenceNoForCreatedPurchaseOrder(RoutingReferenceNoToSet: Integer)
begin
RoutingReferenceNo := RoutingReferenceNoToSet;
end;

internal procedure ClearRoutingReferenceNoForCreatedPurchaseOrder()
begin
Clear(RoutingReferenceNo);
end;

local procedure CheckProdOrderRtngLine(ProdOrderRoutingLine: Record "Prod. Order Routing Line"; var ProdOrderLine: Record "Prod. Order Line"): Boolean
var
WorkCenter: Record "Work Center";
Expand Down Expand Up @@ -324,6 +292,9 @@ codeunit 99001557 "Subc. Purchase Order Creator"
var
NoOfCreatedPurchOrder: Integer;
begin
CreatedPurchaseHeader.Reset();
CreatedPurchaseHeader.MarkedOnly(false);
CreatedPurchaseHeader.ClearMarks();
ProdOrderRoutingLine.SetRange(Type, "Capacity Type"::"Work Center");
ShowExistingPurchaseOrdersForRoutingLines(ProdOrderRoutingLine);
if ProdOrderRoutingLine.FindSet() then
Expand Down Expand Up @@ -371,6 +342,7 @@ codeunit 99001557 "Subc. Purchase Order Creator"
var
RequisitionLine: Record "Requisition Line";
CarryOutActionMsgReq: Report "Carry Out Action Msg. - Req.";
ExistingPurchaseOrderNos: List of [Code[20]];
begin
ProdOrderLine.CalcFields("Total Exp. Oper. Output (Qty.)");

Expand All @@ -383,15 +355,71 @@ codeunit 99001557 "Subc. Purchase Order Creator"
InsertReqWkshLine(ProdOrderRoutingLine, ProdOrderLine, ManufacturingSetup."Subcontracting Template Name", ManufacturingSetup."Subcontracting Batch Name", QtyToPurch);

if RequisitionLine.FindFirst() then begin
CollectExistingSubcPurchaseOrderNos(ProdOrderLine, ProdOrderRoutingLine, ExistingPurchaseOrderNos);
CarryOutActionMsgReq.UseRequestPage(false);
CarryOutActionMsgReq.SetReqWkshLine(RequisitionLine);
CarryOutActionMsgReq.SetHideDialog(true);
CarryOutActionMsgReq.RunModal();
Clear(CarryOutActionMsgReq);
NoOfCreatedPurchOrder += 1;
MarkNewlyCreatedSubcPurchaseOrder(ProdOrderLine, ProdOrderRoutingLine, ExistingPurchaseOrderNos);
end;
end;

local procedure CollectExistingSubcPurchaseOrderNos(ProdOrderLine: Record "Prod. Order Line"; ProdOrderRoutingLine: Record "Prod. Order Routing Line"; var ExistingPurchaseOrderNos: List of [Code[20]])
var
PurchaseLine: Record "Purchase Line";
begin
FilterSubcPurchaseLineForRoutingLine(PurchaseLine, ProdOrderLine, ProdOrderRoutingLine);
if PurchaseLine.FindSet() then
repeat
if not ExistingPurchaseOrderNos.Contains(PurchaseLine."Document No.") then
ExistingPurchaseOrderNos.Add(PurchaseLine."Document No.");
until PurchaseLine.Next() = 0;
end;

local procedure MarkNewlyCreatedSubcPurchaseOrder(ProdOrderLine: Record "Prod. Order Line"; ProdOrderRoutingLine: Record "Prod. Order Routing Line"; ExistingPurchaseOrderNos: List of [Code[20]])
var
PurchaseLine: Record "Purchase Line";
NewPurchaseOrderMarked: Boolean;
begin
FilterSubcPurchaseLineForRoutingLine(PurchaseLine, ProdOrderLine, ProdOrderRoutingLine);
if PurchaseLine.FindSet() then
repeat
if not ExistingPurchaseOrderNos.Contains(PurchaseLine."Document No.") then
if CreatedPurchaseHeader.Get("Purchase Document Type"::Order, PurchaseLine."Document No.") then begin
CreatedPurchaseHeader.Mark(true);
NewPurchaseOrderMarked := true;
end;
until PurchaseLine.Next() = 0;

if NewPurchaseOrderMarked then
exit;

// Carry Out updated an existing open purchase order instead of creating a new one;
// mark it so the confirmation prompt can still open the affected order.
if PurchaseLine.FindSet() then
repeat
if PurchaseLine."Quantity Received" = 0 then
if CreatedPurchaseHeader.Get("Purchase Document Type"::Order, PurchaseLine."Document No.") then
CreatedPurchaseHeader.Mark(true);
Comment thread
6CRIPT marked this conversation as resolved.
until PurchaseLine.Next() = 0;
end;

local procedure FilterSubcPurchaseLineForRoutingLine(var PurchaseLine: Record "Purchase Line"; ProdOrderLine: Record "Prod. Order Line"; ProdOrderRoutingLine: Record "Prod. Order Routing Line")
begin
PurchaseLine.Reset();
PurchaseLine.SetCurrentKey("Prod. Order No.", "Prod. Order Line No.", "Routing No.", "Operation No.");
PurchaseLine.SetRange("Document Type", "Purchase Document Type"::Order);
PurchaseLine.SetRange(Type, "Purchase Line Type"::Item);
PurchaseLine.SetRange("Prod. Order No.", ProdOrderLine."Prod. Order No.");
PurchaseLine.SetRange("Prod. Order Line No.", ProdOrderLine."Line No.");
PurchaseLine.SetRange("Routing No.", ProdOrderRoutingLine."Routing No.");
PurchaseLine.SetRange("Routing Reference No.", ProdOrderRoutingLine."Routing Reference No.");
PurchaseLine.SetRange("Operation No.", ProdOrderRoutingLine."Operation No.");
PurchaseLine.SetLoadFields("Document No.", "Quantity Received");
Comment thread
6CRIPT marked this conversation as resolved.
Outdated
end;

local procedure FilterReqLineWithProdOrderAndRtngLine(var RequisitionLine: Record "Requisition Line"; ProdOrderLine: Record "Prod. Order Line"; ProdOrderRoutingLine: Record "Prod. Order Routing Line")
begin
RequisitionLine.SetRange("Prod. Order No.", ProdOrderLine."Prod. Order No.");
Expand Down
Loading