Page 5850 Posted Sales Document Lines
- App
- Base Application
- Namespace
- Microsoft.Sales.History
- Versions
- 17-28
- Source table
- 18
Versions171819202122232425262728
Source29
Source in 29
src/Layers/W1/BaseApp/Sales/History/PostedSalesDocumentLines.Page.al415 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.Sales.History;
using Microsoft.Sales.Customer;
using Microsoft.Sales.Document;
using Microsoft.Utilities;
/// <summary>
/// Displays posted sales document lines from shipments, invoices, credit memos, and return receipts for a selected customer.
/// </summary>
page 5850 "Posted Sales Document Lines"
{
Caption = 'Posted Sales Document Lines';
DeleteAllowed = false;
InsertAllowed = false;
LinksAllowed = false;
ModifyAllowed = false;
PageType = ListPlus;
SaveValues = true;
SourceTable = Customer;
layout
{
area(content)
{
group(Options)
{
Caption = 'Options';
field(ShowRevLine; ShowRevLinesOnly)
{
ApplicationArea = Basic, Suite;
Caption = 'Show Reversible Lines Only';
Enabled = ShowRevLineEnable;
ToolTip = 'Specifies if only lines with quantities that are available to be reversed are shown. For example, on a posted sales invoice with an original quantity of 20, and 15 of the items have already been returned, the quantity that is available to be reversed on the posted sales invoice is 5.';
trigger OnValidate()
begin
case CurrentMenuType of
0:
CurrPage.PostedShpts.PAGE.Initialize(
ShowRevLinesOnly,
CopyDocMgt.IsSalesFillExactCostRevLink(
ToSalesHeader, CurrentMenuType, ToSalesHeader."Currency Code"), true);
1:
CurrPage.PostedInvoices.PAGE.Initialize(
ToSalesHeader, ShowRevLinesOnly,
CopyDocMgt.IsSalesFillExactCostRevLink(
ToSalesHeader, CurrentMenuType, ToSalesHeader."Currency Code"), true);
end;
ShowRevLinesOnlyOnAfterValidat();
end;
}
field(OriginalQuantity; OriginalQuantity)
{
ApplicationArea = Basic, Suite;
Caption = 'Return Original Quantity';
ToolTip = 'Specifies whether to use the original quantity to receive quantities associated with specific shipments. For example, on a posted sales invoice with an original quantity of 20, you can match the 20 items with a specific shipment.';
}
}
group(Control19)
{
ShowCaption = false;
group(Control9)
{
ShowCaption = false;
field(PostedShipmentsBtn; CurrentMenuTypeOpt)
{
ApplicationArea = Basic, Suite;
CaptionClass = OptionCaptionServiceTier();
OptionCaption = 'Posted Shipments,Posted Invoices,Posted Return Receipts,Posted Cr. Memos';
trigger OnValidate()
begin
if CurrentMenuTypeOpt = CurrentMenuTypeOpt::x3 then
x3CurrentMenuTypeOptOnValidate();
if CurrentMenuTypeOpt = CurrentMenuTypeOpt::x2 then
x2CurrentMenuTypeOptOnValidate();
if CurrentMenuTypeOpt = CurrentMenuTypeOpt::x1 then
x1CurrentMenuTypeOptOnValidate();
if CurrentMenuTypeOpt = CurrentMenuTypeOpt::x0 then
x0CurrentMenuTypeOptOnValidate();
end;
}
#pragma warning disable AA0100
field("STRSUBSTNO('(%1)',""No. of Pstd. Shipments"")"; StrSubstNo('(%1)', Rec."No. of Pstd. Shipments"))
#pragma warning restore AA0100
{
ApplicationArea = Basic, Suite;
Caption = '&Posted Shipments';
Editable = false;
ToolTip = 'Specifies the lines that represent posted shipments.';
}
field(NoOfPostedInvoices; StrSubstNo('(%1)', Rec."No. of Pstd. Invoices" - NoOfPostedPrepmtInvoices()))
{
ApplicationArea = Basic, Suite;
Caption = 'Posted I&nvoices';
Editable = false;
ToolTip = 'Specifies the lines that represent posted invoices.';
}
#pragma warning disable AA0100
field("STRSUBSTNO('(%1)',""No. of Pstd. Return Receipts"")"; StrSubstNo('(%1)', Rec."No. of Pstd. Return Receipts"))
#pragma warning restore AA0100
{
ApplicationArea = Basic, Suite;
Caption = 'Posted Ret&urn Receipts';
Editable = false;
ToolTip = 'Specifies the lines that represent posted return receipts.';
}
field(NoOfPostedCrMemos; StrSubstNo('(%1)', Rec."No. of Pstd. Credit Memos" - NoOfPostedPrepmtCrMemos()))
{
ApplicationArea = Basic, Suite;
Caption = 'Posted Cr. &Memos';
Editable = false;
ToolTip = 'Specifies the lines that represent posted sales credit memos.';
}
field(CurrentMenuTypeValue; CurrentMenuType)
{
ApplicationArea = Basic, Suite;
Visible = false;
}
}
}
group(Control18)
{
ShowCaption = false;
part(PostedInvoices; "Get Post.Doc - S.InvLn Subform")
{
ApplicationArea = All;
SubPageLink = "Sell-to Customer No." = field("No.");
SubPageView = sorting("Sell-to Customer No.");
Visible = PostedInvoicesVisible;
}
part(PostedShpts; "Get Post.Doc - S.ShptLn Sbfrm")
{
ApplicationArea = All;
SubPageLink = "Sell-to Customer No." = field("No.");
SubPageView = sorting("Sell-to Customer No.");
Visible = PostedShptsVisible;
}
part(PostedCrMemos; "Get Post.Doc-S.Cr.MemoLn Sbfrm")
{
ApplicationArea = All;
SubPageLink = "Sell-to Customer No." = field("No.");
SubPageView = sorting("Sell-to Customer No.");
Visible = PostedCrMemosVisible;
}
part(PostedReturnRcpts; "Get Pst.Doc-RtrnRcptLn Subform")
{
ApplicationArea = All;
SubPageLink = "Sell-to Customer No." = field("No.");
SubPageView = sorting("Sell-to Customer No.");
Visible = PostedReturnRcptsVisible;
}
}
}
}
actions
{
}
trigger OnAfterGetRecord()
begin
Rec.CalcFields(
"No. of Pstd. Shipments", "No. of Pstd. Invoices",
"No. of Pstd. Return Receipts", "No. of Pstd. Credit Memos");
CurrentMenuTypeOpt := CurrentMenuType;
end;
trigger OnInit()
begin
ShowRevLineEnable := true;
end;
trigger OnOpenPage()
begin
CurrentMenuType := 1;
OnOpenPageOnAfterSetCurrentMenuType(Rec, CurrentMenuType);
ChangeSubMenu(CurrentMenuType);
Rec.SetRange("No.", Rec."No.");
end;
var
CopyDocMgt: Codeunit "Copy Document Mgt.";
OldMenuType: Integer;
LinesNotCopied: Integer;
MissingExCostRevLink: Boolean;
#pragma warning disable AA0074
Text000: Label 'The document lines that have a G/L account that does not allow direct posting have not been copied to the new document.';
#pragma warning restore AA0074
OriginalQuantity: Boolean;
#pragma warning disable AA0074
Text002: Label 'Document Type Filter';
#pragma warning restore AA0074
CurrentMenuTypeOpt: Option x0,x1,x2,x3;
protected var
ToSalesHeader: Record "Sales Header";
PostedShptsVisible: Boolean;
PostedInvoicesVisible: Boolean;
PostedReturnRcptsVisible: Boolean;
PostedCrMemosVisible: Boolean;
ShowRevLineEnable: Boolean;
ShowRevLinesOnly: Boolean;
CurrentMenuType: Integer;
/// <summary>
/// Copies the selected posted document line to the target sales document.
/// </summary>
procedure CopyLineToDoc()
var
FromSalesShptLine: Record "Sales Shipment Line";
FromSalesInvLine: Record "Sales Invoice Line";
FromSalesCrMemoLine: Record "Sales Cr.Memo Line";
FromReturnRcptLine: Record "Return Receipt Line";
IsHandled: Boolean;
begin
OnBeforeCopyLineToDoc(CopyDocMgt, CurrentMenuType);
ToSalesHeader.TestField(Status, ToSalesHeader.Status::Open);
LinesNotCopied := 0;
case CurrentMenuType of
0:
begin
CurrPage.PostedShpts.PAGE.GetSelectedLine(FromSalesShptLine);
CopyDocMgt.SetProperties(false, false, false, false, true, true, OriginalQuantity);
CopyDocMgt.CopySalesLinesToDoc(
Enum::"Sales Document Type From"::"Posted Shipment".AsInteger(), ToSalesHeader,
FromSalesShptLine, FromSalesInvLine, FromReturnRcptLine, FromSalesCrMemoLine, LinesNotCopied, MissingExCostRevLink);
end;
1:
begin
CurrPage.PostedInvoices.PAGE.GetSelectedLine(FromSalesInvLine);
CopyDocMgt.SetProperties(false, false, false, false, true, true, OriginalQuantity);
CopyDocMgt.CopySalesLinesToDoc(
Enum::"Sales Document Type From"::"Posted Invoice".AsInteger(), ToSalesHeader,
FromSalesShptLine, FromSalesInvLine, FromReturnRcptLine, FromSalesCrMemoLine, LinesNotCopied, MissingExCostRevLink);
end;
2:
begin
CurrPage.PostedReturnRcpts.PAGE.GetSelectedLine(FromReturnRcptLine);
CopyDocMgt.SetProperties(false, false, false, false, true, true, OriginalQuantity);
CopyDocMgt.CopySalesLinesToDoc(
Enum::"Sales Document Type From"::"Posted Return Receipt".AsInteger(), ToSalesHeader,
FromSalesShptLine, FromSalesInvLine, FromReturnRcptLine, FromSalesCrMemoLine, LinesNotCopied, MissingExCostRevLink);
end;
3:
begin
CurrPage.PostedCrMemos.PAGE.GetSelectedLine(FromSalesCrMemoLine);
CopyDocMgt.SetProperties(false, false, false, false, true, true, OriginalQuantity);
CopyDocMgt.CopySalesLinesToDoc(
Enum::"Sales Document Type From"::"Posted Credit Memo".AsInteger(), ToSalesHeader,
FromSalesShptLine, FromSalesInvLine, FromReturnRcptLine, FromSalesCrMemoLine, LinesNotCopied, MissingExCostRevLink);
end;
end;
Clear(CopyDocMgt);
IsHandled := false;
OnCopyLineToDocOnBeforeMessage(ToSalesHeader, IsHandled);
if not IsHandled then
if LinesNotCopied <> 0 then
Message(Text000);
end;
/// <summary>
/// Changes the visible submenu to display a different posted document type.
/// </summary>
/// <param name="NewMenuType">The menu type to display (0=Shipments, 1=Invoices, 2=Return Receipts, 3=Credit Memos).</param>
procedure ChangeSubMenu(NewMenuType: Integer)
begin
if OldMenuType <> NewMenuType then
SetSubMenu(OldMenuType, false);
SetSubMenu(NewMenuType, true);
OldMenuType := NewMenuType;
CurrentMenuType := NewMenuType;
end;
/// <summary>
/// Gets the currently selected menu type.
/// </summary>
/// <returns>The current menu type (0=Shipments, 1=Invoices, 2=Return Receipts, 3=Credit Memos).</returns>
procedure GetCurrentMenuType(): Integer
begin
exit(CurrentMenuType);
end;
local procedure SetSubMenu(MenuType: Integer; Visible: Boolean)
begin
if ShowRevLinesOnly and (MenuType in [0, 1]) then
ShowRevLinesOnly :=
CopyDocMgt.IsSalesFillExactCostRevLink(ToSalesHeader, MenuType, ToSalesHeader."Currency Code");
ShowRevLineEnable := MenuType in [0, 1];
case MenuType of
0:
begin
PostedShptsVisible := Visible;
CurrPage.PostedShpts.PAGE.Initialize(
ShowRevLinesOnly,
CopyDocMgt.IsSalesFillExactCostRevLink(
ToSalesHeader, MenuType, ToSalesHeader."Currency Code"), Visible);
end;
1:
begin
PostedInvoicesVisible := Visible;
CurrPage.PostedInvoices.PAGE.Initialize(
ToSalesHeader, ShowRevLinesOnly,
CopyDocMgt.IsSalesFillExactCostRevLink(
ToSalesHeader, MenuType, ToSalesHeader."Currency Code"), Visible);
end;
2:
PostedReturnRcptsVisible := Visible;
3:
PostedCrMemosVisible := Visible;
end;
end;
/// <summary>
/// Sets the target sales header for copying lines.
/// </summary>
/// <param name="NewToSalesHeader">The sales header to copy lines to.</param>
procedure SetToSalesHeader(NewToSalesHeader: Record "Sales Header")
begin
ToSalesHeader := NewToSalesHeader;
end;
local procedure OptionCaptionServiceTier(): Text[70]
begin
exit(Text002);
end;
local procedure ShowRevLinesOnlyOnAfterValidat()
begin
CurrPage.Update(true);
end;
local procedure x0CurrentMenuTypeOptOnPush()
begin
ChangeSubMenu(0);
end;
local procedure x0CurrentMenuTypeOptOnValidate()
begin
x0CurrentMenuTypeOptOnPush();
end;
local procedure x1CurrentMenuTypeOptOnPush()
begin
ChangeSubMenu(1);
end;
local procedure x1CurrentMenuTypeOptOnValidate()
begin
x1CurrentMenuTypeOptOnPush();
end;
local procedure x2CurrentMenuTypeOptOnPush()
begin
ChangeSubMenu(2);
end;
local procedure x2CurrentMenuTypeOptOnValidate()
begin
x2CurrentMenuTypeOptOnPush();
end;
local procedure x3CurrentMenuTypeOptOnPush()
begin
ChangeSubMenu(3);
end;
local procedure x3CurrentMenuTypeOptOnValidate()
begin
x3CurrentMenuTypeOptOnPush();
end;
local procedure NoOfPostedPrepmtInvoices(): Integer
var
SalesInvHeader: Record "Sales Invoice Header";
begin
SalesInvHeader.SetRange("Sell-to Customer No.", Rec."No.");
SalesInvHeader.SetRange("Prepayment Invoice", true);
exit(SalesInvHeader.Count);
end;
local procedure NoOfPostedPrepmtCrMemos(): Integer
var
SalesCrMemoHeader: Record "Sales Cr.Memo Header";
begin
SalesCrMemoHeader.SetRange("Sell-to Customer No.", Rec."No.");
SalesCrMemoHeader.SetRange("Prepayment Credit Memo", true);
exit(SalesCrMemoHeader.Count);
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeCopyLineToDoc(var CopyDocumentMgt: Codeunit "Copy Document Mgt."; CurrentMenuType: Integer)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnCopyLineToDocOnBeforeMessage(ToSalesHeader: Record "Sales Header"; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnOpenPageOnAfterSetCurrentMenuType(var Customer: Record Customer; var CurrentMenuType: Integer)
begin
end;
}