Page 6550 Whse. Item Tracking Lines
- App
- Base Application
- Namespace
- Microsoft.Warehouse.Tracking
- Versions
- 17-28
- Source table
- 6550
Versions171819202122232425262728
Source29
Source in 29
src/Layers/W1/BaseApp/Warehouse/Tracking/WhseItemTrackingLines.Page.al1054 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.Tracking;
using Microsoft.Assembly.Document;
using Microsoft.Inventory.Item;
using Microsoft.Inventory.Tracking;
using Microsoft.Warehouse.Document;
using Microsoft.Warehouse.History;
using Microsoft.Warehouse.InternalDocument;
using Microsoft.Warehouse.Journal;
using Microsoft.Warehouse.Ledger;
using Microsoft.Warehouse.Worksheet;
using System.Utilities;
page 6550 "Whse. Item Tracking Lines"
{
// Function button Line exist in two overlayed versions to make dynamic show/hide/enable of
// individual menu items possible.
Caption = 'Whse. Item Tracking Lines';
DataCaptionFields = "Item No.", "Variant Code", Description;
DelayedInsert = true;
PageType = Worksheet;
Permissions = TableData "Whse. Item Tracking Line" = rimd;
PopulateAllFields = true;
SourceTable = "Whse. Item Tracking Line";
layout
{
area(content)
{
group(Control59)
{
ShowCaption = false;
fixed(Control1903651101)
{
ShowCaption = false;
group(Source)
{
Caption = 'Source';
field(TextCaption; GetTextCaption())
{
ApplicationArea = ItemTracking;
Editable = false;
ShowCaption = false;
}
field("SourceQuantityArray[1]"; SourceQuantityArray[1])
{
ApplicationArea = ItemTracking;
AutoFormatType = 0;
Caption = 'Quantity';
DecimalPlaces = 0 : 5;
Editable = false;
ToolTip = 'Specifies the quantity of the item that corresponds to the warehouse tracking line.';
}
field(Handle1; SourceQuantityArray[2])
{
ApplicationArea = ItemTracking;
AutoFormatType = 0;
Caption = 'Qty. to Handle';
DecimalPlaces = 0 : 5;
Editable = false;
ToolTip = 'Specifies the item-tracked quantity to be handled. The quantities must correspond to those of the document line.';
Visible = Handle1Visible;
}
}
group("Item Tracking")
{
Caption = 'Item Tracking';
field(Text003; PlaceholderTxt)
{
ApplicationArea = ItemTracking;
Visible = false;
}
#pragma warning disable AA0100
field("TotalWhseItemTrackingLine.""Quantity (Base)"""; TotalWhseItemTrackingLine."Quantity (Base)")
#pragma warning restore AA0100
{
ApplicationArea = ItemTracking;
Caption = 'Quantity';
DecimalPlaces = 0 : 5;
Editable = false;
ToolTip = 'Specifies the quantity of the item that corresponds to the warehouse tracking line.';
}
field(Handle2; TotalWhseItemTrackingLine."Qty. to Handle (Base)")
{
ApplicationArea = ItemTracking;
Caption = 'Qty. to Ship/Receive';
DecimalPlaces = 0 : 5;
Editable = false;
ToolTip = 'Specifies the quantities handled in warehouse activity lines.';
Visible = Handle2Visible;
}
}
group(Undefined)
{
Caption = 'Undefined';
field(Control52; PlaceholderTxt)
{
ApplicationArea = ItemTracking;
Visible = false;
}
field(Quantity3; UndefinedQtyArray[1])
{
ApplicationArea = ItemTracking;
AutoFormatType = 0;
BlankZero = true;
DecimalPlaces = 0 : 5;
Editable = false;
ShowCaption = false;
}
field(Handle3; UndefinedQtyArray[2])
{
ApplicationArea = ItemTracking;
AutoFormatType = 0;
BlankZero = true;
DecimalPlaces = 0 : 5;
Editable = false;
ShowCaption = false;
Visible = Handle3Visible;
}
}
}
}
group(Control43)
{
ShowCaption = false;
field("ItemTrackingCode.Code"; ItemTrackingCode.Code)
{
ApplicationArea = ItemTracking;
Caption = 'Item Tracking Code';
Editable = false;
ToolTip = 'Specifies the code for the warehouse item to be tracked.';
trigger OnDrillDown()
var
ItemTrackingCodeToShow: Record "Item Tracking Code";
ItemTrackingCodeCard: Page "Item Tracking Code Card";
begin
ItemTrackingCodeToShow.SetRange(Code, ItemTrackingCode.Code);
ItemTrackingCodeCard.SetTableView(ItemTrackingCodeToShow);
ItemTrackingCodeCard.Editable := false;
ItemTrackingCodeCard.RunModal();
end;
}
field("ItemTrackingCode.Description"; ItemTrackingCode.Description)
{
ApplicationArea = ItemTracking;
Caption = 'Description';
Editable = false;
ToolTip = 'Specifies the description of the warehouse item.';
}
}
repeater(Control1)
{
ShowCaption = false;
field("Serial No."; Rec."Serial No.")
{
ApplicationArea = ItemTracking;
ExtendedDatatype = Barcode;
trigger OnAssistEdit()
var
MaxQuantity: Decimal;
begin
if ColorOfQuantityArray[1] = 0 then
MaxQuantity := UndefinedQtyArray[1];
Rec.LookUpTrackingSummary(Rec, Enum::"Item Tracking Type"::"Serial No.", MaxQuantity, -1, true);
CurrPage.Update();
CalculateSums();
end;
trigger OnValidate()
begin
SerialNoOnAfterValidate();
end;
}
field("New Serial No."; Rec."New Serial No.")
{
ApplicationArea = ItemTracking;
Editable = NewSerialNoEditable;
Visible = NewSerialNoVisible;
ExtendedDatatype = Barcode;
}
field("Lot No."; Rec."Lot No.")
{
ApplicationArea = ItemTracking;
ExtendedDatatype = Barcode;
trigger OnAssistEdit()
var
MaxQuantity: Decimal;
begin
if ColorOfQuantityArray[1] = 0 then
MaxQuantity := UndefinedQtyArray[1];
Rec.LookUpTrackingSummary(Rec, Enum::"Item Tracking Type"::"Lot No.", MaxQuantity, -1, true);
CurrPage.Update();
CalculateSums();
end;
trigger OnValidate()
begin
LotNoOnAfterValidate();
end;
}
field("New Lot No."; Rec."New Lot No.")
{
ApplicationArea = ItemTracking;
Editable = NewLotNoEditable;
Visible = NewLotNoVisible;
ExtendedDatatype = Barcode;
}
field("Package No."; Rec."Package No.")
{
ApplicationArea = ItemTracking;
ExtendedDatatype = Barcode;
trigger OnAssistEdit()
var
MaxQuantity: Decimal;
begin
if ColorOfQuantityArray[1] = 0 then
MaxQuantity := UndefinedQtyArray[1];
Rec.LookUpTrackingSummary(Rec, Enum::"Item Tracking Type"::"Package No.", MaxQuantity, -1, true);
CurrPage.Update();
CalculateSums();
end;
trigger OnValidate()
begin
PackageNoOnAfterValidate();
end;
}
field("New Package No."; Rec."New Package No.")
{
ApplicationArea = ItemTracking;
Editable = NewPackageNoEditable;
Visible = NewPackageNoVisible;
ExtendedDatatype = Barcode;
}
field("Expiration Date"; Rec."Expiration Date")
{
ApplicationArea = ItemTracking;
Editable = ExpirationDateEditable;
Visible = ExpirationDateVisible;
}
field("New Expiration Date"; Rec."New Expiration Date")
{
ApplicationArea = ItemTracking;
Editable = NewExpirationDateEditable;
Visible = NewExpirationDateVisible;
}
field("Warranty Date"; Rec."Warranty Date")
{
ApplicationArea = ItemTracking;
Visible = false;
}
field("Item No."; Rec."Item No.")
{
ApplicationArea = ItemTracking;
Editable = false;
Visible = false;
}
field("Variant Code"; Rec."Variant Code")
{
ApplicationArea = Planning;
Editable = false;
Visible = false;
}
field(Description; Rec.Description)
{
ApplicationArea = ItemTracking;
Editable = false;
Visible = false;
}
field("Location Code"; Rec."Location Code")
{
ApplicationArea = ItemTracking;
Editable = false;
Visible = false;
}
field(Quantity; Rec."Quantity (Base)")
{
ApplicationArea = ItemTracking;
ToolTip = 'Specifies the same as the field in the Item Tracking Lines window.';
BlankZero = true;
ShowMandatory = true;
trigger OnValidate()
begin
QuantityBaseOnAfterValidate();
end;
}
field("Qty. to Handle (Base)"; Rec."Qty. to Handle (Base)")
{
ApplicationArea = ItemTracking;
Editable = QtyToHandleBaseEditable;
ToolTip = 'Specifies the same as the field in the Item Tracking Lines window.';
Visible = QtyToHandleBaseVisible;
trigger OnValidate()
begin
QtytoHandleBaseOnAfterValidate();
end;
}
field("Quantity Handled (Base)"; Rec."Quantity Handled (Base)")
{
ApplicationArea = ItemTracking;
Editable = false;
ToolTip = 'Specifies the same as the field in the Item Tracking Lines window.';
Visible = false;
}
}
}
area(factboxes)
{
systempart(Control1900383207; Links)
{
ApplicationArea = RecordLinks;
Visible = false;
}
systempart(Control1905767507; Notes)
{
ApplicationArea = Notes;
Visible = false;
}
}
}
actions
{
area(navigation)
{
group(ButtonLineReclass)
{
Caption = '&Line';
Image = Line;
Visible = ButtonLineReclassVisible;
action(Reclass_SerialNoInfoCard)
{
ApplicationArea = ItemTracking;
Caption = 'Serial No. Information Card';
Image = SNInfo;
ToolTip = 'View or edit detailed information about the serial number.';
trigger OnAction()
var
SerialNoInfo: Record "Serial No. Information";
begin
Rec.TestField("Serial No.");
SerialNoInfo.ShowCard(Rec."Serial No.", Rec);
end;
}
action(Reclass_LotNoInfoCard)
{
ApplicationArea = ItemTracking;
Caption = 'Lot No. Information Card';
Image = LotInfo;
ToolTip = 'View or edit detailed information about the lot number.';
trigger OnAction()
var
LotNoInfo: Record "Lot No. Information";
begin
Rec.TestField("Lot No.");
LotNoInfo.ShowCard(Rec."Lot No.", Rec);
end;
}
action(Reclass_PackageNoInfoCard)
{
ApplicationArea = ItemTracking;
Caption = 'Package No. Information Card';
Image = LotInfo;
ToolTip = 'View or edit detailed information about the package number.';
trigger OnAction()
var
PackageNoInfo: Record "Package No. Information";
begin
Rec.TestField("Package No.");
PackageNoInfo.ShowCard(Rec."Package No.", Rec);
end;
}
separator(Action44)
{
}
action("New S&erial No. Information")
{
ApplicationArea = ItemTracking;
Caption = 'New S&erial No. Information';
Image = NewSerialNoProperties;
ToolTip = 'Create a record with detailed information about the serial number.';
trigger OnAction()
var
SerialNoInfo: Record "Serial No. Information";
begin
Rec.TestField("New Serial No.");
SerialNoInfo.ShowCard(Rec."New Serial No.", Rec);
end;
}
action("New L&ot No. Information")
{
ApplicationArea = ItemTracking;
Caption = 'New L&ot No. Information';
Image = NewLotProperties;
RunPageOnRec = false;
ToolTip = 'Create a record with detailed information about the lot number.';
trigger OnAction()
var
LotNoInfo: Record "Lot No. Information";
begin
Rec.TestField("New Lot No.");
LotNoInfo.ShowCard(Rec."New Lot No.", Rec);
end;
}
action("New P&ackage No. Information")
{
ApplicationArea = ItemTracking;
Caption = 'New P&ackage No. Information';
Image = NewLotProperties;
RunPageOnRec = false;
ToolTip = 'Create a record with detailed information about the package number.';
trigger OnAction()
var
PackageNoInfo: Record "Package No. Information";
begin
Rec.TestField("New Package No.");
PackageNoInfo.ShowCard(Rec."New Package No.", Rec);
end;
}
}
group(ButtonLine)
{
Caption = '&Line';
Image = Line;
Visible = ButtonLineVisible;
action(Line_SerialNoInfoCard)
{
ApplicationArea = ItemTracking;
Caption = 'Serial No. Information Card';
Image = SNInfo;
ToolTip = 'View or edit detailed information about the serial number.';
trigger OnAction()
var
SerialNoInfo: Record "Serial No. Information";
begin
Rec.TestField("Serial No.");
SerialNoInfo.ShowCard(Rec."Serial No.", Rec);
end;
}
action(Line_LotNoInforCard)
{
ApplicationArea = ItemTracking;
Caption = 'Lot No. Information Card';
Image = LotInfo;
ToolTip = 'View or edit detailed information about the lot number.';
trigger OnAction()
var
LotNoInfo: Record "Lot No. Information";
begin
Rec.TestField("Lot No.");
LotNoInfo.ShowCard(Rec."Lot No.", Rec);
end;
}
action(Line_PackageNoInforCard)
{
ApplicationArea = ItemTracking;
Caption = 'Package No. Information Card';
Image = LotInfo;
ToolTip = 'View or edit detailed information about the package number.';
trigger OnAction()
var
PackageNoInfo: Record "Package No. Information";
begin
Rec.TestField("Package No.");
PackageNoInfo.ShowCard(Rec."Package No.", Rec);
end;
}
}
}
area(Promoted)
{
group(Category_Process)
{
Caption = 'Process';
actionref(Line_LotNoInforCard_Promoted; Line_LotNoInforCard)
{
}
actionref(Line_SerialNoInfoCard_Promoted; Line_SerialNoInfoCard)
{
}
actionref("New L&ot No. Information_Promoted"; "New L&ot No. Information")
{
}
actionref(Reclass_LotNoInfoCard_Promoted; Reclass_LotNoInfoCard)
{
}
actionref(Reclass_SerialNoInfoCard_Promoted; Reclass_SerialNoInfoCard)
{
}
actionref(Line_PackageNoInforCard_Promoted; Line_PackageNoInforCard)
{
}
actionref("New S&erial No. Information_Promoted"; "New S&erial No. Information")
{
}
actionref(Reclass_PackageNoInfoCard_Promoted; Reclass_PackageNoInfoCard)
{
}
actionref("New P&ackage No. Information_Promoted"; "New P&ackage No. Information")
{
}
}
}
}
trigger OnAfterGetCurrRecord()
begin
UpdateExpDateEditable();
CalculateSums();
end;
trigger OnAfterGetRecord()
begin
ExpirationDateOnFormat();
end;
trigger OnClosePage()
begin
if FormUpdated then
if not UpdateUndefinedQty() then
RestoreInitialTrkgLine()
else
if not CopyToReservEntry() then
RestoreInitialTrkgLine();
OnAfterOnClosePage(Rec, WhseWorksheetLine, FormSourceType, FormUpdated);
end;
trigger OnDeleteRecord(): Boolean
begin
FormUpdated := true;
Rec.Delete(); // to ensure correct recalculation
CalculateSums();
end;
trigger OnInit()
begin
ExpirationDateEditable := true;
NewExpirationDateEditable := true;
NewLotNoEditable := true;
NewSerialNoEditable := true;
QtyToHandleBaseEditable := true;
ButtonLineVisible := true;
QtyToHandleBaseVisible := true;
Handle3Visible := true;
Handle2Visible := true;
Handle1Visible := true;
end;
trigger OnInsertRecord(BelowxRec: Boolean): Boolean
begin
FormUpdated := true;
if not Rec.TrackingExists() then
exit(false);
Rec."Entry No." := Rec.GetNextEntryNo();
exit(true);
end;
trigger OnModifyRecord(): Boolean
begin
FormUpdated := true;
end;
trigger OnOpenPage()
begin
UpdateUndefinedQty();
SaveItemTrkgLine(TempInitialTrkgLine);
end;
trigger OnQueryClosePage(CloseAction: Action): Boolean
begin
if FormUpdated then begin
if not UpdateUndefinedQty() then
exit(Confirm(ExcessQuantityQst));
if CountLinesWithQtyZero() > 0 then
exit(ConfirmManagement.GetResponseOrDefault(ConfirmWhenExitingQst, true));
end;
end;
var
WhseWorksheetLine: Record "Whse. Worksheet Line";
TotalWhseItemTrackingLine: Record "Whse. Item Tracking Line";
TempInitialTrkgLine: Record "Whse. Item Tracking Line" temporary;
Item: Record Item;
ItemTrackingCode: Record "Item Tracking Code";
ItemTrackingMgt: Codeunit "Item Tracking Management";
ConfirmManagement: Codeunit "Confirm Management";
FormSourceType: Integer;
FormUpdated: Boolean;
Reclass: Boolean;
LineTxt: Label 'Line';
ExcessQuantityQst: Label 'The corrections cannot be saved as excess quantity has been defined.\Close the form anyway?';
PlaceholderTxt: Label 'Placeholder';
ConfirmWhenExitingQst: Label 'One or more lines have tracking specified, but Quantity (Base) is zero. If you continue, data on these lines will be lost. Do you want to close the page?';
protected var
UndefinedQtyArray: array[2] of Decimal;
SourceQuantityArray: array[2] of Decimal;
ColorOfQuantityArray: array[2] of Integer;
Handle1Visible: Boolean;
Handle2Visible: Boolean;
Handle3Visible: Boolean;
QtyToHandleBaseVisible: Boolean;
ExpirationDateVisible: Boolean;
NewSerialNoVisible: Boolean;
NewLotNoVisible: Boolean;
NewPackageNoVisible: Boolean;
NewExpirationDateVisible: Boolean;
ButtonLineReclassVisible: Boolean;
ButtonLineVisible: Boolean;
QtyToHandleBaseEditable: Boolean;
NewSerialNoEditable: Boolean;
NewLotNoEditable: Boolean;
NewPackageNoEditable: Boolean;
NewExpirationDateEditable: Boolean;
ExpirationDateEditable: Boolean;
local procedure GetTextCaption(): Text[30]
var
PostedWhseRcptLine: Record "Posted Whse. Receipt Line";
WhseShipmentLine: Record "Warehouse Shipment Line";
begin
case Rec."Source Type" of
Database::"Posted Whse. Receipt Line":
exit(CopyStr(PostedWhseRcptLine.TableCaption(), 1, 30));
Database::"Warehouse Shipment Line":
exit(CopyStr(WhseShipmentLine.TableCaption(), 1, 30));
else
exit(LineTxt);
end;
end;
procedure SetSource(WhseWrkshLine: Record "Whse. Worksheet Line"; SourceType: Integer)
begin
FormUpdated := false;
FormSourceType := SourceType;
WhseWorksheetLine := WhseWrkshLine;
GetItem(WhseWorksheetLine."Item No.");
ItemTrackingMgt.CheckWhseItemTrkgSetup(WhseWorksheetLine."Item No.");
SetControlsAsHandle();
Reclass := Rec.IsReclass(FormSourceType, WhseWorksheetLine."Worksheet Template Name");
SetControlsAsReclass();
SetFilters(Rec, FormSourceType);
ItemTrackingMgt.UpdateQuantities(
WhseWorksheetLine, TotalWhseItemTrackingLine, SourceQuantityArray, UndefinedQtyArray, FormSourceType);
OnAfterSetSource(WhseWorksheetLine, WhseWrkshLine, SourceType);
UpdateColorOfQty();
end;
local procedure SetControlsAsHandle()
var
SetAccess: Boolean;
begin
ExpirationDateVisible := ItemTrackingCode."Use Expiration Dates";
SetAccess := FormSourceType <> Database::"Warehouse Journal Line";
Handle1Visible := SetAccess;
Handle2Visible := SetAccess;
Handle3Visible := SetAccess;
QtyToHandleBaseVisible := SetAccess;
QtyToHandleBaseEditable := SetAccess;
end;
local procedure SetControlsAsReclass()
begin
ExpirationDateVisible := ItemTrackingCode."Use Expiration Dates";
NewSerialNoVisible := Reclass;
NewSerialNoEditable := Reclass;
NewLotNoVisible := Reclass;
NewLotNoEditable := Reclass;
NewPackageNoVisible := Reclass;
NewPackageNoEditable := Reclass;
NewExpirationDateVisible := Reclass;
NewExpirationDateEditable := Reclass;
ButtonLineReclassVisible := Reclass;
ButtonLineVisible := not Reclass;
end;
procedure SetFilters(var WhseItemTrackingLine2: Record "Whse. Item Tracking Line"; SourceType: Integer)
begin
WhseItemTrackingLine2.FilterGroup := 2;
WhseItemTrackingLine2.SetRange("Source Type", SourceType);
WhseItemTrackingLine2.SetRange("Location Code", WhseWorksheetLine."Location Code");
WhseItemTrackingLine2.SetRange("Item No.", WhseWorksheetLine."Item No.");
WhseItemTrackingLine2.SetRange("Variant Code", WhseWorksheetLine."Variant Code");
WhseItemTrackingLine2.SetRange("Qty. per Unit of Measure", WhseWorksheetLine."Qty. per Unit of Measure");
case SourceType of
Database::"Posted Whse. Receipt Line",
Database::"Warehouse Shipment Line",
Database::"Whse. Internal Put-away Line",
Database::"Whse. Internal Pick Line",
Database::"Assembly Line",
Database::"Internal Movement Line":
begin
WhseItemTrackingLine2.SetRange("Source ID", WhseWorksheetLine."Whse. Document No.");
WhseItemTrackingLine2.SetRange("Source Ref. No.", WhseWorksheetLine."Whse. Document Line No.");
end;
Database::"Whse. Worksheet Line",
Database::"Warehouse Journal Line":
begin
WhseItemTrackingLine2.SetRange("Source Batch Name", WhseWorksheetLine."Worksheet Template Name");
WhseItemTrackingLine2.SetRange("Source ID", WhseWorksheetLine.Name);
WhseItemTrackingLine2.SetRange("Source Ref. No.", WhseWorksheetLine."Line No.");
end;
else
OnSetSourceFilters(WhseItemTrackingLine2, WhseWorksheetLine, SourceType);
end;
WhseItemTrackingLine2.FilterGroup := 0;
OnAfterSetFilters(WhseItemTrackingLine2, SourceType);
end;
local procedure UpdateExpDateColor()
var
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeUpdateExpDateColor(Rec, IsHandled);
if IsHandled then
exit;
if BlockExpDate() then;
end;
local procedure UpdateExpDateEditable()
begin
ExpirationDateEditable := not BlockExpDate();
end;
local procedure BlockExpDate(): Boolean
begin
exit(
(Rec."Buffer Status2" = Rec."Buffer Status2"::"ExpDate blocked") or
(WhseWorksheetLine."Qty. (Base)" < 0) or
Reclass or
(FormSourceType in
[Database::"Whse. Worksheet Line",
Database::"Posted Whse. Receipt Line",
Database::"Whse. Internal Put-away Line"]));
end;
procedure CalculateSums()
begin
ItemTrackingMgt.CalculateSums(
WhseWorksheetLine, TotalWhseItemTrackingLine,
SourceQuantityArray, UndefinedQtyArray, FormSourceType);
UpdateColorOfQty();
end;
local procedure UpdateUndefinedQty() QtyIsValid: Boolean
begin
QtyIsValid := ItemTrackingMgt.UpdateUndefinedQty(TotalWhseItemTrackingLine, SourceQuantityArray, UndefinedQtyArray);
UpdateColorOfQty();
OnAfterUpdateUndefinedQty(Rec, TotalWhseItemTrackingLine, QtyIsValid);
end;
local procedure UpdateColorOfQty()
begin
ColorOfQuantityArray[1] := GetQtyColor(SourceQuantityArray[1], TotalWhseItemTrackingLine."Quantity (Base)");
ColorOfQuantityArray[2] := GetQtyColor(SourceQuantityArray[2], TotalWhseItemTrackingLine."Qty. to Handle (Base)");
end;
local procedure GetQtyColor(SourceQty: Decimal; TrackingQty: Decimal): Integer
begin
if Abs(SourceQty) < Abs(TrackingQty) then
exit(255);
exit(0);
end;
local procedure GetItem(ItemNo: Code[20])
begin
if Item."No." <> ItemNo then begin
Item.Get(ItemNo);
Item.TestField("Item Tracking Code");
if ItemTrackingCode.Code <> Item."Item Tracking Code" then
ItemTrackingCode.Get(Item."Item Tracking Code");
end;
end;
local procedure SaveItemTrkgLine(var TempWhseItemTrkgLine: Record "Whse. Item Tracking Line" temporary)
var
WhseItemTrackingLine2: Record "Whse. Item Tracking Line";
begin
SetFilters(WhseItemTrackingLine2, FormSourceType);
TempWhseItemTrkgLine.Reset();
TempWhseItemTrkgLine.DeleteAll();
if WhseItemTrackingLine2.Find('-') then
repeat
TempWhseItemTrkgLine := WhseItemTrackingLine2;
TempWhseItemTrkgLine.Insert();
until WhseItemTrackingLine2.Next() = 0;
end;
local procedure RestoreInitialTrkgLine()
var
WhseItemTrackingLine2: Record "Whse. Item Tracking Line";
begin
SetFilters(WhseItemTrackingLine2, FormSourceType);
WhseItemTrackingLine2.DeleteAll();
if TempInitialTrkgLine.Find('-') then
repeat
WhseItemTrackingLine2 := TempInitialTrkgLine;
WhseItemTrackingLine2.Insert();
until TempInitialTrkgLine.Next() = 0;
end;
local procedure CopyToReservEntry(): Boolean
var
WhseItemTrackingLine2: Record "Whse. Item Tracking Line";
TempSourceWhseItemTrackingLine: Record "Whse. Item Tracking Line" temporary;
WhseShptLine: Record "Warehouse Shipment Line";
QuantityBase: Decimal;
DueDate: Date;
Updated: Boolean;
IsHandled: Boolean;
begin
SetFilters(WhseItemTrackingLine2, FormSourceType);
if WhseItemTrackingLine2.Find('-') then
TempSourceWhseItemTrackingLine := WhseItemTrackingLine2
else
if TempInitialTrkgLine.Find('-') then
TempSourceWhseItemTrackingLine := TempInitialTrkgLine
else
exit(true);
case FormSourceType of
Database::"Warehouse Shipment Line":
begin
WhseShptLine.Get(TempSourceWhseItemTrackingLine."Source ID", TempSourceWhseItemTrackingLine."Source Ref. No.");
QuantityBase := WhseShptLine."Qty. (Base)";
DueDate := WhseShptLine."Due Date";
Updated := UpdateReservEntry(
WhseShptLine."Source Type",
WhseShptLine."Source Subtype",
WhseShptLine."Source No.",
0,
WhseShptLine."Source Line No.",
TempSourceWhseItemTrackingLine, QuantityBase, DueDate);
end;
else begin
IsHandled := false;
OnCopyToReservEntryOnUpdate(TempSourceWhseItemTrackingLine, QuantityBase, DueDate, Updated, FormSourceType, IsHandled);
exit(true);
end;
end;
exit(Updated)
end;
procedure UpdateReservEntry(SourceType: Integer; SourceSubtype: Integer; SourceID: Code[20]; SourceProdOrderLine: Integer; SourceRefNo: Integer; TempSourceWhseItemTrackingLine: Record "Whse. Item Tracking Line" temporary; QuantityBase: Decimal; DueDate: Date): Boolean
var
TempTrackingSpecification: Record "Tracking Specification" temporary;
SourceTrackingSpecification: Record "Tracking Specification";
WhseItemTrackingLine2: Record "Whse. Item Tracking Line";
LastEntryNo: Integer;
begin
LastEntryNo := 0;
if TempInitialTrkgLine.Find('-') then
repeat
TempTrackingSpecification.TransferFields(TempInitialTrkgLine);
TempTrackingSpecification."Quantity (Base)" *= -1;
TempTrackingSpecification."Entry No." := LastEntryNo + 1;
TempTrackingSpecification.Insert();
LastEntryNo := TempTrackingSpecification."Entry No.";
until TempInitialTrkgLine.Next() = 0;
SetFilters(WhseItemTrackingLine2, FormSourceType);
if WhseItemTrackingLine2.Find('-') then
repeat
TempTrackingSpecification.TransferFields(WhseItemTrackingLine2);
TempTrackingSpecification."Entry No." := LastEntryNo + 1;
TempTrackingSpecification.Insert();
LastEntryNo := TempTrackingSpecification."Entry No.";
until WhseItemTrackingLine2.Next() = 0;
SetSourceSpecification(SourceTrackingSpecification, TempSourceWhseItemTrackingLine, SourceType, SourceSubtype, SourceID, SourceProdOrderLine, SourceRefNo, QuantityBase);
ItemTrackingMgt.SetGlobalParameters(SourceTrackingSpecification, TempTrackingSpecification, DueDate);
exit(ItemTrackingMgt.Run());
end;
procedure InsertItemTrackingLine(WhseWrkshLine: Record "Whse. Worksheet Line"; WhseEntry: Record "Warehouse Entry"; QtyToEmpty: Decimal)
var
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeInsertItemTrackingLine(Rec, WhseWrkshLine, WhseEntry, QtyToEmpty, IsHandled);
if IsHandled then
exit;
UpdateUndefinedQty();
SaveItemTrkgLine(TempInitialTrkgLine);
Rec.CopyTrackingFromWhseEntry(WhseEntry);
Rec."Expiration Date" := WhseEntry."Expiration Date";
Rec."Qty. per Unit of Measure" := WhseWrkshLine."Qty. per Unit of Measure";
Rec.Validate("Quantity (Base)", QtyToEmpty);
Rec."Source Type" := FormSourceType;
Rec."Source ID" := WhseWorksheetLine."Whse. Document No.";
Rec."Source Ref. No." := WhseWorksheetLine."Whse. Document Line No.";
Rec."Source Batch Name" := WhseWrkshLine."Worksheet Template Name";
Rec."Location Code" := WhseWorksheetLine."Location Code";
Rec."Item No." := WhseWorksheetLine."Item No.";
Rec."Variant Code" := WhseWrkshLine."Variant Code";
if (Rec."Expiration Date" <> 0D) and (FormSourceType = Database::"Internal Movement Line") then
Rec.InitExpirationDate();
Rec."Entry No." := Rec.GetNextEntryNo();
OnBeforeItemTrackingLineInsert(Rec, WhseWrkshLine, WhseEntry);
Rec.Insert();
end;
protected procedure SerialNoOnAfterValidate()
begin
UpdateExpDateEditable();
CurrPage.Update();
end;
protected procedure LotNoOnAfterValidate()
begin
UpdateExpDateEditable();
CurrPage.Update();
end;
protected procedure PackageNoOnAfterValidate()
begin
UpdateExpDateEditable();
CurrPage.Update();
end;
protected procedure QuantityBaseOnAfterValidate()
begin
CurrPage.Update();
CalculateSums();
end;
protected procedure QtytoHandleBaseOnAfterValidate()
begin
CurrPage.Update();
CalculateSums();
end;
local procedure ExpirationDateOnFormat()
begin
UpdateExpDateColor();
end;
local procedure SetSourceSpecification(var SourceSpecification: Record "Tracking Specification"; TempSourceWhseItemTrackingLine: Record "Whse. Item Tracking Line" temporary; SourceType: Integer; SourceSubtype: Integer; SourceID: Code[20]; SourceProdOrderLine: Integer; SourceRefNo: Integer; QuantityBase: Decimal)
begin
SourceSpecification."Source Type" := SourceType;
SourceSpecification."Source Subtype" := SourceSubtype;
SourceSpecification."Source ID" := SourceID;
SourceSpecification."Source Batch Name" := '';
SourceSpecification."Source Prod. Order Line" := SourceProdOrderLine;
SourceSpecification."Source Ref. No." := SourceRefNo;
SourceSpecification."Quantity (Base)" := QuantityBase;
SourceSpecification."Item No." := TempSourceWhseItemTrackingLine."Item No.";
SourceSpecification."Variant Code" := TempSourceWhseItemTrackingLine."Variant Code";
SourceSpecification."Location Code" := TempSourceWhseItemTrackingLine."Location Code";
SourceSpecification.Description := TempSourceWhseItemTrackingLine.Description;
SourceSpecification."Qty. per Unit of Measure" := TempSourceWhseItemTrackingLine."Qty. per Unit of Measure";
OnAfterSetSourceSpecification(SourceSpecification, TempSourceWhseItemTrackingLine);
end;
local procedure CountLinesWithQtyZero(): Integer
var
WhseItemTrackingLine: Record "Whse. Item Tracking Line";
begin
WhseItemTrackingLine.Copy(Rec);
WhseItemTrackingLine.SetRange("Quantity (Base)", 0);
exit(WhseItemTrackingLine.Count());
end;
[IntegrationEvent(false, false)]
local procedure OnAfterSetSource(var GlobalWhseWorksheetLine: Record "Whse. Worksheet Line"; SourceWhseWorksheetLine: Record "Whse. Worksheet Line"; SourceType: Integer)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnAfterOnClosePage(var WhseItemTrackingLine: Record "Whse. Item Tracking Line"; var WhseWorksheetLine: Record "Whse. Worksheet Line"; FormSourceType: Integer; FormUpdated: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnAfterUpdateUndefinedQty(var WhseItemTrackingLine: Record "Whse. Item Tracking Line"; var TotalWhseItemTrackingLine: Record "Whse. Item Tracking Line"; var QtyIsValid: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeItemTrackingLineInsert(var WhseItemTrackingLine: Record "Whse. Item Tracking Line"; WhseWorksheetLine: Record "Whse. Worksheet Line"; WarehouseEntry: Record "Warehouse Entry")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeInsertItemTrackingLine(var WhseItemTrackingLine: Record "Whse. Item Tracking Line"; WhseWorksheetLine: Record "Whse. Worksheet Line"; WarehouseEntry: Record "Warehouse Entry"; QtyToEmpty: Decimal; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnAfterSetSourceSpecification(var SourceSpecification: Record "Tracking Specification"; SourceWhseItemTrkgLine: Record "Whse. Item Tracking Line" temporary)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeUpdateExpDateColor(var WhseItemTrackingLine: Record "Whse. Item Tracking Line"; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnSetSourceFilters(var WhseItemTrackingLine: Record "Whse. Item Tracking Line"; var WhseWorksheetLine: Record "Whse. Worksheet Line"; SourceType: Integer)
begin
end;
[IntegrationEvent(true, false)]
local procedure OnCopyToReservEntryOnUpdate(var TempSourceWhseItemTrackingLine: Record "Whse. Item Tracking Line" temporary; var QuantityBase: Decimal; var DueDate: Date; var Updated: Boolean; FormSourceType: Integer; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnAfterSetFilters(var WhseItemTrackingLine: Record "Whse. Item Tracking Line"; SourceType: Integer)
begin
end;
}