Codeunit 6520 Item Tracing Mgt.
- App
- Base Application
- Namespace
- Microsoft.Inventory.Tracking
- Versions
- 17-28
Procedures, 23Events, 32Obsolete, 6
Versions171819202122232425262728
Source29
Source in 29
src/Layers/W1/BaseApp/Inventory/Tracking/ItemTracingMgt.Codeunit.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.Inventory.Tracking;
using Microsoft.Inventory.Item;
using Microsoft.Inventory.Ledger;
using Microsoft.Inventory.Transfer;
using Microsoft.Projects.Project.Job;
using Microsoft.Purchases.History;
using Microsoft.Purchases.Vendor;
using Microsoft.Sales.Customer;
using Microsoft.Sales.History;
codeunit 6520 "Item Tracing Mgt."
{
trigger OnRun()
begin
end;
var
TempItemTracingBuffer: Record "Item Tracing Buffer" temporary;
TempItemTracingHistoryBuffer: Record "Item Tracing History Buffer" temporary;
SearchCriteria: Option "None",Lot,Serial,Both,Item,Package;
TempLineNo: Integer;
CurrentLevel: Integer;
NextLineNo: Integer;
CurrentHistoryEntryNo: Integer;
procedure FindRecords(var TempTrackEntry: Record "Item Tracing Buffer"; var TempTrackEntry2: Record "Item Tracing Buffer"; SerialNoFilter: Text; LotNoFilter: Text; PackageNoFilter: Text; ItemNoFilter: Text; VariantFilter: Text; Direction: Option Forward,Backward; ShowComponents: Option No,"Item-tracked only",All)
begin
DeleteTempTables(TempTrackEntry, TempTrackEntry2);
InitSearchCriteria(SerialNoFilter, LotNoFilter, PackageNoFilter, ItemNoFilter);
FirstLevel(TempTrackEntry, SerialNoFilter, LotNoFilter, PackageNoFilter, ItemNoFilter, VariantFilter, Direction, ShowComponents);
OnFindRecordsOnBeforeInitTempTable(TempTrackEntry, Direction, ShowComponents);
if TempLineNo > 0 then
InitTempTable(TempTrackEntry, TempTrackEntry2);
TempTrackEntry.Reset();
UpdateHistory(SerialNoFilter, LotNoFilter, PackageNoFilter, ItemNoFilter, VariantFilter, Direction, ShowComponents);
end;
local procedure FirstLevel(var TempTrackEntry: Record "Item Tracing Buffer"; SerialNoFilter: Text; LotNoFilter: Text; PackageNoFilter: Text; ItemNoFilter: Text; VariantFilter: Text; Direction: Option Forward,Backward; ShowComponents: Option No,"Item-tracked only",All)
var
ItemLedgEntry: Record "Item Ledger Entry";
ItemLedgEntry2: Record "Item Ledger Entry";
ItemApplnEntry: Record "Item Application Entry";
begin
TempLineNo := 0;
CurrentLevel := 0;
ItemLedgEntry.Reset();
case SearchCriteria of
SearchCriteria::None:
exit;
SearchCriteria::Serial:
if not ItemLedgEntry.SetCurrentKey("Serial No.") then
if ItemNoFilter <> '' then
ItemLedgEntry.SetCurrentKey("Item No.", "Entry No.")
else
ItemLedgEntry.SetCurrentKey("Item No.", Open, "Variant Code", Positive,
"Location Code", "Posting Date", "Expiration Date", "Lot No.", "Serial No.");
SearchCriteria::Lot,
SearchCriteria::Package,
SearchCriteria::Both:
if not ItemLedgEntry.SetCurrentKey("Lot No.") then
if ItemNoFilter <> '' then
ItemLedgEntry.SetCurrentKey("Item No.", "Entry No.")
else
ItemLedgEntry.SetCurrentKey("Item No.", Open, "Variant Code", Positive,
"Location Code", "Posting Date", "Expiration Date", "Lot No.", "Serial No.");
SearchCriteria::Item:
ItemLedgEntry.SetCurrentKey("Item No.", "Entry No.");
end;
OnFirstLevelOnAfterItemLedgEntrySetCurrentKey(ItemLedgEntry);
ItemLedgEntry.SetFilter("Lot No.", LotNoFilter);
ItemLedgEntry.SetFilter("Serial No.", SerialNoFilter);
ItemLedgEntry.SetFilter("Package No.", PackageNoFilter);
ItemLedgEntry.SetFilter("Item No.", ItemNoFilter);
ItemLedgEntry.SetFilter("Variant Code", VariantFilter);
if Direction = Direction::Forward then begin
ItemLedgEntry.SetRange(Positive, true);
ItemLedgEntry.SetFilter("Entry Type", '<>%1', ItemLedgEntry."Entry Type"::Consumption);
end;
OnFirstLevelOnAfterSetLedgerEntryFilters(ItemLedgEntry, SerialNoFilter, LotNoFilter, ItemNoFilter);
Clear(TempItemTracingBuffer);
TempItemTracingBuffer.DeleteAll();
NextLineNo := 0;
if ItemLedgEntry.FindSet() then
repeat
NextLineNo += 1;
TempItemTracingBuffer."Line No." := NextLineNo;
TempItemTracingBuffer."Item No." := ItemLedgEntry."Item No.";
TempItemTracingBuffer.CopyTrackingFromItemLedgEntry(ItemLedgEntry);
TempItemTracingBuffer."Item Ledger Entry No." := ItemLedgEntry."Entry No.";
OnFirstLevelOnBeforeInsertFirstLevelEntry(TempItemTracingBuffer, ItemLedgEntry);
TempItemTracingBuffer.Insert();
until ItemLedgEntry.Next() = 0;
case SearchCriteria of
SearchCriteria::None:
exit;
SearchCriteria::Serial:
TempItemTracingBuffer.SetCurrentKey("Serial No.", "Item Ledger Entry No.");
SearchCriteria::Lot,
SearchCriteria::Both:
TempItemTracingBuffer.SetCurrentKey("Lot No.", "Item Ledger Entry No.");
SearchCriteria::Item:
TempItemTracingBuffer.SetCurrentKey("Item No.", "Item Ledger Entry No.");
SearchCriteria::Package:
TempItemTracingBuffer.SetCurrentKey("Item No.", "Item Ledger Entry No.");
end;
OnFirstLevelOnAfterTempItemTracingBufferSetCurrentKey(TempItemTracingBuffer);
TempItemTracingBuffer.Ascending(Direction = Direction::Forward);
if TempItemTracingBuffer.Find('-') then
repeat
ItemLedgEntry.Get(TempItemTracingBuffer."Item Ledger Entry No.");
if ItemLedgEntry.TrackingExists() then begin
ItemLedgEntry2 := ItemLedgEntry;
// Test for Reclass
if (Direction = Direction::Backward) and
(ItemLedgEntry."Entry Type" = ItemLedgEntry."Entry Type"::Transfer) and
not ItemLedgEntry.Positive
then begin
ItemApplnEntry.Reset();
ItemApplnEntry.SetCurrentKey("Outbound Item Entry No.");
ItemApplnEntry.SetRange("Outbound Item Entry No.", ItemLedgEntry2."Entry No.");
ItemApplnEntry.SetRange("Item Ledger Entry No.", ItemLedgEntry2."Entry No.");
ItemApplnEntry.SetRange("Transferred-from Entry No.", 0);
if ItemApplnEntry.FindFirst() then begin
ItemApplnEntry.SetFilter("Item Ledger Entry No.", '<>%1', ItemLedgEntry2."Entry No.");
ItemApplnEntry.SetRange("Transferred-from Entry No.", ItemApplnEntry."Inbound Item Entry No.");
if ItemApplnEntry.FindFirst() then begin
ItemLedgEntry2.Reset();
if not ItemLedgEntry2.Get(ItemApplnEntry."Item Ledger Entry No.") then
ItemLedgEntry2 := ItemLedgEntry;
end;
end;
end;
if SearchCriteria = SearchCriteria::Item then
ItemLedgEntry2.SetRange("Item No.", ItemLedgEntry."Item No.");
if SearchCriteria = SearchCriteria::Package then
ItemLedgEntry2.SetRange("Package No.", ItemLedgEntry."Package No.");
OnFirstLevelOnBeforeTransferData(ItemLedgEntry, ItemLedgEntry2);
TransferData(ItemLedgEntry2, TempTrackEntry);
OnFirstLevelOnAfterTransferData(TempTrackEntry);
if InsertRecord(TempTrackEntry, 0) then begin
FindComponents(ItemLedgEntry2, TempTrackEntry, Direction, ShowComponents, ItemLedgEntry2."Entry No.");
NextLevel(TempTrackEntry, TempTrackEntry, Direction, ShowComponents, ItemLedgEntry2."Entry No.");
end;
end;
until (TempItemTracingBuffer.Next() = 0) or (CurrentLevel > 50);
end;
procedure NextLevel(var TempTrackEntry: Record "Item Tracing Buffer"; TempTrackEntry2: Record "Item Tracing Buffer"; Direction: Option Forward,Backward; ShowComponents: Option No,"Item-tracked only",All; ParentID: Integer)
var
ItemLedgEntry: Record "Item Ledger Entry";
ItemApplnEntry: Record "Item Application Entry";
TempTrackEntryBuffer: Record "Item Tracing Buffer" temporary;
TrackNo: Integer;
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeNextLevel(TempTrackEntry, TempTrackEntry2, Direction, ShowComponents, ParentID, CurrentLevel, TempLineNo, IsHandled);
if IsHandled then
exit;
if ExitLevel(TempTrackEntry) then
exit;
CurrentLevel += 1;
ItemApplnEntry.Reset();
// Test for if we have reached lowest level possible - if so exit
if (Direction = Direction::Backward) and TempTrackEntry2.Positive then begin
ItemApplnEntry.SetCurrentKey("Inbound Item Entry No.", "Item Ledger Entry No.", "Outbound Item Entry No.");
ItemApplnEntry.SetRange("Inbound Item Entry No.", TempTrackEntry2."Item Ledger Entry No.");
ItemApplnEntry.SetRange("Item Ledger Entry No.", TempTrackEntry2."Item Ledger Entry No.");
ItemApplnEntry.SetRange("Outbound Item Entry No.", 0);
if ItemApplnEntry.Find('-') then begin
CurrentLevel -= 1;
exit;
end;
ItemApplnEntry.Reset();
end;
if TempTrackEntry2.Positive then begin
ItemApplnEntry.SetCurrentKey("Inbound Item Entry No.", "Item Ledger Entry No.", "Outbound Item Entry No.");
ItemApplnEntry.SetRange("Inbound Item Entry No.", TempTrackEntry2."Item Ledger Entry No.");
end else begin
ItemApplnEntry.SetCurrentKey("Outbound Item Entry No.");
ItemApplnEntry.SetRange("Outbound Item Entry No.", TempTrackEntry2."Item Ledger Entry No.");
end;
if Direction = Direction::Forward then
ItemApplnEntry.SetFilter("Item Ledger Entry No.", '<>%1', TempTrackEntry2."Item Ledger Entry No.")
else
ItemApplnEntry.SetRange("Item Ledger Entry No.", TempTrackEntry2."Item Ledger Entry No.");
ItemApplnEntry.Ascending(Direction = Direction::Forward);
if ItemApplnEntry.Find('-') then
repeat
if TempTrackEntry2.Positive then
TrackNo := ItemApplnEntry."Outbound Item Entry No."
else
TrackNo := ItemApplnEntry."Inbound Item Entry No.";
if TrackNo <> 0 then
if ItemLedgEntry.Get(TrackNo) then begin
TransferData(ItemLedgEntry, TempTrackEntry);
OnNextLevelOnAfterTransferData(TempTrackEntry, TempTrackEntry2);
if InsertRecord(TempTrackEntry, ParentID) then begin
TempTrackEntryBuffer := TempTrackEntry;
FindComponents(ItemLedgEntry, TempTrackEntry, Direction, ShowComponents, ItemLedgEntry."Entry No.");
TempTrackEntry := TempTrackEntryBuffer;
NextLevel(TempTrackEntry, TempTrackEntry, Direction, ShowComponents, ItemLedgEntry."Entry No.");
end;
end;
until (TrackNo = 0) or (ItemApplnEntry.Next() = 0);
CurrentLevel -= 1;
end;
procedure FindComponents(var ItemLedgEntry2: Record "Item Ledger Entry"; var TempItemTracingBuffer: Record "Item Tracing Buffer" temporary; Direction: Option Forward,Backward; ShowComponents: Option No,"Item-tracked only",All; ParentID: Integer)
var
ItemLedgEntry: Record "Item Ledger Entry";
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeFindComponents(ItemLedgEntry2, TempItemTracingBuffer, Direction, ShowComponents, ParentID, CurrentLevel, TempLineNo, IsHandled);
if IsHandled then
exit;
if ((ItemLedgEntry2."Order Type" <> ItemLedgEntry2."Order Type"::Production) and (ItemLedgEntry2."Order Type" <> ItemLedgEntry2."Order Type"::Assembly)) or (ItemLedgEntry2."Order No." = '') then
exit;
if (((ItemLedgEntry2."Entry Type" = ItemLedgEntry2."Entry Type"::Consumption) or (ItemLedgEntry2."Entry Type" = ItemLedgEntry2."Entry Type"::"Assembly Consumption")) and
(Direction = Direction::Forward)) or
(((ItemLedgEntry2."Entry Type" = ItemLedgEntry2."Entry Type"::Output) or (ItemLedgEntry2."Entry Type" = ItemLedgEntry2."Entry Type"::"Assembly Output")) and
(Direction = Direction::Backward))
then begin
ItemLedgEntry.Reset();
ItemLedgEntry.SetCurrentKey("Order Type", "Order No.");
ItemLedgEntry.SetRange("Order Type", ItemLedgEntry2."Order Type");
ItemLedgEntry.SetRange("Order No.", ItemLedgEntry2."Order No.");
if ItemLedgEntry2."Order Type" = ItemLedgEntry2."Order Type"::Production then
ItemLedgEntry.SetRange("Order Line No.", ItemLedgEntry2."Order Line No.");
if ItemLedgEntry2."Order Type" = ItemLedgEntry2."Order Type"::Assembly then
ItemLedgEntry.SetRange("Document No.", ItemLedgEntry2."Document No.");
ItemLedgEntry.SetFilter("Entry No.", '<>%1', ParentID);
if (ItemLedgEntry2."Entry Type" = ItemLedgEntry2."Entry Type"::Consumption) or (ItemLedgEntry2."Entry Type" = ItemLedgEntry2."Entry Type"::"Assembly Consumption") then begin
if ShowComponents <> ShowComponents::No then begin
ItemLedgEntry.SetFilter("Entry Type", '%1|%2', ItemLedgEntry."Entry Type"::Consumption,
ItemLedgEntry."Entry Type"::"Assembly Consumption");
if ItemLedgEntry.Find('-') then
repeat
if (ShowComponents = ShowComponents::All) or ItemLedgEntry.TrackingExists() then begin
CurrentLevel += 1;
TransferData(ItemLedgEntry, TempItemTracingBuffer);
OnFindComponentsOnAfterTransferData(TempItemTracingBuffer, ItemLedgEntry2, ItemLedgEntry);
if InsertRecord(TempItemTracingBuffer, ParentID) then
NextLevel(TempItemTracingBuffer, TempItemTracingBuffer, Direction, ShowComponents, ItemLedgEntry."Entry No.");
CurrentLevel -= 1;
end;
until ItemLedgEntry.Next() = 0;
end;
ItemLedgEntry.SetFilter("Entry Type", '%1|%2', ItemLedgEntry."Entry Type"::Output,
ItemLedgEntry."Entry Type"::"Assembly Output");
ItemLedgEntry.SetRange(Positive, true);
end else begin
if ShowComponents = ShowComponents::No then
exit;
ItemLedgEntry.SetFilter("Entry Type", '%1|%2', ItemLedgEntry."Entry Type"::Consumption,
ItemLedgEntry."Entry Type"::"Assembly Consumption");
ItemLedgEntry.SetRange(Positive, not ItemLedgEntry2.Positive);
end;
OnFindComponentsOnAfterSetFilters(ItemLedgEntry, ItemLedgEntry2);
CurrentLevel += 1;
if ItemLedgEntry.Find('-') then
repeat
if (ShowComponents = ShowComponents::All) or ItemLedgEntry.TrackingExists() then begin
TransferData(ItemLedgEntry, TempItemTracingBuffer);
OnFindComponentsOnAfterTransferData(TempItemTracingBuffer, ItemLedgEntry2, ItemLedgEntry);
if InsertRecord(TempItemTracingBuffer, ParentID) then
NextLevel(TempItemTracingBuffer, TempItemTracingBuffer, Direction, ShowComponents, ItemLedgEntry."Entry No.");
end;
until ItemLedgEntry.Next() = 0;
CurrentLevel -= 1;
end;
end;
procedure InsertRecord(var TempTrackEntry: Record "Item Tracing Buffer"; ParentID: Integer) Result: Boolean
var
TempTrackEntry2: Record "Item Tracing Buffer";
ItemLedgerEntry: Record "Item Ledger Entry";
Job: Record Job;
RecRef: RecordRef;
InsertEntry: Boolean;
Description2: Text[100];
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeInsertRecord(TempTrackEntry, ParentID, Result, IsHandled);
if not IsHandled then begin
TempTrackEntry2 := TempTrackEntry;
TempTrackEntry.Reset();
TempTrackEntry.SetCurrentKey(TempTrackEntry."Item Ledger Entry No.");
TempTrackEntry.SetRange(TempTrackEntry."Item Ledger Entry No.", TempTrackEntry."Item Ledger Entry No.");
// Mark entry if already in search result
TempTrackEntry2."Already Traced" := TempTrackEntry.FindFirst();
if CurrentLevel = 1 then begin
TempTrackEntry.SetRange("Parent Item Ledger Entry No.", ParentID);
TempTrackEntry.SetFilter(Level, '<>%1', CurrentLevel);
end;
InsertEntry := true;
if CurrentLevel <= 1 then
InsertEntry := not TempTrackEntry.FindFirst();
if InsertEntry then begin
TempTrackEntry2.Reset();
TempTrackEntry := TempTrackEntry2;
TempLineNo += 1;
TempTrackEntry."Line No." := TempLineNo;
SetRecordID(TempTrackEntry);
TempTrackEntry."Parent Item Ledger Entry No." := ParentID;
if Format(TempTrackEntry."Record Identifier") = '' then
Description2 := StrSubstNo('%1 %2', TempTrackEntry."Entry Type", TempTrackEntry."Document No.")
else begin
if RecRef.Get(TempTrackEntry."Record Identifier") then
case RecRef.Number of
Database::"Item Ledger Entry":
begin
RecRef.SetTable(ItemLedgerEntry);
if ItemLedgerEntry."Job No." <> '' then begin
Job.Get(ItemLedgerEntry."Job No.");
Description2 := Format(StrSubstNo('%1 %2', Job.TableCaption(), ItemLedgerEntry."Job No."), -50);
end;
end;
end;
if Description2 = '' then
Description2 := StrSubstNo('%1 %2', RecRef.Caption, TempTrackEntry."Document No.");
end;
OnInsertRecordOnBeforeSetDescription(TempTrackEntry, RecRef, Description2);
TempTrackEntry.SetDescription(Description2);
TempTrackEntry.Insert();
exit(true);
end;
exit(false);
end;
end;
procedure InitTempTable(var TempTrackEntry: Record "Item Tracing Buffer"; var TempTrackEntry2: Record "Item Tracing Buffer")
begin
TempTrackEntry2.Reset();
TempTrackEntry2.DeleteAll();
TempTrackEntry.Reset();
TempTrackEntry.SetRange(Level, 0);
if TempTrackEntry.Find('-') then
repeat
TempTrackEntry2 := TempTrackEntry;
TempTrackEntry2.Insert();
until TempTrackEntry.Next() = 0;
end;
local procedure DeleteTempTables(var TempTrackEntry: Record "Item Tracing Buffer"; var TempTrackEntry2: Record "Item Tracing Buffer")
begin
Clear(TempTrackEntry);
if not TempTrackEntry.IsEmpty() then
TempTrackEntry.DeleteAll();
Clear(TempTrackEntry2);
if not TempTrackEntry2.IsEmpty() then
TempTrackEntry2.DeleteAll();
end;
procedure ExpandAll(var TempTrackEntry: Record "Item Tracing Buffer"; var TempTrackEntry2: Record "Item Tracing Buffer")
begin
TempTrackEntry2.Reset();
TempTrackEntry2.DeleteAll();
TempTrackEntry.Reset();
if TempTrackEntry.FindSet() then
repeat
TempTrackEntry2 := TempTrackEntry;
TempTrackEntry2.Insert();
until TempTrackEntry.Next() = 0;
end;
local procedure IsExpanded(ActualTrackingLine: Record "Item Tracing Buffer"; var TempTrackEntry2: Record "Item Tracing Buffer"): Boolean
var
xTrackEntry: Record "Item Tracing Buffer";
Found: Boolean;
begin
xTrackEntry.Copy(TempTrackEntry2);
TempTrackEntry2.Reset();
TempTrackEntry2 := ActualTrackingLine;
Found := (TempTrackEntry2.Next() <> 0);
if Found then
Found := (TempTrackEntry2.Level > ActualTrackingLine.Level);
TempTrackEntry2.Copy(xTrackEntry);
exit(Found);
end;
local procedure HasChildren(ActualTrackingLine: Record "Item Tracing Buffer"; var TempTrackEntry: Record "Item Tracing Buffer"): Boolean
begin
TempTrackEntry.Reset();
TempTrackEntry := ActualTrackingLine;
if TempTrackEntry.Next() = 0 then
exit(false);
exit(TempTrackEntry.Level > ActualTrackingLine.Level);
end;
procedure TransferData(var ItemLedgEntry: Record "Item Ledger Entry"; var TempTrackEntry: Record "Item Tracing Buffer")
var
Customer: Record Customer;
Vendor: Record Vendor;
ValueEntry: Record "Value Entry";
begin
TempTrackEntry.Init();
TempTrackEntry."Line No." := 9999999;
TempTrackEntry.Level := CurrentLevel;
TempTrackEntry."Item No." := ItemLedgEntry."Item No.";
TempTrackEntry."Item Description" := GetItemDescription(ItemLedgEntry."Item No.");
TempTrackEntry."Posting Date" := ItemLedgEntry."Posting Date";
TempTrackEntry."Entry Type" := ItemLedgEntry."Entry Type";
TempTrackEntry."Source Type" := ItemLedgEntry."Source Type";
TempTrackEntry."Source No." := ItemLedgEntry."Source No.";
TempTrackEntry."Source Name" := '';
case TempTrackEntry."Source Type" of
TempTrackEntry."Source Type"::Customer:
if Customer.Get(TempTrackEntry."Source No.") then
TempTrackEntry."Source Name" := Customer.Name;
TempTrackEntry."Source Type"::Vendor:
if Vendor.Get(TempTrackEntry."Source No.") then
TempTrackEntry."Source Name" := Vendor.Name;
end;
TempTrackEntry."Document No." := ItemLedgEntry."Document No.";
TempTrackEntry.Description := ItemLedgEntry.Description;
TempTrackEntry."Location Code" := ItemLedgEntry."Location Code";
TempTrackEntry.Quantity := ItemLedgEntry.Quantity;
TempTrackEntry."Remaining Quantity" := ItemLedgEntry."Remaining Quantity";
TempTrackEntry.Open := ItemLedgEntry.Open;
TempTrackEntry.Positive := ItemLedgEntry.Positive;
TempTrackEntry."Variant Code" := ItemLedgEntry."Variant Code";
TempTrackEntry.CopyTrackingFromItemLedgEntry(ItemLedgEntry);
TempTrackEntry."Item Ledger Entry No." := ItemLedgEntry."Entry No.";
ValueEntry.Reset();
ValueEntry.SetCurrentKey("Item Ledger Entry No.", "Document No.");
ValueEntry.SetRange("Item Ledger Entry No.", ItemLedgEntry."Entry No.");
if not ValueEntry.FindFirst() then
Clear(ValueEntry);
TempTrackEntry."Created by" := ValueEntry."User ID";
TempTrackEntry."Created on" := ValueEntry."Posting Date";
OnAfterTransferData(ItemLedgEntry, TempTrackEntry, ValueEntry);
end;
procedure InitSearchCriteria(SerialNoFilter: Text; LotNoFilter: Text; PackageNoFilter: Text; ItemNoFilter: Text)
var
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeInitSearchCriteria(SearchCriteria, SerialNoFilter, LotNoFilter, PackageNoFilter, ItemNoFilter, IsHandled);
if IsHandled then
exit;
if (SerialNoFilter = '') and (LotNoFilter = '') and (ItemNoFilter = '') and (PackageNoFilter = '') then
SearchCriteria := SearchCriteria::None
else
if LotNoFilter <> '' then begin
if SerialNoFilter = '' then
SearchCriteria := SearchCriteria::Lot
else
SearchCriteria := SearchCriteria::Both;
end else
if SerialNoFilter <> '' then
SearchCriteria := SearchCriteria::Serial
else
if ItemNoFilter <> '' then
SearchCriteria := SearchCriteria::Item
else
if PackageNoFilter <> '' then
SearchCriteria := SearchCriteria::Package;
OnAfterInitSearchCriteria(SerialNoFilter, LotNoFilter, PackageNoFilter, ItemNoFilter, SearchCriteria);
end;
procedure InitSearchParm(var ItemTracingBuffer: Record "Item Tracing Buffer"; var SerialNoFilter: Text; var LotNoFilter: Text; var PackageNoFilter: Text; var ItemNoFilter: Text; var VariantFilter: Text)
var
ItemTrackingEntry: Record "Item Tracing Buffer";
begin
ItemTrackingEntry.SetRange("Serial No.", ItemTracingBuffer."Serial No.");
ItemTrackingEntry.SetRange("Lot No.", ItemTracingBuffer."Lot No.");
ItemTrackingEntry.SetRange("Package No.", ItemTracingBuffer."Package No.");
ItemTrackingEntry.SetRange("Item No.", ItemTracingBuffer."Item No.");
ItemTrackingEntry.SetRange("Variant Code", ItemTracingBuffer."Variant Code");
SerialNoFilter := ItemTrackingEntry.GetFilter("Serial No.");
LotNoFilter := ItemTrackingEntry.GetFilter("Lot No.");
PackageNoFilter := ItemTrackingEntry.GetFilter("Package No.");
ItemNoFilter := ItemTrackingEntry.GetFilter("Item No.");
VariantFilter := ItemTrackingEntry.GetFilter("Variant Code");
OnAfterInitSearchParam(ItemTracingBuffer, ItemTrackingEntry);
end;
procedure SetRecordID(var TrackingEntry: Record "Item Tracing Buffer")
var
ItemLedgEntry: Record "Item Ledger Entry";
PurchRcptHeader: Record "Purch. Rcpt. Header";
PurchInvHeader: Record "Purch. Inv. Header";
PurchCrMemoHeader: Record "Purch. Cr. Memo Hdr.";
SalesShptHeader: Record "Sales Shipment Header";
SalesInvHeader: Record "Sales Invoice Header";
SalesCrMemoHeader: Record "Sales Cr.Memo Header";
ReturnShipHeader: Record "Return Shipment Header";
ReturnRcptHeader: Record "Return Receipt Header";
TransShipHeader: Record "Transfer Shipment Header";
TransRcptHeader: Record "Transfer Receipt Header";
RecRef: RecordRef;
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeSetRecordID(TrackingEntry, IsHandled);
if IsHandled then
exit;
Clear(RecRef);
case TrackingEntry."Entry Type" of
TrackingEntry."Entry Type"::Purchase:
if not TrackingEntry.Positive then begin
if PurchCrMemoHeader.Get(TrackingEntry."Document No.") then begin
RecRef.GetTable(PurchCrMemoHeader);
TrackingEntry."Record Identifier" := RecRef.RecordId;
end else
if ReturnShipHeader.Get(TrackingEntry."Document No.") then begin
RecRef.GetTable(ReturnShipHeader);
TrackingEntry."Record Identifier" := RecRef.RecordId;
end else
if ItemLedgEntry.Get(TrackingEntry."Item Ledger Entry No.") then begin
RecRef.GetTable(ItemLedgEntry);
TrackingEntry."Record Identifier" := RecRef.RecordId;
end;
end else
if PurchRcptHeader.Get(TrackingEntry."Document No.") then begin
RecRef.GetTable(PurchRcptHeader);
TrackingEntry."Record Identifier" := RecRef.RecordId;
end else
if PurchInvHeader.Get(TrackingEntry."Document No.") then begin
RecRef.GetTable(PurchInvHeader);
TrackingEntry."Record Identifier" := RecRef.RecordId;
end else
if ItemLedgEntry.Get(TrackingEntry."Item Ledger Entry No.") then begin
RecRef.GetTable(ItemLedgEntry);
TrackingEntry."Record Identifier" := RecRef.RecordId;
end;
TrackingEntry."Entry Type"::Sale:
if IsServiceDocument(TrackingEntry."Item Ledger Entry No.", ItemLedgEntry) then
OnSetRecordIDOnProcessServiceDocument(ItemLedgEntry, TrackingEntry)
else
if TrackingEntry.Positive then begin
if SalesCrMemoHeader.Get(TrackingEntry."Document No.") then begin
RecRef.GetTable(SalesCrMemoHeader);
TrackingEntry."Record Identifier" := RecRef.RecordId;
end else
if ReturnRcptHeader.Get(TrackingEntry."Document No.") then begin
RecRef.GetTable(ReturnRcptHeader);
TrackingEntry."Record Identifier" := RecRef.RecordId;
end else
if ItemLedgEntry.Get(TrackingEntry."Item Ledger Entry No.") then begin
RecRef.GetTable(ItemLedgEntry);
TrackingEntry."Record Identifier" := RecRef.RecordId;
end;
end else
if SalesShptHeader.Get(TrackingEntry."Document No.") then begin
RecRef.GetTable(SalesShptHeader);
TrackingEntry."Record Identifier" := RecRef.RecordId;
end else
if SalesInvHeader.Get(TrackingEntry."Document No.") then begin
RecRef.GetTable(SalesInvHeader);
TrackingEntry."Record Identifier" := RecRef.RecordId;
end else
if ItemLedgEntry.Get(TrackingEntry."Item Ledger Entry No.") then begin
RecRef.GetTable(ItemLedgEntry);
TrackingEntry."Record Identifier" := RecRef.RecordId;
end;
TrackingEntry."Entry Type"::"Positive Adjmt.",
TrackingEntry."Entry Type"::"Negative Adjmt.":
if ItemLedgEntry.Get(TrackingEntry."Item Ledger Entry No.") then begin
RecRef.GetTable(ItemLedgEntry);
TrackingEntry."Record Identifier" := RecRef.RecordId;
end;
TrackingEntry."Entry Type"::Transfer:
if TransShipHeader.Get(TrackingEntry."Document No.") then begin
RecRef.GetTable(TransShipHeader);
TrackingEntry."Record Identifier" := RecRef.RecordId;
end else
if TransRcptHeader.Get(TrackingEntry."Document No.") then begin
RecRef.GetTable(TransRcptHeader);
TrackingEntry."Record Identifier" := RecRef.RecordId;
end else
if ItemLedgEntry.Get(TrackingEntry."Item Ledger Entry No.") then begin
RecRef.GetTable(ItemLedgEntry);
TrackingEntry."Record Identifier" := RecRef.RecordId;
end;
end;
OnAfterSetRecordID(TrackingEntry, RecRef);
end;
procedure ShowDocument(RecID: RecordID)
var
ItemLedgEntry: Record "Item Ledger Entry";
SalesShptHeader: Record "Sales Shipment Header";
SalesInvHeader: Record "Sales Invoice Header";
SalesCrMemoHeader: Record "Sales Cr.Memo Header";
PurchRcptHeader: Record "Purch. Rcpt. Header";
PurchInvHeader: Record "Purch. Inv. Header";
PurchCrMemoHeader: Record "Purch. Cr. Memo Hdr.";
ReturnShipHeader: Record "Return Shipment Header";
ReturnRcptHeader: Record "Return Receipt Header";
TransShipHeader: Record "Transfer Shipment Header";
TransRcptHeader: Record "Transfer Receipt Header";
RecRef: RecordRef;
IsHandled: Boolean;
begin
if Format(RecID) = '' then
exit;
RecRef := RecID.GetRecord();
IsHandled := false;
OnBeforeShowDocument(RecRef, IsHandled);
if IsHandled then
exit;
case RecID.TableNo of
Database::"Item Ledger Entry":
begin
RecRef.SetTable(ItemLedgEntry);
PAGE.RunModal(PAGE::"Item Ledger Entries", ItemLedgEntry);
end;
Database::"Sales Shipment Header":
begin
RecRef.SetTable(SalesShptHeader);
PAGE.RunModal(PAGE::"Posted Sales Shipment", SalesShptHeader);
end;
Database::"Sales Invoice Header":
begin
RecRef.SetTable(SalesInvHeader);
PAGE.RunModal(PAGE::"Posted Sales Invoice", SalesInvHeader);
end;
Database::"Sales Cr.Memo Header":
begin
RecRef.SetTable(SalesCrMemoHeader);
PAGE.RunModal(PAGE::"Posted Sales Credit Memo", SalesCrMemoHeader);
end;
Database::"Purch. Rcpt. Header":
begin
RecRef.SetTable(PurchRcptHeader);
PAGE.RunModal(PAGE::"Posted Purchase Receipt", PurchRcptHeader);
end;
Database::"Purch. Inv. Header":
begin
RecRef.SetTable(PurchInvHeader);
PAGE.RunModal(PAGE::"Posted Purchase Invoice", PurchInvHeader);
end;
Database::"Purch. Cr. Memo Hdr.":
begin
RecRef.SetTable(PurchCrMemoHeader);
PAGE.RunModal(PAGE::"Posted Purchase Credit Memo", PurchCrMemoHeader);
end;
Database::"Return Shipment Header":
begin
RecRef.SetTable(ReturnShipHeader);
PAGE.RunModal(PAGE::"Posted Return Shipment", ReturnShipHeader);
end;
Database::"Return Receipt Header":
begin
RecRef.SetTable(ReturnRcptHeader);
PAGE.RunModal(PAGE::"Posted Return Receipt", ReturnRcptHeader);
end;
Database::"Transfer Shipment Header":
begin
RecRef.SetTable(TransShipHeader);
PAGE.RunModal(PAGE::"Posted Transfer Shipment", TransShipHeader);
end;
Database::"Transfer Receipt Header":
begin
RecRef.SetTable(TransRcptHeader);
PAGE.RunModal(PAGE::"Posted Transfer Receipt", TransRcptHeader);
end;
else
OnShowDocument(RecRef, RecID);
end;
end;
procedure SetExpansionStatus(Rec: Record "Item Tracing Buffer"; var TempTrackEntry: Record "Item Tracing Buffer"; var TempTrackEntry2: Record "Item Tracing Buffer"; var ActualExpansionStatus: Option "Has Children",Expanded,"No Children")
begin
if IsExpanded(Rec, TempTrackEntry2) then
ActualExpansionStatus := ActualExpansionStatus::Expanded
else
if HasChildren(Rec, TempTrackEntry) then
ActualExpansionStatus := ActualExpansionStatus::"Has Children"
else
ActualExpansionStatus := ActualExpansionStatus::"No Children";
end;
local procedure GetItem(var Item: Record Item; ItemNo: Code[20])
begin
if ItemNo <> Item."No." then
if not Item.Get(ItemNo) then
Clear(Item);
end;
local procedure GetItemDescription(ItemNo: Code[20]): Text[100]
var
Item: Record Item;
begin
GetItem(Item, ItemNo);
exit(Item.Description);
end;
local procedure GetItemTrackingCode(var ItemTrackingCode: Record "Item Tracking Code"; ItemNo: Code[20])
var
Item: Record Item;
begin
Item.SetLoadFields("Item Tracking Code");
if Item.Get(ItemNo) then;
if Item."Item Tracking Code" <> '' then begin
if not ItemTrackingCode.Get(Item."Item Tracking Code") then
Clear(ItemTrackingCode);
end else
Clear(ItemTrackingCode);
end;
procedure IsSpecificTracking(ItemNo: Code[20]; ItemTrackingSetup: Record "Item Tracking Setup") IsSpecific: Boolean
var
ItemTrackingCode: Record "Item Tracking Code";
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeIsSpecificTracking(ItemNo, ItemTrackingSetup, IsSpecific, IsHandled);
if IsHandled then
exit(IsSpecific);
ItemTrackingCode.SetLoadFields("SN Specific Tracking", "Lot Specific Tracking", "Package Specific Tracking");
GetItemTrackingCode(ItemTrackingCode, ItemNo);
ItemTrackingSetup.CopyTrackingFromItemTrackingCodeSpecificTracking(ItemTrackingCode);
exit(ItemTrackingSetup.SpecificTracking(ItemNo));
end;
local procedure ExitLevel(TempItemTracingBuffer: Record "Item Tracing Buffer" temporary) Result: Boolean
var
ItemTrackingSetup: Record "Item Tracking Setup";
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeExitLevel(TempItemTracingBuffer, Result, IsHandled);
if IsHandled then
exit(Result);
ItemTrackingSetup.CopyTrackingFromItemTracingBuffer(TempItemTracingBuffer);
if not ItemTrackingSetup.TrackingExists() then
exit(true);
if CurrentLevel > 50 then
exit(true);
if not IsSpecificTracking(TempItemTracingBuffer."Item No.", ItemTrackingSetup) then
exit(true);
if TempItemTracingBuffer."Already Traced" then
exit(true);
exit(false);
end;
local procedure UpdateHistory(SerialNoFilter: Text; LotNoFilter: Text; PackageNoFilter: Text; ItemNoFilter: Text; VariantFilter: Text; TraceMethod: Option "Origin->Usage","Usage->Origin"; ShowComponents: Option No,"Item-tracked only",All) OK: Boolean
var
LevelCount: Integer;
ExtFilterExists: Boolean;
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeUpdateHistory(TempItemTracingHistoryBuffer, CurrentHistoryEntryNo, SerialNoFilter, LotNoFilter, PackageNoFilter, ItemNoFilter, VariantFilter, TraceMethod, ShowComponents, OK, IsHandled);
if IsHandled then
exit(OK);
TempItemTracingHistoryBuffer.Reset();
TempItemTracingHistoryBuffer.SetFilter("Entry No.", '>%1', CurrentHistoryEntryNo);
TempItemTracingHistoryBuffer.DeleteAll();
LevelCount := 0;
repeat
TempItemTracingHistoryBuffer.Init();
TempItemTracingHistoryBuffer."Entry No." := CurrentHistoryEntryNo + 1;
TempItemTracingHistoryBuffer.Level := LevelCount;
OnAfterInitItemTracingHistoryBuffer(TempItemTracingHistoryBuffer, ExtFilterExists);
TempItemTracingHistoryBuffer."Serial No. Filter" := CopyStr(SerialNoFilter, 1, MaxStrLen(TempItemTracingHistoryBuffer."Serial No. Filter"));
TempItemTracingHistoryBuffer."Lot No. Filter" := CopyStr(LotNoFilter, 1, MaxStrLen(TempItemTracingHistoryBuffer."Lot No. Filter"));
TempItemTracingHistoryBuffer."Package No. Filter" := CopyStr(PackageNoFilter, 1, MaxStrLen(TempItemTracingHistoryBuffer."Package No. Filter"));
TempItemTracingHistoryBuffer."Item No. Filter" := CopyStr(ItemNoFilter, 1, MaxStrLen(TempItemTracingHistoryBuffer."Item No. Filter"));
TempItemTracingHistoryBuffer."Variant Filter" := CopyStr(VariantFilter, 1, MaxStrLen(TempItemTracingHistoryBuffer."Variant Filter"));
if TempItemTracingHistoryBuffer.Level = 0 then begin
TempItemTracingHistoryBuffer."Trace Method" := TraceMethod;
TempItemTracingHistoryBuffer."Show Components" := ShowComponents;
end;
OnBeforeItemTracingHistoryBufferInsert(TempItemTracingHistoryBuffer);
TempItemTracingHistoryBuffer.Insert();
LevelCount += 1;
SerialNoFilter := DelStr(SerialNoFilter, 1, MaxStrLen(TempItemTracingHistoryBuffer."Serial No. Filter"));
LotNoFilter := DelStr(LotNoFilter, 1, MaxStrLen(TempItemTracingHistoryBuffer."Lot No. Filter"));
PackageNoFilter := DelStr(PackageNoFilter, 1, MaxStrLen(TempItemTracingHistoryBuffer."Package No. Filter"));
ItemNoFilter := DelStr(ItemNoFilter, 1, MaxStrLen(TempItemTracingHistoryBuffer."Item No. Filter"));
VariantFilter := DelStr(VariantFilter, 1, MaxStrLen(TempItemTracingHistoryBuffer."Variant Filter"));
until (SerialNoFilter = '') and (LotNoFilter = '') and (ItemNoFilter = '') and (VariantFilter = '') and
(PackageNoFilter = '') and not ExtFilterExists;
CurrentHistoryEntryNo := TempItemTracingHistoryBuffer."Entry No.";
OK := true;
end;
procedure RecallHistory(Steps: Integer; var TempTrackEntry: Record "Item Tracing Buffer"; var TempTrackEntry2: Record "Item Tracing Buffer"; var SerialNoFilter: Text; var LotNoFilter: Text; var PackageNoFilter: Text; var ItemNoFilter: Text; var VariantFilter: Text; var TraceMethod: Option "Origin->Usage","Usage->Origin"; var ShowComponents: Option No,"Item-tracked only",All): Boolean
begin
if not RetrieveHistoryData(CurrentHistoryEntryNo + Steps,
SerialNoFilter, LotNoFilter, PackageNoFilter, ItemNoFilter, VariantFilter, TraceMethod, ShowComponents)
then
exit(false);
DeleteTempTables(TempTrackEntry, TempTrackEntry2);
InitSearchCriteria(SerialNoFilter, LotNoFilter, PackageNoFilter, ItemNoFilter);
FirstLevel(TempTrackEntry, SerialNoFilter, LotNoFilter, PackageNoFilter, ItemNoFilter,
VariantFilter, TraceMethod, ShowComponents);
if TempLineNo > 0 then
InitTempTable(TempTrackEntry, TempTrackEntry2);
TempTrackEntry.Reset();
CurrentHistoryEntryNo := CurrentHistoryEntryNo + Steps;
exit(true);
end;
local procedure RetrieveHistoryData(EntryNo: Integer; var SerialNoFilter: Text; var LotNoFilter: Text; var PackageNoFilter: Text; var ItemNoFilter: Text; var VariantFilter: Text; var TraceMethod: Option "Origin->Usage","Usage->Origin"; var ShowComponents: Option No,"Item-tracked only",All): Boolean
begin
TempItemTracingHistoryBuffer.Reset();
TempItemTracingHistoryBuffer.SetCurrentKey("Entry No.", TempItemTracingHistoryBuffer.Level);
TempItemTracingHistoryBuffer.SetRange("Entry No.", EntryNo);
if not TempItemTracingHistoryBuffer.FindSet() then
exit(false);
repeat
if TempItemTracingHistoryBuffer.Level = 0 then begin
SerialNoFilter := TempItemTracingHistoryBuffer."Serial No. Filter";
LotNoFilter := TempItemTracingHistoryBuffer."Lot No. Filter";
PackageNoFilter := TempItemTracingHistoryBuffer."Package No. Filter";
ItemNoFilter := TempItemTracingHistoryBuffer."Item No. Filter";
VariantFilter := TempItemTracingHistoryBuffer."Variant Filter";
TraceMethod := TempItemTracingHistoryBuffer."Trace Method";
ShowComponents := TempItemTracingHistoryBuffer."Show Components";
end else begin
SerialNoFilter := SerialNoFilter + TempItemTracingHistoryBuffer."Serial No. Filter";
LotNoFilter := LotNoFilter + TempItemTracingHistoryBuffer."Lot No. Filter";
PackageNoFilter := PackageNoFilter + TempItemTracingHistoryBuffer."Package No. Filter";
ItemNoFilter := ItemNoFilter + TempItemTracingHistoryBuffer."Item No. Filter";
VariantFilter := VariantFilter + TempItemTracingHistoryBuffer."Variant Filter";
end;
OnRetrieveHistoryDataOnAfterTraceHistoryLine(TempItemTracingHistoryBuffer);
until TempItemTracingHistoryBuffer.Next() = 0;
exit(true);
end;
procedure GetHistoryStatus(var PreviousExists: Boolean; var NextExists: Boolean)
begin
TempItemTracingHistoryBuffer.Reset();
TempItemTracingHistoryBuffer.SetFilter("Entry No.", '>%1', CurrentHistoryEntryNo);
NextExists := not TempItemTracingHistoryBuffer.IsEmpty();
TempItemTracingHistoryBuffer.SetFilter("Entry No.", '<%1', CurrentHistoryEntryNo);
PreviousExists := not TempItemTracingHistoryBuffer.IsEmpty();
end;
local procedure IsServiceDocument(ItemLedgEntryNo: Integer; var ItemLedgEntry: Record "Item Ledger Entry"): Boolean
begin
if ItemLedgEntry.Get(ItemLedgEntryNo) then
if ItemLedgEntry."Document Type" in [
ItemLedgEntry."Document Type"::"Service Shipment", ItemLedgEntry."Document Type"::"Service Invoice",
ItemLedgEntry."Document Type"::"Service Credit Memo"]
then
exit(true);
exit(false);
end;
procedure SetVariables(NewTempLineNo: Integer; NewCurrentLevel: Integer)
begin
TempLineNo := NewTempLineNo;
CurrentLevel := NewCurrentLevel;
end;
procedure GetVariables(var NewTempLineNo: Integer; var NewCurrentLevel: Integer)
begin
NewTempLineNo := TempLineNo;
NewCurrentLevel := CurrentLevel;
end;
[IntegrationEvent(false, false)]
local procedure OnAfterInitItemTracingHistoryBuffer(var ItemTracingHistoryBuffer: Record "Item Tracing History Buffer"; var ExtFilterExists: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnAfterInitSearchParam(var ItemTracingBuffer: Record "Item Tracing Buffer"; var ItemTracingBuffer2: Record "Item Tracing Buffer")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnAfterInitSearchCriteria(SerialNoFilter: Text; LotNoFilter: Text; PackageNoFilter: Text; ItemNoFilter: Text; var SearchCriteria: Option)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnAfterTransferData(var ItemLedgerEntry: Record "Item Ledger Entry"; var TempItemTracingBuffer: Record "Item Tracing Buffer" temporary; ValueEntry: Record "Value Entry")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeExitLevel(TempItemTracingBuffer: Record "Item Tracing Buffer" temporary; var Result: Boolean; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeFindComponents(var ItemLedgEntry2: Record "Item Ledger Entry"; var TempItemTracingBuffer: Record "Item Tracing Buffer" temporary; Direction: Option Forward,Backward; ShowComponents: Option No,"Item-tracked only",All; ParentID: Integer; var CurrentLevel: Integer; var TempLineNo: Integer; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeInsertRecord(var ItemTracingBuffer: Record "Item Tracing Buffer"; ParentID: Integer; var Result: Boolean; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeIsSpecificTracking(ItemNo: Code[20]; ItemTrackingSetup: Record "Item Tracking Setup"; var IsSpecific: Boolean; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeItemTracingHistoryBufferInsert(var ItemTracingHistoryBuffer: Record "Item Tracing History Buffer")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeNextLevel(var TempTrackEntry: Record "Item Tracing Buffer" temporary; var TempTrackEntry2: Record "Item Tracing Buffer" temporary; Direction: Option Forward,Backward; ShowComponents: Option No,"Item-tracked only",All; ParentID: Integer; var CurrentLevel: Integer; var TempLineNo: Integer; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeShowDocument(RecRef: RecordRef; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeSetRecordID(var TrackingEntry: Record "Item Tracing Buffer"; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeUpdateHistory(var TempItemTracingHistoryBuffer: Record "Item Tracing History Buffer" temporary; var CurrentHistoryEntryNo: Integer; SerialNoFilter: Text; LotNoFilter: Text; PackageNoFilter: Text; ItemNoFilter: Text; VariantFilter: Text; TraceMethod: Option; ShowComponents: Option; var OK: Boolean; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnFindComponentsOnAfterSetFilters(var ItemLedgerEntry: Record "Item Ledger Entry"; var ItemLedgerEntry2: Record "Item Ledger Entry")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnFindComponentsOnAfterTransferData(var TempItemTracingBuffer: Record "Item Tracing Buffer" temporary; var ItemLedgerEntry2: Record "Item Ledger Entry"; ItemLedgerEntry: Record "Item Ledger Entry")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnFirstLevelOnAfterSetLedgerEntryFilters(var ItemLedgerEntry: Record "Item Ledger Entry"; var SerialNoFilter: Text; var LotNoFilter: Text; var ItemNoFilter: Text)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnFirstLevelOnAfterItemLedgEntrySetCurrentKey(var ItemLedgerEntry: Record "Item Ledger Entry")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnFirstLevelOnAfterTempItemTracingBufferSetCurrentKey(var TempItemTracingBuffer: Record "Item Tracing Buffer" temporary)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnFirstLevelOnAfterTransferData(var TempItemTracingBuffer: Record "Item Tracing Buffer" temporary)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnFirstLevelOnBeforeInsertFirstLevelEntry(var ItemTracingBuffer: Record "Item Tracing Buffer"; ItemLedgerEntry: Record "Item Ledger Entry")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnFirstLevelOnBeforeTransferData(var ItemLedgerEntry: Record "Item Ledger Entry"; var ItemLedgerEntry2: Record "Item Ledger Entry")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnInsertRecordOnBeforeSetDescription(var TempTrackEntry: Record "Item Tracing Buffer"; var RecRef: RecordRef; var Description2: Text[100])
begin
end;
[IntegrationEvent(false, false)]
local procedure OnNextLevelOnAfterTransferData(var TempItemTracingBuffer: Record "Item Tracing Buffer" temporary; var TempItemTracingBuffer2: Record "Item Tracing Buffer" temporary)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnRetrieveHistoryDataOnAfterTraceHistoryLine(var TempItemTracingHistoryBuffer: Record "Item Tracing History Buffer" temporary)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnSetRecordIDOnProcessServiceDocument(ItemLedgEntry: Record "Item Ledger Entry"; var TrackingEntry: Record "Item Tracing Buffer")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeInitSearchCriteria(var SearchCriteria: Option "None",Lot,Serial,Both,Item,Package; SerialNoFilter: Text; LotNoFilter: Text; PackageNoFilter: Text; ItemNoFilter: Text; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnShowDocument(RecRef: RecordRef; RecID: RecordId)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnFindRecordsOnBeforeInitTempTable(var ItemTracingBuffer: Record "Item Tracing Buffer"; Direction: Option; ShowComponents: Option)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnAfterSetRecordID(var TrackingEntry: Record "Item Tracing Buffer"; RecRef: RecordRef)
begin
end;
}