Codeunit 7152 Export Item Analysis View
- App
- Base Application
- Namespace
- Microsoft.Inventory.Analysis
- Versions
- 17-28
Versions171819202122232425262728
Source29
Source in 29
src/Layers/W1/BaseApp/Inventory/Analysis/ExportItemAnalysisView.Codeunit.al649 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.Analysis;
using Microsoft.Finance.Dimension;
using Microsoft.Foundation.Period;
using Microsoft.Inventory.Item;
using Microsoft.Utilities;
using System.IO;
codeunit 7152 "Export Item Analysis View"
{
trigger OnRun()
begin
end;
var
Item: Record Item;
TempDimValue2: Record "Dimension Value" temporary;
TempDimValue3: Record "Dimension Value" temporary;
TempExcelBuffer: Record "Excel Buffer" temporary;
FileMgt: Codeunit "File Management";
NoOfColumns: Integer;
MaxLevelDim: array[3] of Integer;
#pragma warning disable AA0074
Text000: Label 'You can only export Actual amounts and Budgeted amounts.\Please change the option in the Show field.';
Text002: Label 'General Info._';
Text003: Label 'None';
Text004: Label 'Day';
Text005: Label 'Week';
Text006: Label 'Month';
Text007: Label 'Quarter';
Text008: Label 'Year';
Text009: Label 'Accounting Period';
Text011: Label 'Analysis by Dimension ';
Text012: Label 'Amount Type';
Text015: Label 'Date Filter';
Text016: Label 'Budget Filter';
Text018: Label 'Item';
Text020: Label 'Budg. Sales Amount';
Text022: Label 'Level';
Text023: Label 'Analysis View Name';
Text028: Label 'Show Opposite Sign';
Text029: Label 'Yes';
Text030: Label 'No';
Text031: Label 'Data_';
Text032: Label 'Sales Amount';
Text033: Label 'Cost Amount';
Text035: Label 'Budg. Cost Amount';
Text036: Label 'Budg. Quantity';
Text039: Label 'Location';
#pragma warning restore AA0074
ServerFileName: Text;
SkipDownload: Boolean;
[Scope('OnPrem')]
procedure ExportData(var ItemAnalysisViewEntry: Record "Item Analysis View Entry"; ShowName: Boolean; DateFilter: Text; ItemFilter: Text; BudgetFilter: Text; Dim1Filter: Text; Dim2Filter: Text; Dim3Filter: Text; ShowActualBudg: Option "Actual Amounts","Budgeted Amounts",Variance,"Variance%","Index%"; LocationFilter: Text; Sign: Boolean)
begin
if (ShowActualBudg <> 0) and (ShowActualBudg <> 1) then
Error(Text000);
ServerFileName := FileMgt.ServerTempFileName('xlsx');
CreateFillGeneralInfoSheet(
ItemAnalysisViewEntry, Sign, DateFilter, ItemFilter, BudgetFilter, Dim1Filter, Dim2Filter, Dim3Filter, LocationFilter);
TempExcelBuffer.CreateBook(ServerFileName, StrSubstNo('%1%2', Text002, ItemAnalysisViewEntry."Analysis View Code"));
TempExcelBuffer.WriteSheet(StrSubstNo('%1%2', Text002, ItemAnalysisViewEntry."Analysis View Code"), CompanyName, UserId);
CreateDataSheet(
ItemAnalysisViewEntry, ShowName, ItemFilter, Dim1Filter, Dim2Filter,
Dim3Filter, DateFilter, LocationFilter, BudgetFilter, Sign);
TempExcelBuffer.SelectOrAddSheet(StrSubstNo('%1%2', Text031, ItemAnalysisViewEntry."Analysis View Code"));
TempExcelBuffer.WriteAllToCurrentSheet(TempExcelBuffer);
TempExcelBuffer.CloseBook();
if not SkipDownload then
TempExcelBuffer.OpenExcel();
end;
local procedure CreateDataSheet(var ItemAnalysisViewEntry: Record "Item Analysis View Entry"; ShowName: Boolean; ItemFilter: Text; Dim1Filter: Text; Dim2Filter: Text; Dim3Filter: Text; DateFilter: Text; LocationFilter: Text; BudgetFilter: Text; Sign: Boolean)
var
ItemAnalysisViewEntry2: Record "Item Analysis View Entry";
ItemAnalysisView: Record "Item Analysis View";
StartDate: Date;
EndDate: Date;
WeekNo: Integer;
Year: Integer;
SignValue: Integer;
NoOfLeadingColumns: Integer;
begin
TempExcelBuffer.DeleteAll();
ItemAnalysisViewEntry2.Copy(ItemAnalysisViewEntry);
ItemAnalysisView.Get(ItemAnalysisViewEntry."Analysis Area", ItemAnalysisViewEntry."Analysis View Code");
ItemAnalysisViewEntry2.SetRange("Analysis Area", ItemAnalysisView."Analysis Area");
ItemAnalysisViewEntry2.SetRange("Analysis View Code", ItemAnalysisView.Code);
FindDimLevel(ItemAnalysisView."Dimension 1 Code", Dim1Filter, 1);
FindDimLevel(ItemAnalysisView."Dimension 2 Code", Dim2Filter, 2);
FindDimLevel(ItemAnalysisView."Dimension 3 Code", Dim3Filter, 3);
SignValue := 1;
if Sign then
SignValue := -1;
CreateRowWithColumnsCaptions(ItemAnalysisViewEntry2, ItemAnalysisView);
CreateItemAnalysisViewEntryPart(ItemAnalysisViewEntry2, ItemAnalysisView, StartDate, EndDate, ShowName, SignValue);
CreateItemAnalysisViewBudgetEntryPart(ItemAnalysisView, StartDate, EndDate, DateFilter,
ItemFilter, LocationFilter, BudgetFilter, Dim1Filter, Dim2Filter, Dim3Filter, ShowName, SignValue);
if ItemFilter <> '' then
Item.SetFilter("No.", ItemFilter);
if Item.Find('-') then
repeat
if not Item.Mark() then begin
FillOutItem(Item."No.", ShowName);
StartNewRow();
end;
until Item.Next() = 0;
NoOfLeadingColumns := 1;
if ItemAnalysisView."Dimension 1 Code" <> '' then
WriteDimLine(1, Dim1Filter, ItemAnalysisView."Dimension 1 Code", NoOfLeadingColumns, ShowName);
NoOfLeadingColumns := NoOfLeadingColumns + MaxLevelDim[1] + 1;
if ItemAnalysisView."Dimension 2 Code" <> '' then
WriteDimLine(2, Dim2Filter, ItemAnalysisView."Dimension 2 Code", NoOfLeadingColumns, ShowName);
NoOfLeadingColumns := NoOfLeadingColumns + MaxLevelDim[2] + 1;
if ItemAnalysisView."Dimension 3 Code" <> '' then
WriteDimLine(3, Dim3Filter, ItemAnalysisView."Dimension 3 Code", NoOfLeadingColumns, ShowName);
NoOfLeadingColumns := NoOfLeadingColumns + MaxLevelDim[3] + 1;
WeekNo := Date2DWY(StartDate, 2);
Year := Date2DWY(StartDate, 3);
StartDate := DWY2Date(1, WeekNo, Year);
NoOfLeadingColumns += 1;
while StartDate <= EndDate do begin
SetStartColumnNo(NoOfLeadingColumns);
FillNextCellInRow(CalculatePeriodStart(StartDate, 0));
FillNextCellInRow(CalculatePeriodStart(StartDate, 1));
FillNextCellInRow(CalculatePeriodStart(StartDate, 2));
FillNextCellInRow(CalculatePeriodStart(StartDate, 3));
FillNextCellInRow(CalculatePeriodStart(StartDate, 4));
StartNewRow();
StartDate := CalcDate('<1W>', StartDate);
end;
end;
local procedure CreateFillGeneralInfoSheet(var ItemAnalysisViewEntry: Record "Item Analysis View Entry"; Sign: Boolean; DateFilter: Text; ItemFilter: Text; BudgetFilter: Text; Dim1Filter: Text; Dim2Filter: Text; Dim3Filter: Text; LocationFilter: Text)
var
ItemAnalysisView: Record "Item Analysis View";
ItemAnalysisViewFilter: Record "Item Analysis View Filter";
RowNoCount: Integer;
begin
TempExcelBuffer.Reset();
TempExcelBuffer.DeleteAll();
FillCell(1, 1, ItemAnalysisView.TableCaption());
FillCell(2, 2, ItemAnalysisViewEntry.FieldCaption(ItemAnalysisViewEntry."Analysis View Code"));
FillCell(2, 3, ItemAnalysisViewEntry."Analysis View Code");
FillCell(3, 2, Text023);
ItemAnalysisView.Get(ItemAnalysisViewEntry."Analysis Area", ItemAnalysisViewEntry."Analysis View Code");
FillCell(3, 3, ItemAnalysisView.Name);
RowNoCount := 3;
if ItemAnalysisView."Item Filter" <> '' then begin
RowNoCount := RowNoCount + 1;
FillCell(RowNoCount, 2, ItemAnalysisView.FieldCaption("Item Filter"));
FillCell(RowNoCount, 3, ItemAnalysisView."Item Filter");
end;
RowNoCount := RowNoCount + 1;
FillCell(RowNoCount, 2, ItemAnalysisView.FieldCaption("Date Compression"));
case ItemAnalysisView."Date Compression" of
0:
FillCell(RowNoCount, 3, Text003);
1:
FillCell(RowNoCount, 3, Text004);
2:
FillCell(RowNoCount, 3, Text005);
3:
FillCell(RowNoCount, 3, Text006);
4:
FillCell(RowNoCount, 3, Text007);
5:
FillCell(RowNoCount, 3, Text008);
6:
FillCell(RowNoCount, 3, Text009);
end;
if ItemAnalysisView."Starting Date" <> 0D then begin
RowNoCount := RowNoCount + 1;
FillCell(RowNoCount, 2, ItemAnalysisView.FieldCaption("Starting Date"));
FillCell(RowNoCount, 3, ItemAnalysisView."Starting Date");
end;
RowNoCount := RowNoCount + 1;
FillCell(RowNoCount, 2, ItemAnalysisView.FieldCaption("Last Date Updated"));
FillCell(RowNoCount, 3, ItemAnalysisView."Last Date Updated");
ItemAnalysisViewFilter.SetRange("Analysis View Code", ItemAnalysisViewEntry."Analysis View Code");
if ItemAnalysisViewFilter.FindSet() then
repeat
RowNoCount := RowNoCount + 1;
FillCell(RowNoCount, 2, ItemAnalysisViewFilter."Dimension Code");
FillCell(RowNoCount, 3, ItemAnalysisViewFilter."Dimension Value Filter");
until ItemAnalysisViewFilter.Next() = 0;
RowNoCount := RowNoCount + 1;
FillCell(RowNoCount, 1, Text011);
RowNoCount := RowNoCount + 1;
FillCell(RowNoCount, 2, Text012);
if DateFilter <> '' then begin
RowNoCount := RowNoCount + 1;
FillCell(RowNoCount, 2, Text015);
FillCell(RowNoCount, 3, DateFilter);
end;
if ItemFilter <> '' then begin
RowNoCount := RowNoCount + 1;
FillCell(RowNoCount, 2, ItemAnalysisView.FieldCaption("Item Filter"));
FillCell(RowNoCount, 3, ItemFilter);
end;
if LocationFilter <> '' then begin
RowNoCount := RowNoCount + 1;
FillCell(RowNoCount, 2, Text039);
FillCell(RowNoCount, 3, LocationFilter);
end;
if BudgetFilter <> '' then begin
RowNoCount := RowNoCount + 1;
FillCell(RowNoCount, 2, Text016);
FillCell(RowNoCount, 3, BudgetFilter);
end;
if Dim1Filter <> '' then begin
RowNoCount := RowNoCount + 1;
FillCell(RowNoCount, 2, ItemAnalysisView."Dimension 1 Code");
FillCell(RowNoCount, 3, Dim1Filter);
end;
if Dim2Filter <> '' then begin
RowNoCount := RowNoCount + 1;
FillCell(RowNoCount, 2, ItemAnalysisView."Dimension 2 Code");
FillCell(RowNoCount, 3, Dim2Filter);
end;
if Dim3Filter <> '' then begin
RowNoCount := RowNoCount + 1;
FillCell(RowNoCount, 2, ItemAnalysisView."Dimension 3 Code");
FillCell(RowNoCount, 3, Dim3Filter);
end;
RowNoCount := RowNoCount + 1;
FillCell(RowNoCount, 2, Text028);
if Sign then
FillCell(RowNoCount, 3, Text029)
else
FillCell(RowNoCount, 3, Text030);
end;
local procedure CreateRowWithColumnsCaptions(ItemAnalysisViewEntry: Record "Item Analysis View Entry"; ItemAnalysisView: Record "Item Analysis View")
var
i: Integer;
begin
NoOfColumns := NoOfColumns + 1;
FillCell(1, NoOfColumns, Format(Text018) + ' ' + Format(Text022) + ' ' + Format(0));
if ItemAnalysisView."Dimension 1 Code" <> '' then
for i := 0 to MaxLevelDim[1] do begin
NoOfColumns := NoOfColumns + 1;
FillCell(1, NoOfColumns, ItemAnalysisView."Dimension 1 Code" + ' ' + Format(Text022) + ' ' + Format(i));
end;
if ItemAnalysisView."Dimension 2 Code" <> '' then
for i := 0 to MaxLevelDim[2] do begin
NoOfColumns := NoOfColumns + 1;
FillCell(1, NoOfColumns, ItemAnalysisView."Dimension 2 Code" + ' ' + Format(Text022) + ' ' + Format(i));
end;
if ItemAnalysisView."Dimension 3 Code" <> '' then
for i := 0 to MaxLevelDim[3] do begin
NoOfColumns := NoOfColumns + 1;
FillCell(1, NoOfColumns, ItemAnalysisView."Dimension 3 Code" + ' ' + Format(Text022) + ' ' + Format(i));
end;
FillNextCellInRow(Text004);
FillNextCellInRow(Text005);
FillNextCellInRow(Text006);
FillNextCellInRow(Text007);
FillNextCellInRow(Text008);
FillNextCellInRow(Text009);
FillNextCellInRow(Text032);
FillNextCellInRow(Text033);
FillNextCellInRow(ItemAnalysisViewEntry.FieldCaption(Quantity));
FillNextCellInRow(Text039);
FillNextCellInRow(Text020);
FillNextCellInRow(Text035);
FillNextCellInRow(Text036);
StartNewRow();
end;
local procedure CreateItemAnalysisViewEntryPart(var ItemAnalysisViewEntry: Record "Item Analysis View Entry"; ItemAnalysisView: Record "Item Analysis View"; var StartDate: Date; var EndDate: Date; ShowName: Boolean; SignValue: Integer)
begin
StartDate := ItemAnalysisViewEntry."Posting Date";
if ItemAnalysisViewEntry.Find('-') then
repeat
if ItemAnalysisViewEntry."Item No." <> Item."No." then
if Item.Get(ItemAnalysisViewEntry."Item No.") then
Item.Mark(true);
if ItemAnalysisViewEntry."Posting Date" = NormalDate(ItemAnalysisViewEntry."Posting Date") then begin
if ItemAnalysisViewEntry."Posting Date" >= EndDate then
EndDate := ItemAnalysisViewEntry."Posting Date"
else
if ItemAnalysisViewEntry."Posting Date" <= StartDate then
StartDate := ItemAnalysisViewEntry."Posting Date";
FillOutItem(ItemAnalysisViewEntry."Item No.", ShowName);
if ItemAnalysisView."Dimension 1 Code" <> '' then
FillOutDim(ItemAnalysisViewEntry."Dimension 1 Value Code", ItemAnalysisView."Dimension 1 Code", 1, ShowName);
if ItemAnalysisView."Dimension 2 Code" <> '' then
FillOutDim(ItemAnalysisViewEntry."Dimension 2 Value Code", ItemAnalysisView."Dimension 2 Code", 2, ShowName);
if ItemAnalysisView."Dimension 3 Code" <> '' then
FillOutDim(ItemAnalysisViewEntry."Dimension 3 Value Code", ItemAnalysisView."Dimension 3 Code", 3, ShowName);
FillNextCellInRow(CalculatePeriodStart(NormalDate(ItemAnalysisViewEntry."Posting Date"), -1));
FillNextCellInRow(CalculatePeriodStart(NormalDate(ItemAnalysisViewEntry."Posting Date"), 0));
FillNextCellInRow(CalculatePeriodStart(NormalDate(ItemAnalysisViewEntry."Posting Date"), 1));
FillNextCellInRow(CalculatePeriodStart(NormalDate(ItemAnalysisViewEntry."Posting Date"), 2));
FillNextCellInRow(CalculatePeriodStart(NormalDate(ItemAnalysisViewEntry."Posting Date"), 3));
FillNextCellInRow(CalculatePeriodStart(NormalDate(ItemAnalysisViewEntry."Posting Date"), 4));
FillNextCellInRow((ItemAnalysisViewEntry."Sales Amount (Actual)" + ItemAnalysisViewEntry."Sales Amount (Expected)") * SignValue);
FillNextCellInRow((ItemAnalysisViewEntry."Cost Amount (Actual)" + ItemAnalysisViewEntry."Cost Amount (Expected)" + ItemAnalysisViewEntry."Cost Amount (Non-Invtbl.)") * SignValue);
FillNextCellInRow(ItemAnalysisViewEntry.Quantity * SignValue);
FillNextCellInRow(Format(ItemAnalysisViewEntry."Location Code"));
StartNewRow();
end;
until ItemAnalysisViewEntry.Next() = 0;
end;
local procedure CreateItemAnalysisViewBudgetEntryPart(ItemAnalysisView: Record "Item Analysis View"; var StartDate: Date; var EndDate: Date; DateFilter: Text; ItemFilter: Text; LocationFilter: Text; BudgetFilter: Text; Dim1Filter: Text; Dim2Filter: Text; Dim3Filter: Text; ShowName: Boolean; SignValue: Integer)
var
ItemAnalysisViewBudgEntry: Record "Item Analysis View Budg. Entry";
begin
ItemAnalysisViewBudgEntry.SetRange("Analysis Area", ItemAnalysisView."Analysis Area");
ItemAnalysisViewBudgEntry.SetRange("Analysis View Code", ItemAnalysisView.Code);
ItemAnalysisViewBudgEntry.SetFilter("Posting Date", DateFilter);
ItemAnalysisViewBudgEntry.SetFilter("Item No.", ItemFilter);
ItemAnalysisViewBudgEntry.SetFilter("Location Code", LocationFilter);
ItemAnalysisViewBudgEntry.SetFilter("Budget Name", BudgetFilter);
ItemAnalysisViewBudgEntry.SetFilter("Dimension 1 Value Code", Dim1Filter);
ItemAnalysisViewBudgEntry.SetFilter("Dimension 2 Value Code", Dim2Filter);
ItemAnalysisViewBudgEntry.SetFilter("Dimension 3 Value Code", Dim3Filter);
if ItemAnalysisViewBudgEntry.Find('-') then
repeat
if ItemAnalysisViewBudgEntry."Item No." <> Item."No." then
if Item.Get(ItemAnalysisViewBudgEntry."Item No.") then
Item.Mark(true);
if ItemAnalysisViewBudgEntry."Posting Date" = NormalDate(ItemAnalysisViewBudgEntry."Posting Date") then begin
if ItemAnalysisViewBudgEntry."Posting Date" >= EndDate then
EndDate := ItemAnalysisViewBudgEntry."Posting Date"
else
if ItemAnalysisViewBudgEntry."Posting Date" <= StartDate then
StartDate := ItemAnalysisViewBudgEntry."Posting Date";
FillOutItem(ItemAnalysisViewBudgEntry."Item No.", ShowName);
if ItemAnalysisView."Dimension 1 Code" <> '' then
FillOutDim(ItemAnalysisViewBudgEntry."Dimension 1 Value Code", ItemAnalysisView."Dimension 1 Code", 1, ShowName);
if ItemAnalysisView."Dimension 2 Code" <> '' then
FillOutDim(ItemAnalysisViewBudgEntry."Dimension 2 Value Code", ItemAnalysisView."Dimension 2 Code", 2, ShowName);
if ItemAnalysisView."Dimension 3 Code" <> '' then
FillOutDim(ItemAnalysisViewBudgEntry."Dimension 3 Value Code", ItemAnalysisView."Dimension 3 Code", 3, ShowName);
FillNextCellInRow(CalculatePeriodStart(NormalDate(ItemAnalysisViewBudgEntry."Posting Date"), -1));
FillNextCellInRow(CalculatePeriodStart(NormalDate(ItemAnalysisViewBudgEntry."Posting Date"), 0));
FillNextCellInRow(CalculatePeriodStart(NormalDate(ItemAnalysisViewBudgEntry."Posting Date"), 1));
FillNextCellInRow(CalculatePeriodStart(NormalDate(ItemAnalysisViewBudgEntry."Posting Date"), 2));
FillNextCellInRow(CalculatePeriodStart(NormalDate(ItemAnalysisViewBudgEntry."Posting Date"), 3));
FillNextCellInRow(CalculatePeriodStart(NormalDate(ItemAnalysisViewBudgEntry."Posting Date"), 4));
FillNextCellInRow('');
FillNextCellInRow('');
FillNextCellInRow('');
FillNextCellInRow(ItemAnalysisViewBudgEntry."Location Code");
FillNextCellInRow(ItemAnalysisViewBudgEntry."Sales Amount" * SignValue);
FillNextCellInRow(ItemAnalysisViewBudgEntry."Cost Amount" * SignValue);
FillNextCellInRow(ItemAnalysisViewBudgEntry.Quantity * SignValue);
StartNewRow();
end;
until ItemAnalysisViewBudgEntry.Next() = 0;
end;
local procedure CalculatePeriodStart(PostingDate: Date; DateCompression: Integer): Date
var
AccountingPeriod: Record "Accounting Period";
PrevPostingDate: Date;
PrevCalculatedPostingDate: Date;
begin
PrevPostingDate := 0D;
case DateCompression of
0:// Week :
PostingDate := CalcDate('<CW+1D-1W>', PostingDate);
1:// Month :
PostingDate := CalcDate('<CM+1D-1M>', PostingDate);
2:// Quarter :
PostingDate := CalcDate('<CQ+1D-1Q>', PostingDate);
3:// Year :
PostingDate := CalcDate('<CY+1D-1Y>', PostingDate);
4:// Period :
begin
if PostingDate <> PrevPostingDate then begin
PrevPostingDate := PostingDate;
AccountingPeriod.SetRange("Starting Date", 0D, PostingDate);
if AccountingPeriod.FindLast() then
PrevCalculatedPostingDate := AccountingPeriod."Starting Date"
else
PrevCalculatedPostingDate := PostingDate;
end;
PostingDate := PrevCalculatedPostingDate;
end;
end;
exit(PostingDate);
end;
local procedure FindDimLevel(DimCode: Code[20]; DimFilter: Text; ArrayNo: Integer)
var
DimValue: Record "Dimension Value";
begin
if DimCode = '' then
exit;
DimValue.SetRange("Dimension Code", DimCode);
if DimValue.Find('-') then
repeat
TempDimValue2.Copy(DimValue);
TempDimValue2.Insert();
TempDimValue3.Copy(DimValue);
TempDimValue3.Insert();
until DimValue.Next() = 0;
TempDimValue2.SetFilter(Code, DimFilter);
if TempDimValue2.Find('-') then
repeat
if MaxLevelDim[ArrayNo] < TempDimValue2.Indentation then
MaxLevelDim[ArrayNo] := TempDimValue2.Indentation;
until TempDimValue2.Next() = 0;
end;
local procedure FindDimParent(var Account: Code[20]; DimensionCode: Code[20])
begin
TempDimValue3.Reset();
TempDimValue3.SetRange("Dimension Code", DimensionCode);
TempDimValue3.Get(DimensionCode, Account);
if TempDimValue3.Indentation <> 0 then begin
TempDimValue3.SetRange(Indentation, TempDimValue3.Indentation - 1);
TempDimValue3.Next(-1);
end;
Account := TempDimValue3.Code;
end;
local procedure FillOutDim(DimValueCode: Code[20]; DimCode: Code[20]; DimNo: Integer; ShowName: Boolean)
var
TempParentNameValueBuffer: Record "Name/Value Buffer" temporary;
DimensionValue: Record "Dimension Value";
Indent: Integer;
i: Integer;
DimValueCode2: Code[20];
begin
if DimValueCode <> '' then begin
if TempDimValue2.Get(DimCode, DimValueCode) then
TempDimValue2.Mark(true)
else
TempDimValue2.Init();
DimValueCode2 := DimValueCode;
Indent := TempDimValue2.Indentation;
if (Indent <> 0) and (DimValueCode2 <> '') then
for i := Indent downto 1 do begin
FindDimParent(DimValueCode2, DimCode);
TempDimValue2.Get(DimCode, DimValueCode2);
AddParentToBuffer(TempParentNameValueBuffer, i, TempDimValue2.Code, TempDimValue2.Name);
end;
if TempParentNameValueBuffer.FindSet() then
repeat
AddAcc(ShowName, TempParentNameValueBuffer.Name, TempParentNameValueBuffer.Value);
until TempParentNameValueBuffer.Next() = 0;
if DimensionValue.Get(DimCode, DimValueCode) then;
if DimensionValue.Indentation <> MaxLevelDim[DimNo] then
for i := DimensionValue.Indentation + 1 to MaxLevelDim[DimNo] do
AddAcc(ShowName, DimensionValue.Code, DimensionValue.Name);
AddAcc(ShowName, DimensionValue.Code, DimensionValue.Name);
end else
for i := 0 to MaxLevelDim[DimNo] do
AddAcc(false, '', '');
end;
local procedure FillOutItem(ItemNo: Code[20]; ShowName: Boolean)
begin
AddAcc(ShowName and (ItemNo <> ''), ItemNo, Item.Description);
end;
local procedure FillCell(RowNo: Integer; ColumnNo: Integer; Value: Variant)
begin
TempExcelBuffer.Init();
TempExcelBuffer.Validate("Row No.", RowNo);
TempExcelBuffer.Validate("Column No.", ColumnNo);
case true of
Value.IsDecimal or Value.IsInteger:
TempExcelBuffer.Validate("Cell Type", TempExcelBuffer."Cell Type"::Number);
Value.IsDate:
TempExcelBuffer.Validate("Cell Type", TempExcelBuffer."Cell Type"::Date);
else
TempExcelBuffer.Validate("Cell Type", TempExcelBuffer."Cell Type"::Text);
end;
TempExcelBuffer."Cell Value as Text" := CopyStr(Format(Value), 1, MaxStrLen(TempExcelBuffer."Cell Value as Text"));
TempExcelBuffer.Insert();
end;
local procedure FillNextCellInRow(Value: Variant)
var
RowNo: Integer;
ColumnNo: Integer;
begin
RowNo := TempExcelBuffer."Row No.";
ColumnNo := TempExcelBuffer."Column No." + 1;
TempExcelBuffer.Init();
TempExcelBuffer.Validate("Row No.", RowNo);
TempExcelBuffer.Validate("Column No.", ColumnNo);
case true of
Value.IsDecimal or Value.IsInteger:
TempExcelBuffer.Validate("Cell Type", TempExcelBuffer."Cell Type"::Number);
Value.IsDate:
TempExcelBuffer.Validate("Cell Type", TempExcelBuffer."Cell Type"::Date);
else
TempExcelBuffer.Validate("Cell Type", TempExcelBuffer."Cell Type"::Text);
end;
TempExcelBuffer."Cell Value as Text" := CopyStr(Format(Value), 1, MaxStrLen(TempExcelBuffer."Cell Value as Text"));
TempExcelBuffer.Insert();
end;
local procedure StartNewRow()
var
RowNo: Integer;
begin
RowNo := TempExcelBuffer."Row No." + 1;
TempExcelBuffer.Init();
TempExcelBuffer.Validate("Row No.", RowNo);
TempExcelBuffer.Validate("Column No.", 0);
end;
local procedure SetStartColumnNo(ColumntNo: Integer)
begin
TempExcelBuffer."Column No." := ColumntNo;
end;
procedure SetCommonFilters(CurrentAnalysisArea: Option; CurrentAnalysisViewCode: Code[10]; var ItemAnalysisViewEntry: Record "Item Analysis View Entry"; DateFilter: Text[30]; ItemFilter: Code[250]; Dim1Filter: Code[250]; Dim2Filter: Code[250]; Dim3Filter: Code[250]; LocationFilter: Code[250])
begin
ItemAnalysisViewEntry.SetRange("Analysis Area", CurrentAnalysisArea);
ItemAnalysisViewEntry.SetRange("Analysis View Code", CurrentAnalysisViewCode);
if DateFilter <> '' then
ItemAnalysisViewEntry.SetFilter("Posting Date", DateFilter);
if ItemFilter <> '' then
ItemAnalysisViewEntry.SetFilter("Item No.", ItemFilter);
if Dim1Filter <> '' then
ItemAnalysisViewEntry.SetFilter("Dimension 1 Value Code", Dim1Filter);
if Dim2Filter <> '' then
ItemAnalysisViewEntry.SetFilter("Dimension 2 Value Code", Dim2Filter);
if Dim3Filter <> '' then
ItemAnalysisViewEntry.SetFilter("Dimension 3 Value Code", Dim3Filter);
if LocationFilter <> '' then
ItemAnalysisViewEntry.SetFilter("Location Code", LocationFilter);
OnAfterSetCommonFilters(ItemAnalysisViewEntry, CurrentAnalysisArea, CurrentAnalysisViewCode);
end;
local procedure AddAcc(ShowName: Boolean; Account: Text; AccName: Text)
var
CellValueAsText: Text;
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeAddAcc(ShowName, Account, AccName, IsHandled, Item, TempExcelBuffer);
if not IsHandled then begin
if Account = '' then
CellValueAsText := ''
else
if ShowName then
CellValueAsText := Account + ' ' + AccName
else
CellValueAsText := Account;
FillNextCellInRow(CellValueAsText);
end;
OnAfterAddAcc(ShowName, Account, AccName, CellValueAsText, Item, TempExcelBuffer);
end;
local procedure AddParentToBuffer(var NameValueBuffer: Record "Name/Value Buffer"; id: Integer; AccountNumber: Text[250]; AccountName: Text[250])
begin
NameValueBuffer.Init();
NameValueBuffer.ID := id;
NameValueBuffer.Name := AccountNumber;
NameValueBuffer.Value := AccountName;
NameValueBuffer.Insert();
end;
local procedure WriteDimLine(DimNo: Integer; DimFilter: Text; DimCode: Code[20]; NoOfLeadingColumns: Integer; ShowName: Boolean)
begin
SetStartColumnNo(NoOfLeadingColumns);
TempDimValue2.SetFilter(Code, DimFilter);
TempDimValue2.SetFilter("Dimension Code", DimCode);
TempDimValue2.SetRange("Dimension Value Type", TempDimValue2."Dimension Value Type"::Standard);
if TempDimValue2.Find('-') then
repeat
if not TempDimValue2.Mark() then begin
FillOutDim(TempDimValue2.Code, DimCode, DimNo, ShowName);
StartNewRow();
SetStartColumnNo(NoOfLeadingColumns);
end;
until TempDimValue2.Next() = 0;
end;
procedure GetServerFileName(): Text
begin
exit(ServerFileName);
end;
procedure SetSkipDownload()
begin
SkipDownload := true;
end;
[IntegrationEvent(false, false)]
local procedure OnAfterSetCommonFilters(var ItemAnalysisViewEntry: Record "Item Analysis View Entry"; CurrentAnalysisArea: Option; ItemAnalysisViewCode: Code[10])
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeAddAcc(ShowName: Boolean; var Account: Text; var AccName: Text; var IsHandled: Boolean; Item: Record Item; var TempExcelBuffer: Record "Excel Buffer" temporary)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnAfterAddAcc(ShowName: Boolean; var Account: Text; var AccName: Text; var CellValueAsText: Text; Item: Record Item; var TempExcelBuffer: Record "Excel Buffer" temporary)
begin
end;
}