Table 5941 Service Item Component

App
Base Application
Namespace
Microsoft.Service.Item
Versions
17-28

Fields, 13Keys, 5Procedures, 2Events, 3

Versions171819202122232425262728

Source29

Source in 29

src/Layers/W1/BaseApp/Service/Item/ServiceItemComponent.Table.al353 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.Service.Item;

using Microsoft.Inventory.Item;
using Microsoft.Inventory.Ledger;
using Microsoft.Service.Document;
using System.Utilities;

table 5941 "Service Item Component"
{
    Caption = 'Service Item Component';
    DrillDownPageID = "Service Item Component List";
    LookupPageID = "Service Item Component List";
    DataClassification = CustomerContent;

    fields
    {
        field(1; "Parent Service Item No."; Code[20])
        {
            Caption = 'Parent Service Item No.';
            ToolTip = 'Specifies the number of the service item in which the component is included.';
            TableRelation = "Service Item";
        }
        field(3; "Line No."; Integer)
        {
            Caption = 'Line No.';
            ToolTip = 'Specifies the number of the line.';
        }
        field(4; Active; Boolean)
        {
            Caption = 'Active';
            ToolTip = 'Specifies that the component is in use.';
        }
        field(5; Type; Enum "Service Item Component Type")
        {
            Caption = 'Type';
            ToolTip = 'Specifies the component type.';

            trigger OnValidate()
            begin
                if Type <> xRec.Type then
                    Validate("No.", '');
            end;
        }
        field(6; "No."; Code[20])
        {
            Caption = 'No.';
            ToolTip = 'Specifies the number of the involved entry or record, according to the specified number series.';
            TableRelation = if (Type = const("Service Item")) "Service Item"
            else
            if (Type = const(Item)) Item;

            trigger OnLookup()
            begin
                case Type of
                    Type::"Service Item":
                        begin
                            ServItem.Get("Parent Service Item No.");
                            ServItem2.Reset();
                            ServItem2.SetCurrentKey("Customer No.", "Ship-to Code");
                            ServItem2.SetRange("Customer No.", ServItem."Customer No.");
                            ServItem2.SetRange("Ship-to Code", ServItem."Ship-to Code");
                            ServItem2."No." := "No.";
                            if PAGE.RunModal(0, ServItem2) = ACTION::LookupOK then
                                Validate("No.", ServItem2."No.");
                        end;
                    Type::Item:
                        begin
                            Item."No." := xRec."No.";
                            if PAGE.RunModal(0, Item) = ACTION::LookupOK then
                                Validate("No.", Item."No.");
                        end;
                    else
                        OnLookupNoOnCaseElse(Rec);
                end;
            end;

            trigger OnValidate()
            begin
                if "No." <> '' then begin
                    case Type of
                        Type::"Service Item":
                            begin
                                if "No." = "Parent Service Item No." then
                                    Error(
                                      Text000,
                                      Type, "No.", TableCaption(), ServItem.TableCaption(), "Parent Service Item No.");
                                ServItem.Get("No.");
                                "Serial No." := ServItem."Serial No.";
                                "Variant Code" := ServItem."Variant Code";
                                Description := ServItem.Description;
                                "Description 2" := ServItem."Description 2";
                            end;
                        Type::Item:
                            begin
                                Item.Get("No.");
                                "Serial No." := '';
                                Description := Item.Description;
                                "Description 2" := Item."Description 2";
                            end;
                        else
                            OnValidateNoOnCaseElse(Rec);
                    end;
                    "Date Installed" := WorkDate();
                end else begin
                    "No." := '';
                    "Date Installed" := 0D;
                    "Serial No." := '';
                    Description := '';
                    "Description 2" := '';
                end;

                Validate("Serial No.");
            end;
        }
        field(7; "Date Installed"; Date)
        {
            Caption = 'Date Installed';
            ToolTip = 'Specifies the date when the component was installed.';
        }
        field(8; "Variant Code"; Code[10])
        {
            Caption = 'Variant Code';
            ToolTip = 'Specifies the variant of the item on the line.';
            TableRelation = if (Type = const(Item)) "Item Variant".Code where("Item No." = field("No."));

            trigger OnLookup()
            var
                IsHandled: Boolean;
            begin
                OnBeforeLookupVariantCode(Rec, IsHandled);
                if IsHandled then
                    exit;

                case Type of
                    Type::Item:
                        begin
                            ItemVariant.Reset();
                            ItemVariant.SetRange("Item No.", "No.");
                            if PAGE.RunModal(PAGE::"Item Variants", ItemVariant) = ACTION::LookupOK then
                                "Variant Code" := ItemVariant.Code;
                        end;
                    Type::"Service Item":
                        begin
                            if "No." <> '' then begin
                                ServItem.Get("No.");
                                ItemVariant.Reset();
                                ItemVariant.SetRange("Item No.", ServItem."Item No.");
                            end else
                                ItemVariant.SetRange("Item No.", '');
                            if PAGE.RunModal(PAGE::"Item Variants", ItemVariant) = ACTION::LookupOK then
                                Validate("Variant Code", ItemVariant.Code);
                        end;
                end;
            end;

            trigger OnValidate()
            begin
                if Type = Type::"Service Item" then
                    if "No." <> '' then begin
                        ServItem.Get("No.");
                        TestField("Variant Code", ServItem."Variant Code");
                    end;
            end;
        }
        field(11; "Serial No."; Code[50])
        {
            Caption = 'Serial No.';
            ToolTip = 'Specifies the serial number of the component.';

            trigger OnValidate()
            begin
                if (Type = Type::"Service Item") and
                   ("No." <> '')
                then begin
                    ServItem.Get("No.");
                    if "Serial No." <> ServItem."Serial No." then
                        Error(Text001, FieldCaption("Serial No."), Type, "No.");
                end;
            end;
        }
        field(12; Description; Text[100])
        {
            Caption = 'Description';
            ToolTip = 'Specifies a description of the component.';
        }
        field(13; "Description 2"; Text[50])
        {
            Caption = 'Description 2';
        }
        field(15; "Service Order No."; Code[20])
        {
            Caption = 'Service Order No.';
            ToolTip = 'Specifies the number of the service order under which this component was replaced.';
            //The property 'ValidateTableRelation' can only be set if the property 'TableRelation' is set
            //ValidateTableRelation = false;

            trigger OnLookup()
            begin
                ServOrderMgt.ServHeaderLookup(1, "Service Order No.");
            end;
        }
        field(16; "From Line No."; Integer)
        {
            Caption = 'From Line No.';
            ToolTip = 'Specifies the line number assigned to the component when it was an active component of the service item.';
        }
        field(17; "Last Date Modified"; Date)
        {
            Caption = 'Last Date Modified';
            ToolTip = 'Specifies the date when the component was last modified.';
        }
    }

    keys
    {
        key(Key1; Active, "Parent Service Item No.", "Line No.")
        {
            Clustered = true;
        }
        key(Key2; Active, "Parent Service Item No.", "From Line No.")
        {
        }
        key(Key3; Type, "No.", Active)
        {
        }
        key(Key4; Active, "Parent Service Item No.", Type, "No.")
        {
        }
        key(Key5; "Parent Service Item No.", "Line No.")
        {
        }
    }

    fieldgroups
    {
    }

    trigger OnDelete()
    var
        ConfirmManagement: Codeunit "Confirm Management";
    begin
        if Active then begin
            ServItemComponent.Reset();
            ServItemComponent.SetCurrentKey(Active, "Parent Service Item No.", "From Line No.");
            ServItemComponent.SetRange(Active, false);
            ServItemComponent.SetRange("Parent Service Item No.", "Parent Service Item No.");
            ServItemComponent.SetRange("From Line No.", "Line No.");
            if ServItemComponent.FindFirst() then
                if not ConfirmManagement.GetResponseOrDefault(StrSubstNo(Text002, "No."), true) then
                    Error('');
            ServItemComponent.DeleteAll();
        end;
    end;

    trigger OnModify()
    begin
        if Active and (Type <> xRec.Type) then begin
            ServItemComponent.Reset();
            ServItemComponent.SetCurrentKey(Active, "Parent Service Item No.", "Line No.");
            ServItemComponent.SetRange(Active, false);
            ServItemComponent.SetRange("Parent Service Item No.", "Parent Service Item No.");
            if ServItemComponent.FindLast() then
                NextNo := ServItemComponent."Line No." + 1
            else
                NextNo := 1;
            ServItemComponent := xRec;
            ServItemComponent.Active := false;
            ServItemComponent."Line No." := NextNo;
            ServItemComponent."From Line No." := "Line No.";
            ServItemComponent."Last Date Modified" := Today;
            ServItemComponent.Insert(true);
        end;
    end;

    var
        ServItemComponent: Record "Service Item Component";
        ServItem: Record "Service Item";
        ServItem2: Record "Service Item";
        Item: Record Item;
        ItemVariant: Record "Item Variant";
        ServOrderMgt: Codeunit ServOrderManagement;
        NextNo: Integer;

#pragma warning disable AA0074
#pragma warning disable AA0470
        Text000: Label '%1 %2 can not be a component in %3 for %4 %5';
        Text001: Label '%1 must be the same as in %2 %3.';
        Text002: Label 'Component %1 has replacements\Do you want to delete this Component?';
#pragma warning restore AA0470
#pragma warning restore AA0074

    procedure AssistEditSerialNo()
    var
        ItemLedgEntry: Record "Item Ledger Entry";
    begin
        TestField(Type, Type::Item);
        Clear(ItemLedgEntry);
        ItemLedgEntry.SetCurrentKey("Item No.", Open);
        ItemLedgEntry.SetRange("Item No.", "No.");
        ItemLedgEntry.SetRange(Open, true);
        if "Variant Code" <> '' then
            ItemLedgEntry.SetRange("Variant Code", "Variant Code");
        ItemLedgEntry.SetFilter("Serial No.", '<>%1', '');
        if PAGE.RunModal(0, ItemLedgEntry) = ACTION::LookupOK then
            "Serial No." := ItemLedgEntry."Serial No.";
    end;

    procedure SplitLineNo(xServiceItemComponent: Record "Service Item Component"; BelowxRec: Boolean) ResultLineNo: Integer
    var
        ServiceItemComponent: Record "Service Item Component";
    begin
        if "Line No." <> 0 then
            ResultLineNo := "Line No."
        else begin
            ServiceItemComponent.SetCurrentKey("Parent Service Item No.", "Line No.");
            TestField("Parent Service Item No.");
            ServiceItemComponent.SetRange("Parent Service Item No.", "Parent Service Item No.");
            if BelowxRec then begin
                if ServiceItemComponent.FindLast() then;
                ResultLineNo := ServiceItemComponent."Line No." + 10000;
            end else
                if "Parent Service Item No." = xServiceItemComponent."Parent Service Item No." then begin
                    ServiceItemComponent.SetFilter("Line No.", '<%1', xServiceItemComponent."Line No.");
                    if ServiceItemComponent.FindLast() then;
                    ResultLineNo := Round((xServiceItemComponent."Line No." + ServiceItemComponent."Line No.") / 2, 1);
                end else begin
                    if ServiceItemComponent.FindLast() then;
                    ResultLineNo := ServiceItemComponent."Line No." + 10000;
                end;
        end;
    end;

    [IntegrationEvent(false, false)]
    local procedure OnBeforeLookupVariantCode(var ServiceItemComponent: Record "Service Item Component"; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnLookupNoOnCaseElse(var ServiceItemComponent: Record "Service Item Component")
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnValidateNoOnCaseElse(var ServiceItemComponent: Record "Service Item Component")
    begin
    end;
}