Table extension 99000759 Mfg. Stockkeeping Unit
- App
- Base Application
- Namespace
- Microsoft.Inventory.Location
- Versions
- 26-28
- Extends
- Stockkeeping Unit
Fields, 20Keys, 2Procedures, 5Obsolete, 3
Versions171819202122232425262728
Source29
Source in 29
src/Layers/W1/BaseApp/Manufacturing/Inventory/Location/MfgStockkeepingUnit.TableExt.al257 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.Location;
using Microsoft.Inventory.Item;
using Microsoft.Manufacturing.Document;
using Microsoft.Manufacturing.ProductionBOM;
using Microsoft.Manufacturing.Routing;
using Microsoft.Manufacturing.Setup;
tableextension 99000759 "Mfg. Stockkeeping Unit" extends "Stockkeeping Unit"
{
fields
{
field(5420; "Scheduled Receipt (Qty.)"; Decimal)
{
AutoFormatType = 0;
CalcFormula = sum("Prod. Order Line"."Remaining Qty. (Base)" where(Status = filter(Planned .. Released),
"Item No." = field("Item No."),
"Location Code" = field("Location Code"),
"Variant Code" = field("Variant Code"),
"Shortcut Dimension 1 Code" = field("Global Dimension 1 Filter"),
"Shortcut Dimension 2 Code" = field("Global Dimension 2 Filter"),
"Ending Date" = field("Date Filter")));
Caption = 'Scheduled Receipt (Qty.)';
DecimalPlaces = 0 : 5;
Editable = false;
FieldClass = FlowField;
}
#if not CLEANSCHEMA28
field(5421; "Scheduled Need (Qty.)"; Decimal)
{
ObsoleteReason = 'Use the field ''Qty. on Component Lines'' instead';
ObsoleteState = Removed;
ObsoleteTag = '28.0';
CalcFormula = sum("Prod. Order Component"."Remaining Qty. (Base)" where(Status = filter(Planned .. Released),
"Item No." = field("Item No."),
"Location Code" = field("Location Code"),
"Variant Code" = field("Variant Code"),
"Shortcut Dimension 1 Code" = field("Global Dimension 1 Filter"),
"Shortcut Dimension 2 Code" = field("Global Dimension 2 Filter"),
"Due Date" = field("Date Filter")));
Caption = 'Scheduled Need (Qty.)';
DecimalPlaces = 0 : 5;
Editable = false;
FieldClass = FlowField;
}
#endif
field(99000750; "Routing No."; Code[20])
{
Caption = 'Routing No.';
DataClassification = CustomerContent;
TableRelation = "Routing Header";
}
field(99000751; "Production BOM No."; Code[20])
{
Caption = 'Production BOM No.';
DataClassification = CustomerContent;
TableRelation = "Production BOM Header";
trigger OnValidate()
var
Item: Record Item;
ItemUnitOfMeasure: Record "Item Unit of Measure";
MfgSetup: Record "Manufacturing Setup";
ProdBOMHeader: Record "Production BOM Header";
CalculateLowLevelCode: Codeunit "Calculate Low-Level Code";
xLowLevelCode: Integer;
begin
if ("Production BOM No." <> '') and ("Production BOM No." <> xRec."Production BOM No.") then begin
ProdBOMHeader.Get("Production BOM No.");
ItemUnitOfMeasure.Get("Item No.", ProdBOMHeader."Unit of Measure Code");
if ProdBOMHeader.Status = ProdBOMHeader.Status::Certified then begin
MfgSetup.Get();
Item.Get("Item No.");
if MfgSetup."Dynamic Low-Level Code" then begin
xLowLevelCode := Item."Low-Level Code";
Item."Low-Level Code" := CalculateLowLevelCode.CalcLevels(1, Item."No.", 0, 0);
if Item."Low-Level Code" <> xLowLevelCode then
Item.Modify();
CalculateLowLevelCode.SetRecursiveLevelsOnBOM(ProdBOMHeader, Item."Low-Level Code" + 1, false);
end;
end;
end;
end;
}
field(99000765; "Planned Order Receipt (Qty.)"; Decimal)
{
AutoFormatType = 0;
CalcFormula = sum("Prod. Order Line"."Remaining Qty. (Base)" where(Status = const(Planned),
"Item No." = field("Item No."),
"Variant Code" = field("Variant Code"),
"Shortcut Dimension 1 Code" = field("Global Dimension 1 Filter"),
"Shortcut Dimension 2 Code" = field("Global Dimension 2 Filter"),
"Location Code" = field("Location Code"),
"Ending Date" = field("Date Filter")));
Caption = 'Planned Order Receipt (Qty.)';
DecimalPlaces = 0 : 5;
Editable = false;
FieldClass = FlowField;
}
field(99000766; "FP Order Receipt (Qty.)"; Decimal)
{
AutoFormatType = 0;
CalcFormula = sum("Prod. Order Line"."Remaining Qty. (Base)" where(Status = const("Firm Planned"),
"Item No." = field("Item No."),
"Variant Code" = field("Variant Code"),
"Shortcut Dimension 1 Code" = field("Global Dimension 1 Filter"),
"Shortcut Dimension 2 Code" = field("Global Dimension 2 Filter"),
"Location Code" = field("Location Code"),
"Ending Date" = field("Date Filter")));
Caption = 'FP Order Receipt (Qty.)';
DecimalPlaces = 0 : 5;
Editable = false;
FieldClass = FlowField;
}
field(99000767; "Rel. Order Receipt (Qty.)"; Decimal)
{
AutoFormatType = 0;
CalcFormula = sum("Prod. Order Line"."Remaining Qty. (Base)" where(Status = const(Released),
"Item No." = field("Item No."),
"Variant Code" = field("Variant Code"),
"Shortcut Dimension 1 Code" = field("Global Dimension 1 Filter"),
"Shortcut Dimension 2 Code" = field("Global Dimension 2 Filter"),
"Location Code" = field("Location Code"),
"Ending Date" = field("Date Filter")));
Caption = 'Rel. Order Receipt (Qty.)';
DecimalPlaces = 0 : 5;
Editable = false;
FieldClass = FlowField;
}
field(99000769; "Planned Order Release (Qty.)"; Decimal)
{
AutoFormatType = 0;
CalcFormula = sum("Prod. Order Line"."Remaining Qty. (Base)" where(Status = const(Planned),
"Item No." = field("Item No."),
"Variant Code" = field("Variant Code"),
"Shortcut Dimension 1 Code" = field("Global Dimension 1 Filter"),
"Shortcut Dimension 2 Code" = field("Global Dimension 2 Filter"),
"Location Code" = field("Location Code"),
"Starting Date" = field("Date Filter")));
Caption = 'Planned Order Release (Qty.)';
DecimalPlaces = 0 : 5;
Editable = false;
FieldClass = FlowField;
}
field(99000777; "Qty. on Prod. Order"; Decimal)
{
AutoFormatType = 0;
CalcFormula = sum("Prod. Order Line"."Remaining Qty. (Base)" where(Status = filter(Planned .. Released),
"Item No." = field("Item No."),
"Shortcut Dimension 1 Code" = field("Global Dimension 1 Filter"),
"Shortcut Dimension 2 Code" = field("Global Dimension 2 Filter"),
"Location Code" = field("Location Code"),
"Variant Code" = field("Variant Code"),
"Due Date" = field("Date Filter")));
Caption = 'Qty. on Prod. Order';
DecimalPlaces = 0 : 5;
Editable = false;
FieldClass = FlowField;
}
field(99000778; "Qty. on Component Lines"; Decimal)
{
AutoFormatType = 0;
CalcFormula = sum("Prod. Order Component"."Remaining Qty. (Base)" where(Status = filter(Planned .. Released),
"Item No." = field("Item No."),
"Shortcut Dimension 1 Code" = field("Global Dimension 1 Filter"),
"Shortcut Dimension 2 Code" = field("Global Dimension 2 Filter"),
"Location Code" = field("Location Code"),
"Variant Code" = field("Variant Code"),
"Due Date" = field("Date Filter")));
Caption = 'Qty. on Component Lines';
DecimalPlaces = 0 : 5;
Editable = false;
FieldClass = FlowField;
}
}
keys
{
key(Key8; "Production BOM No.")
{
}
key(Key9; "Routing No.")
{
}
}
var
#if not CLEAN27
HideNonInventoryValidateOnStdCost: Boolean;
#endif
NoActiveBOMVersionFoundErr: Label 'There is no active Production BOM for the item %1', Comment = '%1 - Item No.';
#if not CLEAN27
[Obsolete('procedure that was implemented to bypass the error has now been identified as unnecessary', '27.0')]
procedure SetHideNonInventoryValidateOnStdCost(NewHideNonInventoryValidateOnStdCost: Boolean)
begin
HideNonInventoryValidateOnStdCost := NewHideNonInventoryValidateOnStdCost;
end;
[Obsolete('procedure that was implemented to bypass the error has now been identified as unnecessary', '27.0')]
procedure CanHideNonInventoryValidateOnStdCost(): Boolean
begin
exit(HideNonInventoryValidateOnStdCost);
end;
#endif
internal procedure OpenProductionBOMForSKUItem(ProductionBOMNo: Code[20]; ItemNo: Code[20])
var
Item: Record Item;
ProductionBOMHeader: Record "Production BOM Header";
begin
if ProductionBOMNo = '' then begin
Item.SetLoadFields("Production BOM No.");
if Item.Get(ItemNo) then
ProductionBOMNo := Item."Production BOM No.";
end;
ProductionBOMHeader.SetRange("No.", ProductionBOMNo);
Page.RunModal(Page::"Production BOM", ProductionBOMHeader);
end;
internal procedure OpenActiveProductionBOMForSKUItem(ProductionBOMNo: Code[20]; ItemNo: Code[20])
var
Item: Record Item;
ProductionBOMHeader: Record "Production BOM Header";
ProductionBOMVersion: Record "Production BOM Version";
VersionManagement: Codeunit VersionManagement;
ActiveVersionNo: Code[20];
begin
if ProductionBOMNo = '' then begin
Item.SetLoadFields("Production BOM No.");
if Item.Get(ItemNo) then
ProductionBOMNo := Item."Production BOM No.";
end;
if ProductionBOMNo = '' then
Error(NoActiveBOMVersionFoundErr, ItemNo);
ActiveVersionNo := VersionManagement.GetBOMVersion(ProductionBOMNo, WorkDate(), true);
if ActiveVersionNo <> '' then begin
ProductionBOMVersion.SetRange("Production BOM No.", ProductionBOMNo);
ProductionBOMVersion.SetRange("Version Code", ActiveVersionNo);
Page.RunModal(Page::"Production BOM Version", ProductionBOMVersion);
end else begin
ProductionBOMHeader.SetRange("No.", ProductionBOMNo);
ProductionBOMHeader.SetRange(Status, ProductionBOMHeader.Status::Certified);
if ProductionBOMHeader.IsEmpty() then
Error(NoActiveBOMVersionFoundErr, ItemNo);
Page.RunModal(Page::"Production BOM", ProductionBOMHeader);
end;
end;
}