Codeunit 7311 Whse. Worksheet-Create
- App
- Base Application
- Namespace
- Microsoft.Warehouse.Worksheet
- Versions
- 17-28
Procedures, 12Events, 18Obsolete, 2
Versions171819202122232425262728
Source29
Source in 29
src/Layers/W1/BaseApp/Warehouse/Worksheet/WhseWorksheetCreate.Codeunit.al537 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.Worksheet;
using Microsoft.Assembly.Document;
using Microsoft.Foundation.UOM;
using Microsoft.Inventory.Item;
using Microsoft.Inventory.Location;
using Microsoft.Inventory.Tracking;
using Microsoft.Projects.Project.Job;
using Microsoft.Projects.Project.Planning;
using Microsoft.Warehouse.Document;
using Microsoft.Warehouse.History;
using Microsoft.Warehouse.InternalDocument;
using Microsoft.Warehouse.Request;
using Microsoft.Warehouse.Structure;
using System.Reflection;
codeunit 7311 "Whse. Worksheet-Create"
{
trigger OnRun()
begin
end;
var
WhseMgt: Codeunit "Whse. Management";
procedure FromWhseShptLine(WhseWkshTemplateName: Code[10]; WhseWkshName: Code[10]; WhseShptLine: Record "Warehouse Shipment Line"): Boolean
var
WhseWkshLine: Record "Whse. Worksheet Line";
begin
TransferFromWhseShptLine(WhseWkshLine, WhseWkshTemplateName, WhseWkshName, WhseShptLine);
AdjustQtyToHandle(WhseWkshLine);
if CreateWhseWkshLine(WhseWkshLine, WhseShptLine) then
exit(true);
end;
local procedure TransferFromWhseShptLine(var WhseWkshLine: Record "Whse. Worksheet Line"; WhseWkshTemplateName: Code[10]; WhseWkshName: Code[10]; WhseShptLine: Record "Warehouse Shipment Line")
var
WhseShptHeader: Record "Warehouse Shipment Header";
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeTransferFromWhseShptLine(WhseWkshLine, WhseShptLine, WhseWkshTemplateName, WhseWkshName, IsHandled);
if IsHandled then
exit;
WhseWkshLine.SetCurrentKey("Whse. Document Type", "Whse. Document No.", "Whse. Document Line No.");
WhseWkshLine.SetRange("Whse. Document Type", WhseWkshLine."Whse. Document Type"::Shipment);
WhseWkshLine.SetRange("Whse. Document No.", WhseShptLine."No.");
WhseWkshLine.SetRange("Whse. Document Line No.", WhseShptLine."Line No.");
if WhseWkshLine.Find('-') then
exit;
FindLastWhseWkshLine(WhseWkshLine, WhseWkshTemplateName, WhseWkshName, WhseShptLine."Location Code");
WhseShptHeader.Get(WhseShptLine."No.");
WhseWkshLine.Init();
WhseWkshLine.SetHideValidationDialog(true);
WhseWkshLine."Line No." := WhseWkshLine."Line No." + 10000;
WhseWkshLine."Source Type" := WhseShptLine."Source Type";
WhseWkshLine."Source Subtype" := WhseShptLine."Source Subtype";
WhseWkshLine."Source No." := WhseShptLine."Source No.";
WhseWkshLine."Source Line No." := WhseShptLine."Source Line No.";
WhseWkshLine."Source Document" := WhseMgt.GetWhseActivSourceDocument(WhseShptLine."Source Type", WhseShptLine."Source Subtype");
WhseWkshLine."Location Code" := WhseShptLine."Location Code";
WhseWkshLine."Item No." := WhseShptLine."Item No.";
WhseWkshLine."Variant Code" := WhseShptLine."Variant Code";
WhseWkshLine."Unit of Measure Code" := WhseShptLine."Unit of Measure Code";
WhseWkshLine."Qty. per Unit of Measure" := WhseShptLine."Qty. per Unit of Measure";
WhseWkshLine."Qty. Rounding Precision" := WhseShptLine."Qty. Rounding Precision";
WhseWkshLine."Qty. Rounding Precision (Base)" := WhseShptLine."Qty. Rounding Precision (Base)";
WhseWkshLine.Description := WhseShptLine.Description;
WhseWkshLine."Description 2" := WhseShptLine."Description 2";
WhseWkshLine."Due Date" := WhseShptLine."Due Date";
WhseWkshLine."Qty. Handled" := WhseShptLine."Qty. Picked" + WhseShptLine."Pick Qty.";
WhseWkshLine."Qty. Handled (Base)" := WhseShptLine."Qty. Picked (Base)" + WhseShptLine."Pick Qty. (Base)";
WhseWkshLine.Validate(Quantity, WhseShptLine.Quantity);
WhseWkshLine."To Zone Code" := WhseShptLine."Zone Code";
WhseWkshLine."To Bin Code" := WhseShptLine."Bin Code";
WhseWkshLine."Shelf No." := WhseShptLine."Shelf No.";
WhseWkshLine."Destination Type" := WhseShptLine."Destination Type";
WhseWkshLine."Destination No." := WhseShptLine."Destination No.";
if WhseShptHeader."Shipment Date" = 0D then
WhseWkshLine."Shipment Date" := WhseShptLine."Shipment Date"
else
WhseWkshLine."Shipment Date" := WhseShptHeader."Shipment Date";
WhseWkshLine."Shipping Advice" := WhseShptLine."Shipping Advice";
WhseWkshLine."Shipping Agent Code" := WhseShptHeader."Shipping Agent Code";
WhseWkshLine."Shipping Agent Service Code" := WhseShptHeader."Shipping Agent Service Code";
WhseWkshLine."Shipment Method Code" := WhseShptHeader."Shipment Method Code";
WhseWkshLine."Whse. Document Type" := WhseWkshLine."Whse. Document Type"::Shipment;
WhseWkshLine."Whse. Document No." := WhseShptLine."No.";
WhseWkshLine."Whse. Document Line No." := WhseShptLine."Line No.";
OnAfterTransferFromWhseShptLine(WhseWkshLine, WhseWkshTemplateName, WhseWkshName, WhseShptLine);
end;
procedure FromWhseInternalPickLine(WhseWkshTemplateName: Code[10]; WhseWkshName: Code[10]; LocationCode: Code[10]; WhseInternalPickLine: Record "Whse. Internal Pick Line"): Boolean
var
WhseWkshLine: Record "Whse. Worksheet Line";
begin
WhseWkshLine.SetCurrentKey("Whse. Document Type", "Whse. Document No.", "Whse. Document Line No.");
WhseWkshLine.SetRange("Whse. Document Type", WhseWkshLine."Whse. Document Type"::"Internal Pick");
WhseWkshLine.SetRange("Whse. Document No.", WhseInternalPickLine."No.");
WhseWkshLine.SetRange("Whse. Document Line No.", WhseInternalPickLine."Line No.");
if not WhseWkshLine.IsEmpty() then
exit;
FindLastWhseWkshLine(WhseWkshLine, WhseWkshTemplateName, WhseWkshName, LocationCode);
WhseWkshLine.Init();
WhseWkshLine.SetHideValidationDialog(true);
WhseWkshLine."Line No." := WhseWkshLine."Line No." + 10000;
WhseWkshLine."Location Code" := WhseInternalPickLine."Location Code";
WhseWkshLine."Item No." := WhseInternalPickLine."Item No.";
WhseWkshLine."Variant Code" := WhseInternalPickLine."Variant Code";
WhseWkshLine."Unit of Measure Code" := WhseInternalPickLine."Unit of Measure Code";
WhseWkshLine."Qty. per Unit of Measure" := WhseInternalPickLine."Qty. per Unit of Measure";
WhseWkshLine.Description := WhseInternalPickLine.Description;
WhseWkshLine."Description 2" := WhseInternalPickLine."Description 2";
WhseWkshLine."Due Date" := WhseInternalPickLine."Due Date";
WhseWkshLine."Qty. Handled" := WhseInternalPickLine."Qty. Picked" + WhseInternalPickLine."Pick Qty.";
WhseWkshLine."Qty. Handled (Base)" := WhseInternalPickLine."Qty. Picked (Base)" + WhseInternalPickLine."Pick Qty. (Base)";
WhseWkshLine.Validate(Quantity, WhseInternalPickLine.Quantity);
WhseWkshLine."To Zone Code" := WhseInternalPickLine."To Zone Code";
WhseWkshLine."To Bin Code" := WhseInternalPickLine."To Bin Code";
WhseWkshLine."Shelf No." := WhseInternalPickLine."Shelf No.";
WhseWkshLine."Whse. Document Type" := WhseWkshLine."Whse. Document Type"::"Internal Pick";
WhseWkshLine."Whse. Document No." := WhseInternalPickLine."No.";
WhseWkshLine."Whse. Document Line No." := WhseInternalPickLine."Line No.";
OnFromWhseInternalPickLineOnAfterTransferFields(WhseWkshLine, WhseWkshTemplateName, WhseWkshName, WhseInternalPickLine);
if CreateWhseWkshLine(WhseWkshLine, WhseInternalPickLine) then
exit(true);
end;
procedure FromAssemblyLine(WhseWkshTemplateName: Code[10]; WhseWkshName: Code[10]; AssemblyLine: Record "Assembly Line"): Boolean
var
WhseWkshLine: Record "Whse. Worksheet Line";
begin
if WhseWkshLineForAsmLineExists(AssemblyLine) then
exit;
FindLastWhseWkshLine(WhseWkshLine, WhseWkshTemplateName, WhseWkshName, AssemblyLine."Location Code");
WhseWkshLine.Init();
TransferAllButWhseDocDetailsFromAssemblyLine(WhseWkshLine, AssemblyLine);
WhseWkshLine."Whse. Document Type" := WhseWkshLine."Whse. Document Type"::Assembly;
WhseWkshLine."Whse. Document No." := AssemblyLine."Document No.";
WhseWkshLine."Whse. Document Line No." := AssemblyLine."Line No.";
if CreateWhseWkshLine(WhseWkshLine, AssemblyLine) then
exit(true);
end;
internal procedure FromJobPlanningLine(WhseWkshTemplateName: Code[10]; WhseWkshName: Code[10]; var JobPlanningLine: Record "Job Planning Line"): Boolean
var
Bin: Record Bin;
WhseWkshLine: Record "Whse. Worksheet Line";
Job: Record Job;
begin
if WhseWkshLineForJobPlanLineExists(WhseWkshLine, JobPlanningLine) then
exit;
FindLastWhseWkshLine(WhseWkshLine, WhseWkshTemplateName, WhseWkshName, JobPlanningLine."Location Code");
WhseWkshLine.Init();
WhseWkshLine.SetHideValidationDialog(true);
WhseWkshLine."Line No." := WhseWkshLine."Line No." + 10000;
WhseWkshLine."Whse. Document Type" := WhseWkshLine."Whse. Document Type"::Job;
WhseWkshLine."Whse. Document No." := JobPlanningLine."Job No.";
WhseWkshLine."Whse. Document Line No." := JobPlanningLine."Job Contract Entry No.";
WhseWkshLine."Source Type" := Database::"Job Planning Line";
WhseWkshLine."Source Subtype" := "Job Planning Line Status"::Order.AsInteger(); // Warehouse operations only apply to Order status
WhseWkshLine."Source No." := JobPlanningLine."Job No.";
WhseWkshLine."Source Line No." := JobPlanningLine."Job Contract Entry No.";
WhseWkshLine."Source Subline No." := JobPlanningLine."Line No.";
WhseWkshLine."Source Document" := WhseMgt.GetWhseActivSourceDocument(WhseWkshLine."Source Type", WhseWkshLine."Source Subtype");
WhseWkshLine."Location Code" := JobPlanningLine."Location Code";
WhseWkshLine."Item No." := JobPlanningLine."No.";
WhseWkshLine."Variant Code" := JobPlanningLine."Variant Code";
WhseWkshLine."Unit of Measure Code" := JobPlanningLine."Unit of Measure Code";
WhseWkshLine."Qty. per Unit of Measure" := JobPlanningLine."Qty. per Unit of Measure";
WhseWkshLine.Description := JobPlanningLine.Description;
WhseWkshLine."Due Date" := JobPlanningLine."Planning Due Date";
Job.SetLoadFields("Sell-to Customer No.");
Job.Get(JobPlanningLine."Job No.");
WhseWkshLine."Destination No." := Job."Sell-to Customer No.";
WhseWkshLine."Destination Type" := WhseWkshLine."Destination Type"::Customer;
JobPlanningLine.CalcFields("Pick Qty.", "Pick Qty. (Base)");
WhseWkshLine."Qty. Handled" := JobPlanningLine."Qty. Picked" + JobPlanningLine."Pick Qty.";
WhseWkshLine."Qty. Handled (Base)" := JobPlanningLine."Qty. Picked (Base)" + JobPlanningLine."Pick Qty. (Base)";
WhseWkshLine.Validate(Quantity, JobPlanningLine.Quantity);
WhseWkshLine."To Bin Code" := JobPlanningLine."Bin Code";
if (JobPlanningLine."Location Code" <> '') and (JobPlanningLine."Bin Code" <> '') then begin
Bin.Get(JobPlanningLine."Location Code", JobPlanningLine."Bin Code");
WhseWkshLine."To Zone Code" := Bin."Zone Code";
end;
OnFromJobPlanningLineOnBeforeCreateWhseWkshLine(WhseWkshLine, JobPlanningLine);
if CreateWhseWkshLine(WhseWkshLine, JobPlanningLine) then
exit(true);
end;
procedure FromAssemblyLineInATOWhseShpt(WhseWkshTemplateName: Code[10]; WhseWkshName: Code[10]; AssemblyLine: Record "Assembly Line"; WhseShptLine: Record "Warehouse Shipment Line"): Boolean
var
WhseWkshLine: Record "Whse. Worksheet Line";
begin
WhseShptLine.TestField("Assemble to Order", true);
if WhseWkshLineForAsmLineExists(AssemblyLine) then
exit;
TransferFromWhseShptLine(WhseWkshLine, WhseWkshTemplateName, WhseWkshName, WhseShptLine);
TransferAllButWhseDocDetailsFromAssemblyLine(WhseWkshLine, AssemblyLine);
if CreateWhseWkshLine(WhseWkshLine, AssemblyLine) then
exit(true);
end;
local procedure WhseWkshLineForAsmLineExists(AssemblyLine: Record "Assembly Line"): Boolean
var
WhseWkshLine: Record "Whse. Worksheet Line";
begin
WhseWkshLine.SetCurrentKey("Source Type", "Source Subtype", "Source No.", "Source Line No.", "Source Subline No.");
WhseWkshLine.SetRange("Source Type", Database::"Assembly Line");
WhseWkshLine.SetRange("Source Subtype", AssemblyLine."Document Type");
WhseWkshLine.SetRange("Source No.", AssemblyLine."Document No.");
WhseWkshLine.SetRange("Source Line No.", AssemblyLine."Line No.");
WhseWkshLine.SetRange("Source Subline No.", 0);
exit(not WhseWkshLine.IsEmpty);
end;
local procedure WhseWkshLineForJobPlanLineExists(var WhseWkshLine: Record "Whse. Worksheet Line"; var JobPlanningLine: Record "Job Planning Line"): Boolean
begin
WhseWkshLine.SetCurrentKey("Source Type", "Source Subtype", "Source No.", "Source Line No.", "Source Subline No.");
WhseWkshLine.SetFilter("Source Type", '%1|%2', Database::Job, Database::"Job Planning Line");
WhseWkshLine.SetRange("Source No.", JobPlanningLine."Job No.");
WhseWkshLine.SetRange("Source Line No.", JobPlanningLine."Job Contract Entry No.");
WhseWkshLine.SetRange("Source Subline No.", JobPlanningLine."Line No.");
exit(not WhseWkshLine.IsEmpty());
end;
local procedure TransferAllButWhseDocDetailsFromAssemblyLine(var WhseWkshLine: Record "Whse. Worksheet Line"; AssemblyLine: Record "Assembly Line")
var
WhseWkshLine1: Record "Whse. Worksheet Line";
Location: Record Location;
Bin: Record Bin;
begin
WhseWkshLine.SetHideValidationDialog(true);
FindLastWhseWkshLine(WhseWkshLine1, WhseWkshLine."Worksheet Template Name", WhseWkshLine.Name, WhseWkshLine."Location Code");
WhseWkshLine."Line No." := WhseWkshLine1."Line No." + 10000;
WhseWkshLine."Source Type" := Database::"Assembly Line";
WhseWkshLine."Source Subtype" := AssemblyLine."Document Type".AsInteger();
WhseWkshLine."Source No." := AssemblyLine."Document No.";
WhseWkshLine."Source Line No." := AssemblyLine."Line No.";
WhseWkshLine."Source Subline No." := 0;
WhseWkshLine."Source Document" := WhseMgt.GetWhseActivSourceDocument(WhseWkshLine."Source Type", WhseWkshLine."Source Subtype");
WhseWkshLine."Location Code" := AssemblyLine."Location Code";
AssemblyLine.TestField(AssemblyLine.Type, AssemblyLine.Type::Item);
WhseWkshLine."Item No." := AssemblyLine."No.";
WhseWkshLine."Variant Code" := AssemblyLine."Variant Code";
WhseWkshLine."Unit of Measure Code" := AssemblyLine."Unit of Measure Code";
WhseWkshLine."Qty. per Unit of Measure" := AssemblyLine."Qty. per Unit of Measure";
WhseWkshLine.Description := AssemblyLine.Description;
WhseWkshLine."Description 2" := AssemblyLine."Description 2";
WhseWkshLine."Due Date" := AssemblyLine."Due Date";
AssemblyLine.CalcFields(AssemblyLine."Pick Qty.", AssemblyLine."Pick Qty. (Base)");
WhseWkshLine."Qty. Handled" := AssemblyLine."Qty. Picked" + AssemblyLine."Pick Qty.";
WhseWkshLine."Qty. Handled (Base)" := AssemblyLine."Qty. Picked (Base)" + AssemblyLine."Pick Qty. (Base)";
Location.Get(AssemblyLine."Location Code");
if Location."Require Shipment" then
WhseWkshLine.Validate(Quantity, AssemblyLine.Quantity)
else
WhseWkshLine.Validate(Quantity, AssemblyLine."Quantity to Consume");
WhseWkshLine."To Bin Code" := AssemblyLine."Bin Code";
if (AssemblyLine."Location Code" <> '') and (AssemblyLine."Bin Code" <> '') then begin
Bin.Get(AssemblyLine."Location Code", AssemblyLine."Bin Code");
WhseWkshLine."To Zone Code" := Bin."Zone Code";
end;
OnAfterTransferAllButWhseDocDetailsFromAssemblyLine(WhseWkshLine, AssemblyLine);
end;
procedure FromWhseRcptLine(WhseWkshTemplateName: Code[10]; WhseWkshName: Code[10]; LocationCode: Code[10]; PostedWhseRcptLine: Record "Posted Whse. Receipt Line"): Boolean
var
WhseWkshLine: Record "Whse. Worksheet Line";
begin
if PostedWhseRcptLine."Qty. Put Away" = PostedWhseRcptLine.Quantity then
exit;
WhseWkshLine.SetCurrentKey("Whse. Document Type", "Whse. Document No.", "Whse. Document Line No.");
WhseWkshLine.SetRange("Whse. Document Type", WhseWkshLine."Whse. Document Type"::Receipt);
WhseWkshLine.SetRange("Whse. Document No.", PostedWhseRcptLine."No.");
WhseWkshLine.SetRange("Whse. Document Line No.", PostedWhseRcptLine."Line No.");
if not WhseWkshLine.IsEmpty() then
exit;
FindLastWhseWkshLine(WhseWkshLine, WhseWkshTemplateName, WhseWkshName, LocationCode);
WhseWkshLine.Init();
WhseWkshLine."Line No." := WhseWkshLine."Line No." + 10000;
WhseWkshLine."Source Type" := PostedWhseRcptLine."Source Type";
WhseWkshLine."Source Subtype" := PostedWhseRcptLine."Source Subtype";
WhseWkshLine."Source No." := PostedWhseRcptLine."Source No.";
WhseWkshLine."Source Line No." := PostedWhseRcptLine."Source Line No.";
WhseWkshLine."Source Document" := WhseMgt.GetWhseActivSourceDocument(PostedWhseRcptLine."Source Type", PostedWhseRcptLine."Source Subtype");
WhseWkshLine."Location Code" := PostedWhseRcptLine."Location Code";
WhseWkshLine."Item No." := PostedWhseRcptLine."Item No.";
WhseWkshLine."Variant Code" := PostedWhseRcptLine."Variant Code";
WhseWkshLine."Unit of Measure Code" := PostedWhseRcptLine."Unit of Measure Code";
WhseWkshLine."Qty. per Unit of Measure" := PostedWhseRcptLine."Qty. per Unit of Measure";
WhseWkshLine.Description := PostedWhseRcptLine.Description;
WhseWkshLine."Description 2" := PostedWhseRcptLine."Description 2";
WhseWkshLine."Due Date" := PostedWhseRcptLine."Due Date";
WhseWkshLine.Validate(Quantity, PostedWhseRcptLine.Quantity);
WhseWkshLine.Validate("Qty. Handled", PostedWhseRcptLine."Qty. Put Away" + PostedWhseRcptLine."Put-away Qty.");
WhseWkshLine."From Zone Code" := PostedWhseRcptLine."Zone Code";
WhseWkshLine."From Bin Code" := PostedWhseRcptLine."Bin Code";
WhseWkshLine."Shelf No." := PostedWhseRcptLine."Shelf No.";
WhseWkshLine."From Unit of Measure Code" := PostedWhseRcptLine."Unit of Measure Code";
WhseWkshLine."Qty. per From Unit of Measure" := PostedWhseRcptLine."Qty. per Unit of Measure";
WhseWkshLine."Qty. Rounding Precision" := PostedWhseRcptLine."Qty. Rounding Precision";
WhseWkshLine."Qty. Rounding Precision (Base)" := PostedWhseRcptLine."Qty. Rounding Precision (Base)";
WhseWkshLine."Whse. Document Type" := WhseWkshLine."Whse. Document Type"::Receipt;
WhseWkshLine."Whse. Document No." := PostedWhseRcptLine."No.";
WhseWkshLine."Whse. Document Line No." := PostedWhseRcptLine."Line No.";
OnAfterFromWhseRcptLineCreateWhseWkshLine(WhseWkshLine, PostedWhseRcptLine);
if CreateWhseWkshLine(WhseWkshLine, PostedWhseRcptLine) then
exit(true);
end;
procedure FromWhseInternalPutawayLine(WhseWkshTemplateName: Code[10]; WhseWkshName: Code[10]; LocationCode: Code[10]; WhseInternalPutawayLine: Record "Whse. Internal Put-away Line"): Boolean
var
WhseWkshLine: Record "Whse. Worksheet Line";
begin
if WhseInternalPutawayLine."Qty. Put Away" = WhseInternalPutawayLine.Quantity then
exit;
WhseWkshLine.SetCurrentKey("Whse. Document Type", "Whse. Document No.", "Whse. Document Line No.");
WhseWkshLine.SetRange("Whse. Document Type", WhseWkshLine."Whse. Document Type"::"Internal Put-away");
WhseWkshLine.SetRange("Whse. Document No.", WhseInternalPutawayLine."No.");
WhseWkshLine.SetRange("Whse. Document Line No.", WhseInternalPutawayLine."Line No.");
if not WhseWkshLine.IsEmpty() then
exit;
FindLastWhseWkshLine(WhseWkshLine, WhseWkshTemplateName, WhseWkshName, LocationCode);
WhseWkshLine.Init();
WhseWkshLine."Line No." := WhseWkshLine."Line No." + 10000;
WhseWkshLine."Location Code" := WhseInternalPutawayLine."Location Code";
WhseWkshLine."Item No." := WhseInternalPutawayLine."Item No.";
WhseWkshLine."Variant Code" := WhseInternalPutawayLine."Variant Code";
WhseWkshLine."Unit of Measure Code" := WhseInternalPutawayLine."Unit of Measure Code";
WhseWkshLine."Qty. per Unit of Measure" := WhseInternalPutawayLine."Qty. per Unit of Measure";
WhseWkshLine.Description := WhseInternalPutawayLine.Description;
WhseWkshLine."Description 2" := WhseInternalPutawayLine."Description 2";
WhseWkshLine."Due Date" := WhseInternalPutawayLine."Due Date";
WhseWkshLine.Validate(Quantity, WhseInternalPutawayLine.Quantity);
WhseWkshLine.Validate("Qty. Handled", WhseInternalPutawayLine."Qty. Put Away" + WhseInternalPutawayLine."Put-away Qty.");
WhseWkshLine."From Zone Code" := WhseInternalPutawayLine."From Zone Code";
WhseWkshLine."From Bin Code" := WhseInternalPutawayLine."From Bin Code";
WhseWkshLine."Shelf No." := WhseInternalPutawayLine."Shelf No.";
WhseWkshLine."From Unit of Measure Code" := WhseInternalPutawayLine."Unit of Measure Code";
WhseWkshLine."Qty. per From Unit of Measure" := WhseInternalPutawayLine."Qty. per Unit of Measure";
WhseWkshLine."Whse. Document Type" := WhseWkshLine."Whse. Document Type"::"Internal Put-away";
WhseWkshLine."Whse. Document No." := WhseInternalPutawayLine."No.";
WhseWkshLine."Whse. Document Line No." := WhseInternalPutawayLine."Line No.";
OnFromWhseInternalPutawayLineOnAfterTransferFields(WhseWkshLine, WhseWkshTemplateName, WhseWkshName, WhseInternalPutawayLine);
if CreateWhseWkshLine(WhseWkshLine, WhseInternalPutawayLine) then
exit(true);
end;
procedure CreateWhseWkshLine(var WhseWkshLine: Record "Whse. Worksheet Line"; SourceRecord: Variant) Created: Boolean
var
Item: Record Item;
ItemTrackingMgt: Codeunit "Item Tracking Management";
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeCreateWhseWkshLine(WhseWkshLine, Created, IsHandled, SourceRecord);
if IsHandled then
exit(Created);
if WhseWkshLine."Shelf No." = '' then begin
Item."No." := WhseWkshLine."Item No.";
Item.ItemSKUGet(Item, WhseWkshLine."Location Code", WhseWkshLine."Variant Code");
WhseWkshLine."Shelf No." := Item."Shelf No.";
end;
OnCreateWhseWkshLineOnBeforeInsert(WhseWkshLine, SourceRecord);
if WhseWkshLine.Insert() then begin
Created := true;
IsHandled := false;
OnCreateWhseWkshLineOnBeforeGetWhseItemTrkgSetup(WhseWkshLine, IsHandled, SourceRecord);
if not IsHandled then
if ItemTrackingMgt.GetWhseItemTrkgSetup(WhseWkshLine."Item No.") then
ItemTrackingMgt.InitTrackingSpecification(WhseWkshLine);
OnCreateWhseWkshLineOnAfterInsert(WhseWkshLine, SourceRecord);
end;
end;
procedure FindLastWhseWkshLine(var WhseWkshLine: Record "Whse. Worksheet Line"; WkshTemplateName: Code[10]; WkshName: Code[10]; LocationCode: Code[10])
var
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeFindLastWhseWkshLine(WhseWkshLine, WkshTemplateName, WkshName, LocationCode, IsHandled);
if IsHandled then
exit;
WhseWkshLine.Reset();
WhseWkshLine."Worksheet Template Name" := WkshTemplateName;
WhseWkshLine.Name := WkshName;
WhseWkshLine."Location Code" := LocationCode;
WhseWkshLine.SetRange("Worksheet Template Name", WkshTemplateName);
WhseWkshLine.SetRange(Name, WkshName);
WhseWkshLine.SetRange("Location Code", LocationCode);
WhseWkshLine.LockTable();
if WhseWkshLine.FindLast() then;
end;
local procedure AdjustQtyToHandle(var WhseWkshLine: Record "Whse. Worksheet Line")
var
Location: Record Location;
TypeHelper: Codeunit "Type Helper";
AvailQtyToPickBase: Decimal;
IsHandled: Boolean;
begin
AvailQtyToPickBase := AvailableQtyToPickBase(WhseWkshLine, WhseWkshLine."Qty. to Handle (Base)"); // When "Always Create Pick Line" is false, then "Qty. to Handle (Base)" is set to maximum available quantity for the item in the location
if Location.Get(WhseWkshLine."Location Code") then
if Location."Always Create Pick Line" then
AvailQtyToPickBase := AvailableQtyToPickBase(WhseWkshLine, WhseWkshLine.CalcAvailableQtyBase()); // Set the Qty. to handle to the available quantity for "Always Create Pick Line" when transferring warehouse shipment lines to warehouse worksheet lines
IsHandled := false;
OnAdjustQtyToHandleOnBeforeAssignQtyToHandle(WhseWkshLine, AvailQtyToPickBase, IsHandled);
if IsHandled then
exit;
WhseWkshLine."Qty. to Handle" := TypeHelper.Minimum(AvailQtyToPickBase, WhseWkshLine."Qty. Outstanding");
WhseWkshLine."Qty. to Handle (Base)" := WhseWkshLine.CalcBaseQty(WhseWkshLine."Qty. to Handle");
CheckReservedBasedQuantityUnitOfMeasure(WhseWkshLine, AvailQtyToPickBase);
end;
procedure AvailableQtyToPickBase(WhseWkshLine: Record "Whse. Worksheet Line"; QtyBase: Decimal): Decimal
var
UOMMgt: Codeunit "Unit of Measure Management";
begin
if WhseWkshLine."Qty. per Unit of Measure" <> 0 then
exit(Round(QtyBase / WhseWkshLine."Qty. per Unit of Measure", UOMMgt.QtyRndPrecision()));
exit(0);
end;
local procedure CheckReservedBasedQuantityUnitOfMeasure(var WhseWkshLine: Record "Whse. Worksheet Line"; AvailableQuantityToPickBase: Decimal)
begin
if WhseWkshLine."Qty. per Unit of Measure" <> 0 then
AvailableQuantityToPickBase := WhseWkshLine.CalcBaseQty(AvailableQuantityToPickBase);
WhseWkshLine.CalcReservedNotFromILEQty(AvailableQuantityToPickBase, WhseWkshLine."Qty. to Handle", WhseWkshLine."Qty. to Handle (Base)");
end;
[IntegrationEvent(false, false)]
local procedure OnAfterTransferFromWhseShptLine(var WhseWorksheetLine: Record "Whse. Worksheet Line"; WhseWkshTemplateName: Code[10]; WhseWkshName: Code[10]; WhseShipmentLine: Record "Warehouse Shipment Line")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnAfterFromWhseRcptLineCreateWhseWkshLine(var WhseWorksheetLine: Record "Whse. Worksheet Line"; PostedWhseReceiptLine: Record "Posted Whse. Receipt Line")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnAfterTransferAllButWhseDocDetailsFromAssemblyLine(var WhseWorksheetLine: Record "Whse. Worksheet Line"; AssemblyLine: Record "Assembly Line")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeTransferFromWhseShptLine(var WhseWorksheetLine: Record "Whse. Worksheet Line"; var WarehouseShipmentLine: Record "Warehouse Shipment Line"; WhseWkshTemplateName: Code[10]; WhseWkshName: Code[10]; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeCreateWhseWkshLine(var WhseWkshLine: Record "Whse. Worksheet Line"; var Created: Boolean; var IsHandled: Boolean; var SourceRecord: Variant)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnCreateWhseWkshLineOnBeforeInsert(var WhseWorksheetLine: Record "Whse. Worksheet Line"; var SourceRecord: Variant)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnCreateWhseWkshLineOnAfterInsert(var WhseWorksheetLine: Record "Whse. Worksheet Line"; var SourceRecord: Variant)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnFromWhseInternalPickLineOnAfterTransferFields(var WhseWorksheetLine: Record "Whse. Worksheet Line"; WhseWkshTemplateName: Code[10]; WhseWkshName: Code[10]; WhseInternalPickLine: Record "Whse. Internal Pick Line")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnFromWhseInternalPutawayLineOnAfterTransferFields(var WhseWorksheetLine: Record "Whse. Worksheet Line"; WhseWkshTemplateName: Code[10]; WhseWkshName: Code[10]; WhseInternalPutAwayLine: Record "Whse. Internal Put-away Line")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnCreateWhseWkshLineOnBeforeGetWhseItemTrkgSetup(var WhseWorksheetLine: Record "Whse. Worksheet Line"; var IsHandled: Boolean; var SourceRecord: Variant)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnFromJobPlanningLineOnBeforeCreateWhseWkshLine(var WhseWorksheetLine: Record "Whse. Worksheet Line"; JobPlanningLine: Record "Job Planning Line")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnAdjustQtyToHandleOnBeforeAssignQtyToHandle(var WhseWorksheetLine: Record "Whse. Worksheet Line"; var AvailQtyToPickBase: Decimal; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeFindLastWhseWkshLine(var WhseWksheetLine: Record "Whse. Worksheet Line"; WorksheetTemplateName: Code[10]; WorksheetName: Code[10]; LocationCode: Code[10]; var IsHandled: Boolean)
begin
end;
}