Table 5841 Standard Cost Worksheet, source in 29

Source29

src/Layers/W1/BaseApp/Inventory/Costing/StandardCostWorksheet.Table.al509 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.Manufacturing.StandardCost;

using Microsoft.Inventory.Item;
using Microsoft.Inventory.StandardCost;
using Microsoft.Projects.Resources.Resource;

table 5841 "Standard Cost Worksheet"
{
    Caption = 'Standard Cost Worksheet';
    DataClassification = CustomerContent;

    fields
    {
        field(2; "Standard Cost Worksheet Name"; Code[10])
        {
            Caption = 'Standard Cost Worksheet Name';
            TableRelation = "Standard Cost Worksheet Name";
        }
        field(3; Type; Enum "Standard Cost Source Type")
        {
            Caption = 'Type';
            ToolTip = 'Specifies the type of worksheet line.';

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

            trigger OnValidate()
            var
                TempStdCostWksh: Record "Standard Cost Worksheet" temporary;
            begin
                TempStdCostWksh := Rec;
                Init();
                Type := TempStdCostWksh.Type;
                "No." := TempStdCostWksh."No.";
                "Replenishment System" := "Replenishment System"::" ";

                if "No." = '' then
                    exit;

                case Type of
                    Type::Item:
                        begin
                            Item.Get("No.");
                            Description := Item.Description;
                            "Replenishment System" := Item."Replenishment System";
                            GetItemCosts();
                        end;
                    Type::Resource:
                        begin
                            Res.Get("No.");
                            Description := Res.Name;
                            GetResourceCosts();
                        end;
                end;
            end;
        }
        field(5; Description; Text[100])
        {
            Caption = 'Description';
            ToolTip = 'Specifies the description of the worksheet line.';
        }
        field(6; Implemented; Boolean)
        {
            Caption = 'Implemented';
            ToolTip = 'Specifies that you have run the Implement Standard Cost Changes batch job.';
            Editable = false;
        }
        field(7; "Replenishment System"; Enum "Replenishment System")
        {
            Caption = 'Replenishment System';
            ToolTip = 'Specifies the replenishment method for the items, for example, purchase or prod. order.';
            Editable = false;
        }
        field(11; "Standard Cost"; Decimal)
        {
            AutoFormatType = 2;
            AutoFormatExpression = '';
            Caption = 'Standard Cost';
            ToolTip = 'Specifies the unit cost that is used as an estimation to be adjusted with variances later. It is typically used in assembly and production where costs can vary.';
            Editable = false;
            MinValue = 0;
        }
        field(12; "New Standard Cost"; Decimal)
        {
            AutoFormatType = 2;
            AutoFormatExpression = '';
            Caption = 'New Standard Cost';
            ToolTip = 'Specifies the updated value based on either the batch job or what you have entered manually.';
            MinValue = 0;

            trigger OnValidate()
            begin
                if Type = Type::Item then
                    UpdateCostShares();
            end;
        }
        field(13; "Indirect Cost %"; Decimal)
        {
            AutoFormatType = 0;
            Caption = 'Indirect Cost %';
            ToolTip = 'Specifies the percentage of the item''s last purchase cost that includes indirect costs, such as freight that is associated with the purchase of the item.';
            DecimalPlaces = 0 : 5;
            Editable = false;
            MinValue = 0;
        }
        field(14; "New Indirect Cost %"; Decimal)
        {
            AutoFormatType = 0;
            Caption = 'New Indirect Cost %';
            ToolTip = 'Specifies the updated value based on either the batch job or what you have entered manually.';
            DecimalPlaces = 0 : 5;
            MinValue = 0;
        }
        field(15; "Overhead Rate"; Decimal)
        {
            AutoFormatType = 0;
            Caption = 'Overhead Rate';
            ToolTip = 'Specifies the overhead rate.';
            DecimalPlaces = 2 : 5;
            Editable = false;
        }
        field(16; "New Overhead Rate"; Decimal)
        {
            AutoFormatType = 0;
            Caption = 'New Overhead Rate';
            ToolTip = 'Specifies the updated value based on either the batch job or what you have entered manually.';
            DecimalPlaces = 2 : 5;

            trigger OnValidate()
            begin
                if Type = Type::Resource then
                    TestField("New Overhead Rate", 0);
            end;
        }
        field(21; "Single-Lvl Material Cost"; Decimal)
        {
            AutoFormatType = 2;
            AutoFormatExpression = '';
            Caption = 'Single-Lvl Material Cost';
            ToolTip = 'Specifies the single-level material cost of the item.';
            Editable = false;
        }
        field(22; "New Single-Lvl Material Cost"; Decimal)
        {
            AutoFormatType = 2;
            AutoFormatExpression = '';
            Caption = 'New Single-Lvl Material Cost';
            ToolTip = 'Specifies the updated value based on either the batch job or what you have entered manually.';
            DataClassification = CustomerContent;
            Editable = false;
        }
        field(23; "Single-Lvl Cap. Cost"; Decimal)
        {
            AutoFormatType = 2;
            AutoFormatExpression = '';
            Caption = 'Single-Lvl Cap. Cost';
            ToolTip = 'Specifies the single-level capacity cost of the item.';
            DataClassification = CustomerContent;
            Editable = false;
        }
        field(24; "New Single-Lvl Cap. Cost"; Decimal)
        {
            AutoFormatType = 2;
            AutoFormatExpression = '';
            Caption = 'New Single-Lvl Cap. Cost';
            ToolTip = 'Specifies the updated value based on either the batch job or what you have entered manually.';
            DataClassification = CustomerContent;
            Editable = false;
        }
        field(25; "Single-Lvl Subcontrd Cost"; Decimal)
        {
            AutoFormatType = 2;
            AutoFormatExpression = '';
            Caption = 'Single-Lvl Subcontrd Cost';
            ToolTip = 'Specifies the single-level subcontracted cost of the item.';
            DataClassification = CustomerContent;
            Editable = false;
        }
        field(26; "New Single-Lvl Subcontrd Cost"; Decimal)
        {
            AutoFormatType = 2;
            AutoFormatExpression = '';
            Caption = 'New Single-Lvl Subcontrd Cost';
            ToolTip = 'Specifies the updated value based on either the batch job or what you have entered manually.';
            DataClassification = CustomerContent;
            Editable = false;
        }
        field(27; "Single-Lvl Cap. Ovhd Cost"; Decimal)
        {
            AutoFormatType = 2;
            AutoFormatExpression = '';
            Caption = 'Single-Lvl Cap. Ovhd Cost';
            ToolTip = 'Specifies the single-level capacity overhead cost of the item.';
            DataClassification = CustomerContent;
            Editable = false;
        }
        field(28; "New Single-Lvl Cap. Ovhd Cost"; Decimal)
        {
            AutoFormatType = 2;
            AutoFormatExpression = '';
            Caption = 'New Single-Lvl Cap. Ovhd Cost';
            ToolTip = 'Specifies the updated value based on either the batch job or what you have entered manually.';
            DataClassification = CustomerContent;
            Editable = false;
        }
        field(29; "Single-Lvl Mfg. Ovhd Cost"; Decimal)
        {
            AutoFormatType = 2;
            AutoFormatExpression = '';
            Caption = 'Single-Lvl Mfg. Ovhd Cost';
            ToolTip = 'Specifies the single-level manufacturing overhead cost of the item.';
            DataClassification = CustomerContent;
            Editable = false;
        }
        field(30; "New Single-Lvl Mfg. Ovhd Cost"; Decimal)
        {
            AutoFormatType = 2;
            AutoFormatExpression = '';
            Caption = 'New Single-Lvl Mfg. Ovhd Cost';
            ToolTip = 'Specifies the updated value based on either the batch job or what you have entered manually.';
            DataClassification = CustomerContent;
            Editable = false;
        }
        field(41; "Rolled-up Material Cost"; Decimal)
        {
            AutoFormatType = 2;
            AutoFormatExpression = '';
            Caption = 'Rolled-up Material Cost';
            ToolTip = 'Specifies the rolled-up material cost of the item.';
            DataClassification = CustomerContent;
            Editable = false;
        }
        field(42; "New Rolled-up Material Cost"; Decimal)
        {
            AutoFormatType = 2;
            AutoFormatExpression = '';
            Caption = 'New Rolled-up Material Cost';
            ToolTip = 'Specifies the updated rolled-up material cost based on either the batch job or what you have entered manually.';
            DataClassification = CustomerContent;
            Editable = false;
        }
        field(43; "Rolled-up Cap. Cost"; Decimal)
        {
            AutoFormatType = 2;
            AutoFormatExpression = '';
            Caption = 'Rolled-up Cap. Cost';
            ToolTip = 'Specifies the rolled-up capacity cost of the item.';
            DataClassification = CustomerContent;
            Editable = false;
        }
        field(44; "New Rolled-up Cap. Cost"; Decimal)
        {
            AutoFormatType = 2;
            AutoFormatExpression = '';
            Caption = 'New Rolled-up Cap. Cost';
            ToolTip = 'Specifies the updated value based on either the batch job or what you have entered manually.';
            DataClassification = CustomerContent;
            Editable = false;
        }
        field(45; "Rolled-up Subcontrd Cost"; Decimal)
        {
            AutoFormatType = 2;
            AutoFormatExpression = '';
            Caption = 'Rolled-up Subcontrd Cost';
            ToolTip = 'Specifies the rolled-up subcontracted cost of the item.';
            DataClassification = CustomerContent;
            Editable = false;
        }
        field(46; "New Rolled-up Subcontrd Cost"; Decimal)
        {
            AutoFormatType = 2;
            AutoFormatExpression = '';
            Caption = 'New Rolled-up Subcontrd Cost';
            ToolTip = 'Specifies the updated value based on either the batch job or what you have entered manually.';
            DataClassification = CustomerContent;
            Editable = false;
        }
        field(47; "Rolled-up Cap. Ovhd Cost"; Decimal)
        {
            AutoFormatType = 2;
            AutoFormatExpression = '';
            Caption = 'Rolled-up Cap. Ovhd Cost';
            ToolTip = 'Specifies the rolled-up capacity overhead cost of the item.';
            DataClassification = CustomerContent;
            Editable = false;
        }
        field(48; "New Rolled-up Cap. Ovhd Cost"; Decimal)
        {
            AutoFormatType = 2;
            AutoFormatExpression = '';
            Caption = 'New Rolled-up Cap. Ovhd Cost';
            ToolTip = 'Specifies the updated value based on either the batch job or what you have entered manually.';
            DataClassification = CustomerContent;
            Editable = false;
        }
        field(49; "Rolled-up Mfg. Ovhd Cost"; Decimal)
        {
            AutoFormatType = 2;
            AutoFormatExpression = '';
            Caption = 'Rolled-up Mfg. Ovhd Cost';
            ToolTip = 'Specifies the rolled-up manufacturing overhead cost of the item.';
            DataClassification = CustomerContent;
            Editable = false;
        }
        field(50; "New Rolled-up Mfg. Ovhd Cost"; Decimal)
        {
            AutoFormatType = 2;
            AutoFormatExpression = '';
            Caption = 'New Rolled-up Mfg. Ovhd Cost';
            ToolTip = 'Specifies the updated value based on either the batch job or what you have entered manually.';
            DataClassification = CustomerContent;
            Editable = false;
        }
    }

    keys
    {
        key(Key1; "Standard Cost Worksheet Name", Type, "No.")
        {
            Clustered = true;
        }
    }

    fieldgroups
    {
    }

    trigger OnInsert()
    begin
        StdCostWkshName.Get("Standard Cost Worksheet Name");
    end;

    var
        Item: Record Item;
        Res: Record Resource;
        StdCostWkshName: Record "Standard Cost Worksheet Name";

    local procedure GetItemCosts()
    begin
        OnBeforeGetItemCosts(Rec, Item);

        "Standard Cost" := Item."Standard Cost";
        "New Standard Cost" := Item."Standard Cost";
        "Overhead Rate" := Item."Overhead Rate";
        "New Overhead Rate" := Item."Overhead Rate";
        "Indirect Cost %" := Item."Indirect Cost %";
        "New Indirect Cost %" := Item."Indirect Cost %";

        TransferStandardCostFromItem();

        OnAfterGetItemCosts(Rec, Item);
    end;

    local procedure GetResourceCosts()
    begin
        OnBeforeGetResourceCosts(Rec, Res);

        "Standard Cost" := Res."Unit Cost";
        "New Standard Cost" := Res."Unit Cost";
        "Overhead Rate" := 0;
        "New Overhead Rate" := 0;
        "Indirect Cost %" := Res."Indirect Cost %";
        "New Indirect Cost %" := Res."Indirect Cost %";
    end;

    local procedure UpdateCostShares()
    var
        Ratio: Decimal;
        RoundingResidual: Decimal;
    begin
        if xRec."New Standard Cost" <> 0 then
            Ratio := "New Standard Cost" / xRec."New Standard Cost";

        "New Single-Lvl Material Cost" := RoundAmt("New Single-Lvl Material Cost", Ratio);
        "New Single-Lvl Mfg. Ovhd Cost" := RoundAmt("New Single-Lvl Mfg. Ovhd Cost", Ratio);
        "New Single-Lvl Cap. Cost" := RoundAmt("New Single-Lvl Cap. Cost", Ratio);
        "New Single-Lvl Subcontrd Cost" := RoundAmt("New Single-Lvl Subcontrd Cost", Ratio);
        "New Single-Lvl Cap. Ovhd Cost" := RoundAmt("New Single-Lvl Cap. Ovhd Cost", Ratio);
        RoundingResidual := "New Standard Cost" -
          ("New Single-Lvl Material Cost" +
           "New Single-Lvl Mfg. Ovhd Cost" +
           "New Single-Lvl Cap. Cost" +
           "New Single-Lvl Subcontrd Cost" +
           "New Single-Lvl Cap. Ovhd Cost");
        "New Single-Lvl Material Cost" := "New Single-Lvl Material Cost" + RoundingResidual;

        "New Rolled-up Material Cost" := RoundAmt("New Rolled-up Material Cost", Ratio);
        "New Rolled-up Mfg. Ovhd Cost" := RoundAmt("New Rolled-up Mfg. Ovhd Cost", Ratio);
        "New Rolled-up Cap. Cost" := RoundAmt("New Rolled-up Cap. Cost", Ratio);
        "New Rolled-up Subcontrd Cost" := RoundAmt("New Rolled-up Subcontrd Cost", Ratio);
        "New Rolled-up Cap. Ovhd Cost" := RoundAmt("New Rolled-up Cap. Ovhd Cost", Ratio);
        RoundingResidual := "New Standard Cost" -
          ("New Rolled-up Material Cost" +
           "New Rolled-up Mfg. Ovhd Cost" +
           "New Rolled-up Cap. Cost" +
           "New Rolled-up Subcontrd Cost" +
           "New Rolled-up Cap. Ovhd Cost");
        "New Rolled-up Material Cost" := "New Rolled-up Material Cost" + RoundingResidual;

        OnAfterUpdateCostShares(Rec, Ratio);
    end;

    local procedure RoundAmt(Amt: Decimal; AmtAdjustFactor: Decimal): Decimal
    begin
        exit(Round(Amt * AmtAdjustFactor, 0.00001));
    end;

    local procedure TransferStandardCostFromItem()
    begin
        "Single-Lvl Material Cost" := Item."Standard Cost";
        "New Single-Lvl Material Cost" := Item."Standard Cost";
        "Single-Lvl Cap. Cost" := 0;
        "New Single-Lvl Cap. Cost" := 0;
        "Single-Lvl Subcontrd Cost" := 0;
        "New Single-Lvl Subcontrd Cost" := 0;
        "Single-Lvl Cap. Ovhd Cost" := 0;
        "New Single-Lvl Cap. Ovhd Cost" := 0;
        "Single-Lvl Mfg. Ovhd Cost" := 0;
        "New Single-Lvl Mfg. Ovhd Cost" := 0;

        "Rolled-up Material Cost" := Item."Standard Cost";
        "New Rolled-up Material Cost" := Item."Standard Cost";
        "Rolled-up Cap. Cost" := 0;
        "New Rolled-up Cap. Cost" := 0;
        "Rolled-up Subcontrd Cost" := 0;
        "New Rolled-up Subcontrd Cost" := 0;
        "Rolled-up Cap. Ovhd Cost" := 0;
        "New Rolled-up Cap. Ovhd Cost" := 0;
        "Rolled-up Mfg. Ovhd Cost" := 0;
        "New Rolled-up Mfg. Ovhd Cost" := 0;

        OnAfterTransferStandardCostFromItem(Rec, Item);
    end;

    procedure TransferManufCostsFromItem(var Item: Record Item)
    begin
        "Single-Lvl Material Cost" := Item."Single-Level Material Cost";
        "New Single-Lvl Material Cost" := Item."Single-Level Material Cost";
        "Single-Lvl Cap. Cost" := Item."Single-Level Capacity Cost";
        "New Single-Lvl Cap. Cost" := Item."Single-Level Capacity Cost";
        "Single-Lvl Subcontrd Cost" := Item."Single-Level Subcontrd. Cost";
        "New Single-Lvl Subcontrd Cost" := Item."Single-Level Subcontrd. Cost";
        "Single-Lvl Cap. Ovhd Cost" := Item."Single-Level Cap. Ovhd Cost";
        "New Single-Lvl Cap. Ovhd Cost" := Item."Single-Level Cap. Ovhd Cost";
        "Single-Lvl Mfg. Ovhd Cost" := Item."Single-Level Mfg. Ovhd Cost";
        "New Single-Lvl Mfg. Ovhd Cost" := Item."Single-Level Mfg. Ovhd Cost";

        "Rolled-up Material Cost" := Item."Rolled-up Material Cost";
        "New Rolled-up Material Cost" := Item."Rolled-up Material Cost";
        "Rolled-up Cap. Cost" := Item."Rolled-up Capacity Cost";
        "New Rolled-up Cap. Cost" := Item."Rolled-up Capacity Cost";
        "Rolled-up Subcontrd Cost" := Item."Rolled-up Subcontracted Cost";
        "New Rolled-up Subcontrd Cost" := Item."Rolled-up Subcontracted Cost";
        "Rolled-up Cap. Ovhd Cost" := Item."Rolled-up Cap. Overhead Cost";
        "New Rolled-up Cap. Ovhd Cost" := Item."Rolled-up Cap. Overhead Cost";
        "Rolled-up Mfg. Ovhd Cost" := Item."Rolled-up Mfg. Ovhd Cost";
        "New Rolled-up Mfg. Ovhd Cost" := Item."Rolled-up Mfg. Ovhd Cost";

        OnAfterTransferManufCostsFromItem(Rec, Item);
    end;

    [IntegrationEvent(false, false)]
    local procedure OnAfterTransferStandardCostFromItem(var StandardCostWorksheet: Record "Standard Cost Worksheet"; var Item: Record Item)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnAfterTransferManufCostsFromItem(var StandardCostWorksheet: Record "Standard Cost Worksheet"; Item: Record Item)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnAfterUpdateCostShares(var StandardCostWorksheet: Record "Standard Cost Worksheet"; Ratio: Decimal)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnAfterGetItemCosts(var StandardCostWorksheet: Record "Standard Cost Worksheet"; var Item: Record Item)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnBeforeGetItemCosts(var StandardCostWorksheet: Record "Standard Cost Worksheet"; var Item: Record Item)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnBeforeGetResourceCosts(var StandardCostWorksheet: Record "Standard Cost Worksheet"; var Resource: Record Resource)
    begin
    end;
}