Codeunit 5703 Catalog Item Management

App
Base Application
Namespace
Microsoft.Inventory.Item.Catalog
Versions
17-28

Procedures, 26Events, 59Obsolete, 15

Versions171819202122232425262728

Source29

Source in 29

src/Layers/W1/BaseApp/Inventory/Item/Catalog/CatalogItemManagement.Codeunit.al834 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.Item.Catalog;

using Microsoft.Foundation.NoSeries;
using Microsoft.Foundation.UOM;
using Microsoft.Inventory.BOM;
using Microsoft.Inventory.Item;
using Microsoft.Inventory.Ledger;
using Microsoft.Inventory.Setup;
using Microsoft.Purchases.Document;
using Microsoft.Sales.Archive;
using Microsoft.Sales.Document;
using System.Security.AccessControl;

codeunit 5703 "Catalog Item Management"
{

    trigger OnRun()
    begin
    end;

    var
        NewItem: Record Item;
        NonStock: Record "Nonstock Item";
        ItemVend: Record "Item Vendor";
        ProgWindow: Dialog;

#pragma warning disable AA0074
#pragma warning disable AA0470
        Text000: Label 'Item %1 already exists.';
        Text001: Label 'Item %1 is created.';
#pragma warning restore AA0470
        Text002: Label 'You cannot enter a catalog item on %1.', Comment = '%1=Sales Line document type';
        Text003: Label 'Creating item card for catalog item\';
#pragma warning disable AA0470
        Text004: Label 'Manufacturer Code    #1####\';
        Text005: Label 'Vendor               #2##################\';
        Text006: Label 'Vendor Item          #3##################\';
        Text007: Label 'Item No.             #4##################';
#pragma warning restore AA0470
#pragma warning restore AA0074

    procedure NonstockAutoItem(NonStock2: Record "Nonstock Item")
    var
        IsHandled: Boolean;
    begin
        OnBeforeNonstockAutoItem(NonStock2);
        CheckItemAlreadyExists(NonStock2);

        DetermineItemNoAndItemNoSeries(NonStock2);
        NonStock2.Modify();
        OnNonstockAutoItemOnBeforeInsertItemUnitOfMeasure(NonStock2);
        InsertItemUnitOfMeasure(NonStock2."Unit of Measure", NonStock2."Item No.");

        CheckNonStockItem(NonStock2);

        CheckItemAlreadyExists(NonStock2);

        CreateNewItem(NonStock2);

        IsHandled := false;
        OnNonstockAutoItemOnAfterCreateNewItem(NewItem, IsHandled);
        if not IsHandled then
            ShowItemCreatedMessage(NonStock2);

        if CheckLicensePermission(DATABASE::"Item Vendor") then
            NonstockItemVend(NonStock2);
        if CheckLicensePermission(DATABASE::"Item Reference") then
            NonstockItemReference(NonStock2);

        OnAfterNonstockAutoItem(NonStock2, NewItem);
    end;

    local procedure CheckItemAlreadyExists(NonStock2: Record "Nonstock Item")
    var
        IsHandled: Boolean;
    begin
        IsHandled := false;
        OnBeforeCheckItemAlreadyExists(NonStock2, IsHandled);
        if IsHandled then
            exit;

        if NewItem.Get(NonStock2."Item No.") then
            Error(Text000, NonStock2."Item No.");
    end;

    local procedure ShowItemCreatedMessage(NonStock2: Record "Nonstock Item")
    var
        IsHandled: Boolean;
    begin
        IsHandled := false;
        OnBeforeShowItemCreatedMessage(NewItem, NonStock2, IsHandled);
        if not IsHandled then
            Message(Text001, NonStock2."Item No.");
    end;

    local procedure CheckNonStockItem(NonStock2: Record "Nonstock Item")
    var
        IsHandled: Boolean;
    begin
        IsHandled := false;
        OnBeforeCheckNonStockItem(NonStock2, IsHandled);
        if IsHandled then
            exit;

        NonStock2.TestField("Vendor No.");
        NonStock2.TestField("Vendor Item No.");
        CheckItemTemplateCode(NonStock2);
    end;

    procedure NonstockItemVend(NonStock2: Record "Nonstock Item")
    begin
        OnBeforeNonstockItemVend(NonStock2);

        ItemVend.SetRange("Item No.", NonStock2."Item No.");
        ItemVend.SetRange("Vendor No.", NonStock2."Vendor No.");
        if ItemVend.FindFirst() then
            exit;

        ItemVend."Item No." := NonStock2."Item No.";
        ItemVend."Vendor No." := NonStock2."Vendor No.";
        ItemVend."Vendor Item No." := NonStock2."Vendor Item No.";
        OnNonstockItemVendOnBeforeItemVendInsert(ItemVend, NonStock2);
        ItemVend.Insert(true);

        OnAfterNonstockItemVend(NonStock2, ItemVend);
    end;

    procedure NonstockItemReference(var NonStock2: Record "Nonstock Item")
    var
        ItemReference: Record "Item Reference";
        IsHandled: Boolean;
    begin
        IsHandled := false;
        OnBeforeNonstockItemReference(NonStock2, IsHandled);
        if IsHandled then
            exit;

        ItemReference.SetRange("Item No.", NonStock2."Item No.");
        ItemReference.SetRange("Unit of Measure", NonStock2."Unit of Measure");
        ItemReference.SetRange("Reference Type", ItemReference."Reference Type"::Vendor);
        ItemReference.SetRange("Reference Type No.", NonStock2."Vendor No.");
        ItemReference.SetRange("Reference No.", NonStock2."Vendor Item No.");
        OnNonstockItemReferenceOnAfterSetVendorItemNoFilters(ItemReference, NonStock2);
        if not ItemReference.FindFirst() then begin
            ItemReference.Init();
            ItemReference.Validate("Item No.", NonStock2."Item No.");
            ItemReference.Validate("Unit of Measure", NonStock2."Unit of Measure");
            ItemReference.Validate("Reference Type", ItemReference."Reference Type"::Vendor);
            ItemReference.Validate("Reference Type No.", NonStock2."Vendor No.");
            ItemReference.Validate("Reference No.", NonStock2."Vendor Item No.");
            ItemReference.Insert();
            OnAfterItemReferenceInsert(ItemReference, NonStock2);
        end;
        if NonStock2."Bar Code" <> '' then begin
            ItemReference.Reset();
            ItemReference.SetRange("Item No.", NonStock2."Item No.");
            ItemReference.SetRange("Unit of Measure", NonStock2."Unit of Measure");
            ItemReference.SetRange("Reference Type", ItemReference."Reference Type"::"Bar Code");
            ItemReference.SetRange("Reference No.", NonStock2."Bar Code");
            OnNonstockItemReferenceOnAfterSetBarCodeFilters(ItemReference, NonStock2);
            if not ItemReference.FindFirst() then begin
                ItemReference.Init();
                ItemReference.Validate("Item No.", NonStock2."Item No.");
                ItemReference.Validate("Unit of Measure", NonStock2."Unit of Measure");
                ItemReference.Validate("Reference Type", ItemReference."Reference Type"::"Bar Code");
                ItemReference.Validate("Reference No.", NonStock2."Bar Code");
                ItemReference.Insert();
                OnAfterItemReferenceInsert(ItemReference, NonStock2);
            end;
        end;

        OnAfterNonstockItemCrossRef(NonStock2);
    end;

    procedure NonstockItemDel(var Item: Record Item)
    var
        ItemReference: Record "Item Reference";
    begin
        ItemVend.SetRange("Item No.", Item."No.");
        ItemVend.SetRange("Vendor No.", Item."Vendor No.");
        ItemVend.DeleteAll();

        ItemReference.SetRange("Item No.", Item."No.");
        ItemReference.SetRange("Variant Code", Item."Variant Filter");
        ItemReference.DeleteAll();

        NonStock.SetCurrentKey("Item No.");
        NonStock.SetRange("Item No.", Item."No.");
        if NonStock.FindSet() then
            repeat
                NonStock."Item No." := '';
                NonStock."Item No. Series" := '';
                NonStock.Modify();
            until NonStock.Next() = 0;

        OnAfterNonstockItemDel(Item);
    end;

    procedure NonStockSales(var SalesLine2: Record "Sales Line")
    var
        IsHandled: Boolean;
    begin
        IsHandled := false;
        OnBeforeNonStockSales(NonStock, SalesLine2, IsHandled);
        if IsHandled then
            exit;
        if (SalesLine2."Document Type" in
            [SalesLine2."Document Type"::"Return Order", SalesLine2."Document Type"::"Credit Memo"])
        then
            Error(Text002, SalesLine2."Document Type");

        NonStock.Get(SalesLine2."No.");
        if NonStock."Item No." <> '' then begin
            SalesLine2."No." := NonStock."Item No.";
            exit;
        end;

        DetermineItemNoAndItemNoSeries(NonStock);
        NonStock.Modify();
        SalesLine2."No." := NonStock."Item No.";
        OnNonStockSalesOnBeforeInsertItemUnitOfMeasure(NonStock);
        InsertItemUnitOfMeasure(NonStock."Unit of Measure", SalesLine2."No.");

        NewItem.SetRange("No.", SalesLine2."No.");
        if NewItem.FindFirst() then
            exit;

        if GuiAllowed() then
            OpenProgressDialog(NonStock, SalesLine2."No.");

        CreateNewItem(NonStock);
        OnNonStockSalesOnAfterCreateNewItem(NewItem);

        if CheckLicensePermission(DATABASE::"Item Vendor") then
            NonstockItemVend(NonStock);
        if CheckLicensePermission(DATABASE::"Item Reference") then
            NonstockItemReference(NonStock);

        IsHandled := false;
        OnNonStockSalesOnBeforeProgWindowClose(NonStock, NewItem, SalesLine2, IsHandled);
        if not IsHandled then
            if GuiAllowed() then
                ProgWindow.Close();
    end;

    procedure DelNonStockSales(var SalesLine2: Record "Sales Line")
    var
        IsHandled: Boolean;
    begin
        IsHandled := false;
        OnBeforeDelNonStockSales(SalesLine2, IsHandled);
        if IsHandled then
            exit;

        if SalesLine2.Nonstock = false then
            exit;

        NewItem.Get(SalesLine2."No.");
        SalesLine2."No." := '';
        SalesLine2.Modify();

        DelNonStockItem(NewItem);
    end;

    procedure DelNonStockPurch(var PurchLine2: Record "Purchase Line")
    var
        IsHandled: Boolean;
    begin
        IsHandled := false;
        OnBeforeDelNonStockPurch(PurchLine2, IsHandled);
        if IsHandled then
            exit;

        if PurchLine2.Nonstock = false then
            exit;

        NewItem.Get(PurchLine2."No.");
        PurchLine2."No." := '';
        PurchLine2.Modify();

        DelNonStockItem(NewItem);
    end;


    procedure DelNonStockSalesArch(var SalesLineArchive2: Record "Sales Line Archive")
    var
        IsHandled: Boolean;
    begin
        IsHandled := false;
        OnBeforeDelNonStockSalesArch(SalesLineArchive2, IsHandled);
        if IsHandled then
            exit;

        if NewItem.Get(SalesLineArchive2."No.") then begin
            SalesLineArchive2."No." := '';
            SalesLineArchive2.Modify();

            DelNonStockItem(NewItem);
        end;
    end;


    procedure CreateItemFromNonstock(Nonstock2: Record "Nonstock Item")
    begin
        OnBeforeCreateItemFromNonstock(Nonstock2);
        if NewItem.Get(Nonstock2."Item No.") then
            Error(Text000, Nonstock2."Item No.");

        DetermineItemNoAndItemNoSeries(Nonstock2);
        Nonstock2.Modify();
        OnCreateItemFromNonstockOnBeforeInsertItemUnitOfMeasure(NonStock2);
        InsertItemUnitOfMeasure(Nonstock2."Unit of Measure", Nonstock2."Item No.");

        CheckNonStockItem(NonStock2);

        if NewItem.Get(Nonstock2."Item No.") then
            Error(Text000, Nonstock2."Item No.");

        CreateNewItem(Nonstock2);

        if CheckLicensePermission(DATABASE::"Item Vendor") then
            NonstockItemVend(Nonstock2);
        if CheckLicensePermission(DATABASE::"Item Reference") then
            NonstockItemReference(Nonstock2);
    end;

    procedure OpenProgressDialog(NonStockItem: Record "Nonstock Item"; ItemNo: Code[20])
    begin
        ProgWindow.Open(Text003 + Text004 + Text005 + Text006 + Text007);
        ProgWindow.Update(1, NonStockItem."Manufacturer Code");
        ProgWindow.Update(2, NonStockItem."Vendor No.");
        ProgWindow.Update(3, NonStockItem."Vendor Item No.");
        ProgWindow.Update(4, ItemNo);
    end;

    procedure CloseProgressDialog()
    begin
        ProgWindow.Close();
    end;

    procedure CheckLicensePermission(TableID: Integer): Boolean
    var
        LicensePermission: Record "License Permission";
    begin
        LicensePermission.SetRange("Object Type", LicensePermission."Object Type"::TableData);
        LicensePermission.SetRange("Object Number", TableID);
        LicensePermission.SetFilter("Insert Permission", '<>%1', LicensePermission."Insert Permission"::" ");
        exit(LicensePermission.FindFirst());
    end;

    procedure DelNonStockItem(var Item: Record Item)
    var
        BOMComp: Record "BOM Component";
        ItemLedgEntry: Record "Item Ledger Entry";
        PurchLine: Record "Purchase Line";
        SalesLine: Record "Sales Line";
        SalesLineArch: Record "Sales Line Archive";
        IsHandled: Boolean;
        ShouldExit: Boolean;
    begin
        IsHandled := false;
        OnBeforeDelNonStockItem(Item, IsHandled);
        if IsHandled then
            exit;

        ItemLedgEntry.SetCurrentKey("Item No.");
        ItemLedgEntry.SetRange("Item No.", Item."No.");
        if not ItemLedgEntry.IsEmpty() then
            exit;

        SalesLine.SetCurrentKey(Type, "No.");
        SalesLine.SetRange(Type, SalesLine.Type::Item);
        SalesLine.SetRange("No.", Item."No.");
        if not SalesLine.IsEmpty() then
            exit;

        PurchLine.SetCurrentKey(Type, "No.");
        PurchLine.SetRange(Type, PurchLine.Type::Item);
        PurchLine.SetRange("No.", Item."No.");
        if not PurchLine.IsEmpty() then
            exit;

        BOMComp.SetCurrentKey(Type, "No.");
        BOMComp.SetRange(Type, BOMComp.Type::Item);
        BOMComp.SetRange("No.", Item."No.");
        if not BOMComp.IsEmpty() then
            exit;

        SalesLineArch.SetCurrentKey(Type, "No.");
        SalesLineArch.SetRange(Type, SalesLineArch.Type::Item);
        SalesLineArch.SetRange("No.", Item."No.");
        if not SalesLineArch.IsEmpty() then
            exit;

        OnDelNonStockItemOnAfterCheckRelations(Item, ShouldExit);
        if ShouldExit then
            exit;

        NewItem.Get(Item."No.");
        DeleteCreatedFromNonstockItem();
    end;

    local procedure DeleteCreatedFromNonstockItem()
    var
        ItemNo: Code[20];
        IsHandled: Boolean;
    begin
        IsHandled := false;
        OnBeforeDeleteCreatedFromNonstockItem(NewItem, NonStock, IsHandled);
        if IsHandled then
            exit;

        ItemNo := NewItem."No.";
        if NewItem."Created From Nonstock Item" then
            if NewItem.Delete(true) then begin
                NonStock.SetRange("Item No.", ItemNo);
                if NonStock.Find('-') then
                    repeat
                        NonStock."Item No." := '';
                        NonStock."Item No. Series" := '';
                        NonStock.Modify();
                    until NonStock.Next() = 0;
            end;
    end;

    procedure InsertItemUnitOfMeasure(UnitOfMeasureCode: Code[10]; ItemNo: Code[20])
    var
        ItemUnitOfMeasure: Record "Item Unit of Measure";
        IsHandled: Boolean;
    begin
        OnBeforeInsertItemUnitOfMeasure(UnitOfMeasureCode, ItemNo);
        InsertUnitOfMeasure(UnitOfMeasureCode, ItemNo);

        IsHandled := false;
        OnInsertItemUnitOfMeasuresOnBeforeItemUnitOfMeasureGet(UnitOfMeasureCode, IsHandled);
        if not IsHandled then
            if not ItemUnitOfMeasure.Get(ItemNo, UnitOfMeasureCode) then begin
                ItemUnitOfMeasure."Item No." := ItemNo;
                ItemUnitOfMeasure.Code := UnitOfMeasureCode;
                ItemUnitOfMeasure."Qty. per Unit of Measure" := 1;
                ItemUnitOfMeasure.Insert();
            end;
    end;

    local procedure InsertUnitOfMeasure(UnitOfMeasureCode: Code[10]; ItemNo: Code[20])
    var
        UnitOfMeasure: Record "Unit of Measure";
    begin
        if not UnitOfMeasure.Get(UnitOfMeasureCode) then begin
            UnitOfMeasure.Code := UnitOfMeasureCode;
            UnitOfMeasure.Insert();
        end;
        OnAfterInsertUnitOfMeasure(UnitOfMeasureCode, ItemNo);
    end;

#pragma warning disable AS0074
#pragma warning restore AS0074

    procedure DetermineItemNoAndItemNoSeries(var NonstockItem: Record "Nonstock Item")
    var
        NonstockItemSetupMy: Record "Nonstock Item Setup";
        Length1: Integer;
        Length2: Integer;
        IsHandled: Boolean;
    begin
        OnBeforeDetermineItemNoAndItemNoSeries(NonstockItem, IsHandled);
        if IsHandled then
            exit;

        Length1 := StrLen(NonstockItem."Vendor Item No.");
        Length2 := StrLen(NonstockItem."Manufacturer Code");
        NonstockItemSetupMy.Get();
        case NonstockItemSetupMy."No. Format" of
            NonstockItemSetupMy."No. Format"::"Vendor Item No.":
                NonstockItem."Item No." := NonstockItem."Vendor Item No.";
            NonstockItemSetupMy."No. Format"::"Mfr. + Vendor Item No.":
                if NonstockItemSetupMy."No. Format Separator" = '' then begin
                    if Length1 + Length2 <= 20 then
                        Evaluate(NonstockItem."Item No.", NonstockItem."Manufacturer Code" + NonstockItem."Vendor Item No.")
                    else
                        Evaluate(NonstockItem."Item No.", NonstockItem."Manufacturer Code" + NonstockItem."Entry No.");
                end else
                    if Length1 + Length2 < 20 then
                        Evaluate(
                            NonstockItem."Item No.",
                            NonstockItem."Manufacturer Code" + NonstockItemSetupMy."No. Format Separator" + NonstockItem."Vendor Item No.")
                    else
                        Evaluate(
                            NonstockItem."Item No.",
                            NonstockItem."Manufacturer Code" + NonstockItemSetupMy."No. Format Separator" + NonstockItem."Entry No.");
            NonstockItemSetupMy."No. Format"::"Vendor Item No. + Mfr.":
                if NonstockItemSetupMy."No. Format Separator" = '' then begin
                    if Length1 + Length2 <= 20 then
                        Evaluate(NonstockItem."Item No.", NonstockItem."Vendor Item No." + NonstockItem."Manufacturer Code")
                    else
                        Evaluate(NonstockItem."Item No.", NonstockItem."Entry No." + NonstockItem."Manufacturer Code");
                end else
                    if Length1 + Length2 < 20 then
                        Evaluate(
                            NonstockItem."Item No.",
                            NonstockItem."Vendor Item No." + NonstockItemSetupMy."No. Format Separator" + NonstockItem."Manufacturer Code")
                    else
                        Evaluate(
                            NonstockItem."Item No.",
                            NonstockItem."Entry No." + NonstockItemSetupMy."No. Format Separator" + NonstockItem."Manufacturer Code");
            NonstockItemSetupMy."No. Format"::"Entry No.":
                NonstockItem."Item No." := NonstockItem."Entry No.";
            NonstockItemSetupMy."No. Format"::"Item No. Series":
                GetItemNoFromNoSeries(NonstockItem);
        end;

        OnAfterDetermineItemNoAndItemNoSeries(NonstockItem);
    end;

    local procedure GetItemNoFromNoSeries(var NonstockItem: Record "Nonstock Item")
    var
        InvtSetup: Record "Inventory Setup";
        ItemTempl: Record "Item Templ.";
        NoSeries: Codeunit "No. Series";
        IsHandled: Boolean;
    begin
        OnBeforeGetItemNoFromNoSeries(NonstockItem, IsHandled);
        if IsHandled then
            exit;

        ItemTempl.SetLoadFields("No. Series");
        ItemTempl.Get(NonstockItem."Item Templ. Code");
        NonstockItem."Item No. Series" := ItemTempl."No. Series";

        if NonstockItem."Item No. Series" = '' then begin
            InvtSetup.Get();
            InvtSetup.TestField("Item Nos.");
            NonstockItem."Item No. Series" := InvtSetup."Item Nos.";
        end;

            NonstockItem."No. Series" := NonstockItem."Item No. Series";
            NonstockItem."Item No." := NoSeries.GetNextNo(NonstockItem."No. Series");
        OnAfterGetItemNoFromNoSeries(NonstockItem);
    end;

    procedure CreateNewItem(NonstockItem: Record "Nonstock Item")
    var
        Item: Record Item;
        InventorySetup: Record "Inventory Setup";
        ItemTemplMgt: Codeunit "Item Templ. Mgt.";
        IsHandled: Boolean;
    begin
        IsHandled := false;
        OnBeforeCreateNewItem(NonstockItem, IsHandled);
        if IsHandled then
            exit;

        InventorySetup.SetLoadFields("Default Costing Method");
        InventorySetup.Get();

        Item.Init();
        Item."No." := NonstockItem."Item No.";
        Item."Costing Method" := InventorySetup."Default Costing Method";
        OnCreateNewItemOnBeforeItemInsert(Item, NonstockItem);
        Item.Insert();

        InitItemFromTemplate(Item, NonstockItem);

        Item."No. Series" := NonstockItem."Item No. Series";
        Item.Description := NonstockItem.Description;
        Item.Validate(Description, Item.Description);
        Item.Validate("Base Unit of Measure", NonstockItem."Unit of Measure");
        Item."Unit Price" := NonstockItem."Unit Price";
        Item."Unit Cost" := NonstockItem."Negotiated Cost";
        Item."Last Direct Cost" := NonstockItem."Negotiated Cost";
        if Item."Costing Method" = Item."Costing Method"::Standard then
            Item."Standard Cost" := NonstockItem."Negotiated Cost";
        Item."Automatic Ext. Texts" := false;
        Item.Validate("Vendor No.", NonstockItem."Vendor No.");
        Item."Vendor Item No." := NonstockItem."Vendor Item No.";
        Item."Net Weight" := NonstockItem."Net Weight";
        Item."Gross Weight" := NonstockItem."Gross Weight";
        Item."Manufacturer Code" := NonstockItem."Manufacturer Code";
        Item."Created From Nonstock Item" := true;
        OnCreateNewItemOnBeforeItemModify(Item, NonstockItem);
        Item.Modify();

        ItemTemplMgt.InsertDimensions(Item."No.", NonstockItem."Item Templ. Code", Database::Item, Database::"Item Templ.");
        Item.Get(NonstockItem."Item No.");

        OnAfterCreateNewItem(Item, NonstockItem, NewItem);
    end;

    local procedure InitItemFromTemplate(var Item: Record Item; NonstockItem: Record "Nonstock Item")
    var
        ItemTempl: Record "Item Templ.";
        ItemTemplMgt: Codeunit "Item Templ. Mgt.";
        IsHandled: Boolean;
    begin
        IsHandled := false;
        OnBeforeInitItemFromTemplate(Item, NonstockItem, IsHandled);
        if not IsHandled then begin
            ItemTempl.Get(NonstockItem."Item Templ. Code");
            ItemTemplMgt.InitFromTemplate(Item, ItemTempl, true);
            OnAfterInitItemFromTemplate(Item, ItemTempl, NonstockItem);
        end;
    end;

    procedure CheckItemTemplateCode(NonstockItem: Record "Nonstock Item")
    var
        IsHandled: Boolean;
    begin
        IsHandled := false;
        OnBeforeCheckItemTemplateCode(NonstockItem, IsHandled);
        if IsHandled then
            exit;

        NonstockItem.TestField("Item Templ. Code");
    end;

    [IntegrationEvent(false, false)]
    local procedure OnAfterCreateNewItem(var Item: Record Item; NonstockItem: Record "Nonstock Item"; var NewItem: Record Item)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnAfterInsertUnitOfMeasure(UnitOfMeasureCode: Code[10]; ItemNo: Code[20])
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnNonstockItemReferenceOnAfterSetBarCodeFilters(var ItemReference: Record "Item Reference"; NonstockItem: Record "Nonstock Item")
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnNonstockItemReferenceOnAfterSetVendorItemNoFilters(var ItemReference: Record "Item Reference"; NonstockItem: Record "Nonstock Item")
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnAfterDetermineItemNoAndItemNoSeries(var NonstockItem: Record "Nonstock Item")
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnAfterItemReferenceInsert(var ItemReference: Record "Item Reference"; NonstockItem: Record "Nonstock Item")
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnAfterNonstockItemDel(var Item: Record Item)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnAfterNonstockAutoItem(var NonStock: Record "Nonstock Item"; var NewItem: Record Item)
    begin
    end;

    [IntegrationEvent(false, false)]
    procedure OnBeforeCreateItemFromNonstock(var NonstockItem: Record "Nonstock Item")
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnBeforeInsertItemUnitOfMeasure(UnitOfMeasureCode: Code[10]; ItemNo: Code[20])
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnAfterNonstockItemVend(NonStockItem: Record "Nonstock Item"; var ItemVendor: Record "Item Vendor")
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnBeforeNonstockItemVend(NonStockItem: Record "Nonstock Item")
    begin
    end;

    [IntegrationEvent(false, false)]
    procedure OnBeforeCheckNonStockItem(var NonstockItem: Record "Nonstock Item"; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    procedure OnBeforeCheckItemAlreadyExists(var NonstockItem: Record "Nonstock Item"; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnBeforeDelNonStockItem(var Item: Record Item; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnBeforeDelNonStockSales(var SalesLine2: Record "Sales Line"; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnBeforeDelNonStockPurch(var PurchaseLine2: Record "Purchase Line"; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnBeforeDeleteCreatedFromNonstockItem(var NewItem: Record Item; var NonStock: Record "Nonstock Item"; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnBeforeDetermineItemNoAndItemNoSeries(var NonstockItem: Record "Nonstock Item"; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnBeforeNonstockAutoItem(var NonStock2: Record "Nonstock Item")
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnBeforeNonstockItemReference(var NonstockItem: Record "Nonstock Item"; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnBeforeNonStockSales(var NonStockItem: Record "Nonstock Item"; var SalesLine: Record "Sales Line"; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnBeforeShowItemCreatedMessage(var NewItem: Record Item; NonStockItem: Record "Nonstock Item"; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnCreateItemFromNonstockOnBeforeInsertItemUnitOfMeasure(var NonStockItem: Record "Nonstock Item")
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnNonstockItemVendOnBeforeItemVendInsert(var ItemVend: Record "Item Vendor"; NonStockItem: Record "Nonstock Item")
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnNonstockAutoItemOnAfterCreateNewItem(var NewItem: Record Item; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnNonstockAutoItemOnBeforeInsertItemUnitOfMeasure(var NonStockItem: Record "Nonstock Item")
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnNonStockSalesOnAfterCreateNewItem(var NewItem: Record Item)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnNonStockSalesOnBeforeInsertItemUnitOfMeasure(var NonStockItem: Record "Nonstock Item")
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnNonStockSalesOnBeforeProgWindowClose(var NonStockItem: Record "Nonstock Item"; var NewItem: Record Item; SalesLine2: Record "Sales Line"; var IsHandled: Boolean)
    begin
    end;



    [IntegrationEvent(false, false)]
    local procedure OnAfterNonstockItemCrossRef(var NonStock2: Record "Nonstock Item")
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnAfterInitItemFromTemplate(var Item: Record Item; ItemTempl: Record "Item Templ."; NonstockItem: Record "Nonstock Item")
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnCreateNewItemOnBeforeItemInsert(var Item: Record Item; NonstockItem: Record "Nonstock Item")
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnInsertItemUnitOfMeasuresOnBeforeItemUnitOfMeasureGet(UnitOfMeasureCode: Code[10]; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnBeforeCheckItemTemplateCode(var NonstockItem: Record "Nonstock Item"; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnBeforeInitItemFromTemplate(var Item: Record Item; NonstockItem: Record "Nonstock Item"; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnBeforeGetItemNoFromNoSeries(var NonstockItem: Record "Nonstock Item"; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnAfterGetItemNoFromNoSeries(var NonstockItem: Record "Nonstock Item")
    begin
    end;



    [IntegrationEvent(false, false)]
    local procedure OnBeforeDelNonStockSalesArch(var SalesLineArchive2: Record "Sales Line Archive"; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnBeforeCreateNewItem(var NonstockItem: Record "Nonstock Item"; var IsHandled: Boolean)
    begin
    end;


    [IntegrationEvent(false, false)]
    local procedure OnCreateNewItemOnBeforeItemModify(var Item: Record Item; NonstockItem: Record "Nonstock Item")
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnDelNonStockItemOnAfterCheckRelations(var Item: Record Item; var ShouldExit: Boolean)
    begin
    end;
}