Page 99000892 Work Center Group Load Lines, source in 29
Source29
src/Layers/W1/BaseApp/Manufacturing/WorkCenter/WorkCenterGroupLoadLines.Page.al237 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.WorkCenter;
using Microsoft.Foundation.Enums;
using Microsoft.Foundation.Period;
using Microsoft.Manufacturing.Capacity;
using Microsoft.Manufacturing.Document;
using Microsoft.Manufacturing.Setup;
using System.Utilities;
page 99000892 "Work Center Group Load Lines"
{
Caption = 'Lines';
DeleteAllowed = false;
Editable = false;
InsertAllowed = false;
LinksAllowed = false;
PageType = ListPart;
SaveValues = true;
SourceTable = "Load Buffer";
SourceTableTemporary = true;
layout
{
area(content)
{
repeater(Control1)
{
ShowCaption = false;
field("Period Start"; Rec."Period Start")
{
ApplicationArea = Manufacturing;
Caption = 'Period Start';
}
field("Period Name"; Rec."Period Name")
{
ApplicationArea = Manufacturing;
Caption = 'Period Name';
}
field(Capacity; Rec.Capacity)
{
ApplicationArea = Manufacturing;
AutoFormatType = 0;
Caption = 'Capacity';
DecimalPlaces = 0 : 5;
ToolTip = 'Specifies the amount of work that can be done in a specified time period at this work center group. ';
trigger OnDrillDown()
var
CalendarEntry: Record "Calendar Entry";
begin
CalendarEntry.SetCurrentKey("Work Center Group Code");
CalendarEntry.SetRange("Work Center Group Code", WorkCenterGroup.Code);
CalendarEntry.SetFilter(Date, WorkCenterGroup.GetFilter("Date Filter"));
PAGE.Run(0, CalendarEntry);
end;
}
#pragma warning disable AA0100
field("WorkCenterGroup.""Prod. Order Need (Qty.)"""; Rec."Allocated Qty.")
#pragma warning restore AA0100
{
AutoFormatType = 0;
ApplicationArea = Manufacturing;
Caption = 'Allocated Qty.';
DecimalPlaces = 0 : 5;
ToolTip = 'Specifies the amount of capacity that is needed to produce a desired output in a given time period. ';
trigger OnDrillDown()
var
ProdOrderCapNeed: Record "Prod. Order Capacity Need";
begin
ProdOrderCapNeed.SetCurrentKey("Work Center Group Code", Date);
ProdOrderCapNeed.SetRange("Requested Only", false);
ProdOrderCapNeed.SetRange("Work Center Group Code", WorkCenterGroup.Code);
ProdOrderCapNeed.SetFilter(Date, WorkCenterGroup.GetFilter("Date Filter"));
PAGE.Run(0, ProdOrderCapNeed);
end;
}
field(CapacityAvailable; Rec."Availability After Orders")
{
AutoFormatType = 0;
ApplicationArea = Manufacturing;
Caption = 'Availability After Orders';
DecimalPlaces = 0 : 5;
ToolTip = 'Specifies the available capacity of this work center group that is not used in the planning of a given time period.';
}
field(CapacityEfficiency; Rec.Load)
{
AutoFormatType = 0;
ApplicationArea = Manufacturing;
Caption = 'Load';
DecimalPlaces = 0 : 5;
ToolTip = 'Specifies the sum of the required number of times that all the planned and actual orders are run on the work center group in a specified period.';
}
}
}
}
actions
{
}
trigger OnAfterGetRecord()
begin
if DateRec.Get(Rec."Period Type", Rec."Period Start") then;
CalcLine();
end;
trigger OnFindRecord(Which: Text) FoundDate: Boolean
var
VariantRec: Variant;
begin
VariantRec := Rec;
FoundDate := PeriodFormLinesMgt.FindDate(VariantRec, DateRec, Which, PeriodType.AsInteger());
Rec := VariantRec;
end;
trigger OnNextRecord(Steps: Integer) ResultSteps: Integer
var
VariantRec: Variant;
begin
VariantRec := Rec;
ResultSteps := PeriodFormLinesMgt.NextDate(VariantRec, DateRec, Steps, PeriodType.AsInteger());
Rec := VariantRec;
end;
trigger OnOpenPage()
begin
Rec.Reset();
MfgSetup.Get();
MfgSetup.TestField("Show Capacity In");
end;
var
MfgSetup: Record "Manufacturing Setup";
DateRec: Record Date;
PeriodFormLinesMgt: Codeunit "Period Form Lines Mgt.";
protected var
WorkCenterGroup: Record "Work Center Group";
CapacityUoM: Code[10];
PeriodType: Enum "Analysis Period Type";
AmountType: Enum "Analysis Amount Type";
procedure SetLines(var NewWorkCenterGroup: Record "Work Center Group"; NewPeriodType: Enum "Analysis Period Type"; NewAmountType: Enum "Analysis Amount Type"; NewCapUoM: Code[10])
begin
WorkCenterGroup.Copy(NewWorkCenterGroup);
Rec.DeleteAll();
PeriodType := NewPeriodType;
AmountType := NewAmountType;
CapacityUoM := NewCapUoM;
CurrPage.Update(false);
end;
local procedure SetDateFilter()
begin
if AmountType = AmountType::"Net Change" then
WorkCenterGroup.SetRange("Date Filter", Rec."Period Start", Rec."Period End")
else
WorkCenterGroup.SetRange("Date Filter", 0D, Rec."Period End");
end;
local procedure CalculateCapacity(var WorkCenterGroup: Record "Work Center Group")
var
WorkCenter: Record "Work Center";
CalendarMgt: Codeunit "Shop Calendar Management";
begin
if CapacityUoM = '' then
CapacityUoM := MfgSetup."Show Capacity In";
OnBeforeCalculateCapacity(WorkCenterGroup, CapacityUoM);
Clear(WorkCenterGroup."Capacity (Effective)");
Clear(WorkCenterGroup."Prod. Order Need (Qty.)");
WorkCenter.SetCurrentKey("Work Center Group Code");
WorkCenter.SetRange("Work Center Group Code", WorkCenterGroup.Code);
if WorkCenter.FindSet() then
repeat
WorkCenterGroup.CopyFilter("Date Filter", WorkCenter."Date Filter");
WorkCenter.CalcFields("Capacity (Effective)", "Prod. Order Need (Qty.)");
WorkCenterGroup."Capacity (Effective)" +=
WorkCenter."Capacity (Effective)" *
CalendarMgt.TimeFactor(WorkCenter."Unit of Measure Code") /
CalendarMgt.TimeFactor(CapacityUoM);
WorkCenterGroup."Prod. Order Need (Qty.)" +=
WorkCenter."Prod. Order Need (Qty.)" *
CalendarMgt.TimeFactor(WorkCenter."Unit of Measure Code") /
CalendarMgt.TimeFactor(CapacityUoM);
OnAfterCalculateWorkCenterCapacity(WorkCenter, WorkCenterGroup, CapacityUoM);
until WorkCenter.Next() = 0;
OnAfterCalculateCapacity(WorkCenterGroup, CapacityUoM);
end;
local procedure CalcLine()
begin
SetDateFilter();
CalculateCapacity(WorkCenterGroup);
Rec.Capacity := WorkCenterGroup."Capacity (Effective)";
Rec."Allocated Qty." := WorkCenterGroup."Prod. Order Need (Qty.)";
Rec."Availability After Orders" := WorkCenterGroup."Capacity (Effective)" - WorkCenterGroup."Prod. Order Need (Qty.)";
if WorkCenterGroup."Capacity (Effective)" <> 0 then
Rec.Load := Round(WorkCenterGroup."Prod. Order Need (Qty.)" / WorkCenterGroup."Capacity (Effective)" * 100, 0.1)
else
Rec.Load := 0;
OnAfterCalcLine(WorkCenterGroup, Rec, CapacityUoM);
end;
[IntegrationEvent(false, false)]
local procedure OnAfterCalcLine(var WorkCenterGroup: Record "Work Center Group"; var LoadBuffer: Record "Load Buffer"; CapacityUoM: Code[10])
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeCalculateCapacity(var WorkCenterGroup: Record "Work Center Group"; var CapacityUoM: Code[10])
begin
end;
[IntegrationEvent(false, false)]
local procedure OnAfterCalculateCapacity(var WorkCenterGroup: Record "Work Center Group"; var CapacityUoM: Code[10])
begin
end;
[IntegrationEvent(false, false)]
local procedure OnAfterCalculateWorkCenterCapacity(var WorkCenter: Record "Work Center"; var WorkCenterGroup: Record "Work Center Group"; var CapacityUoM: Code[10])
begin
end;
}