Page 44 Sales Credit Memo, source in 29
Source29
src/Layers/W1/BaseApp/Sales/Document/SalesCreditMemo.Page.al1830 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.Document;
using Microsoft.CRM.Contact;
using Microsoft.CRM.Outlook;
using Microsoft.EServices.EDocument;
using Microsoft.Finance.Currency;
using Microsoft.Finance.Dimension;
using Microsoft.Finance.GeneralLedger.Setup;
using Microsoft.Finance.VAT.Calculation;
using Microsoft.Foundation.Address;
using Microsoft.Foundation.Attachment;
using Microsoft.Foundation.Reporting;
using Microsoft.Projects.Resources.Resource;
using Microsoft.Sales.Comment;
using Microsoft.Sales.Customer;
using Microsoft.Sales.History;
using Microsoft.Sales.Posting;
using Microsoft.Sales.Pricing;
using Microsoft.Sales.Setup;
using Microsoft.Utilities;
using System.Automation;
using System.Environment;
using System.Privacy;
using System.Security.User;
using System.Threading;
/// <summary>
/// Displays and manages a single sales credit memo document for processing customer refunds.
/// </summary>
page 44 "Sales Credit Memo"
{
Caption = 'Sales Credit Memo';
PageType = Document;
RefreshOnActivate = true;
SourceTable = "Sales Header";
SourceTableView = where("Document Type" = filter("Credit Memo"));
layout
{
area(content)
{
group(General)
{
Caption = 'General';
field("No."; Rec."No.")
{
ApplicationArea = All;
Importance = Standard;
ToolTip = 'Specifies the number of the involved entry or record, according to the specified number series.';
Visible = DocNoVisible;
trigger OnAssistEdit()
begin
if Rec.AssistEdit(xRec) then
CurrPage.Update();
end;
}
field("Sell-to Customer No."; Rec."Sell-to Customer No.")
{
ApplicationArea = Basic, Suite;
Caption = 'Customer No.';
Importance = Additional;
NotBlank = true;
ToolTip = 'Specifies the number of the customer who will receive the products and be billed by default.';
trigger OnValidate()
begin
Rec.SelltoCustomerNoOnAfterValidate(Rec, xRec);
IsSalesLinesEditable := Rec.SalesLinesEditable();
CurrPage.Update();
end;
}
field("Sell-to Customer Name"; Rec."Sell-to Customer Name")
{
ApplicationArea = Basic, Suite;
Caption = 'Customer Name';
Importance = Promoted;
ShowMandatory = true;
ToolTip = 'Specifies the name of the customer who will receive the products and be billed by default.';
trigger OnAfterLookup(Selected: RecordRef)
var
Customer: Record Customer;
begin
Selected.SetTable(Customer);
if Rec."Sell-to Customer No." <> Customer."No." then begin
Rec.Validate("Sell-to Customer No.", Customer."No.");
if Rec."Sell-to Customer No." <> Customer."No." then
error('');
IsSalesLinesEditable := Rec.SalesLinesEditable();
CurrPage.Update();
end;
end;
trigger OnValidate()
begin
Rec.SelltoCustomerNoOnAfterValidate(Rec, xRec);
CurrPage.Update();
end;
}
field("Sell-to Customer Name 2"; Rec."Sell-to Customer Name 2")
{
ApplicationArea = Basic, Suite;
Caption = 'Customer Name 2';
QuickEntry = false;
Visible = false;
}
field("Registration Number"; Rec."Registration Number")
{
ApplicationArea = VAT;
Editable = false;
Importance = Additional;
Visible = false;
}
field("Posting Description"; Rec."Posting Description")
{
ApplicationArea = Suite;
Visible = false;
}
group("Sell-to")
{
Caption = 'Sell-to';
field("Sell-to Address"; Rec."Sell-to Address")
{
ApplicationArea = Basic, Suite;
Caption = 'Address';
Importance = Additional;
QuickEntry = false;
}
field("Sell-to Address 2"; Rec."Sell-to Address 2")
{
ApplicationArea = Basic, Suite;
Caption = 'Address 2';
Importance = Additional;
QuickEntry = false;
}
field("Sell-to City"; Rec."Sell-to City")
{
ApplicationArea = Basic, Suite;
Caption = 'City';
Importance = Additional;
QuickEntry = false;
}
group(Control36)
{
ShowCaption = false;
Visible = IsSellToCountyVisible;
field("Sell-to County"; Rec."Sell-to County")
{
ApplicationArea = Basic, Suite;
CaptionClass = '5,1,' + Rec."Sell-to Country/Region Code";
Importance = Additional;
QuickEntry = false;
}
}
field("Sell-to Post Code"; Rec."Sell-to Post Code")
{
ApplicationArea = Basic, Suite;
Caption = 'Post Code';
Importance = Additional;
QuickEntry = false;
ToolTip = 'Specifies the postal code.';
}
field("Sell-to Country/Region Code"; Rec."Sell-to Country/Region Code")
{
ApplicationArea = Basic, Suite;
Caption = 'Country/Region';
Importance = Additional;
QuickEntry = false;
ToolTip = 'Specifies the country or region of the address.';
trigger OnValidate()
begin
IsSellToCountyVisible := FormatAddress.UseCounty(Rec."Sell-to Country/Region Code");
end;
}
field("Sell-to Contact No."; Rec."Sell-to Contact No.")
{
ApplicationArea = Basic, Suite;
Caption = 'Contact No.';
Importance = Additional;
trigger OnLookup(var Text: Text): Boolean
begin
if not Rec.SelltoContactLookup() then
exit(false);
Text := Rec."Sell-to Contact No.";
CurrPage.Update();
exit(true);
end;
trigger OnValidate()
begin
if Rec.GetFilter("Sell-to Contact No.") = xRec."Sell-to Contact No." then
if Rec."Sell-to Contact No." <> xRec."Sell-to Contact No." then
Rec.SetRange("Sell-to Contact No.");
if Rec."Sell-to Contact No." <> xRec."Sell-to Contact No." then
CurrPage.Update();
end;
}
field(SellToPhoneNo; SellToContact."Phone No.")
{
ApplicationArea = Basic, Suite;
Caption = 'Phone No.';
Importance = Additional;
Editable = false;
ExtendedDatatype = PhoneNo;
ToolTip = 'Specifies the telephone number of the contact person that the sales document will be sent to.';
}
field(SellToMobilePhoneNo; SellToContact."Mobile Phone No.")
{
ApplicationArea = Basic, Suite;
Caption = 'Mobile Phone No.';
Importance = Additional;
Editable = false;
ExtendedDatatype = PhoneNo;
ToolTip = 'Specifies the mobile telephone number of the contact person that the sales document will be sent to.';
}
field(SellToEmail; SellToContact."E-Mail")
{
ApplicationArea = Basic, Suite;
Caption = 'Email';
Importance = Additional;
Editable = false;
ExtendedDatatype = EMail;
ToolTip = 'Specifies the email address of the contact person that the sales document will be sent to.';
}
}
field("Sell-to Contact"; Rec."Sell-to Contact")
{
ApplicationArea = Basic, Suite;
Caption = 'Contact';
Editable = Rec."Sell-to Customer No." <> '';
ToolTip = 'Specifies the name of the person to contact at the customer.';
}
field("Your Reference"; Rec."Your Reference")
{
ApplicationArea = Basic, Suite;
Importance = Additional;
ToolTip = 'Specifies the customer''s reference. The contents will be printed on sales documents.';
}
field("Posting Date"; Rec."Posting Date")
{
ApplicationArea = Basic, Suite;
Importance = Promoted;
trigger OnValidate()
begin
SaveInvoiceDiscountAmount();
end;
}
field("VAT Reporting Date"; Rec."VAT Reporting Date")
{
ApplicationArea = VAT;
Importance = Promoted;
Editable = VATDateEnabled;
Visible = VATDateEnabled;
}
field("Document Date"; Rec."Document Date")
{
ApplicationArea = Basic, Suite;
Importance = Additional;
}
field("Due Date"; Rec."Due Date")
{
ApplicationArea = Basic, Suite;
Importance = Promoted;
ToolTip = 'Specifies when the related sales invoice must be paid.';
}
field("Incoming Document Entry No."; Rec."Incoming Document Entry No.")
{
ApplicationArea = Basic, Suite;
Importance = Additional;
Visible = false;
}
field("External Document No."; Rec."External Document No.")
{
ApplicationArea = Basic, Suite;
Importance = Additional;
ShowMandatory = ExternalDocNoMandatory;
}
field("Salesperson Code"; Rec."Salesperson Code")
{
ApplicationArea = Suite;
Importance = Additional;
trigger OnValidate()
begin
SalespersonCodeOnAfterValidate();
end;
}
field("Campaign No."; Rec."Campaign No.")
{
ApplicationArea = RelationshipMgmt;
Importance = Additional;
ToolTip = 'Specifies the number of the campaign that the document is linked to.';
trigger OnValidate()
begin
if Rec."Campaign No." <> xRec."Campaign No." then
CurrPage.Update();
end;
}
field("Responsibility Center"; Rec."Responsibility Center")
{
ApplicationArea = Basic, Suite;
Importance = Additional;
}
field("Assigned User ID"; Rec."Assigned User ID")
{
ApplicationArea = Basic, Suite;
Importance = Additional;
}
field("Job Queue Status"; Rec."Job Queue Status")
{
ApplicationArea = All;
Importance = Additional;
ToolTip = 'Specifies the status of a job queue entry or task that handles the posting of sales credit memos.';
Visible = JobQueueUsed;
trigger OnDrillDown()
var
JobQueueEntry: Record "Job Queue Entry";
begin
if Rec."Job Queue Status" = Rec."Job Queue Status"::" " then
exit;
JobQueueEntry.ShowStatusMsg(Rec."Job Queue Entry ID");
end;
}
field(Status; Rec.Status)
{
ApplicationArea = Suite;
Importance = Promoted;
StyleExpr = StatusStyleTxt;
}
field("Applies-to Doc. Type"; Rec."Applies-to Doc. Type")
{
ApplicationArea = Basic, Suite;
Importance = Additional;
}
field("Applies-to Doc. No."; Rec."Applies-to Doc. No.")
{
ApplicationArea = Basic, Suite;
Importance = Additional;
}
field("Applies-to ID"; Rec."Applies-to ID")
{
ApplicationArea = Basic, Suite;
Importance = Additional;
}
group("Work Description")
{
Caption = 'Work Description';
field(WorkDescription; WorkDescription)
{
ApplicationArea = Basic, Suite;
Importance = Additional;
MultiLine = true;
ShowCaption = false;
ToolTip = 'Specifies the products or services being offered.';
trigger OnValidate()
begin
Rec.SetWorkDescription(WorkDescription);
end;
}
}
field("Language Code"; Rec."Language Code")
{
ApplicationArea = Basic, Suite;
Visible = false;
}
field("Format Region"; Rec."Format Region")
{
ApplicationArea = Basic, Suite;
Visible = false;
}
}
part(SalesLines; "Sales Cr. Memo Subform")
{
ApplicationArea = Basic, Suite;
Editable = IsSalesLinesEditable;
Enabled = IsSalesLinesEditable;
SubPageLink = "Document No." = field("No.");
UpdatePropagation = Both;
}
group("Credit Memo Details")
{
Caption = 'Credit Memo Details';
field("Currency Code"; Rec."Currency Code")
{
ApplicationArea = Suite;
Importance = Promoted;
trigger OnAssistEdit()
begin
Clear(ChangeExchangeRate);
if Rec."Posting Date" <> 0D then
ChangeExchangeRate.SetParameter(Rec."Currency Code", Rec."Currency Factor", Rec."Posting Date")
else
ChangeExchangeRate.SetParameter(Rec."Currency Code", Rec."Currency Factor", WorkDate());
if ChangeExchangeRate.RunModal() = ACTION::OK then begin
Rec.Validate("Currency Factor", ChangeExchangeRate.GetParameter());
SaveInvoiceDiscountAmount();
end;
Clear(ChangeExchangeRate);
end;
trigger OnValidate()
begin
CurrPage.Update();
end;
}
field("Company Bank Account Code"; Rec."Company Bank Account Code")
{
ApplicationArea = Suite;
Importance = Promoted;
}
field("Shipment Date"; Rec."Shipment Date")
{
ApplicationArea = Basic, Suite;
Importance = Promoted;
}
field("Prices Including VAT"; Rec."Prices Including VAT")
{
ApplicationArea = VAT;
trigger OnValidate()
begin
PricesIncludingVATOnAfterValid();
end;
}
field("VAT Country/Region Code"; Rec."VAT Country/Region Code")
{
ApplicationArea = VAT;
Importance = Additional;
}
field("VAT Registration No."; Rec."VAT Registration No.")
{
ApplicationArea = VAT;
Importance = Additional;
}
field("Gen. Bus. Posting Group"; Rec."Gen. Bus. Posting Group")
{
ApplicationArea = Basic, Suite;
Importance = Additional;
}
field("VAT Bus. Posting Group"; Rec."VAT Bus. Posting Group")
{
ApplicationArea = Basic, Suite;
}
field("Customer Posting Group"; Rec."Customer Posting Group")
{
ApplicationArea = Basic, Suite;
Editable = IsPostingGroupEditable;
Importance = Additional;
ToolTip = 'Specifies the customer s market type to link business transactions to.';
}
field("Payment Terms Code"; Rec."Payment Terms Code")
{
ApplicationArea = Basic, Suite;
Importance = Promoted;
}
field("Payment Method Code"; Rec."Payment Method Code")
{
ApplicationArea = Basic, Suite;
Importance = Additional;
Visible = IsPaymentMethodCodeVisible;
}
field("Reason Code"; Rec."Reason Code")
{
ApplicationArea = Basic, Suite;
Importance = Additional;
Visible = false;
}
field("Shortcut Dimension 1 Code"; Rec."Shortcut Dimension 1 Code")
{
ApplicationArea = Dimensions;
trigger OnValidate()
begin
ShortcutDimension1CodeOnAfterV();
end;
}
field("Shortcut Dimension 2 Code"; Rec."Shortcut Dimension 2 Code")
{
ApplicationArea = Dimensions;
trigger OnValidate()
begin
ShortcutDimension2CodeOnAfterV();
end;
}
field("Payment Discount %"; Rec."Payment Discount %")
{
ApplicationArea = Basic, Suite;
ToolTip = 'Specifies the payment discount percentage granted if the customer pays on or before the date entered in the Pmt. Discount Date field.';
}
field("Pmt. Discount Date"; Rec."Pmt. Discount Date")
{
ApplicationArea = Basic, Suite;
Importance = Additional;
}
field("Journal Templ. Name"; Rec."Journal Templ. Name")
{
ApplicationArea = BasicBE;
Visible = IsJournalTemplNameVisible;
}
field("Location Code"; Rec."Location Code")
{
ApplicationArea = Location;
Importance = Additional;
ToolTip = 'Specifies the code for the location where the items are to be received. When you select the customer and the customer has a location assigned, the value is taken from the Customer card. If the customer has no location, but a Responsibility Center is populated, the location code is taken from the Responsibility Center. If neither is specified, the value is taken from Company Information. This field acts as the default location for new lines. You can update the location code for individual lines as needed.';
}
field("EU 3-Party Trade"; Rec."EU 3-Party Trade")
{
ApplicationArea = BasicEU;
}
field(Correction; Rec.Correction)
{
ApplicationArea = Basic, Suite;
}
}
group(Billing)
{
Caption = 'Billing';
group("Bill-to")
{
Caption = 'Bill-to';
field("Bill-to Name"; Rec."Bill-to Name")
{
ApplicationArea = Basic, Suite;
Caption = 'Name';
Importance = Promoted;
ToolTip = 'Specifies the customer to whom you will send the sales invoice, when different from the customer that you are selling to.';
trigger OnValidate()
begin
if Rec.GetFilter("Bill-to Customer No.") = xRec."Bill-to Customer No." then
if Rec."Bill-to Customer No." <> xRec."Bill-to Customer No." then
Rec.SetRange("Bill-to Customer No.");
CurrPage.Update();
end;
trigger OnLookup(var Text: Text): Boolean
var
Customer: Record Customer;
begin
OnBeforeLookupBillToName(Customer, Rec);
if Customer.SelectCustomer(Customer) then begin
xRec := Rec;
Rec."Bill-to Name" := Customer.Name;
Rec.Validate("Bill-to Customer No.", Customer."No.");
end;
if Rec.GetFilter("Bill-to Customer No.") = xRec."Bill-to Customer No." then
if Rec."Bill-to Customer No." <> xRec."Bill-to Customer No." then
Rec.SetRange("Bill-to Customer No.");
CurrPage.Update();
end;
}
field("Bill-to Name 2"; Rec."Bill-to Name 2")
{
ApplicationArea = Basic, Suite;
Caption = 'Name 2';
Importance = Additional;
QuickEntry = false;
Visible = false;
}
field("Bill-to Address"; Rec."Bill-to Address")
{
ApplicationArea = Basic, Suite;
Caption = 'Address';
Importance = Additional;
QuickEntry = false;
}
field("Bill-to Address 2"; Rec."Bill-to Address 2")
{
ApplicationArea = Basic, Suite;
Caption = 'Address 2';
Importance = Additional;
QuickEntry = false;
}
field("Bill-to City"; Rec."Bill-to City")
{
ApplicationArea = Basic, Suite;
Caption = 'City';
Importance = Additional;
QuickEntry = false;
}
group(Control55)
{
ShowCaption = false;
Visible = IsBillToCountyVisible;
field("Bill-to County"; Rec."Bill-to County")
{
ApplicationArea = Basic, Suite;
CaptionClass = '5,1,' + Rec."Bill-to Country/Region Code";
Importance = Additional;
QuickEntry = false;
}
}
field("Bill-to Post Code"; Rec."Bill-to Post Code")
{
ApplicationArea = Basic, Suite;
Caption = 'Post Code';
Importance = Additional;
QuickEntry = false;
ToolTip = 'Specifies the postal code.';
}
field("Bill-to Country/Region Code"; Rec."Bill-to Country/Region Code")
{
ApplicationArea = Basic, Suite;
Caption = 'Country/Region';
Importance = Additional;
QuickEntry = false;
ToolTip = 'Specifies the country or region of the address.';
trigger OnValidate()
begin
IsBillToCountyVisible := FormatAddress.UseCounty(Rec."Bill-to Country/Region Code");
end;
}
field("Bill-to Contact No."; Rec."Bill-to Contact No.")
{
ApplicationArea = Basic, Suite;
Caption = 'Contact No';
Importance = Additional;
}
field("Bill-to Contact"; Rec."Bill-to Contact")
{
ApplicationArea = Basic, Suite;
Caption = 'Contact';
ToolTip = 'Specifies the name of the person you should contact at the customer who you are sending the invoice to.';
}
field(BillToContactPhoneNo; BillToContact."Phone No.")
{
ApplicationArea = Basic, Suite;
Caption = 'Phone No.';
Editable = false;
Importance = Additional;
ExtendedDatatype = PhoneNo;
ToolTip = 'Specifies the telephone number of the person you should contact at the customer you are sending the invoice to.';
}
field(BillToContactMobilePhoneNo; BillToContact."Mobile Phone No.")
{
ApplicationArea = Basic, Suite;
Caption = 'Mobile Phone No.';
Editable = false;
Importance = Additional;
ExtendedDatatype = PhoneNo;
ToolTip = 'Specifies the mobile telephone number of the person you should contact at the customer you are sending the invoice to.';
}
field(BillToContactEmail; BillToContact."E-Mail")
{
ApplicationArea = Basic, Suite;
Caption = 'Email';
Editable = false;
Importance = Additional;
ExtendedDatatype = EMail;
ToolTip = 'Specifies the email address of the person you should contact at the customer you are sending the invoice to.';
}
}
}
group("Foreign Trade")
{
Caption = 'Foreign Trade';
field("Transaction Specification"; Rec."Transaction Specification")
{
ApplicationArea = BasicEU;
}
field("Transaction Type"; Rec."Transaction Type")
{
ApplicationArea = BasicEU;
}
field("Transport Method"; Rec."Transport Method")
{
ApplicationArea = BasicEU;
}
field("Exit Point"; Rec."Exit Point")
{
ApplicationArea = BasicEU;
}
field("Area"; Rec.Area)
{
ApplicationArea = BasicEU;
}
field("Rcvd-from Country/Region Code"; Rec."Rcvd.-from Count./Region Code")
{
ApplicationArea = BasicEU, BasicCH, BasicNO;
}
}
}
area(factboxes)
{
part(SalesDocCheckFactbox; "Sales Doc. Check Factbox")
{
ApplicationArea = All;
Caption = 'Document Check';
Visible = SalesDocCheckFactboxVisible;
SubPageLink = "No." = field("No."),
"Document Type" = field("Document Type");
}
part("Attached Documents List"; "Doc. Attachment List Factbox")
{
ApplicationArea = All;
Caption = 'Documents';
UpdatePropagation = Both;
SubPageLink = "Table ID" = const(Database::"Sales Header"),
"No." = field("No."),
"Document Type" = field("Document Type");
}
part(Control19; "Pending Approval FactBox")
{
ApplicationArea = All;
SubPageLink = "Table ID" = const(36),
"Document Type" = field("Document Type"),
"Document No." = field("No."),
Status = const(Open);
Visible = OpenApprovalEntriesExistForCurrUser;
}
part(Control1903720907; "Sales Hist. Sell-to FactBox")
{
ApplicationArea = Basic, Suite;
SubPageLink = "No." = field("Sell-to Customer No."),
"Date Filter" = field("Date Filter");
Visible = false;
}
part(Control1907234507; "Sales Hist. Bill-to FactBox")
{
ApplicationArea = Basic, Suite;
SubPageLink = "No." = field("Sell-to Customer No."),
"Date Filter" = field("Date Filter");
Visible = false;
}
part(Control1902018507; "Customer Statistics FactBox")
{
ApplicationArea = Basic, Suite;
SubPageLink = "No." = field("Bill-to Customer No."),
"Date Filter" = field("Date Filter");
}
part(Control1900316107; "Customer Details FactBox")
{
ApplicationArea = Basic, Suite;
SubPageLink = "No." = field("Sell-to Customer No."),
"Date Filter" = field("Date Filter");
}
part(Control1906127307; "Sales Line FactBox")
{
ApplicationArea = Basic, Suite;
Provider = SalesLines;
SubPageLink = "Document Type" = field("Document Type"),
"Document No." = field("Document No."),
"Line No." = field("Line No.");
Visible = false;
}
part(ApprovalFactBox; "Approval FactBox")
{
ApplicationArea = Basic, Suite;
Visible = false;
}
part(IncomingDocAttachFactBox; "Incoming Doc. Attach. FactBox")
{
ApplicationArea = Basic, Suite;
ShowFilter = false;
Visible = false;
}
part(Control1907012907; "Resource Details FactBox")
{
ApplicationArea = Basic, Suite;
Provider = SalesLines;
SubPageLink = "No." = field("No.");
Visible = false;
}
part(WorkflowStatus; "Workflow Status FactBox")
{
ApplicationArea = All;
Editable = false;
Enabled = false;
ShowFilter = false;
Visible = ShowWorkflowStatus;
}
systempart(Control1900383207; Links)
{
ApplicationArea = RecordLinks;
Visible = false;
}
systempart(Control1905767507; Notes)
{
ApplicationArea = Notes;
}
}
}
actions
{
area(navigation)
{
group("&Credit Memo")
{
Caption = '&Credit Memo';
Image = CreditMemo;
action(SalesStatistics)
{
ApplicationArea = Basic, Suite;
Caption = 'Statistics';
Enabled = Rec."No." <> '';
Image = Statistics;
ShortCutKey = 'F7';
Visible = true;
ToolTip = 'View statistical information, such as the value of posted entries, for the record.';
RunObject = Page "Sales Statistics";
RunPageOnRec = true;
}
action(CreditMemo_CustomerCard)
{
ApplicationArea = Basic, Suite;
Caption = 'Customer';
Enabled = IsCustomerOrContactNotEmpty;
Image = EditLines;
RunObject = Page "Customer Card";
RunPageLink = "No." = field("Sell-to Customer No."),
"Date Filter" = field("Date Filter");
ShortCutKey = 'Shift+F7';
ToolTip = 'View or edit detailed information about the customer on the sales document.';
}
action(CustomerStatistics)
{
ApplicationArea = Basic, Suite;
Caption = 'Customer Statistics';
Enabled = IsCustomerOrContactNotEmpty;
Image = Statistics;
RunObject = Page "Customer Statistics";
RunPageLink = "No." = field("Sell-to Customer No."),
"Date Filter" = field("Date Filter");
ToolTip = 'View statistical information, such as the value of posted entries, for the sell-to customer on the sales document.';
}
action("Co&mments")
{
ApplicationArea = Comments;
Caption = 'Co&mments';
Image = ViewComments;
RunObject = Page "Sales Comment Sheet";
RunPageLink = "Document Type" = field("Document Type"),
"No." = field("No."),
"Document Line No." = const(0);
ToolTip = 'View or add comments for the record.';
}
action(Approvals)
{
AccessByPermission = TableData "Approval Entry" = R;
ApplicationArea = Suite;
Caption = 'Approvals';
Image = Approvals;
ToolTip = 'View a list of the records that are waiting to be approved. For example, you can see who requested the record to be approved, when it was sent, and when it is due to be approved.';
trigger OnAction()
var
ApprovalsMgmt: Codeunit "Approvals Mgmt.";
begin
ApprovalsMgmt.OpenApprovalsSales(Rec);
end;
}
action(DocAttach)
{
ApplicationArea = All;
Caption = 'Attachments';
Image = Attach;
ToolTip = 'Add a file as an attachment. You can attach images as well as documents.';
trigger OnAction()
var
DocumentAttachmentDetails: Page "Document Attachment Details";
RecRef: RecordRef;
begin
RecRef.GetTable(Rec);
DocumentAttachmentDetails.OpenForRecRef(RecRef);
DocumentAttachmentDetails.RunModal();
end;
}
}
}
area(processing)
{
group("Credit Memo")
{
Caption = '&Credit Memo';
Image = CreditMemo;
action(Customer)
{
ApplicationArea = Basic, Suite;
Caption = 'Customer';
Enabled = IsCustomerOrContactNotEmpty;
Image = Customer;
RunObject = Page "Customer Card";
RunPageLink = "No." = field("Sell-to Customer No."),
"Date Filter" = field("Date Filter");
ShortCutKey = 'Shift+F7';
ToolTip = 'View or edit detailed information about the customer.';
}
action(Dimensions)
{
AccessByPermission = TableData Dimension = R;
ApplicationArea = Dimensions;
Caption = 'Dimensions';
Image = Dimensions;
ShortCutKey = 'Alt+D';
ToolTip = 'View or edit dimensions, such as area, project, or department, that you can assign to sales and purchase documents to distribute costs and analyze transaction history.';
trigger OnAction()
begin
Rec.ShowDocDim();
CurrPage.SaveRecord();
end;
}
}
group(Approval)
{
Caption = 'Approval';
action(Approve)
{
ApplicationArea = All;
Caption = 'Approve';
Image = Approve;
ToolTip = 'Approve the requested changes.';
Visible = OpenApprovalEntriesExistForCurrUser;
trigger OnAction()
var
ApprovalsMgmt: Codeunit "Approvals Mgmt.";
begin
ApprovalsMgmt.ApproveRecordApprovalRequest(Rec.RecordId);
end;
}
action(Reject)
{
ApplicationArea = All;
Caption = 'Reject';
Image = Reject;
ToolTip = 'Reject the approval request.';
Visible = OpenApprovalEntriesExistForCurrUser;
trigger OnAction()
var
ApprovalsMgmt: Codeunit "Approvals Mgmt.";
begin
ApprovalsMgmt.RejectRecordApprovalRequest(Rec.RecordId);
end;
}
action(Delegate)
{
ApplicationArea = All;
Caption = 'Delegate';
Image = Delegate;
ToolTip = 'Delegate the approval to a substitute approver.';
Visible = OpenApprovalEntriesExistForCurrUser;
trigger OnAction()
var
ApprovalsMgmt: Codeunit "Approvals Mgmt.";
begin
ApprovalsMgmt.DelegateRecordApprovalRequest(Rec.RecordId);
end;
}
action(Comment)
{
ApplicationArea = All;
Caption = 'Comments';
Image = ViewComments;
ToolTip = 'View or add comments for the record.';
Visible = OpenApprovalEntriesExistForCurrUser;
trigger OnAction()
var
ApprovalsMgmt: Codeunit "Approvals Mgmt.";
begin
ApprovalsMgmt.GetApprovalComment(Rec);
end;
}
}
group(Action7)
{
Caption = 'Release';
Image = ReleaseDoc;
action(Release)
{
ApplicationArea = Suite;
Caption = 'Re&lease';
Enabled = IsCustomerOrContactNotEmpty and (Rec.Status <> Rec.Status::Released);
Image = ReleaseDoc;
ShortCutKey = 'Ctrl+F9';
ToolTip = 'Release the document to the next stage of processing. You must reopen the document before you can make changes to it.';
trigger OnAction()
var
ReleaseSalesDoc: Codeunit "Release Sales Document";
begin
ReleaseSalesDoc.PerformManualRelease(Rec);
CurrPage.SalesLines.PAGE.ClearTotalSalesHeader();
end;
}
action(Reopen)
{
ApplicationArea = Suite;
Caption = 'Re&open';
Enabled = Rec.Status <> Rec.Status::Open;
Image = ReOpen;
ToolTip = 'Reopen the document to change it after it has been approved. Approved documents have the Released status and must be opened before they can be changed.';
trigger OnAction()
var
ReleaseSalesDoc: Codeunit "Release Sales Document";
begin
ReleaseSalesDoc.PerformManualReopen(Rec);
CurrPage.SalesLines.PAGE.ClearTotalSalesHeader();
end;
}
}
group("F&unctions")
{
Caption = 'F&unctions';
Image = "Action";
action(GetPostedDocumentLinesToReverse)
{
ApplicationArea = Basic, Suite;
Caption = 'Get Posted Doc&ument Lines to Reverse';
Ellipsis = true;
Image = ReverseLines;
ToolTip = 'Copy one or more posted sales document lines in order to reverse the original order.';
trigger OnAction()
begin
Rec.GetPstdDocLinesToReverse();
CurrPage.SalesLines.Page.ForceTotalsCalculation();
CurrPage.Update();
end;
}
action(CalculateInvoiceDiscount)
{
AccessByPermission = TableData "Cust. Invoice Disc." = R;
ApplicationArea = Basic, Suite;
Caption = 'Calculate &Invoice Discount';
Enabled = IsCustomerOrContactNotEmpty;
Image = CalculateInvoiceDiscount;
ToolTip = 'Calculate the invoice discount that applies to the sales credit memo.';
trigger OnAction()
begin
ApproveCalcInvDisc();
SalesCalcDiscByType.ResetRecalculateInvoiceDisc(Rec);
end;
}
action(ApplyEntries)
{
ApplicationArea = Basic, Suite;
Caption = 'Apply Entries';
Ellipsis = true;
Enabled = Rec."No." <> '';
Image = ApplyEntries;
ShortCutKey = 'Shift+F11';
ToolTip = 'Select one or more ledger entries that you want to apply this record to so that the related posted documents are closed as paid or refunded.';
trigger OnAction()
begin
CODEUNIT.Run(CODEUNIT::"Sales Header Apply", Rec);
end;
}
action(GetStdCustSalesCodes)
{
ApplicationArea = Basic, Suite;
Caption = 'Get Recurring Sales Lines';
Ellipsis = true;
Enabled = IsCustomerOrContactNotEmpty;
Image = CustomerCode;
ToolTip = 'View a list of the standard sales lines that have been assigned to the customer to be used for recurring sales.';
trigger OnAction()
var
StdCustSalesCode: Record "Standard Customer Sales Code";
begin
StdCustSalesCode.InsertSalesLines(Rec);
end;
}
action(CopyDocument)
{
ApplicationArea = Suite;
Caption = 'Copy Document';
Ellipsis = true;
Enabled = Rec."No." <> '';
Image = CopyDocument;
ToolTip = 'Copy document lines and header information from another sales document to this document. You can copy a posted sales invoice into a new sales invoice to quickly create a similar document.';
trigger OnAction()
begin
Rec.CopyDocument();
if Rec.Get(Rec."Document Type", Rec."No.") then;
CurrPage.SalesLines.Page.ForceTotalsCalculation();
CurrPage.Update();
end;
}
action("Move Negative Lines")
{
ApplicationArea = Basic, Suite;
Caption = 'Move Negative Lines';
Ellipsis = true;
Image = MoveNegativeLines;
ToolTip = 'Prepare to create a replacement sales order in a sales return process.';
trigger OnAction()
begin
Clear(MoveNegSalesLines);
MoveNegSalesLines.SetSalesHeader(Rec);
MoveNegSalesLines.RunModal();
MoveNegSalesLines.ShowDocument();
end;
}
group(IncomingDocument)
{
Caption = 'Incoming Document';
Image = Documents;
action(IncomingDocCard)
{
ApplicationArea = Basic, Suite;
Caption = 'View Incoming Document';
Enabled = HasIncomingDocument;
Image = ViewOrder;
ToolTip = 'View any incoming document records and file attachments that exist for the entry or document.';
trigger OnAction()
var
IncomingDocument: Record "Incoming Document";
begin
IncomingDocument.ShowCardFromEntryNo(Rec."Incoming Document Entry No.");
end;
}
action(SelectIncomingDoc)
{
AccessByPermission = TableData "Incoming Document" = R;
ApplicationArea = Basic, Suite;
Caption = 'Select Incoming Document';
Image = SelectLineToApply;
ToolTip = 'Select an incoming document record and file attachment that you want to link to the entry or document.';
trigger OnAction()
var
IncomingDocument: Record "Incoming Document";
begin
Rec.Validate("Incoming Document Entry No.", IncomingDocument.SelectIncomingDocument(Rec."Incoming Document Entry No.", Rec.RecordId));
end;
}
action(IncomingDocAttachFile)
{
ApplicationArea = Basic, Suite;
Caption = 'Create Incoming Document from File';
Ellipsis = true;
Enabled = not HasIncomingDocument;
Image = Attach;
ToolTip = 'Create an incoming document record by selecting a file to attach, and then link the incoming document record to the entry or document.';
trigger OnAction()
var
IncomingDocumentAttachment: Record "Incoming Document Attachment";
begin
IncomingDocumentAttachment.NewAttachmentFromSalesDocument(Rec);
end;
}
action(RemoveIncomingDoc)
{
ApplicationArea = Basic, Suite;
Caption = 'Remove Incoming Document';
Enabled = HasIncomingDocument;
Image = RemoveLine;
ToolTip = 'Remove any incoming document records and file attachments.';
trigger OnAction()
var
IncomingDocument: Record "Incoming Document";
begin
if IncomingDocument.Get(Rec."Incoming Document Entry No.") then
IncomingDocument.RemoveLinkToRelatedRecord();
Rec."Incoming Document Entry No." := 0;
Rec.Modify(true);
end;
}
}
}
group("Request Approval")
{
Caption = 'Request Approval';
Image = Approval;
action(SendApprovalRequest)
{
ApplicationArea = Basic, Suite;
Caption = 'Send A&pproval Request';
Enabled = not OpenApprovalEntriesExist and CanRequestApprovalForFlow;
Image = SendApprovalRequest;
ToolTip = 'Request approval of the document.';
trigger OnAction()
var
ApprovalsMgmt: Codeunit "Approvals Mgmt.";
begin
if ApprovalsMgmt.CheckSalesApprovalPossible(Rec) then
ApprovalsMgmt.OnSendSalesDocForApproval(Rec);
end;
}
action(CancelApprovalRequest)
{
ApplicationArea = Basic, Suite;
Caption = 'Cancel Approval Re&quest';
Enabled = CanCancelApprovalForRecord or CanCancelApprovalForFlow;
Image = CancelApprovalRequest;
ToolTip = 'Cancel the approval request.';
trigger OnAction()
var
ApprovalsMgmt: Codeunit "Approvals Mgmt.";
WorkflowWebhookMgt: Codeunit "Workflow Webhook Management";
begin
ApprovalsMgmt.OnCancelSalesApprovalRequest(Rec);
WorkflowWebhookMgt.FindAndCancel(Rec.RecordId);
end;
}
group(Flow)
{
Caption = 'Power Automate';
Image = Flow;
customaction(CreateFlowFromTemplate)
{
ApplicationArea = Basic, Suite;
Caption = 'Create approval flow';
ToolTip = 'Create a new flow in Power Automate from a list of relevant flow templates.';
Visible = IsSaaS and IsPowerAutomatePrivacyNoticeApproved;
CustomActionType = FlowTemplateGallery;
FlowTemplateCategoryName = 'd365bc_approval_salesCreditMemo';
}
}
}
group("P&osting")
{
Caption = 'P&osting';
Image = Post;
action(Post)
{
ApplicationArea = Basic, Suite;
Caption = 'P&ost';
Image = PostOrder;
ShortCutKey = 'F9';
ToolTip = 'Finalize the document or journal by posting the amounts and quantities to the related accounts in your company books.';
trigger OnAction()
begin
PostDocument(CODEUNIT::"Sales-Post (Yes/No)");
end;
}
action(TestReport)
{
ApplicationArea = Basic, Suite;
Caption = 'Test Report';
Ellipsis = true;
Enabled = Rec."No." <> '';
Image = TestReport;
ToolTip = 'View a test report so that you can find and correct any errors before you perform the actual posting of the journal or document.';
trigger OnAction()
begin
ReportPrint.PrintSalesHeader(Rec);
end;
}
action(PostAndSend)
{
ApplicationArea = Basic, Suite;
Caption = 'Post and &Send';
Ellipsis = true;
Image = PostSendTo;
ToolTip = 'Finalize and prepare to send the document according to the customer''s sending profile, such as attached to an email. The Send document to window opens first so you can confirm or select a sending profile.';
trigger OnAction()
begin
PostDocument(CODEUNIT::"Sales-Post and Send");
end;
}
action("Remove From Job Queue")
{
ApplicationArea = All;
Caption = 'Remove From Job Queue';
Image = RemoveLine;
ToolTip = 'Remove the scheduled processing of this record from the job queue.';
Visible = JobQueueVisible;
trigger OnAction()
begin
Rec.CancelBackgroundPosting();
end;
}
action("Preview Posting")
{
ApplicationArea = Basic, Suite;
Caption = 'Preview Posting';
Image = ViewPostedOrder;
ShortCutKey = 'Ctrl+Alt+F9';
ToolTip = 'Review the different types of entries that will be created when you post the document or journal.';
trigger OnAction()
begin
ShowPreview();
end;
}
}
}
area(Promoted)
{
group(Category_Process)
{
Caption = 'Process', Comment = 'Generated from the PromotedActionCategories property index 1.';
group(Category_Category6)
{
Caption = 'Posting', Comment = 'Generated from the PromotedActionCategories property index 5.';
ShowAs = SplitButton;
actionref(Post_Promoted; Post)
{
}
actionref(PostAndSend_Promoted; PostAndSend)
{
}
actionref("Preview Posting_Promoted"; "Preview Posting")
{
}
}
group(Category_Category5)
{
Caption = 'Release', Comment = 'Generated from the PromotedActionCategories property index 4.';
ShowAs = SplitButton;
actionref(Release_Promoted; Release)
{
}
actionref(Reopen_Promoted; Reopen)
{
}
}
actionref(ApplyEntries_Promoted; ApplyEntries)
{
}
}
group(Category_Category7)
{
Caption = 'Prepare', Comment = 'Generated from the PromotedActionCategories property index 6.';
actionref(CopyDocument_Promoted; CopyDocument)
{
}
actionref(GetPostedDocumentLinesToReverse_Promoted; GetPostedDocumentLinesToReverse)
{
}
group("Category_Incoming Document")
{
Caption = 'Incoming Document';
actionref(IncomingDocAttachFile_Promoted; IncomingDocAttachFile)
{
}
actionref(SelectIncomingDoc_Promoted; SelectIncomingDoc)
{
}
actionref(IncomingDocCard_Promoted; IncomingDocCard)
{
}
actionref(RemoveIncomingDoc_Promoted; RemoveIncomingDoc)
{
}
}
actionref(GetStdCustSalesCodes_Promoted; GetStdCustSalesCodes)
{
}
actionref(CalculateInvoiceDiscount_Promoted; CalculateInvoiceDiscount)
{
}
actionref("Move Negative Lines_Promoted"; "Move Negative Lines")
{
}
}
group(Category_Category4)
{
Caption = 'Approve', Comment = 'Generated from the PromotedActionCategories property index 3.';
actionref(Approve_Promoted; Approve)
{
}
actionref(Reject_Promoted; Reject)
{
}
actionref(Comment_Promoted; Comment)
{
}
actionref(Delegate_Promoted; Delegate)
{
}
}
group(Category_Category9)
{
Caption = 'Request Approval', Comment = 'Generated from the PromotedActionCategories property index 8.';
actionref(SendApprovalRequest_Promoted; SendApprovalRequest)
{
}
actionref(CancelApprovalRequest_Promoted; CancelApprovalRequest)
{
}
}
group(Category_Category8)
{
Caption = 'Credit Memo', Comment = 'Generated from the PromotedActionCategories property index 7.';
actionref(SalesStatistics_Promoted; SalesStatistics)
{
}
actionref(Dimensions_Promoted; Dimensions)
{
}
actionref(DocAttach_Promoted; DocAttach)
{
}
actionref(Approvals_Promoted; Approvals)
{
}
actionref("Co&mments_Promoted"; "Co&mments")
{
}
separator(Navigate_Separator)
{
}
actionref(CreditMemo_CustomerCard_Promoted; CreditMemo_CustomerCard)
{
}
}
group(Category_Category10)
{
Caption = 'Navigate', Comment = 'Generated from the PromotedActionCategories property index 9.';
}
group(Category_Report)
{
Caption = 'Report', Comment = 'Generated from the PromotedActionCategories property index 2.';
}
}
}
trigger OnAfterGetCurrRecord()
begin
SetControlAppearance();
CurrPage.IncomingDocAttachFactBox.PAGE.LoadDataFromRecord(Rec);
CurrPage.ApprovalFactBox.PAGE.UpdateApprovalEntriesFromSourceRecord(Rec.RecordId);
ShowWorkflowStatus := CurrPage.WorkflowStatus.PAGE.SetFilterOnWorkflowRecord(Rec.RecordId);
StatusStyleTxt := Rec.GetStatusStyleText();
SetControlAppearance();
end;
trigger OnAfterGetRecord()
begin
WorkDescription := Rec.GetWorkDescription();
SellToContact.GetOrClear(Rec."Sell-to Contact No.");
BillToContact.GetOrClear(Rec."Bill-to Contact No.");
OnAfterOnAfterGetRecord(Rec);
end;
trigger OnDeleteRecord(): Boolean
begin
CurrPage.SaveRecord();
exit(Rec.ConfirmDeletion());
end;
trigger OnInit()
begin
JobQueueUsed := SalesSetup.JobQueueActive();
SetExtDocNoMandatoryCondition();
IsPowerAutomatePrivacyNoticeApproved := PrivacyNotice.GetPrivacyNoticeApprovalState(FlowServiceManagement.GetPowerAutomatePrivacyNoticeId()) = "Privacy Notice Approval State"::Agreed;
end;
trigger OnInsertRecord(BelowxRec: Boolean): Boolean
begin
if DocNoVisible then
Rec.CheckCreditMaxBeforeInsert();
if (Rec."Sell-to Customer No." = '') and (Rec.GetFilter("Sell-to Customer No.") <> '') then
CurrPage.Update(false);
end;
trigger OnNewRecord(BelowxRec: Boolean)
begin
Rec."Responsibility Center" := UserMgt.GetSalesFilter();
if (not DocNoVisible) and (Rec."No." = '') then
Rec.SetSellToCustomerFromFilter();
SetControlAppearance();
end;
trigger OnOpenPage()
var
EnvironmentInfo: Codeunit "Environment Information";
VATReportingDateMgt: Codeunit "VAT Reporting Date Mgt";
begin
Rec.SetSecurityFilterOnRespCenter();
Rec.SetRange("Date Filter", 0D, WorkDate());
ActivateFields();
IsSaaS := EnvironmentInfo.IsSaaS();
SetDocNoVisible();
SetControlAppearance();
if (Rec."No." <> '') and (Rec."Sell-to Customer No." = '') then
DocumentIsPosted := (not Rec.Get(Rec."Document Type", Rec."No."));
CheckShowBackgrValidationNotification();
VATDateEnabled := VATReportingDateMgt.IsVATDateEnabled();
end;
trigger OnQueryClosePage(CloseAction: Action): Boolean
var
Result: Boolean;
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeOnQueryClosePage(Rec, DocumentIsPosted, CloseAction, Result, IsHandled);
if IsHandled then
exit(Result);
if not DocumentIsPosted then
exit(Rec.ConfirmCloseUnposted());
end;
var
SellToContact: Record Contact;
BillToContact: Record Contact;
SalesSetup: Record "Sales & Receivables Setup";
GLSetup: Record "General Ledger Setup";
MoveNegSalesLines: Report "Move Negative Sales Lines";
ReportPrint: Codeunit "Test Report-Print";
UserMgt: Codeunit "User Setup Management";
SalesCalcDiscByType: Codeunit "Sales - Calc Discount By Type";
LinesInstructionMgt: Codeunit "Lines Instruction Mgt.";
FormatAddress: Codeunit "Format Address";
PrivacyNotice: Codeunit "Privacy Notice";
FlowServiceManagement: Codeunit "Flow Service Management";
ChangeExchangeRate: Page "Change Exchange Rate";
WorkDescription: Text;
StatusStyleTxt: Text;
JobQueueVisible: Boolean;
JobQueueUsed: Boolean;
HasIncomingDocument: Boolean;
DocNoVisible: Boolean;
ExternalDocNoMandatory: Boolean;
OpenApprovalEntriesExistForCurrUser: Boolean;
IsPowerAutomatePrivacyNoticeApproved: Boolean;
OpenApprovalEntriesExist: Boolean;
ShowWorkflowStatus: Boolean;
OpenPostedSalesCrMemoQst: Label 'The credit memo is posted as number %1 and moved to the Posted Sales Credit Memos window.\\Do you want to open the posted credit memo?', Comment = '%1 = posted document number';
CanCancelApprovalForRecord: Boolean;
IsCustomerOrContactNotEmpty: Boolean;
CanRequestApprovalForFlow: Boolean;
CanCancelApprovalForFlow: Boolean;
IsSaaS: Boolean;
IsBillToCountyVisible: Boolean;
IsSellToCountyVisible: Boolean;
SalesDocCheckFactboxVisible: Boolean;
IsJournalTemplNameVisible: Boolean;
IsPaymentMethodCodeVisible: Boolean;
VATDateEnabled: Boolean;
protected var
DocumentIsPosted: Boolean;
IsSalesLinesEditable: Boolean;
IsPostingGroupEditable: Boolean;
local procedure ActivateFields()
begin
IsBillToCountyVisible := FormatAddress.UseCounty(Rec."Bill-to Country/Region Code");
IsSellToCountyVisible := FormatAddress.UseCounty(Rec."Sell-to Country/Region Code");
GLSetup.Get();
IsJournalTemplNameVisible := GLSetup."Journal Templ. Name Mandatory";
IsPaymentMethodCodeVisible := not GLSetup."Hide Payment Method Code";
IsSalesLinesEditable := Rec.SalesLinesEditable();
end;
/// <summary>
/// Calls the document posting procedure with the specified posting codeunit.
/// </summary>
/// <param name="PostingCodeunitID">The ID of the posting codeunit to execute.</param>
procedure CallPostDocument(PostingCodeunitID: Integer)
begin
PostDocument(PostingCodeunitID);
end;
local procedure PostDocument(PostingCodeunitID: Integer)
var
SalesHeader: Record "Sales Header";
SalesCrMemoHeader: Record "Sales Cr.Memo Header";
OfficeMgt: Codeunit "Office Management";
InstructionMgt: Codeunit "Instruction Mgt.";
PageManagement: Codeunit "Page Management";
PreAssignedNo: Code[20];
xLastPostingNo: Code[20];
IsScheduledPosting: Boolean;
IsHandled: Boolean;
begin
CheckSalesCheckAllLinesHaveQuantityAssigned();
PreAssignedNo := Rec."No.";
xLastPostingNo := Rec."Last Posting No.";
Rec.SendToPosting(PostingCodeunitID);
IsScheduledPosting := Rec."Job Queue Status" = Rec."Job Queue Status"::"Scheduled for Posting";
DocumentIsPosted := (not SalesHeader.Get(Rec."Document Type", Rec."No.")) or IsScheduledPosting;
OnPostOnAfterSetDocumentIsPosted(SalesHeader, IsScheduledPosting, DocumentIsPosted);
if IsScheduledPosting then
CurrPage.Close();
CurrPage.Update(false);
IsHandled := false;
OnPostDocumentBeforeNavigateAfterPosting(Rec, PostingCodeunitID, DocumentIsPosted, IsHandled);
if IsHandled then
exit;
if PostingCodeunitID <> CODEUNIT::"Sales-Post (Yes/No)" then
exit;
Rec.UpdateSalesOrderLineIfExist();
if OfficeMgt.IsAvailable() then begin
if (Rec."Last Posting No." <> '') and (Rec."Last Posting No." <> xLastPostingNo) then
SalesCrMemoHeader.SetRange("No.", Rec."Last Posting No.")
else
SalesCrMemoHeader.SetRange("Pre-Assigned No.", PreAssignedNo);
IsHandled := false;
OnPostDocumentOnBeforeOpenPage(SalesCrMemoHeader, IsHandled);
if not IsHandled then
if SalesCrMemoHeader.FindFirst() then
PageManagement.PageRun(SalesCrMemoHeader);
end else
if InstructionMgt.IsEnabled(InstructionMgt.ShowPostedConfirmationMessageCode()) then
ShowPostedConfirmationMessage(PreAssignedNo, xLastPostingNo);
end;
local procedure ApproveCalcInvDisc()
begin
CurrPage.SalesLines.PAGE.ApproveCalcInvDisc();
end;
local procedure SaveInvoiceDiscountAmount()
var
DocumentTotals: Codeunit "Document Totals";
begin
CurrPage.SaveRecord();
DocumentTotals.SalesRedistributeInvoiceDiscountAmountsOnDocument(Rec);
CurrPage.Update(false);
end;
local procedure SalespersonCodeOnAfterValidate()
begin
CurrPage.SalesLines.PAGE.UpdateForm(true);
end;
local procedure ShortcutDimension1CodeOnAfterV()
begin
CurrPage.Update();
end;
local procedure ShortcutDimension2CodeOnAfterV()
begin
CurrPage.Update();
end;
local procedure PricesIncludingVATOnAfterValid()
begin
CurrPage.SalesLines.Page.ForceTotalsCalculation();
CurrPage.Update();
end;
local procedure SetDocNoVisible()
var
DocumentNoVisibility: Codeunit DocumentNoVisibility;
DocType: Option Quote,"Order",Invoice,"Credit Memo","Blanket Order","Return Order",Reminder,FinChMemo;
begin
DocNoVisible := DocumentNoVisibility.SalesDocumentNoIsVisible(DocType::"Credit Memo", Rec."No.");
end;
local procedure SetExtDocNoMandatoryCondition()
begin
SalesSetup.GetRecordOnce();
ExternalDocNoMandatory := SalesSetup."Ext. Doc. No. Mandatory";
end;
/// <summary>
/// Shows a preview of the posting result without actually posting the document.
/// </summary>
procedure ShowPreview()
var
SalesPostYesNo: Codeunit "Sales-Post (Yes/No)";
begin
SalesPostYesNo.Preview(Rec);
end;
local procedure SetControlAppearance()
var
ApprovalsMgmt: Codeunit "Approvals Mgmt.";
DocumentErrorsMgt: Codeunit "Document Errors Mgt.";
WorkflowWebhookMgt: Codeunit "Workflow Webhook Management";
begin
JobQueueVisible := Rec."Job Queue Status" = Rec."Job Queue Status"::"Scheduled for Posting";
HasIncomingDocument := Rec."Incoming Document Entry No." <> 0;
SetExtDocNoMandatoryCondition();
SetPostingGroupEditable();
OpenApprovalEntriesExistForCurrUser := ApprovalsMgmt.HasOpenApprovalEntriesForCurrentUser(Rec.RecordId);
OpenApprovalEntriesExist := ApprovalsMgmt.HasOpenApprovalEntries(Rec.RecordId);
CanCancelApprovalForRecord := ApprovalsMgmt.CanCancelApprovalForRecord(Rec.RecordId);
IsCustomerOrContactNotEmpty := (Rec."Sell-to Customer No." <> '') or (Rec."Sell-to Contact No." <> '');
IsSalesLinesEditable := Rec.SalesLinesEditable();
SalesDocCheckFactboxVisible := DocumentErrorsMgt.BackgroundValidationEnabled();
WorkflowWebhookMgt.GetCanRequestAndCanCancel(Rec.RecordId, CanRequestApprovalForFlow, CanCancelApprovalForFlow);
OnAfterSetControlAppearance(Rec);
end;
/// <summary>
/// Runs a background check for document errors.
/// </summary>
procedure RunBackgroundCheck()
begin
CurrPage.SalesDocCheckFactbox.Page.CheckErrorsInBackground(Rec);
end;
local procedure CheckShowBackgrValidationNotification()
var
DocumentErrorsMgt: Codeunit "Document Errors Mgt.";
begin
if DocumentErrorsMgt.CheckShowEnableBackgrValidationNotification() then
SetControlAppearance();
end;
local procedure CheckSalesCheckAllLinesHaveQuantityAssigned()
begin
LinesInstructionMgt.SalesCheckAllLinesHaveQuantityAssigned(Rec);
end;
local procedure ShowPostedConfirmationMessage(PreAssignedNo: Code[20]; xLastPostingNo: Code[20])
var
SalesCrMemoHeader: Record "Sales Cr.Memo Header";
InstructionMgt: Codeunit "Instruction Mgt.";
IsHandled: Boolean;
begin
if (Rec."Last Posting No." <> '') and (Rec."Last Posting No." <> xLastPostingNo) then
SalesCrMemoHeader.SetRange("No.", Rec."Last Posting No.")
else
SalesCrMemoHeader.SetRange("Pre-Assigned No.", PreAssignedNo);
if SalesCrMemoHeader.FindFirst() then
if InstructionMgt.ShowConfirm(StrSubstNo(OpenPostedSalesCrMemoQst, SalesCrMemoHeader."No."),
InstructionMgt.ShowPostedConfirmationMessageCode())
then begin
IsHandled := false;
OnShowPostedConfirmationMessageOnBeforeShowPostedDocument(SalesCrMemoHeader, IsHandled);
if not IsHandled then
InstructionMgt.ShowPostedDocument(SalesCrMemoHeader, Page::"Sales Credit Memo");
end;
end;
/// <summary>
/// Sets whether the posting group field should be editable based on customer settings.
/// </summary>
procedure SetPostingGroupEditable()
var
BillToCustomer: Record Customer;
begin
if BillToCustomer.Get(Rec."Bill-to Customer No.") then
IsPostingGroupEditable := BillToCustomer."Allow Multiple Posting Groups";
end;
[IntegrationEvent(true, false)]
local procedure OnAfterOnAfterGetRecord(var SalesHeader: Record "Sales Header")
begin
end;
[IntegrationEvent(true, false)]
local procedure OnAfterSetControlAppearance(var SalesHeader: Record "Sales Header")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnPostOnAfterSetDocumentIsPosted(SalesHeader: Record "Sales Header"; var IsScheduledPosting: Boolean; var DocumentIsPosted: Boolean)
begin
end;
[IntegrationEvent(true, false)]
local procedure OnPostDocumentBeforeNavigateAfterPosting(var SalesHeader: Record "Sales Header"; var PostingCodeunitID: Integer; DocumentIsPosted: Boolean; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnShowPostedConfirmationMessageOnBeforeShowPostedDocument(SalesCrMemoHeader: Record "Sales Cr.Memo Header"; var IsHandled: boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnPostDocumentOnBeforeOpenPage(SalesCrMemoHeader: Record "Sales Cr.Memo Header"; var IsHandled: boolean)
begin
end;
[IntegrationEvent(true, false)]
local procedure OnBeforeOnQueryClosePage(var SalesHeader: Record "Sales Header"; DocumentIsPosted: Boolean; CloseAction: Action; var Result: Boolean; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeLookupBillToName(var Customer: Record Customer; SalesHeader: Record "Sales Header")
begin
end;
}