Page 489 Column Layout
- App
- Base Application
- Namespace
- Microsoft.Finance.FinancialReports
- Versions
- 17-28
- Source table
- 334
Versions171819202122232425262728
Source29
Source in 29
src/Layers/W1/BaseApp/Finance/FinancialReports/ColumnLayout.Page.al465 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.Finance.FinancialReports;
using Microsoft.CostAccounting.Account;
using System.Utilities;
/// <summary>
/// Provides worksheet interface for creating and editing financial report column definitions.
/// Enables detailed setup of column layouts including data sources, formulas, dimensions, and display options.
/// </summary>
/// <remarks>
/// Primary functionality: Column definition creation, formula management, dimension filtering setup.
/// Integration: Links with Account Schedule reporting and Analysis View functionality.
/// Extensibility: Standard page extension patterns for additional column types and calculation methods.
/// </remarks>
page 489 "Column Layout"
{
AboutTitle = 'About (Financial Report) Column Definition';
AboutText = 'Use a column definition to specify the columns to include in a report. For example, you can design a report layout to compare net change and balance for the same period this year and last year. You can have up to 15 columns in a column definition. For example, multiple columns are useful for displaying budgets for 12 months with a column that shows the total.';
AnalysisModeEnabled = false;
ApplicationArea = Basic, Suite;
AutoSplitKey = true;
Caption = '(Financial Report) Column Definitions';
DataCaptionFields = "Column Layout Name";
PageType = Worksheet;
SourceTable = "Column Layout";
UsageCategory = None;
layout
{
area(content)
{
group(General)
{
ShowCaption = false;
Visible = not HeaderHidden;
field(CurrentColumnName; CurrentColumnName)
{
ApplicationArea = Basic, Suite;
AssistEdit = false;
Caption = 'Name';
ToolTip = 'Specifies the unique name (code) of the column definition.';
trigger OnValidate()
var
ColumnLayoutName: Record "Column Layout Name";
ConfirmMgt: Codeunit "Confirm Management";
OldName: Code[10];
RenameQst: Label 'Your change might update related records, which can take a while. Do you want to continue?';
begin
Rec.FilterGroup(2);
if Rec.GetFilter("Column Layout Name") <> '' then
OldName := Rec.GetRangeMin("Column Layout Name");
Rec.FilterGroup(0);
if (OldName = CurrentColumnName) or (OldName = '') then
Error('');
if not ColumnLayoutName.Get(OldName) then
Error('');
if not ConfirmMgt.GetResponse(RenameQst) then
Error('');
CurrPage.SaveRecord();
ColumnLayoutName.Rename(CurrentColumnName);
CurrentColumnName := ColumnLayoutName.Name;
AccSchedManagement.SetColumnName(CurrentColumnName, Rec);
if Rec.FindFirst() then
CurrPage.Update(false)
else begin
Clear(Rec);
Rec.Init();
end;
end;
}
field(CurrentDescription; CurrentDescription)
{
ApplicationArea = Basic, Suite;
Caption = 'Description';
ToolTip = 'Specifies the description of the column definition. The description is not shown on the final report but is used to provide more context when using the definition.';
trigger OnValidate()
var
ColumnLayoutName: Record "Column Layout Name";
begin
ColumnLayoutName.Get(CurrentColumnName);
ColumnLayoutName.Description := CurrentDescription;
ColumnLayoutName.Modify();
end;
}
field(DefinitionStatus; DefinitionStatus)
{
ApplicationArea = Basic, Suite;
Caption = 'Status';
TableRelation = "Financial Report Status";
ToolTip = 'Specifies the status code for the column definition. The status code helps you organize the lifecycle of your column definitions.';
trigger OnValidate()
var
ColumnLayoutName: Record "Column Layout Name";
begin
ColumnLayoutName.Get(CurrentColumnName);
ColumnLayoutName.Status := DefinitionStatus;
ColumnLayoutName.Modify();
end;
}
field(InternalDescription; InternalDescription)
{
ApplicationArea = Basic, Suite;
Caption = 'Internal Description';
MultiLine = true;
ToolTip = 'Specifies the internal description of the column definition. The internal description is not shown on the final report but is used to provide more context when using the definition.';
trigger OnValidate()
var
ColumnLayoutName: Record "Column Layout Name";
begin
ColumnLayoutName.Get(CurrentColumnName);
ColumnLayoutName."Internal Description" := InternalDescription;
ColumnLayoutName.Modify();
end;
}
}
repeater(Control1)
{
ShowCaption = false;
field("Line No."; Rec."Line No.")
{
ApplicationArea = Basic, Suite;
Visible = false;
}
field("Column No."; Rec."Column No.")
{
ApplicationArea = Basic, Suite;
}
field("Column Header"; Rec."Column Header")
{
ApplicationArea = Basic, Suite;
}
field(IncludeDateInHeader; Rec."Include Date In Header")
{
Width = 10;
}
field("Column Type"; Rec."Column Type")
{
ApplicationArea = Basic, Suite;
}
field("Ledger Entry Type"; Rec."Ledger Entry Type")
{
ApplicationArea = Basic, Suite;
}
field("Amount Type"; Rec."Amount Type")
{
ApplicationArea = Basic, Suite;
}
field("Budget Name"; Rec."Budget Name")
{
ApplicationArea = Basic, Suite;
}
field(Formula; Rec.Formula)
{
ApplicationArea = Basic, Suite;
}
field("Show Opposite Sign"; Rec."Show Opposite Sign")
{
ApplicationArea = Basic, Suite;
}
field("Comparison Date Formula"; Rec."Comparison Date Formula")
{
ApplicationArea = Basic, Suite;
}
field("Comparison Period Formula"; Rec."Comparison Period Formula")
{
ApplicationArea = Basic, Suite;
}
field(Show; Rec.Show)
{
Caption = 'Show number';
ApplicationArea = Basic, Suite;
}
field("Show Indented Lines"; Rec."Show Indented Lines")
{
ApplicationArea = Basic, Suite;
Visible = false;
}
field("Rounding Factor"; Rec."Rounding Factor")
{
ApplicationArea = Basic, Suite;
}
field("Business Unit Totaling"; Rec."Business Unit Totaling")
{
ApplicationArea = Suite;
Visible = false;
}
field("Dimension 1 Totaling"; Rec."Dimension 1 Totaling")
{
ApplicationArea = Dimensions;
Visible = false;
trigger OnLookup(var Text: Text): Boolean
begin
exit(Rec.LookUpDimFilter(1, Text));
end;
}
field("Dimension 2 Totaling"; Rec."Dimension 2 Totaling")
{
ApplicationArea = Dimensions;
Visible = false;
trigger OnLookup(var Text: Text): Boolean
begin
exit(Rec.LookUpDimFilter(2, Text));
end;
}
field("Dimension 3 Totaling"; Rec."Dimension 3 Totaling")
{
ApplicationArea = Dimensions;
Visible = false;
trigger OnLookup(var Text: Text): Boolean
begin
exit(Rec.LookUpDimFilter(3, Text));
end;
}
field("Dimension 4 Totaling"; Rec."Dimension 4 Totaling")
{
ApplicationArea = Dimensions;
Visible = false;
trigger OnLookup(var Text: Text): Boolean
begin
exit(Rec.LookUpDimFilter(4, Text));
end;
}
field("Cost Center Totaling"; Rec."Cost Center Totaling")
{
ApplicationArea = CostAccounting;
Visible = false;
trigger OnLookup(var Text: Text): Boolean
var
CostCenter: Record "Cost Center";
begin
exit(CostCenter.LookupCostCenterFilter(Text));
end;
}
field("Cost Object Totaling"; Rec."Cost Object Totaling")
{
ApplicationArea = CostAccounting;
Visible = false;
trigger OnLookup(var Text: Text): Boolean
var
CostObject: Record "Cost Object";
begin
exit(CostObject.LookupCostObjectFilter(Text));
end;
}
field(GLAccountTotaling; Rec."G/L Account Totaling")
{
trigger OnValidate()
begin
UpdateAccountFactbox();
end;
trigger OnLookup(var Text: Text): Boolean
begin
Rec.LookupGLAccountTotaling();
UpdateAccountFactbox();
end;
}
field(HideCurrencySymbol; Rec."Hide Currency Symbol")
{
ApplicationArea = Basic, Suite;
Visible = false;
}
field("Show in ACY"; Rec."Show in ACY")
{
ApplicationArea = Basic, Suite;
}
field("Internal Description"; Rec."Internal Description")
{
ApplicationArea = Basic, Suite;
}
}
}
area(factboxes)
{
part(TotalingAccountsFactbox; "Totaling Accounts Factbox")
{
ApplicationArea = Basic, Suite;
Caption = 'G/L Accounts';
}
systempart(Control1900383207; Links)
{
ApplicationArea = RecordLinks;
Visible = false;
}
systempart(Control1905767507; Notes)
{
ApplicationArea = Notes;
Visible = false;
}
}
}
actions
{
area(processing)
{
#if not CLEAN28
action(CopyColumnLayout)
{
ApplicationArea = Basic, Suite;
Caption = 'Copy Column Layout';
Image = Copy;
Scope = Repeater;
ToolTip = 'Create a copy of the current column layout.';
ObsoleteState = Pending;
ObsoleteReason = 'This action will be removed in a future release, use the same action on the Column Layout Names page instead.';
ObsoleteTag = '28.0';
Visible = false;
trigger OnAction()
var
ColLayoutName: Record "Column Layout Name";
begin
ColLayoutName.Get(CurrentColumnName);
ColLayoutName.SetRecFilter();
Report.RunModal(Report::"Copy Column Layout", true, true, ColLayoutName);
end;
}
#endif
action(WhereUsed)
{
ApplicationArea = Basic, Suite;
Caption = 'Where-Used';
ToolTip = 'View or edit financial reports in which the column definition is used.';
Image = Track;
trigger OnAction()
var
FinancialReport: Record "Financial Report";
begin
FinancialReport.SetRange("Financial Report Column Group", CurrentColumnName);
Page.Run(0, FinancialReport);
end;
}
action(HideHeader)
{
Caption = 'Hide Header';
Image = ListPage;
ToolTip = 'Hide the page header.';
Visible = not HeaderHidden;
trigger OnAction()
begin
HeaderHidden := true;
CurrPage.Update(false);
end;
}
action(ShowHeader)
{
Caption = 'Show Header';
Image = TaskPage;
ToolTip = 'Show the page header.';
Visible = HeaderHidden;
trigger OnAction()
begin
HeaderHidden := false;
CurrPage.Update(false);
end;
}
}
area(Promoted)
{
group(Category_Process)
{
Caption = 'Process';
#if not CLEAN28
actionref(CopyColumnLayout_Promoted; CopyColumnLayout)
{
ObsoleteState = Pending;
ObsoleteReason = 'This action will be removed in a future release, use the same action on the Column Layout Names page instead.';
ObsoleteTag = '28.0';
}
#endif
actionref(WhereUsed_Promoted; WhereUsed) { }
actionref(HideHeader_Promoted; HideHeader) { }
actionref(ShowHeader_Promoted; ShowHeader) { }
}
}
}
trigger OnAfterGetRecord()
begin
if not DimCaptionsInitialized then
DimCaptionsInitialized := true;
end;
trigger OnAfterGetCurrRecord()
begin
UpdateAccountFactbox();
end;
trigger OnOpenPage()
var
FinancialReportMgt: Codeunit "Financial Report Mgt.";
CurrentPageCaption: Text;
begin
FinancialReportMgt.LaunchEditColumnsWarningNotification();
AccSchedManagement.OpenColumns(CurrentColumnName, Rec);
CurrentPageCaption := AccSchedManagement.GetColumnLayoutCaption(CurrentColumnName);
if CurrentPageCaption <> '' then
CurrPage.Caption(CurrentPageCaption);
GetDescriptions();
end;
var
AccSchedManagement: Codeunit AccSchedManagement;
CurrentColumnName: Code[10];
DefinitionStatus: Code[10];
DimCaptionsInitialized: Boolean;
CurrentDescription: Text[80];
InternalDescription: Text[500];
HeaderHidden: Boolean;
local procedure GetDescriptions()
var
ColumnLayoutName: Record "Column Layout Name";
FinancialReportMgt: Codeunit "Financial Report Mgt.";
begin
CurrentDescription := '';
InternalDescription := '';
if ColumnLayoutName.Get(CurrentColumnName) then begin
DefinitionStatus := ColumnLayoutName.Status;
CurrentDescription := ColumnLayoutName.Description;
InternalDescription := ColumnLayoutName."Internal Description";
FinancialReportMgt.CheckStatus(ColumnLayoutName.TableCaption(), ColumnLayoutName.Status);
end;
end;
/// <summary>
/// Sets the current column layout name for the page to display the associated column definitions.
/// </summary>
/// <param name="NewColumnName">Column layout name to display in the worksheet</param>
procedure SetColumnLayoutName(NewColumnName: Code[10])
begin
CurrentColumnName := NewColumnName;
end;
local procedure UpdateAccountFactbox()
begin
if Rec."G/L Account Totaling" <> '' then
CurrPage.TotalingAccountsFactbox.Page.SetTotalingFilter(Rec."G/L Account Totaling")
else
CurrPage.TotalingAccountsFactbox.Page.SetTotalingFilter('=''''');
end;
}