Codeunit 333 Req. Wksh.-Make Order
- App
- Base Application
- Namespace
- Microsoft.Inventory.Requisition
- Versions
- 17-28
Versions171819202122232425262728
Source29
Source in 29
src/Layers/W1/BaseApp/Inventory/Requisition/ReqWkshMakeOrder.Codeunit.al1881 lines, Copyright (c) Microsoft Corporation. MIT
// ------------------------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
// ------------------------------------------------------------------------------------------------
namespace Microsoft.Inventory.Requisition;
using Microsoft.Finance.Dimension;
using Microsoft.Foundation.Company;
using Microsoft.Foundation.ExtendedText;
using Microsoft.Foundation.Navigate;
using Microsoft.Foundation.Period;
using Microsoft.Foundation.UOM;
using Microsoft.Inventory.Item;
using Microsoft.Inventory.Item.Catalog;
using Microsoft.Inventory.Location;
using Microsoft.Inventory.Setup;
using Microsoft.Inventory.Tracking;
using Microsoft.Inventory.Transfer;
using Microsoft.Projects.Project.Planning;
using Microsoft.Purchases.Document;
using Microsoft.Purchases.Setup;
using Microsoft.Purchases.Vendor;
using Microsoft.Sales.Document;
codeunit 333 "Req. Wksh.-Make Order"
{
Permissions = TableData "Sales Line" = m;
TableNo = "Requisition Line";
trigger OnRun()
var
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeOnRun(Rec, IsHandled);
if IsHandled then
exit;
if PlanningResiliency then
Rec.LockTable();
CarryOutReqLineAction(Rec);
end;
var
#pragma warning disable AA0074
#pragma warning disable AA0470
Text000: Label 'Worksheet Name #1##########\\';
Text001: Label 'Checking worksheet lines #2######\';
Text002: Label 'Creating purchase orders #3######\';
Text003: Label 'Creating purchase lines #4######\';
Text004: Label 'Updating worksheet lines #5######';
Text005: Label 'Deleting worksheet lines #5######';
#pragma warning restore AA0470
Text006: Label '%1 on sales order %2 is already associated with purchase order %3.', Comment = '%1 = number of item, %2 = number of document, %3 = number of purchase order';
Text007: Label '<Month Text>', Locked = true;
Text008: Label 'The combination of dimensions used in %1 %2, %3, %4 is blocked. %5', Comment = '%1 = table caption, %2 = worksheet template name, %3 = journal batch name, %4 = number of line, %5 = error of dimension combination';
Text009: Label 'A dimension used in %1 %2, %3, %4 has caused an error. %5', Comment = '%1 = table caption, %2 = worksheet template name, %3 = journal batch name, %4 = number of line, %5 = error of dimension posting value';
#pragma warning restore AA0074
ReservEntry: Record "Reservation Entry";
PurchSetup: Record "Purchases & Payables Setup";
ReqTemplate: Record "Req. Wksh. Template";
ReqWkshName: Record "Requisition Wksh. Name";
PurchOrderHeader: Record "Purchase Header";
PurchOrderLine: Record "Purchase Line";
SalesOrderHeader: Record "Sales Header";
SalesOrderLine: Record "Sales Line";
TransHeader: Record "Transfer Header";
TempTransHeader: Record "Transfer Header" temporary;
AccountingPeriod: Record "Accounting Period";
TempFailedReqLine: Record "Requisition Line" temporary;
PurchasingCode: Record Purchasing;
TempDocumentEntry: Record "Document Entry" temporary;
TempPurchaseOrderToPrint: Record "Purchase Header" temporary;
ReqWkshMakeOrders: Codeunit "Req. Wksh.-Make Order";
TransferExtendedText: Codeunit "Transfer Extended Text";
ReqLineReserve: Codeunit "Req. Line-Reserve";
UOMMgt: Codeunit "Unit of Measure Management";
DimMgt: Codeunit DimensionManagement;
Window: Dialog;
OrderDateReq: Date;
PostingDateReq: Date;
ReceiveDateReq: Date;
EndOrderDate: Date;
PrintPurchOrders: Boolean;
ReferenceReq: Text[35];
MonthText: Text[30];
OrderCounter: Integer;
LineCount: Integer;
OrderLineCounter: Integer;
StartLineNo: Integer;
NextLineNo: Integer;
Day: Integer;
Week: Integer;
Month: Integer;
CounterFailed: Integer;
PrevPurchCode: Code[10];
PrevShipToCode: Code[10];
#pragma warning disable AA0074
Text010: Label 'must match %1 on Sales Order %2, Line %3', Comment = '%1 = field caption, %2 = number of document, %3 = number of line';
#pragma warning restore AA0074
PrevChangedDocOrderType: Enum "Requisition Ref. Order Type";
PrevChangedDocOrderNo: Code[20];
PrevLocationCode: Code[10];
NameAddressDetails: Text;
SuppressCommit: Boolean;
HideProgressWindow: Boolean;
PlanningResiliency: Boolean;
procedure CarryOutBatchAction(var ReqLine2: Record "Requisition Line")
var
ReqLine: Record "Requisition Line";
IsHandled: Boolean;
begin
ReqLine.Copy(ReqLine2);
ReqLine.SetRange("Accept Action Message", true);
IsHandled := false;
OnBeforeCarryOutBatchActionCode(ReqLine, ReqLine2, IsHandled);
if IsHandled then
exit;
Code(ReqLine);
ReqLine2 := ReqLine;
OnAfterCarryOutBatchAction(ReqLine2);
end;
procedure Set(NewPurchOrderHeader: Record "Purchase Header"; NewEndingOrderDate: Date; NewPrintPurchOrder: Boolean)
begin
PurchOrderHeader := NewPurchOrderHeader;
EndOrderDate := NewEndingOrderDate;
PrintPurchOrders := NewPrintPurchOrder;
OrderDateReq := PurchOrderHeader."Order Date";
PostingDateReq := PurchOrderHeader."Posting Date";
ReceiveDateReq := PurchOrderHeader."Expected Receipt Date";
ReferenceReq := PurchOrderHeader."Your Reference";
OnAfterSet(PurchOrderHeader, SuppressCommit, EndOrderDate, PrintPurchOrders, OrderDateReq, ReceiveDateReq, PostingDateReq, PurchOrderHeader, ReferenceReq);
end;
local procedure "Code"(var ReqLine: Record "Requisition Line")
var
ReqLine2: Record "Requisition Line";
ReqLine3: Record "Requisition Line";
NewReqWkshName: Boolean;
IsHandled: Boolean;
begin
OnBeforeCode(ReqLine, PlanningResiliency, SuppressCommit, PrintPurchOrders);
InitShipReceiveDetails();
Clear(PurchOrderHeader);
ReqLine.SetRange("Worksheet Template Name", ReqLine."Worksheet Template Name");
ReqLine.SetRange("Journal Batch Name", ReqLine."Journal Batch Name");
if not PlanningResiliency then
ReqLine.LockTable();
if ReqLine."Planning Line Origin" <> ReqLine."Planning Line Origin"::"Order Planning" then
GetReqTemplate(ReqLine, ReqTemplate);
if ReqTemplate.Recurring then begin
ReqLine.SetRange("Order Date", 0D, EndOrderDate);
ReqLine.SetFilter("Expiration Date", '%1 | %2..', 0D, WorkDate());
end;
OnCodeOnAfterFilterReqLine(ReqLine, PlanningResiliency, SuppressCommit, PrintPurchOrders);
if not ReqLine.Find('=><') then begin
ReqLine."Line No." := 0;
if not SuppressCommit then
Commit();
exit;
end;
OnCodeOnBeforeInitProgressWindow(ReqTemplate, HideProgressWindow);
if not HideProgressWindow then
InitProgressWindow();
if not HideProgressWindow then
Window.Update(1, ReqLine."Journal Batch Name");
// Check lines
CheckRequisitionLines(ReqLine);
// Create lines
LineCount := 0;
OrderCounter := 0;
OrderLineCounter := 0;
Clear(PurchOrderHeader);
IsHandled := false;
OnCodeOnBeforeSetPurchOrderHeader(ReqLine, IsHandled);
if not IsHandled then
SetPurchOrderHeader();
SetReqLineSortingKey(ReqLine);
ProcessReqLineActions(ReqLine);
IsHandled := false;
OnCodeOnBeforeFinalizeOrderHeader(PurchOrderHeader, ReqLine, IsHandled);
if not IsHandled then
if PurchOrderHeader."Buy-from Vendor No." <> '' then
FinalizeOrderHeader(PurchOrderHeader, ReqLine);
CheckRunPrintPurchOrders();
if PrevChangedDocOrderNo <> '' then
PrintChangedDocument(PrevChangedDocOrderType, PrevChangedDocOrderNo);
if OrderCounter <> 0 then
MoveRequisitionWkshBatch(ReqLine);
// Copy number of created orders and current journal batch name to requisition worksheet
ReqLine.Init();
ReqLine."Line No." := OrderCounter;
if OrderCounter <> 0 then
if not ReqTemplate.Recurring then begin
// Not a recurring journal
ReqLine2.Copy(ReqLine);
ReqLine2.SetFilter("Vendor No.", '<>%1', '');
if ReqLine2.FindFirst() then;
// Remember the last line
IsHandled := false;
ReqLine.BlockDynamicTracking(true);
OnBeforeDeleteReqLines(ReqLine, TempFailedReqLine, IsHandled, ReqLine2);
if not IsHandled then
if ReqLine.Find('-') then
repeat
TempFailedReqLine := ReqLine;
if not TempFailedReqLine.Find() then
ReqLine.Delete(true);
until ReqLine.Next() = 0;
ReqLine3.SetRange("Worksheet Template Name", ReqLine."Worksheet Template Name");
ReqLine3.SetRange("Journal Batch Name", ReqLine."Journal Batch Name");
OnCodeOnAfterReqLine3SetFilters(ReqLine, ReqLine3);
if ReqTemplate."Increment Batch Name" then
if not ReqLine3.FindLast() then
if IncStr(ReqLine."Journal Batch Name") <> '' then begin
ReqWkshName.Get(ReqLine."Worksheet Template Name", ReqLine."Journal Batch Name");
NewReqWkshName := true;
OnCheckNewNameNeccessary(ReqWkshName, NewReqWkshName);
if NewReqWkshName then begin
ReqWkshName.Delete();
ReqWkshName.Name := IncStr(ReqLine."Journal Batch Name");
if ReqWkshName.Insert() then;
ReqLine."Journal Batch Name" := ReqWkshName.Name;
end;
end;
end;
OnAfterCode(ReqLine, OrderLineCounter, OrderCounter, PrintPurchOrders, SuppressCommit, PurchOrderHeader, this);
end;
local procedure CheckRunPrintPurchOrders()
var
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeCheckRunPrintPurchOrders(TransHeader, PurchOrderHeader, TempPurchaseOrderToPrint, PrintPurchOrders, IsHandled);
if IsHandled then
exit;
if PrintPurchOrders then begin
PrintTransOrder(TransHeader);
PrintMultiplePurchaseOrders();
end;
end;
local procedure CheckRequisitionLines(var ReqLine: Record "Requisition Line")
var
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeCheckRequisitionLines(ReqLine, StartLineNo, IsHandled);
if IsHandled then
exit;
LineCount := 0;
StartLineNo := ReqLine."Line No.";
repeat
LineCount := LineCount + 1;
if not HideProgressWindow then
Window.Update(2, LineCount);
CheckRecurringReqLine(ReqLine);
CheckRequisitionLine(ReqLine);
if ReqLine.Next() = 0 then
ReqLine.FindSet();
until ReqLine."Line No." = StartLineNo;
end;
local procedure GetReqTemplate(RequisitionLine: Record "Requisition Line"; var ReqWkshTemplate: Record "Req. Wksh. Template")
var
IsHandled: Boolean;
begin
OnBeforeGetReqTemplate(RequisitionLine, ReqWkshTemplate, IsHandled);
if not IsHandled then
ReqTemplate.Get(RequisitionLine."Worksheet Template Name");
end;
procedure SetCreatedDocumentBuffer(var TempDocumentEntryNew: Record "Document Entry" temporary)
begin
TempDocumentEntry.Copy(TempDocumentEntryNew, true);
end;
procedure CheckRequisitionLine(var ReqLine2: Record "Requisition Line")
var
SalesLine: Record "Sales Line";
Item: Record Item;
Purchasing: Record Purchasing;
TableID: array[10] of Integer;
No: array[10] of Code[20];
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeCheckRequisitionLine(ReqLine2, SuppressCommit, IsHandled);
if IsHandled then
exit;
if (ReqLine2."No." <> '') or (ReqLine2."Vendor No." <> '') or (ReqLine2.Quantity <> 0) then begin
ReqLine2.TestField("No.");
IsHandled := false;
OnCheckRequisitionLineOnNonCancelActionMessageOnBeforeCheckQuantity(ReqLine2, IsHandled);
if not IsHandled then
if ReqLine2."Action Message" <> ReqLine2."Action Message"::Cancel then
ReqLine2.TestField(Quantity);
IsHandled := false;
OnCheckRequisitionLineOnEmptyNewActionMessageOnBeforeOtherCheck(ReqLine2, IsHandled);
if not IsHandled then
if (ReqLine2."Action Message" = ReqLine2."Action Message"::" ") or
(ReqLine2."Action Message" = ReqLine2."Action Message"::New)
then
if ReqLine2."Replenishment System" = ReqLine2."Replenishment System"::Purchase then
TestFieldsForPurchase(ReqLine2)
else
if ReqLine2."Replenishment System" = ReqLine2."Replenishment System"::Transfer then begin
ReqLine2.TestField("Location Code");
if ReqLine2."Planning Line Origin" = ReqLine2."Planning Line Origin"::"Order Planning" then
ReqLine2.TestField("Supply From");
ReqLine2.TestField("Transfer-from Code");
end else
OnCheckFurtherReplenishmentSystems(ReqLine2);
end;
if not DimMgt.CheckDimIDComb(ReqLine2."Dimension Set ID") then
Error(
Text008,
ReqLine2.TableCaption, ReqLine2."Worksheet Template Name", ReqLine2."Journal Batch Name", ReqLine2."Line No.",
DimMgt.GetDimCombErr());
TableID[1] := DimMgt.ReqLineTypeToTableID(ReqLine2.Type);
No[1] := ReqLine2."No.";
if not DimMgt.CheckDimValuePosting(TableID, No, ReqLine2."Dimension Set ID") then
if ReqLine2."Line No." <> 0 then
Error(
Text009,
ReqLine2.TableCaption, ReqLine2."Worksheet Template Name", ReqLine2."Journal Batch Name", ReqLine2."Line No.",
DimMgt.GetDimValuePostingErr())
else
Error(DimMgt.GetDimValuePostingErr());
IsHandled := false;
OnCheckRequisitionLineOnNonCancelActionMessageOnBeforeCheckUOM(ReqLine2, PurchasingCode, IsHandled);
if not IsHandled then
if SalesLine.Get(SalesLine."Document Type"::Order, ReqLine2."Sales Order No.", ReqLine2."Sales Order Line No.") and
(SalesLine."Unit of Measure Code" <> ReqLine2."Unit of Measure Code")
then
if SalesLine."Drop Shipment" or
(PurchasingCode.Get(ReqLine2."Purchasing Code") and PurchasingCode."Drop Shipment")
then
ReqLine2.FieldError(
ReqLine2."Unit of Measure Code",
StrSubstNo(
Text010,
SalesLine.FieldCaption("Unit of Measure Code"),
SalesLine."Document No.",
SalesLine."Line No."));
if ReqLine2.Type = ReqLine2.Type::Item then begin
Item.SetLoadFields("Variant Mandatory if Exists");
if Item.Get(ReqLine2."No.") then
if Item.IsVariantMandatory() then
ReqLine2.TestField("Variant Code");
end;
if ReqLine2.IsDropShipment() then
CheckLocation(ReqLine2);
if Purchasing.Get(ReqLine2."Purchasing Code") then
if Purchasing."Drop Shipment" or Purchasing."Special Order" then begin
SalesLine.Get(SalesLine."Document Type"::Order, ReqLine2."Sales Order No.", ReqLine2."Sales Order Line No.");
CheckLocation(ReqLine2);
if (Purchasing."Drop Shipment" <> SalesLine."Drop Shipment") or
(Purchasing."Special Order" <> SalesLine."Special Order")
then
ReqLine2.FieldError(
ReqLine2."Purchasing Code",
StrSubstNo(
Text010,
SalesLine.FieldCaption("Purchasing Code"),
SalesLine."Document No.",
SalesLine."Line No."));
end;
ReqLine2.CheckRequisitionWkshLineRestriction();
OnAfterCheckReqWkshLine(ReqLine2, SuppressCommit);
end;
local procedure TestFieldsForPurchase(var RequisitionLine: Record "Requisition Line")
var
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeTestFieldsForPurchase(RequisitionLine, IsHandled);
if IsHandled then
exit;
if RequisitionLine."Planning Line Origin" = RequisitionLine."Planning Line Origin"::"Order Planning" then
RequisitionLine.TestField("Supply From");
RequisitionLine.TestField("Vendor No.")
end;
local procedure CarryOutReqLineAction(var ReqLine: Record "Requisition Line")
var
CarryOutAction: Codeunit "Carry Out Action";
Failed: Boolean;
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeCarryOutReqLineAction(ReqLine, Failed, IsHandled, SuppressCommit, OrderCounter, PrintPurchOrders, NextLineNo, PrevShipToCode, PrevPurchCode);
if Failed then begin
SetFailedReqLine(ReqLine);
exit;
end;
if IsHandled then
exit;
case ReqLine."Replenishment System" of
ReqLine."Replenishment System"::Transfer:
case ReqLine."Action Message" of
ReqLine."Action Message"::Cancel:
begin
CarryOutAction.DeleteOrderLines(ReqLine);
OrderCounter := OrderCounter + 1;
end;
ReqLine."Action Message"::"Change Qty.", ReqLine."Action Message"::Reschedule, ReqLine."Action Message"::"Resched. & Chg. Qty.":
begin
if (PrevChangedDocOrderNo <> '') and
((ReqLine."Ref. Order Type" <> PrevChangedDocOrderType) or (ReqLine."Ref. Order No." <> PrevChangedDocOrderNo))
then
PrintChangedDocument(PrevChangedDocOrderType, PrevChangedDocOrderNo);
CarryOutAction.SetPrintOrder(false);
CarryOutAction.TransOrderChgAndReshedule(ReqLine);
PrevChangedDocOrderType := ReqLine."Ref. Order Type";
PrevChangedDocOrderNo := ReqLine."Ref. Order No.";
OrderCounter := OrderCounter + 1;
end;
ReqLine."Action Message"::New, ReqLine."Action Message"::" ":
begin
CarryOutAction.SetPrintOrder(PrintPurchOrders);
GetTransferHeader(TransHeader, ReqLine);
CarryOutAction.InsertTransLine(ReqLine, TransHeader);
SetTransferHeader(TransHeader);
OnCarryOutReqLineActionOnAfterInsertTransLine(TransHeader);
OrderCounter := OrderCounter + 1;
end;
end;
ReqLine."Replenishment System"::Purchase, ReqLine."Replenishment System"::"Prod. Order":
case ReqLine."Action Message" of
ReqLine."Action Message"::Cancel:
begin
CarryOutAction.DeleteOrderLines(ReqLine);
OrderCounter := OrderCounter + 1;
end;
ReqLine."Action Message"::"Change Qty.", ReqLine."Action Message"::Reschedule, ReqLine."Action Message"::"Resched. & Chg. Qty.":
begin
if (PrevChangedDocOrderNo <> '') and
((ReqLine."Ref. Order Type" <> PrevChangedDocOrderType) or (ReqLine."Ref. Order No." <> PrevChangedDocOrderNo))
then
PrintChangedDocument(PrevChangedDocOrderType, PrevChangedDocOrderNo);
CarryOutAction.SetPrintOrder(false);
CarryOutAction.PurchOrderChgAndReshedule(ReqLine);
PrevChangedDocOrderType := ReqLine."Ref. Order Type";
PrevChangedDocOrderNo := ReqLine."Ref. Order No.";
OrderCounter := OrderCounter + 1;
end;
ReqLine."Action Message"::New, ReqLine."Action Message"::" ":
begin
if (PurchOrderHeader."Buy-from Vendor No." <> '') and
CheckInsertFinalizePurchaseOrderHeader(ReqLine, PurchOrderHeader, false)
then begin
FinalizeOrderHeader(PurchOrderHeader, ReqLine);
PurchOrderLine.Reset();
PurchOrderLine.SetRange("Document Type", PurchOrderHeader."Document Type");
PurchOrderLine.SetRange("Document No.", PurchOrderHeader."No.");
PurchOrderLine.SetFilter("Special Order Sales Line No.", '<> 0');
if PurchOrderLine.Find('-') then
repeat
SalesOrderLine.Get(SalesOrderLine."Document Type"::Order, PurchOrderLine."Special Order Sales No.",
PurchOrderLine."Special Order Sales Line No.");
until PurchOrderLine.Next() = 0;
end;
MakeRecurringTexts(ReqLine);
InsertPurchOrderLine(ReqLine, PurchOrderHeader);
end;
end;
else
OnCarryOutReqLineActionOnCaseReplenishmentSystemElse(ReqLine);
end;
OnAfterCarryOutReqLineAction(ReqLine, PurchOrderHeader, SuppressCommit, OrderCounter, LineCount);
end;
local procedure TryCarryOutReqLineAction(var ReqLine: Record "Requisition Line"): Boolean
begin
OnBeforeTryCarryOutReqLineAction(ReqLine);
ReqWkshMakeOrders.Set(PurchOrderHeader, EndOrderDate, PrintPurchOrders);
ReqWkshMakeOrders.SetTryParam(
ReqTemplate,
LineCount,
NextLineNo,
PrevPurchCode,
PrevShipToCode,
PrevLocationCode,
OrderCounter,
OrderLineCounter,
TempFailedReqLine,
TempDocumentEntry);
ReqWkshMakeOrders.SetSuppressCommit(SuppressCommit);
OnTryCarryOutReqLineActionOnBeforeRun(ReqLine);
if ReqWkshMakeOrders.Run(ReqLine) then begin
ReqWkshMakeOrders.GetTryParam(
PurchOrderHeader,
LineCount,
NextLineNo,
PrevPurchCode,
PrevShipToCode,
PrevLocationCode,
OrderCounter,
OrderLineCounter);
OnTryCarryOutReqLineActionOnAfterGetTryParam(ReqLine, PurchOrderHeader, LineCount, NextLineNo, PrevPurchCode, PrevShipToCode, PrevLocationCode, OrderCounter, OrderLineCounter);
if PrintPurchOrders and PlanningResiliency then
if PurchOrderHeader."No." <> '' then
if not TempPurchaseOrderToPrint.Get(PurchOrderHeader."Document Type", PurchOrderHeader."No.") then begin
TempPurchaseOrderToPrint := PurchOrderHeader;
TempPurchaseOrderToPrint.Insert();
end;
if not HideProgressWindow then begin
Window.Update(3, OrderCounter);
Window.Update(4, LineCount);
Window.Update(5, OrderLineCounter);
end;
exit(true);
end;
exit(false)
end;
procedure InitPurchOrderLine(var PurchOrderLine: Record "Purchase Line"; PurchOrderHeader: Record "Purchase Header"; RequisitionLine: Record "Requisition Line")
var
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeInitPurchOrderLine(
RequisitionLine, PurchasingCode, PurchOrderHeader, LineCount, NextLineNo, PrevPurchCode, PrevShipToCode, PlanningResiliency,
TempDocumentEntry, SuppressCommit, PostingDateReq, ReferenceReq, OrderDateReq, ReceiveDateReq, OrderCounter, HideProgressWindow, IsHandled, PurchOrderLine);
if IsHandled then
exit;
Clear(PurchOrderLine);
PurchOrderLine.Init();
PurchOrderLine.BlockDynamicTracking(true);
PurchOrderLine."Document Type" := PurchOrderLine."Document Type"::Order;
PurchOrderLine."Buy-from Vendor No." := RequisitionLine."Vendor No.";
PurchOrderLine."Document No." := PurchOrderHeader."No.";
NextLineNo := NextLineNo + 10000;
PurchOrderLine."Line No." := NextLineNo;
OnBeforePurchOrderLineValidateType(PurchOrderLine, RequisitionLine);
PurchOrderLine.Validate(Type, RequisitionLine.Type);
OnBeforePurchOrderLineValidateNo(PurchOrderLine, RequisitionLine);
PurchOrderLine.Validate("No.", RequisitionLine."No.");
OnAfterPurchOrderLineValidateNo(PurchOrderLine, RequisitionLine);
PurchOrderLine.Validate("Variant Code", RequisitionLine."Variant Code");
OnInitPurchOrderLineOnAfterPurchOrderLineAssignVariantCode(PurchOrderLine, RequisitionLine);
PurchOrderLine.Validate("Location Code", RequisitionLine."Location Code");
PurchOrderLine.Validate("Unit of Measure Code", RequisitionLine."Unit of Measure Code");
PurchOrderLine."Qty. per Unit of Measure" := RequisitionLine."Qty. per Unit of Measure";
OnInitPurchOrderLineOnBeforeUpdateQuantity(PurchOrderLine, RequisitionLine);
InitPurchOrderLineUpdateQuantity(RequisitionLine);
CopyOrderDateFromPurchHeader(RequisitionLine, PurchOrderHeader, PurchOrderLine);
if PurchOrderHeader."Prices Including VAT" then
PurchOrderLine.Validate("Direct Unit Cost", RequisitionLine."Direct Unit Cost" * (1 + PurchOrderLine."VAT %" / 100))
else
PurchOrderLine.Validate("Direct Unit Cost", RequisitionLine."Direct Unit Cost");
OnInitPurchOrderLineOnBeforeValidateLineDiscount(PurchOrderLine, PurchOrderHeader, RequisitionLine);
PurchOrderLine.Validate("Line Discount %", RequisitionLine."Line Discount %");
OnInitPurchOrderLineOnAfterValidateLineDiscount(PurchOrderLine, PurchOrderHeader, RequisitionLine);
PurchOrderLine."Vendor Item No." := RequisitionLine."Vendor Item No.";
PurchOrderLine.Description := RequisitionLine.Description;
PurchOrderLine."Description 2" := RequisitionLine."Description 2";
PurchOrderLine."Sales Order No." := RequisitionLine."Sales Order No.";
PurchOrderLine."Sales Order Line No." := RequisitionLine."Sales Order Line No.";
PurchOrderLine."Bin Code" := RequisitionLine."Bin Code";
PurchOrderLine."Item Category Code" := RequisitionLine."Item Category Code";
PurchOrderLine.Nonstock := RequisitionLine.Nonstock;
PurchOrderLine.Validate("Planning Flexibility", RequisitionLine."Planning Flexibility");
PurchOrderLine.Validate("Purchasing Code", RequisitionLine."Purchasing Code");
if RequisitionLine."Due Date" <> 0D then begin
PurchOrderLine.Validate("Expected Receipt Date", RequisitionLine."Due Date");
PurchOrderLine."Requested Receipt Date" := PurchOrderLine."Planned Receipt Date";
end;
OnAfterInitPurchOrderLine(PurchOrderLine, RequisitionLine);
end;
local procedure InitPurchOrderLineUpdateQuantity(var RequisitionLine: Record "Requisition Line")
var
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeInitPurchOrderLineUpdateQuantity(PurchOrderLine, RequisitionLine, IsHandled);
if IsHandled then
exit;
PurchOrderLine.Validate(Quantity, RequisitionLine.Quantity);
end;
local procedure CopyOrderDateFromPurchHeader(var RequisitionLine: Record "Requisition Line"; PurchOrderHeader: Record "Purchase Header"; PurchOrderLine: Record "Purchase Line")
var
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeCopyOrderDateFromPurchHeader(RequisitionLine, PurchOrderHeader, PurchOrderLine, IsHandled);
if IsHandled then
exit;
if PurchOrderLine.CountPrice(true) > 0 then
RequisitionLine.Validate("Order Date", PurchOrderHeader."Order Date");
end;
procedure InsertPurchOrderLine(var ReqLine2: Record "Requisition Line"; var PurchOrderHeader: Record "Purchase Header")
var
PurchOrderLine2: Record "Purchase Line";
DimensionSetIDArr: array[10] of Integer;
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeInsertPurchOrderLine(ReqLine2, PurchOrderHeader, NextLineNo, IsHandled, PrevPurchCode, PrevShipToCode, PlanningResiliency, TempDocumentEntry, SuppressCommit,
PostingDateReq, ReferenceReq, OrderDateReq, ReceiveDateReq, OrderCounter, HideProgressWindow, PrevLocationCode, LineCount, PurchOrderHeader, PurchasingCode, PurchOrderLine);
if IsHandled then
exit;
if (ReqLine2."No." = '') or (ReqLine2."Vendor No." = '') or (ReqLine2.Quantity = 0) then
exit;
if CheckInsertFinalizePurchaseOrderHeader(ReqLine2, PurchOrderHeader, true) then begin
IsHandled := false;
OnInsertPurchOrderLineOnBeforeInsertHeader(ReqLine2, PurchOrderHeader, PurchOrderLine, LineCount, NextLineNo, IsHandled, OrderCounter);
if not IsHandled then begin
InsertHeader(ReqLine2);
LineCount := 0;
NextLineNo := 0;
end;
PrevPurchCode := ReqLine2."Purchasing Code";
PrevShipToCode := ReqLine2."Ship-to Code";
PrevLocationCode := ReqLine2."Location Code";
end;
OnInsertPurchOrderLineOnAfterCheckInsertFinalizePurchaseOrderHeader(ReqLine2, PurchOrderHeader, NextLineNo);
LineCount := LineCount + 1;
if not PlanningResiliency then
if not HideProgressWindow then
Window.Update(4, LineCount);
ReqLine2.TestField("Currency Code", PurchOrderHeader."Currency Code");
InitPurchOrderLine(PurchOrderLine, PurchOrderHeader, ReqLine2);
TransferFromReqLineToPurchLine(PurchOrderLine, ReqLine2);
OnInsertPurchOrderLineOnAfterTransferFromReqLineToPurchLine(PurchOrderLine, ReqLine2);
PurchOrderLine."Drop Shipment" := (ReqLine2."Sales Order Line No." <> 0) or ((ReqLine2."Drop Shipment") and (ReqLine2."Demand Type" = Database::"Sales Line"));
if (ReqLine2."Drop Shipment") and (ReqLine2."Sales Order Line No." = 0) then begin
PurchOrderLine.Validate("Sales Order No.", ReqLine2."Demand Order No.");
PurchOrderLine.Validate("Sales Order Line No.", ReqLine2."Demand Line No.");
end;
if PurchasingCode.Get(ReqLine2."Purchasing Code") then
if PurchasingCode."Special Order" then begin
PurchOrderLine."Special Order Sales No." := ReqLine2."Sales Order No.";
PurchOrderLine."Special Order Sales Line No." := ReqLine2."Sales Order Line No.";
PurchOrderLine."Special Order" := true;
PurchOrderLine."Drop Shipment" := false;
PurchOrderLine."Sales Order No." := '';
PurchOrderLine."Sales Order Line No." := 0;
PurchOrderLine."Special Order" := true;
PurchOrderLine.UpdateUnitCost();
end;
UpdateJobLink(PurchOrderLine, ReqLine2);
OnInsertPurchOrderLineOnBeforeTransferReqLine(PurchOrderHeader, PurchOrderLine, ReqLine2);
ReqLineReserve.TransferReqLineToPurchLine(ReqLine2, PurchOrderLine, ReqLine2."Quantity (Base)", false);
DimensionSetIDArr[1] := PurchOrderLine."Dimension Set ID";
DimensionSetIDArr[2] := ReqLine2."Dimension Set ID";
PurchOrderLine."Dimension Set ID" :=
DimMgt.GetCombinedDimensionSetID(
DimensionSetIDArr, PurchOrderLine."Shortcut Dimension 1 Code", PurchOrderLine."Shortcut Dimension 2 Code");
OnBeforePurchOrderLineInsert(PurchOrderHeader, PurchOrderLine, ReqLine2, SuppressCommit);
PurchOrderLine.Insert();
OnAfterPurchOrderLineInsert(PurchOrderLine, ReqLine2, NextLineNo);
if ReqLine2.Reserve then
ReserveBindingOrderToPurch(PurchOrderLine, ReqLine2);
IsHandled := false;
OnInsertPurchOrderLineOnBeforeUpdateAssociatedSalesLine(PurchOrderLine, ReqLine2, IsHandled);
if not IsHandled then
if PurchOrderLine."Drop Shipment" or PurchOrderLine."Special Order" then begin
SalesOrderLine.LockTable();
SalesOrderHeader.LockTable();
SalesOrderHeader.Get(SalesOrderHeader."Document Type"::Order, ReqLine2."Sales Order No.");
CheckPurchOrderLineShipToCode(ReqLine2);
SalesOrderLine.Get(SalesOrderLine."Document Type"::Order, ReqLine2."Sales Order No.", ReqLine2."Sales Order Line No.");
SalesOrderLine.TestField(Type, SalesOrderLine.Type::Item);
if SalesOrderLine."Purch. Order Line No." <> 0 then
Error(Text006, SalesOrderLine."No.", SalesOrderLine."Document No.", SalesOrderLine."Purchase Order No.");
if SalesOrderLine."Special Order Purchase No." <> '' then
Error(Text006, SalesOrderLine."No.", SalesOrderLine."Document No.", SalesOrderLine."Special Order Purchase No.");
if not PurchOrderLine."Special Order" then
ReqLine2.TestField("Sell-to Customer No.", SalesOrderLine."Sell-to Customer No.");
ReqLine2.TestField(Type, SalesOrderLine.Type);
if PurchOrderLine."Drop Shipment" then
CheckRequsitionLineQuantity(ReqLine2);
ReqLine2.TestField("No.", SalesOrderLine."No.");
ReqLine2.TestField("Location Code", SalesOrderLine."Location Code");
ReqLine2.TestField("Variant Code", SalesOrderLine."Variant Code");
ReqLine2.TestField("Bin Code", SalesOrderLine."Bin Code");
ReqLine2.TestProdOrderNo();
ReqLine2.TestField("Qty. per Unit of Measure", ReqLine2."Qty. per Unit of Measure");
OnInsertPurchOrderLineOnBeforeSalesOrderLineValidateUnitCostLCY(PurchOrderLine, SalesOrderLine);
SalesOrderLine.Validate("Unit Cost (LCY)");
if SalesOrderLine."Special Order" then begin
SalesOrderLine."Special Order Purchase No." := PurchOrderLine."Document No.";
SalesOrderLine."Special Order Purch. Line No." := PurchOrderLine."Line No.";
end else begin
SalesOrderLine."Purchase Order No." := PurchOrderLine."Document No.";
SalesOrderLine."Purch. Order Line No." := PurchOrderLine."Line No.";
end;
OnInsertPurchOrderLineOnBeforeSalesOrderLineModify(SalesOrderLine, ReqLine2, PurchOrderLine);
SalesOrderLine.Modify();
end;
if TransferExtendedText.PurchCheckIfAnyExtText(PurchOrderLine, false) then begin
TransferExtendedText.InsertPurchExtText(PurchOrderLine);
PurchOrderLine2.SetRange("Document Type", PurchOrderHeader."Document Type");
PurchOrderLine2.SetRange("Document No.", PurchOrderHeader."No.");
if PurchOrderLine2.FindLast() then
NextLineNo := PurchOrderLine2."Line No.";
end;
OnAfterInsertPurchOrderLine(PurchOrderLine, NextLineNo, ReqLine2, PurchOrderHeader);
end;
local procedure TransferFromReqLineToPurchLine(var PurchOrderLine: Record "Purchase Line"; ReqLine: Record "Requisition Line")
begin
OnTransferFromReqLineToPurchLine(PurchOrderLine, ReqLine);
end;
local procedure CheckRequsitionLineQuantity(var RequisitionLine: Record "Requisition Line")
var
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeCheckRequsitionLineQuantity(RequisitionLine, PurchOrderLine, SalesOrderLine, IsHandled);
if IsHandled then
exit;
RequisitionLine.TestField(
Quantity,
Round(
SalesOrderLine."Outstanding Quantity" * SalesOrderLine."Qty. per Unit of Measure" / RequisitionLine."Qty. per Unit of Measure",
UOMMgt.QtyRndPrecision()));
end;
local procedure CheckPurchOrderLineShipToCode(var RequisitionLine: Record "Requisition Line")
var
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeCheckPurchOrderLineShipToCode(RequisitionLine, PurchOrderLine, SalesOrderHeader, IsHandled);
if IsHandled then
exit;
if not PurchOrderLine."Special Order" then
RequisitionLine.TestField("Ship-to Code", SalesOrderHeader."Ship-to Code");
end;
local procedure InsertHeader(var ReqLine2: Record "Requisition Line")
var
SalesHeader: Record "Sales Header";
Vendor: Record Vendor;
SpecialOrder: Boolean;
ShouldValidateSellToCustNo: Boolean;
ShouldSetShipToForSpecOrder: Boolean;
begin
OnBeforeInsertHeader(ReqLine2, PurchOrderHeader, OrderDateReq, PostingDateReq, ReceiveDateReq, ReferenceReq, NameAddressDetails);
OrderCounter := OrderCounter + 1;
if not PlanningResiliency then
if not HideProgressWindow then
Window.Update(3, OrderCounter);
if ReqLine2.IsProdOrder() and (OrderDateReq = 0D) then
OrderDateReq := ReqLine2."Order Date";
PurchSetup.Get();
PurchSetup.TestField("Order Nos.");
Clear(PurchOrderHeader);
PurchOrderHeader.Init();
PurchOrderHeader."Document Type" := PurchOrderHeader."Document Type"::Order;
PurchOrderHeader."No." := '';
PurchOrderHeader."Posting Date" := PostingDateReq;
OnBeforePurchOrderHeaderInsert(PurchOrderHeader, ReqLine2, ReceiveDateReq, OrderDateReq, PostingDateReq, ReferenceReq);
PurchOrderHeader.Insert(true);
PurchOrderHeader."Your Reference" := ReferenceReq;
PurchOrderHeader."Order Date" := OrderDateReq;
PurchOrderHeader."Expected Receipt Date" := ReceiveDateReq;
ValidateBuyFromVendorNo(PurchOrderHeader, ReqLine2);
if ReqLine2."Order Address Code" <> '' then
PurchOrderHeader.Validate("Order Address Code", ReqLine2."Order Address Code");
ShouldValidateSellToCustNo := ReqLine2."Sell-to Customer No." <> '';
OnInsertHeaderOnBeforeValidateSellToCustNoFromReqLine(PurchOrderHeader, ReqLine2, ShouldValidateSellToCustNo);
if ShouldValidateSellToCustNo then
PurchOrderHeader.Validate("Sell-to Customer No.", ReqLine2."Sell-to Customer No.");
PurchOrderHeader.Validate("Currency Code", ReqLine2."Currency Code");
if PurchasingCode.Get(ReqLine2."Purchasing Code") then
if PurchasingCode."Special Order" then
SpecialOrder := true;
if not SpecialOrder then
UpdateShipToOrLocationCode(ReqLine2, PurchOrderHeader)
else begin
PurchOrderHeader.Validate("Location Code", ReqLine2."Location Code");
ShouldSetShipToForSpecOrder := true;
OnInsertHeaderOnBeforeSetShipToForSpecOrder(PurchOrderHeader, ReqLine2, ShouldSetShipToForSpecOrder);
if ShouldSetShipToForSpecOrder then
PurchOrderHeader.SetShipToForSpecOrder();
if Vendor.Get(PurchOrderHeader."Buy-from Vendor No.") then
PurchOrderHeader.Validate("Shipment Method Code", Vendor."Shipment Method Code");
if ReqLine2."Order Date" <> 0D then
PurchOrderHeader."Order Date" := ReqLine2."Order Date";
end;
if not SpecialOrder then
if SalesHeader.Get(SalesHeader."Document Type"::Order, ReqLine2."Sales Order No.") then begin
PurchOrderHeader."Ship-to Name" := SalesHeader."Ship-to Name";
PurchOrderHeader."Ship-to Name 2" := SalesHeader."Ship-to Name 2";
PurchOrderHeader."Ship-to Address" := SalesHeader."Ship-to Address";
PurchOrderHeader."Ship-to Address 2" := SalesHeader."Ship-to Address 2";
PurchOrderHeader."Ship-to Post Code" := SalesHeader."Ship-to Post Code";
PurchOrderHeader."Ship-to City" := SalesHeader."Ship-to City";
PurchOrderHeader."Ship-to Contact" := SalesHeader."Ship-to Contact";
PurchOrderHeader."Ship-to County" := SalesHeader."Ship-to County";
PurchOrderHeader."Ship-to Country/Region Code" := SalesHeader."Ship-to Country/Region Code";
PurchOrderHeader."Ship-to Phone No." := SalesHeader."Ship-to Phone No.";
end;
if SpecialOrder then
if Vendor.Get(PurchOrderHeader."Buy-from Vendor No.") then
PurchOrderHeader."Shipment Method Code" := Vendor."Shipment Method Code";
OnAfterInsertPurchOrderHeader(ReqLine2, PurchOrderHeader, SuppressCommit, SpecialOrder);
PurchOrderHeader.Modify();
PurchOrderHeader.Mark(true);
TempDocumentEntry.Init();
TempDocumentEntry."Table ID" := Database::"Purchase Header";
TempDocumentEntry."Document Type" := PurchOrderHeader."Document Type"::Order;
TempDocumentEntry."Document No." := PurchOrderHeader."No.";
TempDocumentEntry."Entry No." := TempDocumentEntry.Count + 1;
TempDocumentEntry.Insert();
end;
local procedure ValidateBuyFromVendorNo(var PurchOrderHeader: Record "Purchase Header"; var RequisitionLine: Record "Requisition Line")
var
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeValidateBuyFromVendorNo(PurchOrderHeader, RequisitionLine, IsHandled);
if not IsHandled then
PurchOrderHeader.Validate("Buy-from Vendor No.", RequisitionLine."Vendor No.");
end;
local procedure UpdateShipToOrLocationCode(var RequisitionLine: Record "Requisition Line"; var PurchaseHeader: Record "Purchase Header")
var
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeUpdateShipToOrLocationCode(PurchaseHeader, RequisitionLine, IsHandled);
if IsHandled then
exit;
if RequisitionLine."Ship-to Code" <> '' then
PurchaseHeader.Validate("Ship-to Code", RequisitionLine."Ship-to Code")
else
PurchaseHeader.Validate("Location Code", RequisitionLine."Location Code");
end;
procedure RunFinalizeOrderHeader(PurchOrderHeader: Record "Purchase Header"; var ReqLine: Record "Requisition Line")
begin
FinalizeOrderHeader(PurchOrderHeader, ReqLine);
end;
procedure FinalizeOrderHeader(PurchOrderHeader: Record "Purchase Header"; var ReqLine: Record "Requisition Line")
var
ReqLine2: Record "Requisition Line";
IsHandled: Boolean;
begin
if ReqTemplate.Recurring then begin
// Recurring journal
ReqLine2.Copy(ReqLine);
ReqLine2.SetRange("Vendor No.", PurchOrderHeader."Buy-from Vendor No.");
ReqLine2.SetRange("Sell-to Customer No.", PurchOrderHeader."Sell-to Customer No.");
ReqLine2.SetRange("Ship-to Code", PurchOrderHeader."Ship-to Code");
ReqLine2.SetRange("Order Address Code", PurchOrderHeader."Order Address Code");
ReqLine2.SetRange("Currency Code", PurchOrderHeader."Currency Code");
IsHandled := false;
OnFinalizeOrderHeaderOnAfterSetFiltersForRecurringReqLine(ReqLine2, PurchOrderHeader, IsHandled);
if not IsHandled then begin
ReqLine2.Find('-');
repeat
OrderLineCounter := OrderLineCounter + 1;
if not PlanningResiliency then
if not HideProgressWindow then
Window.Update(5, OrderLineCounter);
if ReqLine2."Order Date" <> 0D then begin
ReqLine2.Validate("Order Date", CalcDate(ReqLine2."Recurring Frequency", ReqLine2."Order Date"));
ReqLine2.Validate("Currency Code", PurchOrderHeader."Currency Code");
end;
if (ReqLine2."Recurring Method" = ReqLine2."Recurring Method"::Variable) and (ReqLine2."No." <> '') then begin
ReqLine2.Quantity := 0;
ReqLine2."Line Discount %" := 0;
end;
OnFinalizeOrderHeaderOnLoopLinesBeforeModifyForRecurrReqLines(ReqLine2);
ReqLine2.Modify();
until ReqLine2.Next() = 0;
end;
end else begin
// Not a recurring journal
OrderLineCounter := OrderLineCounter + LineCount;
if not PlanningResiliency then
if not HideProgressWindow then
Window.Update(5, OrderLineCounter);
ReqLine2.Copy(ReqLine);
ReqLine2.SetRange("Vendor No.", PurchOrderHeader."Buy-from Vendor No.");
ReqLine2.SetRange("Sell-to Customer No.", PurchOrderHeader."Sell-to Customer No.");
ReqLine2.SetRange("Ship-to Code", PurchOrderHeader."Ship-to Code");
ReqLine2.SetRange("Order Address Code", PurchOrderHeader."Order Address Code");
ReqLine2.SetRange("Currency Code", PurchOrderHeader."Currency Code");
ReqLine2.SetRange("Purchasing Code", PrevPurchCode);
IsHandled := false;
OnFinalizeOrderHeaderOnAfterSetFiltersForNonRecurringReqLine(ReqLine2, PurchOrderHeader, IsHandled, TempFailedReqLine);
if not IsHandled then
if ReqLine2.FindSet() then begin
ReqLine2.BlockDynamicTracking(true);
ReservEntry.SetCurrentKey(
"Source ID", "Source Ref. No.", "Source Type", "Source Subtype", "Source Batch Name", "Source Prod. Order Line");
repeat
if PurchaseOrderLineMatchReqLine(ReqLine2) then begin
TempFailedReqLine := ReqLine2;
if not TempFailedReqLine.Find() then begin
ReqLine2.SetReservationFilters(ReservEntry);
ReservEntry.DeleteAll(true);
IsHandled := false;
OnFinalizeOrderHeaderOnBeforeReqLine2Delete(ReqLine2, IsHandled);
if not IsHandled then
ReqLine2.Delete(true);
end;
end;
until ReqLine2.Next() = 0;
end;
end;
OnAfterFinalizeOrderHeader(PurchOrderHeader, ReqLine);
if not SuppressCommit then
Commit();
IsHandled := false;
OnFinalizeOrderHeaderOnBeforePrint(PrintPurchOrders, PurchOrderHeader, IsHandled);
if not IsHandled then
if PrintPurchOrders and not PlanningResiliency then
if PurchOrderHeader.Get(PurchOrderHeader."Document Type", PurchOrderHeader."No.") then
if not TempPurchaseOrderToPrint.Get(PurchOrderHeader."Document Type", PurchOrderHeader."No.") then begin
TempPurchaseOrderToPrint := PurchOrderHeader;
TempPurchaseOrderToPrint.Insert();
end;
OnAfterFinalizeOrderHeaderProcedure(PurchOrderHeader, ReqLine);
end;
procedure CheckRecurringReqLine(var ReqLine2: Record "Requisition Line")
var
DummyDateFormula: DateFormula;
begin
if ReqLine2."No." <> '' then
if ReqTemplate.Recurring then begin
ReqLine2.TestField("Recurring Method");
ReqLine2.TestField("Recurring Frequency");
if ReqLine2."Recurring Method" = ReqLine2."Recurring Method"::Variable then
ReqLine2.TestField(Quantity);
end else begin
ReqLine2.TestField("Recurring Method", 0);
ReqLine2.TestField("Recurring Frequency", DummyDateFormula);
end;
end;
local procedure MakeRecurringTexts(var ReqLine2: Record "Requisition Line")
begin
OnBeforeMakeRecurringTexts(ReqLine2, PurchOrderLine);
if (ReqLine2."No." <> '') and (ReqLine2."Recurring Method" <> 0) and (ReqLine2."Order Date" <> 0D) then begin
Day := Date2DMY(ReqLine2."Order Date", 1);
Week := Date2DWY(ReqLine2."Order Date", 2);
Month := Date2DMY(ReqLine2."Order Date", 2);
MonthText := Format(ReqLine2."Order Date", 0, Text007);
AccountingPeriod.SetRange("Starting Date", 0D, ReqLine2."Order Date");
if not AccountingPeriod.FindLast() then
AccountingPeriod.Name := '';
ReqLine2.Description :=
DelChr(
PadStr(
StrSubstNo(ReqLine2.Description, Day, Week, Month, MonthText, AccountingPeriod.Name),
MaxStrLen(ReqLine2.Description)),
'>');
ReqLine2.Modify();
end;
end;
procedure ReserveBindingOrderToPurch(var PurchLine: Record "Purchase Line"; var ReqLine: Record "Requisition Line")
var
SalesLine: Record "Sales Line";
JobPlanningLine: Record "Job Planning Line";
TrackingSpecification: Record "Tracking Specification";
SalesLineReserve: Codeunit "Sales Line-Reserve";
JobPlanningLineReserve: Codeunit "Job Planning Line-Reserve";
ReservQty: Decimal;
ReservQtyBase: Decimal;
begin
PurchLine.CalcFields("Reserved Quantity", "Reserved Qty. (Base)");
if (PurchLine."Quantity (Base)" - PurchLine."Reserved Qty. (Base)") > ReqLine."Demand Quantity (Base)" then begin
ReservQty := ReqLine."Demand Quantity";
ReservQtyBase := ReqLine."Demand Quantity (Base)";
end else begin
ReservQty := PurchLine.Quantity - PurchLine."Reserved Quantity";
ReservQtyBase := PurchLine."Quantity (Base)" - PurchLine."Reserved Qty. (Base)";
end;
case ReqLine."Demand Type" of
Database::"Sales Line":
begin
SalesLine.Get(ReqLine."Demand Subtype", ReqLine."Demand Order No.", ReqLine."Demand Line No.");
TrackingSpecification.InitTrackingSpecification(
Database::"Purchase Line", PurchLine."Document Type".AsInteger(), PurchLine."Document No.", '', 0, PurchLine."Line No.",
PurchLine."Variant Code", PurchLine."Location Code", PurchLine."Qty. per Unit of Measure");
SalesLineReserve.BindToTracking(
SalesLine, TrackingSpecification, PurchLine.Description, PurchLine."Expected Receipt Date", ReservQty, ReservQtyBase);
if SalesLine.Reserve = SalesLine.Reserve::Never then begin
SalesLine.Reserve := SalesLine.Reserve::Optional;
SalesLine.Modify();
end;
end;
Database::"Job Planning Line":
begin
JobPlanningLine.SetRange("Job Contract Entry No.", ReqLine."Demand Line No.");
JobPlanningLine.FindFirst();
TrackingSpecification.InitTrackingSpecification(
DATABASE::"Purchase Line", PurchLine."Document Type".AsInteger(), PurchLine."Document No.", '', 0, PurchLine."Line No.",
PurchLine."Variant Code", PurchLine."Location Code", PurchLine."Qty. per Unit of Measure");
JobPlanningLineReserve.BindToTracking(
JobPlanningLine, TrackingSpecification, PurchLine.Description, PurchLine."Expected Receipt Date", ReservQty, ReservQtyBase);
if JobPlanningLine.Reserve = JobPlanningLine.Reserve::Never then begin
JobPlanningLine.Reserve := JobPlanningLine.Reserve::Optional;
JobPlanningLine.Modify();
end;
end;
else
OnReserveBindingOrderToPurch(ReqLine, PurchLine, ReservQty, ReservQtyBase);
end;
PurchLine.Modify();
OnAfterReserveBindingOrderToPurch(PurchLine, ReqLine, ReservQty, ReservQtyBase, SuppressCommit);
end;
procedure SetTryParam(TryReqTemplate: Record "Req. Wksh. Template"; TryLineCount: Integer; TryNextLineNo: Integer; TryPrevPurchCode: Code[10]; TryPrevShipToCode: Code[10]; TryPrevLocationCode: Code[10]; TryOrderCounter: Integer; TryOrderLineCounter: Integer; var TryFailedReqLine: Record "Requisition Line"; var TempDocumentEntryNew: Record "Document Entry" temporary)
begin
SetPlanningResiliency();
ReqTemplate := TryReqTemplate;
LineCount := TryLineCount;
NextLineNo := TryNextLineNo;
PrevPurchCode := TryPrevPurchCode;
PrevShipToCode := TryPrevShipToCode;
PrevLocationCode := TryPrevLocationCode;
OrderCounter := TryOrderCounter;
OrderLineCounter := TryOrderLineCounter;
TempDocumentEntry.Copy(TempDocumentEntryNew, true);
if TryFailedReqLine.Find('-') then
repeat
TempFailedReqLine := TryFailedReqLine;
if TempFailedReqLine.Insert() then;
until TryFailedReqLine.Next() = 0;
end;
procedure GetTryParam(var TryPurchOrderHeader: Record "Purchase Header"; var TryLineCount: Integer; var TryNextLineNo: Integer; var TryPrevPurchCode: Code[10]; var TryPrevShipToCode: Code[10]; var TryPrevLocationCode: Code[10]; var TryOrderCounter: Integer; var TryOrderLineCounter: Integer)
begin
TryPurchOrderHeader.Copy(PurchOrderHeader);
TryLineCount := LineCount;
TryNextLineNo := NextLineNo;
TryPrevPurchCode := PrevPurchCode;
TryPrevShipToCode := PrevShipToCode;
TryPrevLocationCode := PrevLocationCode;
TryOrderCounter := OrderCounter;
TryOrderLineCounter := OrderLineCounter;
end;
procedure SetFailedReqLine(var TryFailedReqLine: Record "Requisition Line")
begin
TempFailedReqLine := TryFailedReqLine;
TempFailedReqLine.Insert();
end;
procedure SetPlanningResiliency()
begin
PlanningResiliency := true;
end;
procedure GetFailedCounter(): Integer
begin
exit(CounterFailed);
end;
local procedure PrintTransOrder(TransferHeader: Record "Transfer Header")
var
CarryOutAction: Codeunit "Carry Out Action";
begin
if TransferHeader."No." <> '' then begin
CarryOutAction.SetPrintOrder(PrintPurchOrders);
CarryOutAction.PrintTransferOrder(TransferHeader);
end;
end;
local procedure PrintChangedDocument(OrderType: Enum "Requisition Ref. Order Type"; var OrderNo: Code[20])
var
DummyReqLine: Record "Requisition Line";
TransferHeader: Record "Transfer Header";
PurchaseHeader: Record "Purchase Header";
CarryOutAction: Codeunit "Carry Out Action";
begin
CarryOutAction.SetPrintOrder(PrintPurchOrders);
case OrderType of
DummyReqLine."Ref. Order Type"::Transfer:
begin
TransferHeader.Get(OrderNo);
PrintTransOrder(TransferHeader);
end;
DummyReqLine."Ref. Order Type"::Purchase:
begin
PurchaseHeader.Get(PurchaseHeader."Document Type"::Order, OrderNo);
PrintPurchOrder(PurchaseHeader);
end;
end;
OrderNo := '';
end;
procedure PrintPurchOrder(PurchHeader: Record "Purchase Header")
var
CarryOutAction: Codeunit "Carry Out Action";
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforePrintPurchOrder(PurchHeader, PrintPurchOrders, IsHandled);
if IsHandled then
exit;
if PurchHeader."No." <> '' then begin
CarryOutAction.SetPrintOrder(PrintPurchOrders);
CarryOutAction.PrintPurchaseOrder(PurchHeader);
end;
end;
local procedure PrintMultiplePurchaseOrders()
var
PurchaseHeader: Record "Purchase Header";
CarryOutAction: Codeunit "Carry Out Action";
begin
if TempPurchaseOrderToPrint.Count() = 1 then begin
TempPurchaseOrderToPrint.FindFirst();
PurchaseHeader.Get(TempPurchaseOrderToPrint."Document Type", TempPurchaseOrderToPrint."No.");
PrintPurchOrder(PurchaseHeader);
end else begin
CarryOutAction.SetPrintOrder(PrintPurchOrders);
CarryOutAction.PrintMultiplePurchaseOrders(TempPurchaseOrderToPrint);
end;
end;
local procedure ProcessReqLineActions(var ReqLine: Record "Requisition Line")
begin
OnBeforeProcessReqLineActions(ReqLine, SuppressCommit, PlanningResiliency);
if ReqLine.Find('-') then
repeat
OnProcessReqLineActionsOnBeforeReqLineLoop(ReqLine);
if not PlanningResiliency then
CarryOutReqLineAction(ReqLine)
else
if not TryCarryOutReqLineAction(ReqLine) then begin
SetFailedReqLine(ReqLine);
OnProcessReqLineActionsOnAfterSetFailedReqLine(ReqLine);
CounterFailed := CounterFailed + 1;
end;
until ReqLine.Next() = 0;
end;
local procedure SetPurchOrderHeader()
begin
PurchOrderHeader."Order Date" := OrderDateReq;
PurchOrderHeader."Posting Date" := PostingDateReq;
PurchOrderHeader."Expected Receipt Date" := ReceiveDateReq;
PurchOrderHeader."Your Reference" := ReferenceReq;
OnAfterSetPurchOrderHeader(PurchOrderHeader);
end;
local procedure SetReqLineSortingKey(var RequisitionLine: Record "Requisition Line")
var
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeSetReqLineSortingKey(RequisitionLine, IsHandled);
if IsHandled then
exit;
RequisitionLine.SetCurrentKey(
"Worksheet Template Name", "Journal Batch Name", "Vendor No.",
"Sell-to Customer No.", "Ship-to Code", "Order Address Code", "Currency Code",
"Ref. Order Type", "Ref. Order Status", "Ref. Order No.",
"Transfer-from Code", "Purchasing Code");
end;
procedure CheckAddressDetails(SalesOrderNo: Code[20]; SalesLineNo: Integer; UpdateAddressDetails: Boolean) Result: Boolean
var
SalesLine: Record "Sales Line";
Purchasing: Record Purchasing;
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeCheckAddressDetails(SalesOrderNo, SalesLineNo, UpdateAddressDetails, Result, IsHandled);
if IsHandled then
exit;
if SalesLine.Get(SalesLine."Document Type"::Order, SalesOrderNo, SalesLineNo) then
if Purchasing.Get(SalesLine."Purchasing Code") then
case true of
Purchasing."Drop Shipment":
Result :=
not CheckDropShptAddressDetails(SalesOrderNo, UpdateAddressDetails);
Purchasing."Special Order":
Result :=
not CheckSpecOrderAddressDetails(SalesLine."Location Code", UpdateAddressDetails);
end;
end;
local procedure CheckLocation(RequisitionLine: Record "Requisition Line")
var
InventorySetup: Record "Inventory Setup";
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeCheckLocation(RequisitionLine, IsHandled);
if IsHandled then
exit;
InventorySetup.Get();
if InventorySetup."Location Mandatory" then
RequisitionLine.TestField("Location Code");
end;
local procedure CheckInsertFinalizePurchaseOrderHeader(RequisitionLine: Record "Requisition Line"; var PurchOrderHeader: Record "Purchase Header"; UpdateAddressDetails: Boolean): Boolean
var
CheckInsert: Boolean;
CheckAddressDetailsResult: Boolean;
IsHandled: Boolean;
begin
IsHandled := false;
OnCheckInsertFinalizePurchaseOrderHeaderOnBeforeCheckAddressDetails(RequisitionLine, CheckAddressDetailsResult, IsHandled);
if not IsHandled then
CheckAddressDetailsResult := CheckAddressDetails(RequisitionLine."Sales Order No.", RequisitionLine."Sales Order Line No.", UpdateAddressDetails);
CheckInsert :=
(PurchOrderHeader."Buy-from Vendor No." <> RequisitionLine."Vendor No.") or
(PurchOrderHeader."Sell-to Customer No." <> RequisitionLine."Sell-to Customer No.") or
(PrevShipToCode <> RequisitionLine."Ship-to Code") or
(PurchOrderHeader."Order Address Code" <> RequisitionLine."Order Address Code") or
(PurchOrderHeader."Currency Code" <> RequisitionLine."Currency Code") or
(PrevPurchCode <> RequisitionLine."Purchasing Code") or
CheckAddressDetailsResult;
OnBeforeCheckInsertFinalizePurchaseOrderHeader(
RequisitionLine, PurchOrderHeader, CheckInsert, OrderCounter, PrevPurchCode, PrevLocationCode, PrevShipToCode, UpdateAddressDetails, CheckAddressDetailsResult, ReceiveDateReq);
exit(CheckInsert);
end;
local procedure CheckDropShptAddressDetails(SalesNo: Code[20]; UpdateAddressDetails: Boolean): Boolean
var
SalesHeader: Record "Sales Header";
DropShptNameAddressDetails: Text;
begin
SalesHeader.Get(SalesHeader."Document Type"::Order, SalesNo);
DropShptNameAddressDetails :=
SalesHeader."Ship-to Name" + SalesHeader."Ship-to Name 2" +
SalesHeader."Ship-to Address" + SalesHeader."Ship-to Address 2" +
SalesHeader."Ship-to Post Code" + SalesHeader."Ship-to City" +
SalesHeader."Ship-to Contact";
if NameAddressDetails = '' then
NameAddressDetails := DropShptNameAddressDetails;
if NameAddressDetails = DropShptNameAddressDetails then
exit(true);
if UpdateAddressDetails then
NameAddressDetails := DropShptNameAddressDetails;
exit(false);
end;
local procedure CheckSpecOrderAddressDetails(LocationCode: Code[10]; UpdateAddressDetails: Boolean) Result: Boolean
var
Location: Record Location;
CompanyInfo: Record "Company Information";
SpecOrderNameAddressDetails: Text;
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeCheckSpecOrderAddressDetails(LocationCode, UpdateAddressDetails, NameAddressDetails, Result, IsHandled);
if IsHandled then
exit(Result);
if Location.Get(LocationCode) then
SpecOrderNameAddressDetails :=
Location.Name + Location."Name 2" +
Location.Address + Location."Address 2" +
Location."Post Code" + Location.City +
Location.Contact
else begin
CompanyInfo.Get();
SpecOrderNameAddressDetails :=
CompanyInfo."Ship-to Name" + CompanyInfo."Ship-to Name 2" +
CompanyInfo."Ship-to Address" + CompanyInfo."Ship-to Address 2" +
CompanyInfo."Ship-to Post Code" + CompanyInfo."Ship-to City" +
CompanyInfo."Ship-to Contact";
end;
if NameAddressDetails = '' then
NameAddressDetails := SpecOrderNameAddressDetails;
if NameAddressDetails = SpecOrderNameAddressDetails then
exit(true);
if UpdateAddressDetails then
NameAddressDetails := SpecOrderNameAddressDetails;
exit(false);
end;
local procedure InitShipReceiveDetails()
begin
PrevShipToCode := '';
PrevPurchCode := '';
PrevLocationCode := '';
NameAddressDetails := '';
end;
procedure SetSuppressCommit(NewSuppressCommit: Boolean)
begin
SuppressCommit := NewSuppressCommit;
end;
procedure PurchaseOrderLineMatchReqLine(ReqLine: Record "Requisition Line"): Boolean
begin
if PurchOrderLine."Drop Shipment" then
exit(
(ReqLine."Sales Order No." = PurchOrderLine."Sales Order No.") and
(ReqLine."Sales Order Line No." = PurchOrderLine."Sales Order Line No."));
if PurchOrderLine."Special Order" then
exit(
(ReqLine."Sales Order No." = PurchOrderLine."Special Order Sales No.") and
(ReqLine."Sales Order Line No." = PurchOrderLine."Special Order Sales Line No."));
exit(true);
end;
procedure GetTransferHeader(var TransferHeader: Record "Transfer Header"; RequisitionLine: Record "Requisition Line")
begin
TempTransHeader.SetRange("Transfer-from Code", RequisitionLine."Transfer-from Code");
TempTransHeader.SetRange("Transfer-to Code", RequisitionLine."Location Code");
if TempTransHeader.FindFirst() then
TransferHeader.Get(TempTransHeader."No.");
end;
procedure SetTransferHeader(TransferHeader: Record "Transfer Header")
begin
TempTransHeader := TransferHeader;
if TempTransHeader.Insert() then;
end;
procedure GetCreatedDocumentBuffer(var TempDocumentEntry2: Record "Document Entry" temporary)
begin
TempDocumentEntry2.Copy(TempDocumentEntry, true);
end;
local procedure InitProgressWindow()
begin
if ReqTemplate.Recurring then
Window.Open(
Text000 +
Text001 +
Text002 +
Text003 +
Text004)
else
Window.Open(
Text000 +
Text001 +
Text002 +
Text003 +
Text005);
end;
local procedure UpdateJobLink(var PurchaseLine: Record "Purchase Line"; RequisitionLine: Record "Requisition Line")
var
JobPlanningLine: Record "Job Planning Line";
begin
if RequisitionLine.Reserve then //if reserve not set job link
exit;
if (RequisitionLine."Planning Line Origin" = RequisitionLine."Planning Line Origin"::"Order Planning") and
(RequisitionLine."Demand Type" = Database::"Job Planning Line")
then begin
JobPlanningLine.SetRange("Job Contract Entry No.", RequisitionLine."Demand Line No.");
JobPlanningLine.FindFirst();
PurchaseLine.Validate("Job No.", JobPlanningLine."Job No.");
PurchaseLine.Validate("Job Task No.", JobPlanningLine."Job Task No.");
PurchaseLine.Validate("Job Planning Line No.", JobPlanningLine."Line No.");
end;
end;
local procedure MoveRequisitionWkshBatch(var RequisitionLine: Record "Requisition Line")
begin
if ReqWkshName.Get(RequisitionLine."Worksheet Template Name", RequisitionLine."Journal Batch Name") then
ReqWkshName.OnMoveRequisitionWkshBatch(ReqWkshName.RecordId());
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeCode(var ReqLine: Record "Requisition Line"; PlanningResiliency: Boolean; SuppressCommit: Boolean; PrintPurchOrders: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeCarryOutBatchActionCode(var RequisitionLine: Record "Requisition Line"; var ReqLine2: Record "Requisition Line"; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeCarryOutReqLineAction(var RequisitionLine: Record "Requisition Line"; var Failed: Boolean; var IsHandled: Boolean; SuppressCommit: Boolean; var OrderCounter: Integer; PrintPurchOrders: Boolean; var NextLineNo: Integer; var PrevShipToCode: Code[10]; var PrevPurchCode: Code[10])
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeCheckPurchOrderLineShipToCode(var RequisitionLine: Record "Requisition Line"; PurchOrderLine: Record "Purchase Line"; SalesOrderHeader: Record "Sales Header"; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeCopyOrderDateFromPurchHeader(var RequisitionLine: Record "Requisition Line"; PurchOrderHeader: Record "Purchase Header"; PurchOrderLine: Record "Purchase Line"; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeDeleteReqLines(var ReqLine: Record "Requisition Line"; var TempFailedReqLine: Record "Requisition Line" temporary; var IsHandled: Boolean; var ReqLine2: Record "Requisition Line");
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeGetReqTemplate(RequisitionLine: Record "Requisition Line"; var ReqWkshTemplate: Record "Req. Wksh. Template"; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeInsertHeader(RequisitionLine: Record "Requisition Line"; PurchaseHeader: Record "Purchase Header"; var OrderDateReq: Date; var PostingDateReq: Date; var ReceiveDateReq: Date; var ReferenceReq: Text[35]; var NameAddressDetails: Text)
begin
end;
[IntegrationEvent(true, false)]
local procedure OnBeforeInsertPurchOrderLine(var RequisitionLine: Record "Requisition Line"; var PurchaseHeader: Record "Purchase Header"; var NextLineNo: Integer; var IsHandled: Boolean; var PrevPurchCode: code[10]; var PrevShipToCode: code[10]; var PlanningResiliency: boolean; TempDocumentEntry: Record "Document Entry" temporary; var SuppressCommit: Boolean; var PostingDateReq: date; var ReferenceReq: text[35]; var OrderDateReq: date; var ReceiveDateReq: date; var OrderCounter: integer; var HideProgressWindow: Boolean; var PrevLocationCode: code[10]; var LineCount: Integer; var PurchOrderHeader: Record "Purchase Header"; PurchasingCode: record Purchasing; var PurchOrderLine: Record "Purchase Line")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeProcessReqLineActions(var RequisitionLine: Record "Requisition Line"; CommitIsSuppressed: Boolean; PlanningResiliency: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforePurchOrderLineInsert(var PurchOrderHeader: Record "Purchase Header"; var PurchOrderLine: Record "Purchase Line"; var ReqLine: Record "Requisition Line"; CommitIsSuppressed: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforePurchOrderHeaderInsert(var PurchaseHeader: Record "Purchase Header"; RequisitionLine: Record "Requisition Line"; var ReceiveDateReq: Date; var OrderDateReq: Date; var PostingDateReq: Date; var ReferenceReq: Text[35])
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforePurchOrderLineValidateNo(var PurchOrderLine: Record "Purchase Line"; var RequisitionLine: Record "Requisition Line")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforePurchOrderLineValidateType(var PurchOrderLine: Record "Purchase Line"; var RequisitionLine: Record "Requisition Line")
begin
end;
[IntegrationEvent(true, false)]
local procedure OnBeforeCheckInsertFinalizePurchaseOrderHeader(RequisitionLine: Record "Requisition Line"; var PurchaseHeader: Record "Purchase Header"; var CheckInsert: Boolean; var OrderCounter: Integer; var PrevPurchCode: Code[10]; PrevLocationCode: Code[10]; var PrevShipToCode: Code[10]; var UpdateAddressDetails: Boolean; var CheckAddressDetailsResult: Boolean; ReceiveDateReq: Date)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeSetReqLineSortingKey(var RequisitionLine: Record "Requisition Line"; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeTestFieldsForPurchase(var RequisitionLine: Record "Requisition Line"; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnAfterCode(var RequisitionLine: Record "Requisition Line"; OrderLineCounter: Integer; OrderCounter: Integer; PrintPurchOrders: Boolean; SuppressCommit: Boolean; var PurchOrderHeader: Record "Purchase Header"; Sender: Codeunit "Req. Wksh.-Make Order")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnAfterPurchOrderLineInsert(var PurchOrderLine: Record "Purchase Line"; var RequisitionLine: Record "Requisition Line"; var NextLineNo: Integer)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnAfterCarryOutReqLineAction(var RequisitionLine: Record "Requisition Line"; var PurchaseHeader: Record "Purchase Header"; CommitIsSuppressed: Boolean; var OrderCounter: Integer; var LineCount: Integer)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnAfterReserveBindingOrderToPurch(var PurchaseLine: Record "Purchase Line"; var ReqLine: Record "Requisition Line"; ReservQty: Decimal; ReservQtyBase: Decimal; CommitIsSuppressed: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnAfterSet(NewPurchOrderHeader: Record "Purchase Header"; CommitIsSuppressed: Boolean; EndingOrderDate: Date; PrintPurchOrder: Boolean; var OrderDateReq: Date; ReceiveDateReq: Date; var PostingDateReq: Date; var PurchOrderHeader: Record "Purchase Header"; ReferenceReq: Text[35])
begin
end;
[IntegrationEvent(false, false)]
local procedure OnAfterCheckReqWkshLine(var RequisitionLine: Record "Requisition Line"; CommitIsSuppressed: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnAfterInitPurchOrderLine(var PurchaseLine: Record "Purchase Line"; RequisitionLine: Record "Requisition Line")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnAfterInsertPurchOrderHeader(var RequisitionLine: Record "Requisition Line"; var PurchaseOrderHeader: Record "Purchase Header"; CommitIsSuppressed: Boolean; SpecialOrder: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnAfterInsertPurchOrderLine(var PurchOrderLine: Record "Purchase Line"; var NextLineNo: Integer; var RequisitionLine: Record "Requisition Line"; var PurchOrderHeader: Record "Purchase Header")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnAfterFinalizeOrderHeader(var PurchHeader: Record "Purchase Header"; var ReqLine: Record "Requisition Line")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnAfterFinalizeOrderHeaderProcedure(var PurchHeader: Record "Purchase Header"; var ReqLine: Record "Requisition Line")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnAfterPurchOrderLineValidateNo(var PurchOrderLine: Record "Purchase Line"; var RequisitionLine: Record "Requisition Line")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnAfterSetPurchOrderHeader(var PurchOrderHeader: Record "Purchase Header")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeUpdateShipToOrLocationCode(var PurchOrderHeader: Record "Purchase Header"; var RequisitionLine: Record "Requisition Line"; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(true, false)]
local procedure OnBeforeCheckRequisitionLines(var RequisitionLine: Record "Requisition Line"; var StartLineNo: Integer; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(true, false)]
local procedure OnBeforeCheckRunPrintPurchOrders(var TransHeader: Record "Transfer Header"; var PurchOrderHeader: Record "Purchase Header"; var TempPurchaseOrderToPrint: Record "Purchase Header" temporary; var PrintPurchOrders: Boolean; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeInitPurchOrderLineUpdateQuantity(var PurchOrderLine: Record "Purchase Line"; var RequisitionLine: Record "Requisition Line"; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeInitPurchOrderLine(var ReqLine: record "Requisition Line"; var PurchasingCode: Record Purchasing; var PurchOrderHeader: Record "Purchase Header"; var LineCount: Integer; var NextLineNo: Integer; var PrevPurchCode: code[10]; var PrevShipToCode: code[10]; var PlanningResiliency: boolean; TempDocumentEntry: Record "Document Entry" temporary; var SuppressCommit: Boolean; var PostingDateReq: date; var ReferenceReq: text[35]; var OrderDateReq: date; var ReceiveDateReq: date; var OrderCounter: integer; var HideProgressWindow: Boolean; var IsHandled: Boolean; var PurchaseLineOrder: Record "Purchase Line")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeMakeRecurringTexts(var RequisitionLine: Record "Requisition Line"; var PurchOrderLine: Record "Purchase Line")
begin
end;
[IntegrationEvent(true, false)]
local procedure OnBeforeOnRun(var RequisitionLine: Record "Requisition Line"; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeValidateBuyFromVendorNo(var PurchOrderHeader: Record "Purchase Header"; var RequisitionLine: Record "Requisition Line"; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnCarryOutReqLineActionOnCaseReplenishmentSystemElse(var ReqLine: Record "Requisition Line");
begin
end;
[IntegrationEvent(false, false)]
local procedure OnCarryOutReqLineActionOnAfterInsertTransLine(TransHeader: Record "Transfer Header");
begin
end;
[IntegrationEvent(false, false)]
local procedure OnCheckNewNameNeccessary(RequisitionWkshName: Record "Requisition Wksh. Name"; var NewReqWkshName: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnCheckFurtherReplenishmentSystems(var RequisitionLine2: Record "Requisition Line")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnCodeOnAfterReqLine3SetFilters(ReqLine: Record "Requisition Line"; var ReqLine3: Record "Requisition Line")
begin
end;
[IntegrationEvent(true, false)]
local procedure OnCodeOnBeforeFinalizeOrderHeader(PurchOrderHeader: Record "Purchase Header"; var ReqLine: Record "Requisition Line"; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnFinalizeOrderHeaderOnAfterSetFiltersForRecurringReqLine(var RequisitionLine: Record "Requisition Line"; PurchaseHeader: Record "Purchase Header"; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(true, false)]
local procedure OnFinalizeOrderHeaderOnAfterSetFiltersForNonRecurringReqLine(var RequisitionLine: Record "Requisition Line"; PurchaseHeader: Record "Purchase Header"; var IsHandled: Boolean; var TempFailedRequisitionLine: Record "Requisition Line" temporary)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnFinalizeOrderHeaderOnBeforeReqLine2Delete(var RequisitionLine: Record "Requisition Line"; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnInitPurchOrderLineOnAfterPurchOrderLineAssignVariantCode(var PurchOrderLine: Record "Purchase Line"; var RequisitionLine: Record "Requisition Line")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnInitPurchOrderLineOnBeforeUpdateQuantity(var PurchOrderLine: Record "Purchase Line"; var RequisitionLine: Record "Requisition Line")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnInitPurchOrderLineOnAfterValidateLineDiscount(var PurchOrderLine: Record "Purchase Line"; PurchOrderHeader: Record "Purchase Header"; RequisitionLine: Record "Requisition Line")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnInitPurchOrderLineOnBeforeValidateLineDiscount(var PurchOrderLine: Record "Purchase Line"; PurchOrderHeader: Record "Purchase Header"; RequisitionLine: Record "Requisition Line")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnInsertPurchOrderLineOnAfterCheckInsertFinalizePurchaseOrderHeader(var RequisitionLine: Record "Requisition Line"; var PurchaseHeader: Record "Purchase Header"; var NextLineNo: Integer)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnInsertPurchOrderLineOnAfterTransferFromReqLineToPurchLine(var PurchOrderLine: Record "Purchase Line"; RequisitionLine: Record "Requisition Line")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnInsertPurchOrderLineOnBeforeInsertHeader(var RequisitionLine: Record "Requisition Line"; var PurchaseHeader: Record "Purchase Header"; var PurchaseLine: Record "Purchase Line"; var LineCount: Integer; var NextLineNo: Integer; var IsHandled: Boolean; var OrderCounter: Integer)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnInsertPurchOrderLineOnBeforeSalesOrderLineValidateUnitCostLCY(var PurchOrderLine: Record "Purchase Line"; var SalesOrderLine: Record "Sales Line")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnInsertPurchOrderLineOnBeforeSalesOrderLineModify(var SalesOrderLine: Record "Sales Line"; var RequisitionLine: Record "Requisition Line"; var PurchOrderLine: Record "Purchase Line")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnProcessReqLineActionsOnAfterSetFailedReqLine(var RequisitionLine: Record "Requisition Line")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnProcessReqLineActionsOnBeforeReqLineLoop(var RequisitionLine: Record "Requisition Line")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnCodeOnBeforeInitProgressWindow(ReqTemplate: Record "Req. Wksh. Template"; var HideProgressWindow: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeCheckAddressDetails(SalesOrderNo: Code[20]; SalesLineNo: Integer; UpdateAddressDetails: Boolean; var Result: Boolean; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeCheckSpecOrderAddressDetails(LocationCode: Code[10]; UpdateAddressDetails: Boolean; var NameAddressDetails: Text; var Result: Boolean; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeCheckRequisitionLine(var ReqLine2: Record "Requisition Line"; SuppressCommit: Boolean; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeCheckRequsitionLineQuantity(var RequisitionLine: Record "Requisition Line"; var PurchOrderLine: Record "Purchase Line"; var SalesOrderLine: Record "Sales Line"; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnCheckRequisitionLineOnNonCancelActionMessageOnBeforeCheckQuantity(var ReqLine2: Record "Requisition Line"; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnCheckRequisitionLineOnNonCancelActionMessageOnBeforeCheckUOM(var ReqLine2: Record "Requisition Line"; var PurchasingCode: Record Purchasing; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnCheckRequisitionLineOnEmptyNewActionMessageOnBeforeOtherCheck(var ReqLine2: Record "Requisition Line"; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnInsertPurchOrderLineOnBeforeTransferReqLine(var PurchOrderHeader: Record "Purchase Header"; var PurchOrderLine: Record "Purchase Line"; var RequisitionLine: Record "Requisition Line")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnInsertHeaderOnBeforeValidateSellToCustNoFromReqLine(PurchOrderHeader: Record "Purchase Header"; ReqLine2: Record "Requisition Line"; var ShouldValidateSellToCustNo: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnFinalizeOrderHeaderOnBeforePrint(PrintPurchOrders: Boolean; PurchOrderHeader: Record "Purchase Header"; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnFinalizeOrderHeaderOnLoopLinesBeforeModifyForRecurrReqLines(var ReqLine2: Record "Requisition Line")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforePrintPurchOrder(PurchaseHeader: Record "Purchase Header"; PrintPurchOrders: Boolean; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnInsertHeaderOnBeforeSetShipToForSpecOrder(var PurchaseHeader: Record "Purchase Header"; RequisitionLine: Record "Requisition Line"; var ShouldSetShipToForSpecOrder: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnAfterCarryOutBatchAction(var RequisitionLine2: Record "Requisition Line")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeTryCarryOutReqLineAction(var RequisitionLine: Record "Requisition Line")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnTryCarryOutReqLineActionOnBeforeRun(var RequisitionLine: Record "Requisition Line")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnTryCarryOutReqLineActionOnAfterGetTryParam(var RequisitionLine: Record "Requisition Line"; var PurchaseHeader: Record "Purchase Header"; var LineCount: Integer; var NextLineNo: Integer; var PrevPurchCode: Code[10]; var PrevShipToCode: Code[10]; var PrevLocationCode: Code[10]; var OrderCounter: Integer; var OrderLineCounter: Integer)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeCheckLocation(var RequisitionLine: Record "Requisition Line"; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnReserveBindingOrderToPurch(var RequisitionLine: Record "Requisition Line"; var PurchaseLine: Record "Purchase Line"; ReservQty: Decimal; ReservQtyBase: Decimal)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnInsertPurchOrderLineOnBeforeUpdateAssociatedSalesLine(var PurchaseLine: Record "Purchase Line"; var RequisitionLine: Record "Requisition Line"; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(true, false)]
local procedure OnCheckInsertFinalizePurchaseOrderHeaderOnBeforeCheckAddressDetails(var RequisitionLine: Record "Requisition Line"; var CheckAddressDetailsResult: Boolean; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(true, false)]
local procedure OnCodeOnBeforeSetPurchOrderHeader(var RequisitionLine: Record "Requisition Line"; var IsHandled: Boolean)
begin
end;
[InternalEvent(false)]
local procedure OnTransferFromReqLineToPurchLine(var PurchOrderLine: Record "Purchase Line"; RequisitionLine: Record "Requisition Line")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnCodeOnAfterFilterReqLine(var RequisitionLine: Record "Requisition Line"; PlanningResiliency: Boolean; SuppressCommit: Boolean; PrintPurchOrders: Boolean)
begin
end;
}