Table 99000851 Production Forecast Name

App
Base Application
Namespace
Microsoft.Manufacturing.Forecast
Versions
17-28

Fields, 11Keys, 1Procedures, 9

Versions171819202122232425262728

Source29

Source in 29

src/Layers/W1/BaseApp/Inventory/Forecast/ProductionForecastName.Table.al227 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.Forecast;

using Microsoft.Foundation.Enums;
using Microsoft.Inventory.Item;
using System.Automation;
using System.Utilities;

table 99000851 "Production Forecast Name"
{
    Caption = 'Demand Forecast Name';
    DrillDownPageID = "Demand Forecast Names";
    LookupPageID = "Demand Forecast Names";
    DataCaptionFields = Name, Description;
    DataClassification = CustomerContent;

    fields
    {
        field(1; Name; Code[10])
        {
            Caption = 'Name';
            ToolTip = 'Specifies the name of the demand forecast.';
            NotBlank = true;
        }
        field(2; Description; Text[100])
        {
            Caption = 'Description';
            ToolTip = 'Specifies a brief description of the demand forecast.';
        }
        field(3; "View By"; Enum "Analysis Period Type")
        {
            Caption = 'View By';
            ToolTip = 'Specifies the period of time for which amounts are displayed.';
        }
        field(4; "Forecast Type"; Enum "Demand Forecast Type")
        {
            Caption = 'Forecast Type';
            ToolTip = 'Specifies whether the demand forecast entry is for a sales item or a component item. If you choose Sales Item, only sales orders net the forecast. If you choose Component Item, demand from production order components net the forecast.';
        }
        field(5; "Location Filter"; Blob)
        {
            Caption = 'Location Filter';
        }
        field(6; "Variant Filter"; Blob)
        {
            Caption = 'Variant Filter';
        }
        field(7; "Item Filter"; Blob)
        {
            Caption = 'Item Filter';
        }
        field(8; "Forecast By Locations"; Boolean)
        {
            Caption = 'Forecast by Locations';
            ToolTip = 'Specifies whether to create a forecast entry that includes locations.';
            trigger OnValidate()
            begin
                if not "Forecast By Locations" then begin
                    SetTextFilterToLocationBlob('');
                    Modify();
                end;
            end;
        }
        field(9; "Forecast By Variants"; Boolean)
        {
            Caption = 'Forecast by Variants';
            ToolTip = 'Use this if you want to create a forecast entry including the variants.';
            trigger OnValidate()
            begin
                if not "Forecast By Variants" then begin
                    SetTextFilterToVariantFilterBlob('');
                    Modify();
                end;
            end;
        }
        field(10; "Quantity Type"; Enum "Analysis Amount Type")
        {
            Caption = 'Quantity Type';
            ToolTip = 'Specifies how amounts are displayed. Net Change: The net change in the balance for the selected period. Balance at Date: The balance as of the last day in the selected period.';
        }
        field(11; "Date Filter"; Text[1024])
        {
            Caption = 'Date Filter';
            ToolTip = 'Specifies the dates that will be used to filter the amounts in the window.';
        }
    }

    keys
    {
        key(Key1; Name)
        {
            Clustered = true;
        }
    }

    fieldgroups
    {
    }

    trigger OnDelete()
    var
        ProdForecastEntry: Record "Production Forecast Entry";
    begin
        ProdForecastEntry.SetRange("Production Forecast Name", Name);
        if not ProdForecastEntry.IsEmpty() then begin
            if GuiAllowed then
                if not Confirm(Confirm001Qst, true, Name) then
                    Error('');
            ProdForecastEntry.DeleteAll();
        end;
    end;

    var
        Confirm001Qst: Label 'Demand forecast %1 has entries. Do you want to delete it anyway?', Comment = '%1 = forecast name';
        Confirm002Qst: Label 'The current format of date filter %1 is not valid. Do you want to remove it?', Comment = '%1 = Date Filter';

    procedure GetItemFilterBlobAsViewFilters(): Text
    begin
        exit(GetItemFilterBlobAsRecordRef().GetView());
    end;

    procedure GetItemFilterAsDisplayText(): Text
    begin
        exit(GetItemFilterBlobAsRecordRef().GetFilters);
    end;

    local procedure GetItemFilterBlobAsRecordRef(): RecordRef
    var
        Item: Record Item;
        TempBlob: Codeunit "Temp Blob";
        RequestPageParametersHelper: Codeunit "Request Page Parameters Helper";
        FiltersRecordRef: RecordRef;
    begin
        FiltersRecordRef.GetTable(Item);
        CalcFields("Item Filter");
        TempBlob.FromRecord(Rec, FieldNo("Item Filter"));

        RequestPageParametersHelper.ConvertParametersToFilters(FiltersRecordRef, TempBlob);
        exit(FiltersRecordRef);
    end;

    procedure GetItemFilterBlobAsText(): Text
    var
        FiltersInStream: InStream;
        ItemFilterText: Text;
    begin
        CalcFields("Item Filter");
        "Item Filter".CreateInStream(FiltersInStream, TextEncoding::UTF8);
        FiltersInStream.ReadText(ItemFilterText);
        exit(ItemFilterText);
    end;

    procedure SetTextFilterToItemFilterBlob(TextFilter: Text)
    var
        FiltersOutStream: OutStream;
    begin
        Clear("Item Filter");
        "Item Filter".CreateOutStream(FiltersOutStream, TextEncoding::UTF8);
        FiltersOutStream.WriteText(TextFilter);
    end;

    procedure SetTextFilterToVariantFilterBlob(TextFilter: Text)
    var
        FiltersOutStream: OutStream;
    begin
        Clear("Variant Filter");
        "Variant Filter".CreateOutStream(FiltersOutStream, TextEncoding::UTF8);
        FiltersOutStream.WriteText(TextFilter);
    end;

    procedure GetVariantFilterBlobAsText(): Text
    var
        FiltersInStream: InStream;
        VariantFilterText: Text;
    begin
        CalcFields("Variant Filter");
        "Variant Filter".CreateInStream(FiltersInStream, TextEncoding::UTF8);
        FiltersInStream.ReadText(VariantFilterText);
        exit(VariantFilterText);
    end;

    procedure SetTextFilterToLocationBlob(TextFilter: Text)
    var
        FiltersOutStream: OutStream;
    begin
        Clear("Location Filter");
        "Location Filter".CreateOutStream(FiltersOutStream, TextEncoding::UTF8);
        FiltersOutStream.WriteText(TextFilter);
    end;

    procedure GetLocationFilterBlobAsText(): Text
    var
        FiltersInStream: InStream;
        LocationFilterText: Text;
    begin
        CalcFields("Location Filter");
        "Location Filter".CreateInStream(FiltersInStream, TextEncoding::UTF8);
        FiltersInStream.ReadText(LocationFilterText);
        exit(LocationFilterText);
    end;

    procedure CheckDateFilterIsValid()
    begin
        if TrySetFilter("Date Filter") then
            exit;

        if GuiAllowed() then
            if not Confirm(Confirm002Qst, true, "Date Filter") then
                Error('');

        Rec."Date Filter" := '';
        Rec.Modify();
    end;

    [TryFunction]
    local procedure TrySetFilter(DateFilter: Text)
    var
        Period: Record Date;
    begin
        Period.SetFilter("Period Start", DateFilter);
    end;
}