Codeunit 5780 Whse. Cross-Dock Management, source in 29
Source29
src/Layers/W1/BaseApp/Warehouse/CrossDock/WhseCrossDockManagement.Codeunit.al832 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.Warehouse.CrossDock;
using Microsoft.Foundation.Calendar;
using Microsoft.Foundation.UOM;
using Microsoft.Inventory.Item;
using Microsoft.Inventory.Location;
using Microsoft.Inventory.Transfer;
using Microsoft.Purchases.Document;
using Microsoft.Sales.Document;
using Microsoft.Warehouse.Document;
using Microsoft.Warehouse.History;
using Microsoft.Warehouse.Ledger;
using Microsoft.Warehouse.Request;
using Microsoft.Warehouse.Structure;
codeunit 5780 "Whse. Cross-Dock Management"
{
trigger OnRun()
begin
end;
var
PurchaseLine: Record "Purchase Line";
WhseManagement: Codeunit "Whse. Management";
UOMMgt: Codeunit "Unit of Measure Management";
SourceType2: Integer;
UseCrossDocking: Boolean;
TemplateName: Code[10];
NameNo: Code[20];
GlobalLocationCode: Code[10];
procedure GetUseCrossDock(var UseCrossDock: Boolean; LocationCode: Code[10]; ItemNo: Code[20])
var
Item: Record Item;
StockkeepingUnit: Record "Stockkeeping Unit";
Location: Record Location;
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeGetUseCrossDock(ItemNo, UseCrossDock, IsHandled);
if IsHandled then
exit;
Location.Get(LocationCode);
Item.Get(ItemNo);
if StockkeepingUnit.Get(LocationCode, ItemNo) then
Item."Use Cross-Docking" := StockkeepingUnit."Use Cross-Docking";
if Item."Use Cross-Docking" and Location."Use Cross-Docking" then
UseCrossDock := true
else
UseCrossDock := false;
end;
procedure CalculateCrossDockLines(var WhseCrossDockOpportunity: Record "Whse. Cross-Dock Opportunity"; NewTemplateName: Code[10]; NewNameNo: Code[20]; NewLocationCode: Code[10])
var
TempWarehouseReceiptLineNoSpecOrder: Record "Warehouse Receipt Line" temporary;
TempWarehouseReceiptLineWithSpecOrder: Record "Warehouse Receipt Line" temporary;
TempItemVariant: Record "Item Variant" temporary;
begin
SetTemplate(NewTemplateName, NewNameNo, NewLocationCode);
if TemplateName <> '' then
exit;
OnCalculateCrossDockLinesOnAfterSetTemplate(WhseCrossDockOpportunity, NewTemplateName, NewNameNo, NewLocationCode);
SeparateWhseRcptLinesWthSpecOrder(TempWarehouseReceiptLineNoSpecOrder, TempWarehouseReceiptLineWithSpecOrder, TempItemVariant);
FilterCrossDockOpp(WhseCrossDockOpportunity);
CalcCrossDockWithoutSpecOrder(WhseCrossDockOpportunity, TempWarehouseReceiptLineNoSpecOrder, TempItemVariant);
CalcCrossDockForSpecialOrder(WhseCrossDockOpportunity, TempWarehouseReceiptLineWithSpecOrder);
OnAfterCalculateCrossDockLines(WhseCrossDockOpportunity, NewTemplateName, NewNameNo, NewLocationCode);
end;
local procedure CalcCrossDockForSpecialOrder(var WhseCrossDockOpportunity: Record "Whse. Cross-Dock Opportunity"; var TempWarehouseReceiptLine: Record "Warehouse Receipt Line" temporary)
var
WarehouseReceiptLine: Record "Warehouse Receipt Line";
QtyToCrossDockBase: Decimal;
QtyOnCrossDockBase: Decimal;
RemainingNeededQtyBase: Decimal;
QtyOnPickBase: Decimal;
QtyPickedBase: Decimal;
begin
if TempWarehouseReceiptLine.Find('-') then
repeat
WarehouseReceiptLine.Get(TempWarehouseReceiptLine."No.", TempWarehouseReceiptLine."Line No.");
WhseCrossDockOpportunity.SetRange("Source Line No.", TempWarehouseReceiptLine."Line No.");
WhseCrossDockOpportunity.DeleteAll();
GetSourceLine(TempWarehouseReceiptLine."Source Type", TempWarehouseReceiptLine."Source Subtype", TempWarehouseReceiptLine."Source No.", TempWarehouseReceiptLine."Source Line No.");
CalculateCrossDock(
WhseCrossDockOpportunity, TempWarehouseReceiptLine."Item No.", TempWarehouseReceiptLine."Variant Code", GlobalLocationCode,
RemainingNeededQtyBase, QtyOnPickBase, QtyPickedBase, TempWarehouseReceiptLine."Line No.");
UpdateQtyToCrossDock(
WarehouseReceiptLine, RemainingNeededQtyBase, QtyToCrossDockBase, QtyOnCrossDockBase);
until TempWarehouseReceiptLine.Next() = 0;
end;
local procedure CalcCrossDockWithoutSpecOrder(var WhseCrossDockOpportunity: Record "Whse. Cross-Dock Opportunity"; var TempWarehouseReceiptLine: Record "Warehouse Receipt Line" temporary; var TempItemVariant: Record "Item Variant" temporary)
var
WarehouseReceiptLine: Record "Warehouse Receipt Line";
QtyToCrossDockBase: Decimal;
QtyOnCrossDockBase: Decimal;
RemainingNeededQtyBase: Decimal;
QtyOnPickBase: Decimal;
QtyPickedBase: Decimal;
NewItemVariant: Boolean;
begin
if TempItemVariant.FindSet() then begin
FilterWhseRcptLine(TempWarehouseReceiptLine);
repeat
NewItemVariant := true;
TempWarehouseReceiptLine.SetRange("Item No.", TempItemVariant."Item No.");
TempWarehouseReceiptLine.SetRange("Variant Code", TempItemVariant.Code);
if TempWarehouseReceiptLine.Find('-') then
repeat
WarehouseReceiptLine.Get(TempWarehouseReceiptLine."No.", TempWarehouseReceiptLine."Line No.");
WhseCrossDockOpportunity.SetRange("Source Line No.", TempWarehouseReceiptLine."Line No.");
WhseCrossDockOpportunity.DeleteAll();
if NewItemVariant then begin
GetSourceLine(TempWarehouseReceiptLine."Source Type", TempWarehouseReceiptLine."Source Subtype", TempWarehouseReceiptLine."Source No.", TempWarehouseReceiptLine."Source Line No.");
CalculateCrossDock(
WhseCrossDockOpportunity, TempWarehouseReceiptLine."Item No.", TempWarehouseReceiptLine."Variant Code", GlobalLocationCode,
RemainingNeededQtyBase, QtyOnPickBase, QtyPickedBase, TempWarehouseReceiptLine."Line No.");
end;
if NewItemVariant or (RemainingNeededQtyBase <> 0) then
UpdateQtyToCrossDock(
WarehouseReceiptLine, RemainingNeededQtyBase, QtyToCrossDockBase, QtyOnCrossDockBase);
NewItemVariant := false;
until (TempWarehouseReceiptLine.Next() = 0) or (RemainingNeededQtyBase = 0);
until TempItemVariant.Next() = 0;
end;
end;
procedure CalcRemainingNeededQtyBase(ItemNo: Code[20]; VariantCode: Code[10]; QtyNeededBase: Decimal; var QtyToCrossDockBase: Decimal; var QtyOnCrossDockBase: Decimal; QtyToHandleBase: Decimal) RemainingNeededQtyBase: Decimal
var
Dummy: Decimal;
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeCalcRemainingNeededQtyBase(PurchaseLine, ItemNo, VariantCode, GlobalLocationCode, QtyOnCrossDockBase, QtyToCrossDockBase, QtyNeededBase, QtyToHandleBase, RemainingNeededQtyBase, IsHandled);
if IsHandled then
exit(RemainingNeededQtyBase);
CalcCrossDockedItems(ItemNo, VariantCode, '', GlobalLocationCode, Dummy, QtyOnCrossDockBase);
QtyOnCrossDockBase += CalcCrossDockReceivedNotCrossDocked(GlobalLocationCode, ItemNo, VariantCode);
OnCalcRemainingNeededQtyBaseOnAfterCalcQtyOnCrossDockBase(ItemNo, VariantCode, QtyNeededBase, HasSpecialOrder(), QtyOnCrossDockBase, GlobalLocationCode);
QtyToCrossDockBase := QtyNeededBase - QtyOnCrossDockBase;
if QtyToHandleBase < QtyToCrossDockBase then begin
RemainingNeededQtyBase := QtyToCrossDockBase - QtyToHandleBase;
QtyToCrossDockBase := QtyToHandleBase
end else
RemainingNeededQtyBase := 0;
if QtyToCrossDockBase < 0 then
QtyToCrossDockBase := 0;
end;
procedure CalculateCrossDockLine(var WhseCrossDockOpportunity: Record "Whse. Cross-Dock Opportunity"; ItemNo: Code[20]; VariantCode: Code[10]; var QtyNeededBase: Decimal; var QtyToCrossDockBase: Decimal; var QtyOnCrossDockBase: Decimal; LineNo: Integer; QtyToHandleBase: Decimal)
var
QtyOnPickBase: Decimal;
QtyPickedBase: Decimal;
Dummy: Decimal;
begin
FilterCrossDockOpp(WhseCrossDockOpportunity);
WhseCrossDockOpportunity.SetRange("Source Line No.", LineNo);
WhseCrossDockOpportunity.DeleteAll();
CalculateCrossDock(
WhseCrossDockOpportunity, ItemNo, VariantCode, GlobalLocationCode, QtyNeededBase, QtyOnPickBase, QtyPickedBase, LineNo);
CalcCrossDockedItems(ItemNo, VariantCode, '', GlobalLocationCode, Dummy, QtyOnCrossDockBase);
QtyOnCrossDockBase += CalcCrossDockReceivedNotCrossDocked(GlobalLocationCode, ItemNo, VariantCode);
OnCalculateCrossDockLineOnAfterCalcQtyOnCrossDockBase(ItemNo, VariantCode, QtyNeededBase, HasSpecialOrder(), QtyOnCrossDockBase, GlobalLocationCode);
QtyToCrossDockBase := QtyNeededBase - QtyOnCrossDockBase;
if QtyToHandleBase < QtyToCrossDockBase then
QtyToCrossDockBase := QtyToHandleBase;
if QtyToCrossDockBase < 0 then
QtyToCrossDockBase := 0;
end;
local procedure CalculateCrossDock(var WhseCrossDockOpportunity: Record "Whse. Cross-Dock Opportunity"; ItemNo: Code[20]; VariantCode: Code[10]; LocationCode: Code[10]; var QtyNeededSumBase: Decimal; var QtyOnPickSumBase: Decimal; var QtyPickedSumBase: Decimal; LineNo: Integer)
var
Location: Record Location;
QtyOnPick: Decimal;
QtyPicked: Decimal;
CrossDockDate: Date;
begin
Location.Get(LocationCode);
CrossDockDate := CalculateCrossDockDate(Location);
OnCalculateCrossDockOnAfterAssignCrossDocDate(
WhseCrossDockOpportunity, CrossDockDate, ItemNo, VariantCode, LocationCode,
QtyNeededSumBase, QtyOnPickSumBase, QtyPickedSumBase, LineNo, TemplateName, NameNo);
CalcCrossDockToSalesOrder(WhseCrossDockOpportunity, QtyOnPick, QtyPicked, ItemNo, VariantCode, LocationCode, CrossDockDate, LineNo);
CalcCrossDockToTransferOrder(WhseCrossDockOpportunity, QtyOnPick, QtyPicked, ItemNo, VariantCode, LocationCode, CrossDockDate, LineNo);
OnCalcCrossDockToProdOrderComponent(WhseCrossDockOpportunity, ItemNo, VariantCode, LocationCode, CrossDockDate, LineNo);
OnCalcCrossDockToServiceOrder(WhseCrossDockOpportunity, QtyOnPick, QtyPicked, ItemNo, VariantCode, LocationCode, CrossDockDate, LineNo);
WhseCrossDockOpportunity.CalcSums("Qty. Needed (Base)", "Pick Qty. (Base)", "Picked Qty. (Base)");
QtyNeededSumBase := WhseCrossDockOpportunity."Qty. Needed (Base)";
QtyOnPickSumBase := WhseCrossDockOpportunity."Pick Qty. (Base)";
QtyPickedSumBase := WhseCrossDockOpportunity."Picked Qty. (Base)";
end;
procedure InsertCrossDockOpp(var WhseCrossDockOpportunity: Record "Whse. Cross-Dock Opportunity"; SourceType: Integer; SourceSubType: Integer; SourceNo: Code[20]; SourceLineNo: Integer; SourceSubLineNo: Integer; QtyOutstanding: Decimal; QtyOutstandingBase: Decimal; QtyOnPick: Decimal; QtyOnPickBase: Decimal; QtyPicked: Decimal; QtyPickedBase: Decimal; UOMCode: Code[10]; QtyPerUOM: Decimal; DueDate: Date; ItemNo: Code[20]; VariantCode: Code[10]; LineNo: Integer)
var
IsHandled: Boolean;
begin
OnBeforeInsertCrossDockOpp(SourceType);
if HasSpecialOrder() and (SourceType <> Database::"Sales Line") then
exit;
if (QtyOutstandingBase - QtyOnPickBase - QtyPickedBase) <= 0 then
exit;
OnInsertCrossDockOppOnBeforeInitWhseCrossDockOpp(SourceType);
WhseCrossDockOpportunity.Init();
WhseCrossDockOpportunity."Source Template Name" := TemplateName;
WhseCrossDockOpportunity."Source Name/No." := NameNo;
WhseCrossDockOpportunity."Source Line No." := LineNo;
WhseCrossDockOpportunity."Line No." := WhseCrossDockOpportunity."Line No." + 10000;
WhseCrossDockOpportunity."To Source Type" := SourceType;
WhseCrossDockOpportunity."To Source Subtype" := SourceSubType;
WhseCrossDockOpportunity."To Source No." := SourceNo;
WhseCrossDockOpportunity."To Source Line No." := SourceLineNo;
WhseCrossDockOpportunity."To Source Subline No." := SourceSubLineNo;
WhseCrossDockOpportunity."To Source Document" :=
WhseManagement.GetSourceDocumentType(WhseCrossDockOpportunity."To Source Type", WhseCrossDockOpportunity."To Source Subtype").AsInteger();
WhseCrossDockOpportunity."Due Date" := DueDate;
WhseCrossDockOpportunity."To-Src. Unit of Measure Code" := UOMCode;
WhseCrossDockOpportunity."To-Src. Qty. per Unit of Meas." := QtyPerUOM;
WhseCrossDockOpportunity."Item No." := ItemNo;
WhseCrossDockOpportunity."Variant Code" := VariantCode;
WhseCrossDockOpportunity."Location Code" := GlobalLocationCode;
SubtractExistingCrossDockOppQtysToSource(WhseCrossDockOpportunity);
OnInsertCrossDockLineOnBeforeCalculateQtyNeeded(QtyOutstanding, QtyOutstandingBase);
WhseCrossDockOpportunity."Qty. Needed (Base)" := Maximum(WhseCrossDockOpportunity."Qty. Needed (Base)" + QtyOutstandingBase - QtyOnPickBase - QtyPickedBase, 0);
WhseCrossDockOpportunity."Qty. Needed" := Maximum(WhseCrossDockOpportunity."Qty. Needed" + QtyOutstanding - QtyOnPick - QtyPicked, 0);
WhseCrossDockOpportunity."Pick Qty. (Base)" := Maximum(WhseCrossDockOpportunity."Pick Qty. (Base)" + QtyOnPickBase, 0);
WhseCrossDockOpportunity."Pick Qty." := Maximum(WhseCrossDockOpportunity."Pick Qty." + QtyOnPick, 0);
WhseCrossDockOpportunity."Picked Qty. (Base)" := Maximum(WhseCrossDockOpportunity."Picked Qty. (Base)" + QtyPickedBase, 0);
WhseCrossDockOpportunity."Picked Qty." := Maximum(WhseCrossDockOpportunity."Picked Qty." + QtyPicked, 0);
IsHandled := false;
OnBeforeCrossDockOppInsert(WhseCrossDockOpportunity, QtyPerUOM, NameNo, LineNo, IsHandled);
if not IsHandled then
WhseCrossDockOpportunity.Insert();
end;
procedure ShowCrossDock(var WhseCrossDockOpportunity: Record "Whse. Cross-Dock Opportunity"; SourceTemplateName: Code[10]; SourceNameNo: Code[20]; SourceLineNo: Integer; LocationCode: Code[10]; ItemNo: Code[20]; VariantCode: Code[10])
var
ReceiptLine: Record "Warehouse Receipt Line";
CrossDockForm: Page "Cross-Dock Opportunities";
QtyToCrossDock: Decimal;
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeShowCrossDock(WhseCrossDockOpportunity, SourceTemplateName, SourceNameNo, SourceLineNo, LocationCode, ItemNo, VariantCode, IsHandled);
if IsHandled then
exit;
WhseCrossDockOpportunity.FilterGroup(2);
WhseCrossDockOpportunity.SetRange("Source Template Name", SourceTemplateName);
WhseCrossDockOpportunity.SetRange("Source Name/No.", SourceNameNo);
WhseCrossDockOpportunity.SetRange("Item No.", ItemNo);
WhseCrossDockOpportunity.SetRange("Location Code", LocationCode);
WhseCrossDockOpportunity.FilterGroup(0);
ReceiptLine.Get(SourceNameNo, SourceLineNo);
CrossDockForm.SetValues(ItemNo, VariantCode, LocationCode, SourceTemplateName, SourceNameNo, SourceLineNo,
ReceiptLine."Unit of Measure Code", ReceiptLine."Qty. per Unit of Measure");
CrossDockForm.LookupMode(true);
CrossDockForm.SetTableView(WhseCrossDockOpportunity);
if CrossDockForm.RunModal() = ACTION::LookupOK then begin
ReceiptLine.Get(SourceNameNo, SourceLineNo);
CrossDockForm.GetValues(QtyToCrossDock);
QtyToCrossDock := QtyToCrossDock / ReceiptLine."Qty. per Unit of Measure";
if ReceiptLine."Qty. to Receive" < QtyToCrossDock then
QtyToCrossDock := ReceiptLine."Qty. to Receive";
ReceiptLine.Validate("Qty. to Cross-Dock", QtyToCrossDock);
ReceiptLine.Modify();
OnShowCrossDockOnAfterReceiptLineModify(ReceiptLine);
end;
end;
procedure CalcCrossDockedItems(ItemNo: Code[20]; VariantCode: Code[10]; UOMCode: Code[10]; LocationCode: Code[10]; var QtyCrossDockedUOMBase: Decimal; var QtyCrossDockedAllUOMBase: Decimal)
var
BinContent: Record "Bin Content";
QtyAvailToPickBase: Decimal;
begin
QtyCrossDockedUOMBase := 0;
QtyCrossDockedAllUOMBase := 0;
BinContent.Reset();
BinContent.SetRange("Location Code", LocationCode);
BinContent.SetRange("Item No.", ItemNo);
BinContent.SetRange("Variant Code", VariantCode);
BinContent.SetRange("Cross-Dock Bin", true);
OnCalcCrossDockedItemsOnAfterSetBinContentFilters(BinContent);
if BinContent.Find('-') then
repeat
QtyAvailToPickBase := BinContent.CalcQtyAvailToPick(0);
if BinContent."Unit of Measure Code" = UOMCode then
QtyCrossDockedUOMBase := QtyCrossDockedUOMBase + QtyAvailToPickBase;
QtyCrossDockedAllUOMBase := QtyCrossDockedAllUOMBase + QtyAvailToPickBase;
until BinContent.Next() = 0;
end;
procedure CalcCrossDockReceivedNotCrossDocked(LocationCode: Code[10]; ItemNo: Code[20]; VariantCode: Code[10]) ReceivedNotCrossDockedQty: Decimal
var
PostedWhseReceiptLine: Record "Posted Whse. Receipt Line";
ReceivedCrossDockedQty: Decimal;
begin
ReceivedNotCrossDockedQty := 0;
PostedWhseReceiptLine.SetRange("Location Code", LocationCode);
PostedWhseReceiptLine.SetRange("Item No.", ItemNo);
PostedWhseReceiptLine.SetRange("Variant Code", VariantCode);
PostedWhseReceiptLine.SetFilter(Status, '%1|%2', PostedWhseReceiptLine.Status::" ", PostedWhseReceiptLine.Status::"Partially Put Away");
PostedWhseReceiptLine.SetFilter("Cross-Dock Bin Code", '<>%1', '');
OnCalcCrossDockReceivedNotCrossDockedOnAfterPostedWhseReceiptLineSetFilters(PostedWhseReceiptLine);
if PostedWhseReceiptLine.FindSet() then
repeat
// calculate received, yet not put-away quantity, that is assumed to be put-away in a cross-dock bin
ReceivedCrossDockedQty := CalcCrossDockedQtyInPostedReceipt(PostedWhseReceiptLine);
ReceivedNotCrossDockedQty +=
Minimum(
Maximum(PostedWhseReceiptLine."Qty. Cross-Docked (Base)" - ReceivedCrossDockedQty, 0),
PostedWhseReceiptLine."Qty. (Base)" - PostedWhseReceiptLine."Qty. Put Away (Base)");
until PostedWhseReceiptLine.Next() = 0;
end;
procedure ShowBinContentsCrossDocked(ItemNo: Code[20]; VariantCode: Code[10]; UOMCode: Code[10]; LocationCode: Code[10]; FilterOnUOM: Boolean)
var
BinContent: Record "Bin Content";
BinContentList: Page "Bin Contents List";
begin
BinContent.SetRange("Item No.", ItemNo);
BinContent.SetRange("Variant Code", VariantCode);
BinContent.SetRange("Cross-Dock Bin", true);
if FilterOnUOM then
BinContent.SetRange("Unit of Measure Code", UOMCode);
BinContentList.SetTableView(BinContent);
BinContentList.Initialize(LocationCode);
BinContentList.RunModal();
Clear(BinContentList);
end;
local procedure GetSourceLine(SourceType: Option; SourceSubtype: Option; SourceNo: Code[20]; SourceLineNo: Integer)
begin
if SourceType = Database::"Purchase Line" then begin
PurchaseLine.Get(SourceSubtype, SourceNo, SourceLineNo);
SourceType2 := SourceType;
end;
OnAfterGetSourceLine(SourceType, SourceSubtype, SourceNo, SourceLineNo);
end;
procedure CalculatePickQty(SourceType: Integer; SourceSubtype: Integer; SourceNo: Code[20]; SourceLineNo: Integer; var QtyOnPick: Decimal; var QtyOnPickBase: Decimal; var QtyPicked: Decimal; var QtyPickedBase: Decimal; Qty: Decimal; QtyBase: Decimal; OutstandingQty: Decimal; OutstandingQtyBase: Decimal)
var
WarehouseShipmentLine: Record "Warehouse Shipment Line";
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeCalculatePickQty(SourceType, SourceSubtype, SourceNo, SourceLineNo, Qty, QtyBase, OutstandingQty,
OutstandingQtyBase, QtyOnPick, QtyOnPickBase, QtyPicked, QtyPickedBase, IsHandled);
if not IsHandled then begin
QtyOnPickBase := 0;
QtyPickedBase := 0;
WarehouseShipmentLine.Reset();
WarehouseShipmentLine.SetCurrentKey("Source Type", "Source Subtype", "Source No.", "Source Line No.");
WarehouseShipmentLine.SetRange("Source Type", SourceType);
WarehouseShipmentLine.SetRange("Source Subtype", SourceSubtype);
WarehouseShipmentLine.SetRange("Source No.", SourceNo);
WarehouseShipmentLine.SetRange("Source Line No.", SourceLineNo);
if WarehouseShipmentLine.Find('-') then
repeat
WarehouseShipmentLine.CalcFields("Pick Qty. (Base)", "Pick Qty.");
QtyOnPick := QtyOnPick + WarehouseShipmentLine."Pick Qty.";
QtyOnPickBase := QtyOnPickBase + WarehouseShipmentLine."Pick Qty. (Base)";
QtyPicked := QtyPicked + WarehouseShipmentLine."Qty. Picked";
QtyPickedBase := QtyPickedBase + WarehouseShipmentLine."Qty. Picked (Base)";
until WarehouseShipmentLine.Next() = 0;
if QtyPickedBase = 0 then begin
QtyPicked := Qty - OutstandingQty;
QtyPickedBase := QtyBase - OutstandingQtyBase;
end;
end;
OnAfterCalculatePickQty(
SourceType, SourceSubtype, SourceNo, SourceLineNo, Qty, QtyBase, OutstandingQty,
OutstandingQtyBase, QtyOnPick, QtyOnPickBase, QtyPicked, QtyPickedBase);
end;
procedure SetTemplate(NewTemplateName: Code[10]; NewNameNo: Code[20]; NewLocationCode: Code[10])
begin
TemplateName := NewTemplateName;
NameNo := NewNameNo;
GlobalLocationCode := NewLocationCode;
end;
local procedure SeparateWhseRcptLinesWthSpecOrder(var TempWarehouseReceiptLineNoSpecOrder: Record "Warehouse Receipt Line" temporary; var TempWarehouseReceiptLineWithSpecOrder: Record "Warehouse Receipt Line" temporary; var TempItemVariant: Record "Item Variant" temporary)
var
WarehouseReceiptLine: Record "Warehouse Receipt Line";
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeSeparateWhseRcptLinesWthSpecOrder(TempWarehouseReceiptLineNoSpecOrder, TempWarehouseReceiptLineWithSpecOrder, TempItemVariant, PurchaseLine, SourceType2, NameNo, GlobalLocationCode, IsHandled);
if IsHandled then
exit;
FilterWhseRcptLine(WarehouseReceiptLine);
if WarehouseReceiptLine.FindSet() then
repeat
GetSourceLine(WarehouseReceiptLine."Source Type", WarehouseReceiptLine."Source Subtype", WarehouseReceiptLine."Source No.", WarehouseReceiptLine."Source Line No.");
if HasSpecialOrder() then begin
TempWarehouseReceiptLineWithSpecOrder := WarehouseReceiptLine;
TempWarehouseReceiptLineWithSpecOrder.Insert();
end else begin
TempWarehouseReceiptLineNoSpecOrder := WarehouseReceiptLine;
TempWarehouseReceiptLineNoSpecOrder.Insert();
InsertToItemList(WarehouseReceiptLine, TempItemVariant);
end;
until WarehouseReceiptLine.Next() = 0;
end;
local procedure InsertToItemList(WarehouseReceiptLine: Record "Warehouse Receipt Line"; var TempItemVariant: Record "Item Variant" temporary)
begin
TempItemVariant.Init();
TempItemVariant."Item No." := WarehouseReceiptLine."Item No.";
TempItemVariant.Code := WarehouseReceiptLine."Variant Code";
if TempItemVariant.Insert() then;
end;
local procedure FilterWhseRcptLine(var WarehouseReceiptLine: Record "Warehouse Receipt Line")
begin
WarehouseReceiptLine.SetRange("No.", NameNo);
WarehouseReceiptLine.SetRange("Location Code", GlobalLocationCode);
WarehouseReceiptLine.SetFilter("Qty. to Receive", '>0');
OnAfterFilterWhseRcptLine(WarehouseReceiptLine, NameNo, GlobalLocationCode);
end;
procedure FilterCrossDockOpp(var WhseCrossDockOpportunity: Record "Whse. Cross-Dock Opportunity")
begin
WhseCrossDockOpportunity.SetRange("Source Template Name", TemplateName);
WhseCrossDockOpportunity.SetRange("Source Name/No.", NameNo);
WhseCrossDockOpportunity.SetRange("Location Code", GlobalLocationCode);
OnAfterFilterCrossDockOpp(WhseCrossDockOpportunity);
end;
local procedure UpdateQtyToCrossDock(var WarehouseReceiptLine: Record "Warehouse Receipt Line"; var RemainingNeededQtyBase: Decimal; var QtyToCrossDockBase: Decimal; var QtyOnCrossDockBase: Decimal)
var
RunGetUseCrossDoc, IsHandled : Boolean;
begin
RunGetUseCrossDoc := true;
OnBeforeUpdateQtyToCrossDock(UseCrossDocking, WarehouseReceiptLine, RunGetUseCrossDoc);
if RunGetUseCrossDoc then
GetUseCrossDock(UseCrossDocking, WarehouseReceiptLine."Location Code", WarehouseReceiptLine."Item No.");
if not UseCrossDocking then
exit;
RemainingNeededQtyBase :=
CalcRemainingNeededQtyBase(
WarehouseReceiptLine."Item No.", WarehouseReceiptLine."Variant Code", RemainingNeededQtyBase,
QtyToCrossDockBase, QtyOnCrossDockBase, WarehouseReceiptLine."Qty. to Receive (Base)");
IsHandled := false;
OnUpdateQtyToCrossDockOnBeforeValidateQtyToCrossDock(WarehouseReceiptLine, IsHandled);
if not IsHandled then begin
WarehouseReceiptLine.Validate("Qty. to Cross-Dock", Round(QtyToCrossDockBase / WarehouseReceiptLine."Qty. per Unit of Measure", UOMMgt.QtyRndPrecision()));
WarehouseReceiptLine."Qty. to Cross-Dock (Base)" := QtyToCrossDockBase;
WarehouseReceiptLine.Modify();
end;
OnAfterUpdateQtyToCrossDock(WarehouseReceiptLine);
end;
local procedure HasSpecialOrder(): Boolean
begin
exit((SourceType2 = Database::"Purchase Line") and PurchaseLine."Special Order");
end;
local procedure SubtractExistingCrossDockOppQtysToSource(var WhseCrossDockOpportunity: Record "Whse. Cross-Dock Opportunity")
var
ExistingWhseCrossDockOpportunity: Record "Whse. Cross-Dock Opportunity";
begin
ExistingWhseCrossDockOpportunity.SetRange("To Source Type", WhseCrossDockOpportunity."To Source Type");
ExistingWhseCrossDockOpportunity.SetRange("To Source Subtype", WhseCrossDockOpportunity."To Source Subtype");
ExistingWhseCrossDockOpportunity.SetRange("To Source No.", WhseCrossDockOpportunity."To Source No.");
ExistingWhseCrossDockOpportunity.SetRange("To Source Line No.", WhseCrossDockOpportunity."To Source Line No.");
ExistingWhseCrossDockOpportunity.SetRange("To Source Subline No.", WhseCrossDockOpportunity."To Source Subline No.");
ExistingWhseCrossDockOpportunity.SetRange("Item No.", WhseCrossDockOpportunity."Item No.");
ExistingWhseCrossDockOpportunity.SetRange("Variant Code", WhseCrossDockOpportunity."Variant Code");
ExistingWhseCrossDockOpportunity.CalcSums(ExistingWhseCrossDockOpportunity."Qty. to Cross-Dock (Base)", ExistingWhseCrossDockOpportunity."Pick Qty. (Base)", ExistingWhseCrossDockOpportunity."Picked Qty. (Base)");
WhseCrossDockOpportunity."Qty. Needed" :=
-Round(ExistingWhseCrossDockOpportunity."Qty. to Cross-Dock (Base)" / WhseCrossDockOpportunity."To-Src. Qty. per Unit of Meas.", UOMMgt.QtyRndPrecision());
WhseCrossDockOpportunity."Qty. Needed (Base)" := -ExistingWhseCrossDockOpportunity."Qty. to Cross-Dock (Base)";
WhseCrossDockOpportunity."Pick Qty." :=
-Round(ExistingWhseCrossDockOpportunity."Pick Qty. (Base)" / WhseCrossDockOpportunity."To-Src. Qty. per Unit of Meas.", UOMMgt.QtyRndPrecision());
WhseCrossDockOpportunity."Pick Qty. (Base)" := -ExistingWhseCrossDockOpportunity."Pick Qty. (Base)";
WhseCrossDockOpportunity."Picked Qty." :=
-Round(ExistingWhseCrossDockOpportunity."Picked Qty. (Base)" / WhseCrossDockOpportunity."To-Src. Qty. per Unit of Meas.", UOMMgt.QtyRndPrecision());
WhseCrossDockOpportunity."Picked Qty. (Base)" := -ExistingWhseCrossDockOpportunity."Picked Qty. (Base)";
end;
procedure CalcCrossDockedQtyInPostedReceipt(PostedWhseReceiptLine: Record "Posted Whse. Receipt Line"): Decimal
var
WarehouseEntry: Record "Warehouse Entry";
begin
WarehouseEntry.SetRange("Whse. Document Type", WarehouseEntry."Whse. Document Type"::Receipt);
WarehouseEntry.SetRange("Whse. Document No.", PostedWhseReceiptLine."No.");
WarehouseEntry.SetRange("Whse. Document Line No.", PostedWhseReceiptLine."Line No.");
WarehouseEntry.SetFilter("Bin Code", PostedWhseReceiptLine."Cross-Dock Bin Code");
WarehouseEntry.CalcSums("Qty. (Base)");
exit(WarehouseEntry."Qty. (Base)");
end;
local procedure CalcCrossDockToSalesOrder(var WhseCrossDockOpportunity: Record "Whse. Cross-Dock Opportunity"; var QtyOnPick: Decimal; var QtyPicked: Decimal; ItemNo: Code[20]; VariantCode: Code[10]; LocationCode: Code[10]; CrossDockDate: Date; LineNo: Integer)
var
SalesLine: Record "Sales Line";
WarehouseRequest: Record "Warehouse Request";
QtyOnPickBase: Decimal;
QtyPickedBase: Decimal;
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeCalcCrossDockToSalesOrder(WhseCrossDockOpportunity, ItemNo, VariantCode, LocationCode, CrossDockDate, QtyOnPick, QtyPicked, LineNo, SourceType2, PurchaseLine, IsHandled);
if not IsHandled then begin
SalesLine.SetRange("Document Type", SalesLine."Document Type"::Order);
SalesLine.SetRange(Type, "Sales Line Type"::Item);
SalesLine.SetRange("No.", ItemNo);
SalesLine.SetRange("Variant Code", VariantCode);
SalesLine.SetRange("Drop Shipment", false);
SalesLine.SetRange("Location Code", LocationCode);
SalesLine.SetRange("Shipment Date", 0D, CrossDockDate);
SalesLine.SetFilter("Outstanding Qty. (Base)", '>0');
if HasSpecialOrder() then begin
SalesLine.SetRange("Document No.", PurchaseLine."Special Order Sales No.");
SalesLine.SetRange("Line No.", PurchaseLine."Special Order Sales Line No.");
end else
SalesLine.SetRange("Special Order", false);
OnCalcCrossDockToSalesOrderOnAfterSalesLineSetFilters(SalesLine, WhseCrossDockOpportunity, QtyOnPick, QtyPicked, ItemNo, VariantCode, LocationCode, CrossDockDate, LineNo, NameNo);
if SalesLine.Find('-') then
repeat
if WarehouseRequest.Get(WarehouseRequest.Type::Outbound, SalesLine."Location Code", Database::"Sales Line", SalesLine."Document Type", SalesLine."Document No.") and
(WarehouseRequest."Document Status" = WarehouseRequest."Document Status"::Released)
then begin
CalculatePickQty(
Database::"Sales Line", SalesLine."Document Type".AsInteger(), SalesLine."Document No.", SalesLine."Line No.",
QtyOnPick, QtyOnPickBase, QtyPicked, QtyPickedBase, SalesLine.Quantity, SalesLine."Quantity (Base)",
SalesLine."Outstanding Quantity", SalesLine."Outstanding Qty. (Base)");
OnCalcCrossDockToSalesOrderOnBeforeInsertCrossDockLine(SalesLine);
InsertCrossDockOpp(
WhseCrossDockOpportunity,
Database::"Sales Line", SalesLine."Document Type".AsInteger(), SalesLine."Document No.", SalesLine."Line No.", 0,
SalesLine.Quantity, SalesLine."Quantity (Base)", QtyOnPick, QtyOnPickBase, QtyPicked, QtyPickedBase,
SalesLine."Unit of Measure Code", SalesLine."Qty. per Unit of Measure", SalesLine."Shipment Date",
SalesLine."No.", SalesLine."Variant Code", LineNo);
end;
OnCalcCrossDockToSalesOrderOnAfterLoopIteration(WhseCrossDockOpportunity, QtyOnPick, QtyPicked, ItemNo, VariantCode, LocationCode, CrossDockDate, LineNo, WarehouseRequest, SalesLine);
until SalesLine.Next() = 0;
end;
OnAfterCalcCrossDockToSalesOrder(WhseCrossDockOpportunity, QtyOnPick, QtyPicked, ItemNo, VariantCode, LocationCode, CrossDockDate, LineNo);
end;
local procedure CalcCrossDockToTransferOrder(var WhseCrossDockOpportunity: Record "Whse. Cross-Dock Opportunity"; var QtyOnPick: Decimal; var QtyPicked: Decimal; ItemNo: Code[20]; VariantCode: Code[10]; LocationCode: Code[10]; CrossDockDate: Date; LineNo: Integer)
var
TransferLine: Record "Transfer Line";
WarehouseRequest: Record "Warehouse Request";
QtyOnPickBase: Decimal;
QtyPickedBase: Decimal;
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeCalcCrossDockToTransferOrder(WhseCrossDockOpportunity, ItemNo, VariantCode, LocationCode, LineNo, IsHandled);
if IsHandled then
exit;
TransferLine.SetRange("Transfer-from Code", LocationCode);
TransferLine.SetRange(Status, TransferLine.Status::Released);
TransferLine.SetRange("Derived From Line No.", 0);
TransferLine.SetRange("Item No.", ItemNo);
TransferLine.SetRange("Variant Code", VariantCode);
TransferLine.SetRange("Shipment Date", 0D, CrossDockDate);
TransferLine.SetFilter("Outstanding Qty. (Base)", '>0');
OnCalcCrossDockToTransferOrderOnAfterTransferLineSetFilters(TransferLine, WhseCrossDockOpportunity, QtyOnPick, QtyPicked, ItemNo, VariantCode, LocationCode, CrossDockDate, LineNo);
if TransferLine.Find('-') then
repeat
if WarehouseRequest.Get(
WarehouseRequest.Type::Outbound, TransferLine."Transfer-from Code", Database::"Transfer Line", 0, TransferLine."Document No.") and
(WarehouseRequest."Document Status" = WarehouseRequest."Document Status"::Released)
then begin
CalculatePickQty(
Database::"Transfer Line", 0, TransferLine."Document No.", TransferLine."Line No.",
QtyOnPick, QtyOnPickBase, QtyPicked, QtyPickedBase, TransferLine.Quantity, TransferLine."Quantity (Base)",
TransferLine."Outstanding Quantity", TransferLine."Outstanding Qty. (Base)");
OnCalcCrossDockToTransferOrderOnBeforeInsertCrossDockLine(TransferLine, WhseCrossDockOpportunity, QtyOnPick, QtyPicked, ItemNo, VariantCode, LocationCode, CrossDockDate, LineNo);
InsertCrossDockOpp(
WhseCrossDockOpportunity,
Database::"Transfer Line", 0, TransferLine."Document No.", TransferLine."Line No.", 0,
TransferLine.Quantity, TransferLine."Quantity (Base)",
QtyOnPick, QtyOnPickBase, QtyPicked, QtyPickedBase,
TransferLine."Unit of Measure Code", TransferLine."Qty. per Unit of Measure", TransferLine."Shipment Date",
TransferLine."Item No.", TransferLine."Variant Code", LineNo);
end;
until TransferLine.Next() = 0;
end;
local procedure Maximum(Value1: Decimal; Value2: Decimal): Decimal
begin
if Value1 >= Value2 then
exit(Value1);
exit(Value2);
end;
local procedure Minimum(Value1: Decimal; Value2: Decimal): Decimal
begin
if Value1 <= Value2 then
exit(Value1);
exit(Value2);
end;
local procedure CalculateCrossDockDate(Location: Record Location): Date
var
CustomizedCalendarChange: array[2] of Record "Customized Calendar Change";
CalendarManagement: Codeunit "Calendar Management";
begin
if (Format(Location."Cross-Dock Due Date Calc.") <> '') and (Location."Base Calendar Code" <> '') then begin
CalendarManagement.SetSource(Location, CustomizedCalendarChange[1]);
exit(CalendarManagement.CalcDateBOC(Format(Location."Cross-Dock Due Date Calc."), WorkDate(), CustomizedCalendarChange, false));
end;
if Format(Location."Cross-Dock Due Date Calc.") <> '' then
exit(CalcDate(Location."Cross-Dock Due Date Calc.", WorkDate()));
exit(WorkDate());
end;
[IntegrationEvent(false, false)]
local procedure OnAfterCalculatePickQty(SourceType: Integer; SourceSubtype: Integer; SourceNo: Code[20]; SourceLineNo: Integer; Qty: Decimal; QtyBase: Decimal; OutstandingQty: Decimal; OutstandingQtyBase: Decimal; var QtyOnPick: Decimal; var QtyOnPickBase: Decimal; var QtyPicked: Decimal; var QtyPickedBase: Decimal)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeCalculatePickQty(SourceType: Integer; SourceSubtype: Integer; SourceNo: Code[20]; SourceLineNo: Integer; Qty: Decimal; QtyBase: Decimal; OutstandingQty: Decimal; OutstandingQtyBase: Decimal; var QtyOnPick: Decimal; var QtyOnPickBase: Decimal; var QtyPicked: Decimal; var QtyPickedBase: Decimal; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnAfterCalculateCrossDockLines(var WhseCrossDockOpp: Record "Whse. Cross-Dock Opportunity"; NewTemplateName: Code[10]; NewNameNo: Code[20]; NewLocationCode: Code[10])
begin
end;
[IntegrationEvent(true, false)]
local procedure OnAfterCalcCrossDockToSalesOrder(var WhseCrossDockOpportunity: Record "Whse. Cross-Dock Opportunity"; var QtyOnPick: Decimal; var QtyPicked: Decimal; ItemNo: Code[20]; VariantCode: Code[10]; LocationCode: Code[10]; CrossDockDate: Date; LineNo: Integer)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnAfterGetSourceLine(SourceType: Option; SourceSubtype: Option; SourceNo: Code[20]; SourceLineNo: Integer)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnAfterFilterCrossDockOpp(var WhseCrossDockOpp: Record "Whse. Cross-Dock Opportunity")
begin
end;
[IntegrationEvent(true, false)]
local procedure OnAfterUpdateQtyToCrossDock(var WarehouseReceiptLine: Record "Warehouse Receipt Line")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeCalcCrossDockToTransferOrder(var WhseCrossDockOpp: Record "Whse. Cross-Dock Opportunity"; ItemNo: Code[20]; VariantCode: Code[10]; LocationCode: Code[10]; LineNo: Integer; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeCrossDockOppInsert(var WhseCrossDockOpportunity: Record "Whse. Cross-Dock Opportunity"; QtyPerUOM: Decimal; NameNo: Code[20]; LineNo: Integer; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnShowCrossDockOnAfterReceiptLineModify(var WarehouseReceiptLine: Record "Warehouse Receipt Line")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeGetUseCrossDock(ItemNo: Code[20]; var UseCrossDock: Boolean; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnCalcCrossDockToSalesOrderOnBeforeInsertCrossDockLine(SalesLine: Record "Sales Line")
begin
end;
[IntegrationEvent(true, false)]
local procedure OnCalcCrossDockToSalesOrderOnAfterLoopIteration(var WhseCrossDockOpportunity: Record "Whse. Cross-Dock Opportunity"; var QtyOnPick: Decimal; var QtyPicked: Decimal; ItemNo: Code[20]; VariantCode: Code[10]; LocationCode: Code[10]; CrossDockDate: Date; LineNo: Integer; WarehouseRequest: Record "Warehouse Request"; SalesLine: Record "Sales Line")
begin
end;
[IntegrationEvent(true, false)]
local procedure OnCalcCrossDockToSalesOrderOnAfterSalesLineSetFilters(var SalesLine: Record "Sales Line"; var WhseCrossDockOpp: Record "Whse. Cross-Dock Opportunity"; var QtyOnPick: Decimal; var QtyPicked: Decimal; ItemNo: Code[20]; VariantCode: Code[10]; LocationCode: Code[10]; CrossDockDate: Date; LineNo: Integer; NameNo: Code[20])
begin
end;
[IntegrationEvent(false, false)]
local procedure OnCalcCrossDockToTransferOrderOnAfterTransferLineSetFilters(var TransferLine: Record "Transfer Line"; var WhseCrossDockOpp: Record "Whse. Cross-Dock Opportunity"; var QtyOnPick: Decimal; var QtyPicked: Decimal; ItemNo: Code[20]; VariantCode: Code[10]; LocationCode: Code[10]; CrossDockDate: Date; LineNo: Integer)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnCalcCrossDockToTransferOrderOnBeforeInsertCrossDockLine(TransferLine: Record "Transfer Line"; var WhseCrossDockOpp: Record "Whse. Cross-Dock Opportunity"; var QtyOnPick: Decimal; var QtyPicked: Decimal; ItemNo: Code[20]; VariantCode: Code[10]; LocationCode: Code[10]; CrossDockDate: Date; LineNo: Integer)
begin
end;
[IntegrationEvent(true, false)]
local procedure OnCalculateCrossDockOnAfterAssignCrossDocDate(var WhseCrossDockOpp: Record "Whse. Cross-Dock Opportunity"; var CrossDockDate: Date; ItemNo: Code[20]; VariantCode: Code[10]; LocationCode: Code[10]; var QtyNeededSumBase: Decimal; var QtyOnPickSumBase: Decimal; var QtyPickedSumBase: Decimal; LineNo: Integer; TemplateName: Code[10]; NameNo: Code[20])
begin
end;
[IntegrationEvent(false, false)]
local procedure OnCalcRemainingNeededQtyBaseOnAfterCalcQtyOnCrossDockBase(ItemNo: Code[20]; VariantCode: Code[10]; QtyNeededBase: Decimal; SpecialOrder: Boolean; var QtyOnCrossDockBase: Decimal; LocationCode: Code[20])
begin
end;
[IntegrationEvent(false, false)]
local procedure OnCalculateCrossDockLineOnAfterCalcQtyOnCrossDockBase(ItemNo: Code[20]; VariantCode: Code[10]; QtyNeededBase: Decimal; SpecialOrder: Boolean; var QtyOnCrossDockBase: Decimal; LocationCode: Code[20])
begin
end;
[IntegrationEvent(false, false)]
local procedure OnInsertCrossDockLineOnBeforeCalculateQtyNeeded(var QtyOutstanding: Decimal; var QtyOutstandingBase: Decimal)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnUpdateQtyToCrossDockOnBeforeValidateQtyToCrossDock(WhseRcptLine: Record "Warehouse Receipt Line"; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeCalcRemainingNeededQtyBase(PurchaseLine: Record "Purchase Line"; ItemNo: Code[20]; VariantCode: Code[10]; LocationCode: Code[10]; var QtyOnCrossDockBase: Decimal; var QtyToCrossDockBase: Decimal; QtyNeededBase: Decimal; QtyToHandleBase: Decimal; var RemainingNeededQtyBase: Decimal; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeInsertCrossDockOpp(var SourceType: Integer)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnInsertCrossDockOppOnBeforeInitWhseCrossDockOpp(var SourceType: Integer)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeShowCrossDock(var WhseCrossDockOpportunity: Record "Whse. Cross-Dock Opportunity"; SourceTemplateName: Code[10]; SourceNameNo: Code[20]; SourceLineNo: Integer; LocationCode: Code[10]; ItemNo: Code[20]; VariantCode: Code[10]; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeSeparateWhseRcptLinesWthSpecOrder(var TempWarehouseReceiptLineNoSpecOrder: Record "Warehouse Receipt Line" temporary; var TempWarehouseReceiptLineWthSpecOrder: Record "Warehouse Receipt Line" temporary; var TempItemVariant: Record "Item Variant" temporary; var PurchaseLine: Record "Purchase Line"; var SourceType2: Integer; NameNo: Code[20]; LocationCode: Code[10]; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeCalcCrossDockToSalesOrder(var WhseCrossDockOpportunity: Record "Whse. Cross-Dock Opportunity"; ItemNo: Code[20]; VariantCode: Code[10]; LocationCode: Code[10]; CrossDockDate: Date; var QtyOnPick: Decimal; var QtyPicked: Decimal; LineNo: Integer; SourceType2: Integer; PurchaseLine: Record "Purchase Line"; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(true, false)]
local procedure OnCalcCrossDockToProdOrderComponent(var WhseCrossDockOpportunity: Record "Whse. Cross-Dock Opportunity"; ItemNo: Code[20]; VariantCode: Code[10]; LocationCode: Code[10]; CrossDockDate: Date; LineNo: Integer)
begin
end;
[IntegrationEvent(true, false)]
local procedure OnCalcCrossDockToServiceOrder(var WhseCrossDockOpportunity: Record "Whse. Cross-Dock Opportunity"; var QtyOnPick: Decimal; var QtyPicked: Decimal; ItemNo: Code[20]; VariantCode: Code[10]; LocationCode: Code[10]; CrossDockDate: Date; LineNo: Integer)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnAfterFilterWhseRcptLine(var WarehouseReceiptLine: Record "Warehouse Receipt Line"; NameNo: Code[20]; LocationCode: Code[10])
begin
end;
[IntegrationEvent(false, false)]
local procedure OnCalculateCrossDockLinesOnAfterSetTemplate(var WhseCrossDockOpportunity: Record "Whse. Cross-Dock Opportunity"; NewTemplateName: Code[10]; NewNameNo: Code[20]; NewLocationCode: Code[10])
begin
end;
[IntegrationEvent(false, false)]
local procedure OnCalcCrossDockedItemsOnAfterSetBinContentFilters(var BinContent: Record "Bin Content")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnCalcCrossDockReceivedNotCrossDockedOnAfterPostedWhseReceiptLineSetFilters(var PostedWhseReceiptLine: Record "Posted Whse. Receipt Line")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeUpdateQtyToCrossDock(var UseCrossDock: Boolean; var WarehouseReceiptLine: Record "Warehouse Receipt Line"; var RunGetUseCrossDoc: Boolean)
begin
end;
}