Report 704 Inventory - Transaction Detail
- App
- Base Application
- Namespace
- Microsoft.Inventory.Reports
- Versions
- 17-28
Versions171819202122232425262728
Source29
Source in 29
src/Layers/W1/BaseApp/Inventory/Reports/InventoryTransactionDetail.Report.al382 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.Reports;
using Microsoft.Inventory.Item;
using Microsoft.Inventory.Ledger;
using System.Utilities;
report 704 "Inventory - Transaction Detail"
{
ApplicationArea = Basic, Suite;
Caption = 'Inventory - Transaction Detail';
ToolTip = 'View transaction details with entries for the selected items for a selected period. The report shows the inventory at the beginning of the period, all of the increase and decrease entries during the period with a running update of the inventory, and the inventory at the close of the period. The report can be used at the close of an accounting period, for example, or for an audit.';
UsageCategory = ReportsAndAnalysis;
DefaultRenderingLayout = Excel;
dataset
{
dataitem(Item; Item)
{
PrintOnlyIfDetail = true;
RequestFilterFields = "No.", Description, "Assembly BOM", "Inventory Posting Group", "Shelf No.", "Statistics Group", "Date Filter";
column(No_Item; "No.")
{
}
#if not CLEAN28
column(PeriodItemDateFilter; StrSubstNo(PeriodInfoTxt, ItemDateFilter))
{
ObsoleteState = Pending;
ObsoleteReason = 'RDLC Only layout column. To be removed along with the RDLC layout.';
ObsoleteTag = '28.0';
}
column(CompanyName; COMPANYPROPERTY.DisplayName())
{
ObsoleteState = Pending;
ObsoleteReason = 'RDLC Only layout column. To be removed along with the RDLC layout.';
ObsoleteTag = '28.0';
}
column(TableCaptionItemFilter; StrSubstNo(TableFiltersTxt, TableCaption(), ItemFilter))
{
ObsoleteState = Pending;
ObsoleteReason = 'RDLC Only layout column. To be removed along with the RDLC layout.';
ObsoleteTag = '28.0';
}
column(ItemFilter; ItemFilter)
{
ObsoleteState = Pending;
ObsoleteReason = 'RDLC Only layout column. To be removed along with the RDLC layout.';
ObsoleteTag = '28.0';
}
column(InventoryTransDetailCaption; InventoryTransDetailCaptionLbl)
{
ObsoleteState = Pending;
ObsoleteReason = 'RDLC Only layout column. To be removed along with the RDLC layout.';
ObsoleteTag = '28.0';
}
column(CurrReportPageNoCaption; CurrReportPageNoCaptionLbl)
{
ObsoleteState = Pending;
ObsoleteReason = 'RDLC Only layout column. To be removed along with the RDLC layout.';
ObsoleteTag = '28.0';
}
column(ItemLedgEntryPostDateCaption; ItemLedgEntryPostDateCaptionLbl)
{
ObsoleteState = Pending;
ObsoleteReason = 'RDLC Only layout column. To be removed along with the RDLC layout.';
ObsoleteTag = '28.0';
}
column(ItemLedgEntryEntryTypCaption; ItemLedgEntryEntryTypCaptionLbl)
{
ObsoleteState = Pending;
ObsoleteReason = 'RDLC Only layout column. To be removed along with the RDLC layout.';
ObsoleteTag = '28.0';
}
column(IncreasesQtyCaption; IncreasesQtyCaptionLbl)
{
ObsoleteState = Pending;
ObsoleteReason = 'RDLC Only layout column. To be removed along with the RDLC layout.';
ObsoleteTag = '28.0';
}
column(DecreasesQtyCaption; DecreasesQtyCaptionLbl)
{
ObsoleteState = Pending;
ObsoleteReason = 'RDLC Only layout column. To be removed along with the RDLC layout.';
ObsoleteTag = '28.0';
}
column(ItemOnHandCaption; ItemOnHandCaptionLbl)
{
ObsoleteState = Pending;
ObsoleteReason = 'RDLC Only layout column. To be removed along with the RDLC layout.';
ObsoleteTag = '28.0';
}
#endif
dataitem(PageCounter; "Integer")
{
DataItemTableView = sorting(Number) where(Number = const(1));
column(Description_Item; Item.Description)
{
}
#if not CLEAN28
column(StartOnHand; StartOnHand)
{
DecimalPlaces = 0 : 5;
ObsoleteState = Pending;
ObsoleteReason = 'RDLC Only layout column. To be removed along with the RDLC layout.';
ObsoleteTag = '28.0';
}
column(RecordNo; RecordNo)
{
ObsoleteState = Pending;
ObsoleteReason = 'RDLC Only layout column. To be removed along with the RDLC layout.';
ObsoleteTag = '28.0';
}
#endif
dataitem("Item Ledger Entry"; "Item Ledger Entry")
{
DataItemLink = "Item No." = field("No."), "Variant Code" = field("Variant Filter"), "Posting Date" = field("Date Filter"), "Location Code" = field("Location Filter"), "Global Dimension 1 Code" = field("Global Dimension 1 Filter"), "Global Dimension 2 Code" = field("Global Dimension 2 Filter");
DataItemLinkReference = Item;
DataItemTableView = sorting("Item No.", "Entry Type", "Variant Code", "Drop Shipment", "Location Code", "Posting Date", "Entry No.");
column(PostingDate_ItemLedgEntry; Format("Posting Date"))
{
}
column(EntryType_ItemLedgEntry; "Entry Type")
{
}
column(DocumentNo_PItemLedgEntry; "Document No.")
{
IncludeCaption = true;
}
column(Description_ItemLedgEntry; Description)
{
IncludeCaption = true;
}
column(IncreasesQty; IncreasesQty)
{
DecimalPlaces = 0 : 5;
}
column(DecreasesQty; DecreasesQty)
{
DecimalPlaces = 0 : 5;
}
column(ItemOnHand; ItemOnHand)
{
DecimalPlaces = 0 : 5;
}
column(EntryNo_ItemLedgerEntry; "Entry No.")
{
IncludeCaption = true;
}
column(TotalIncreasesQty; TotalIncreasesQty)
{
DecimalPlaces = 0 : 5;
}
column(TotalDecreasesQty; TotalDecreasesQty)
{
DecimalPlaces = 0 : 5;
}
#if not CLEAN28
column(StartOnHandQuantity; StartOnHand + Quantity)
{
DecimalPlaces = 0 : 5;
ObsoleteState = Pending;
ObsoleteReason = 'RDLC Only layout column. To be removed along with the RDLC layout.';
ObsoleteTag = '28.0';
}
column(Quantity_ItemLedgerEntry; Quantity)
{
ObsoleteState = Pending;
ObsoleteReason = 'RDLC Only layout column. To be removed along with the RDLC layout.';
ObsoleteTag = '28.0';
}
column(ItemDescriptionControl32; Item.Description)
{
ObsoleteState = Pending;
ObsoleteReason = 'RDLC Only layout column. To be removed along with the RDLC layout.';
ObsoleteTag = '28.0';
}
column(ContinuedCaption; ContinuedCaptionLbl)
{
ObsoleteState = Pending;
ObsoleteReason = 'RDLC Only layout column. To be removed along with the RDLC layout.';
ObsoleteTag = '28.0';
}
#endif
trigger OnAfterGetRecord()
begin
ItemOnHand := ItemOnHand + Quantity;
Clear(IncreasesQty);
Clear(DecreasesQty);
if Quantity > 0 then
IncreasesQty := Quantity
else
DecreasesQty := Abs(Quantity);
TotalIncreasesQty += IncreasesQty;
TotalDecreasesQty += DecreasesQty;
end;
trigger OnPreDataItem()
begin
Clear(Quantity);
Clear(IncreasesQty);
Clear(DecreasesQty);
end;
}
}
trigger OnAfterGetRecord()
begin
StartOnHand := 0;
if ItemDateFilter <> '' then
if GetRangeMin("Date Filter") > 00000101D then begin
SetRange("Date Filter", 0D, GetRangeMin("Date Filter") - 1);
OnItemOnAfterGetRecordOnBeforeCalcNetChange(Item);
CalcFields("Net Change");
StartOnHand := "Net Change";
SetFilter("Date Filter", ItemDateFilter);
end;
ItemOnHand := StartOnHand;
if PrintOnlyOnePerPageReq then
RecordNo := RecordNo + 1;
Clear(TotalIncreasesQty);
Clear(TotalDecreasesQty);
end;
trigger OnPreDataItem()
begin
RecordNo := 1;
end;
}
}
requestpage
{
AboutTitle = 'About Inventory - Transaction Detail';
AboutText = 'View a history of inventory transaction details with a running total of inventory during a period defined in the Date Filter.';
SaveValues = true;
layout
{
area(content)
{
group(Options)
{
Caption = 'Options';
#if not CLEAN28
field(PrintOnlyOnePerPage; PrintOnlyOnePerPageReq)
{
ApplicationArea = Basic, Suite;
Caption = 'New Page per Item';
ToolTip = 'Specifies if you want each item transaction detail to be printed on a separate page.';
}
#endif
// Used to set a report header across multiple languages
field(RequestItemFilterHeading; ItemFilterHeading)
{
ApplicationArea = All;
Caption = 'Item Filter';
ToolTip = 'Specifies the Item filters applied to this report.';
Visible = false;
}
}
}
}
actions
{
}
trigger OnClosePage()
begin
UpdateRequestPageFilterValues();
end;
}
rendering
{
layout(Excel)
{
Caption = 'Inventory - Transaction Detail Excel';
Type = Excel;
LayoutFile = './Inventory/Reports/InventoryTransactionDetail.xlsx';
Summary = 'Built in layout for the Inventory - Transaction Detail Excel report.';
}
#if not CLEAN28
layout(RDLC)
{
Caption = 'Inventory - Transaction Detail RDLC (Obsolete)';
Type = RDLC;
LayoutFile = './Inventory/Reports/InventoryTransactionDetail.rdlc';
ObsoleteState = Pending;
ObsoleteReason = 'The RDLC layout has been replaced by the Excel layout and will be removed in a future release.';
ObsoleteTag = '28.0';
Summary = 'Built in layout for the Inventory - Transaction Detail RDLC (Obsolete) report.';
}
#endif
}
labels
{
InventoryTransactionDetailLbl = 'Inventory - Transaction Detail';
InventoryTransDetailPrintLbl = 'Inventory Trans. Detail (Print)', MaxLength = 31, Comment = 'Excel worksheet name.';
InvTransDetailAnalysisLbl = 'Inv. Trans. Detail (Analysis)', MaxLength = 31, Comment = 'Excel worksheet name.';
DataRetrievedLbl = 'Data retrieved:';
ItemNoLbl = 'Item No.';
ItemDescLbl = 'Item Description';
PostingDateLbl = 'Posting Date';
EntryTypeLbl = 'Entry Type';
DocumentNoLbl = 'Document No.';
DescriptionLbl = 'Description';
IncreasesLbl = 'Increases';
DecreasesLbl = 'Decreases';
InventoryLbl = 'Inventory';
EntryNoLbl = 'Entry No.';
TotalIncreasesLbl = 'Total Increases';
TotalDecreasesLbl = 'Total Decreases';
// About the report labels
AboutTheReportLbl = 'About the report';
EnvironmentLbl = 'Environment';
CompanyLbl = 'Company';
UserLbl = 'User';
RunOnLbl = 'Run on';
ReportNameLbl = 'Report name';
DocumentationLbl = 'Documentation';
}
trigger OnPreReport()
begin
UpdateRequestPageFilterValues();
end;
var
ItemFilter: Text;
ItemDateFilter: Text;
ItemFilterHeading: Text;
ItemOnHand: Decimal;
StartOnHand: Decimal;
IncreasesQty: Decimal;
DecreasesQty: Decimal;
TotalIncreasesQty: Decimal;
TotalDecreasesQty: Decimal;
PrintOnlyOnePerPageReq: Boolean;
RecordNo: Integer;
#if not CLEAN28
PeriodInfoTxt: Label 'Period: %1', Comment = '%1 - period name';
TableFiltersTxt: Label '%1: %2', Locked = true;
InventoryTransDetailCaptionLbl: Label 'Inventory - Transaction Detail';
CurrReportPageNoCaptionLbl: Label 'Page';
ItemLedgEntryPostDateCaptionLbl: Label 'Posting Date';
ItemLedgEntryEntryTypCaptionLbl: Label 'Entry Type';
IncreasesQtyCaptionLbl: Label 'Increases';
DecreasesQtyCaptionLbl: Label 'Decreases';
ItemOnHandCaptionLbl: Label 'Inventory';
ContinuedCaptionLbl: Label 'Continued';
#endif
procedure InitializeRequest(NewPrintOnlyOnePerPage: Boolean)
begin
PrintOnlyOnePerPageReq := NewPrintOnlyOnePerPage;
end;
// Ensures Layout Filter Headings are up to date
local procedure UpdateRequestPageFilterValues()
begin
ItemFilter := Item.GetFilters();
ItemDateFilter := Item.GetFilter("Date Filter");
ItemFilterHeading := '';
if ItemFilter <> '' then
ItemFilterHeading := Item.TableCaption + ': ' + ItemFilter;
end;
[IntegrationEvent(false, false)]
local procedure OnItemOnAfterGetRecordOnBeforeCalcNetChange(var Item: Record Item)
begin
end;
}