diff --git a/src/Layers/W1/BaseApp/Sales/Document/SalesHeader.Table.al b/src/Layers/W1/BaseApp/Sales/Document/SalesHeader.Table.al index a3416266fcd..0ffbc1dfaa2 100644 --- a/src/Layers/W1/BaseApp/Sales/Document/SalesHeader.Table.al +++ b/src/Layers/W1/BaseApp/Sales/Document/SalesHeader.Table.al @@ -9670,9 +9670,14 @@ table 36 "Sales Header" procedure UpdateSalesOrderLineIfExist() var SalesCreditMemoHeader: Record "Sales Cr.Memo Header"; + SalesReceivablesSetup: Record "Sales & Receivables Setup"; CorrectPostedSalesInvoice: Codeunit "Correct Posted Sales Invoice"; IsHandled: Boolean; begin + SalesReceivablesSetup.GetRecordOnce(); + if not SalesReceivablesSetup."Restore Order qty. on return" then + exit; + SalesCreditMemoHeader.SetLoadFields("Pre-Assigned No.", "Cust. Ledger Entry No."); SalesCreditMemoHeader.SetRange("Pre-Assigned No.", Rec."No."); if not SalesCreditMemoHeader.FindFirst() then diff --git a/src/Layers/W1/BaseApp/Sales/History/CancelPstdSalesInvYesNo.Codeunit.al b/src/Layers/W1/BaseApp/Sales/History/CancelPstdSalesInvYesNo.Codeunit.al index 39dbd724621..f060d5e3b66 100644 --- a/src/Layers/W1/BaseApp/Sales/History/CancelPstdSalesInvYesNo.Codeunit.al +++ b/src/Layers/W1/BaseApp/Sales/History/CancelPstdSalesInvYesNo.Codeunit.al @@ -4,6 +4,7 @@ // ------------------------------------------------------------------------------------------------ namespace Microsoft.Sales.History; +using Microsoft.Sales.Setup; using Microsoft.Utilities; /// @@ -61,9 +62,15 @@ codeunit 1323 "Cancel PstdSalesInv (Yes/No)" end; local procedure GetCancelPostedInvoiceQst(SalesInvoiceHeader: Record "Sales Invoice Header"): Text + var + SalesReceivablesSetup: Record "Sales & Receivables Setup"; begin - if SalesInvoiceHeader."Order No." <> '' then - exit(CancelPostedInvoiceFromOrderQst); + if SalesInvoiceHeader."Order No." <> '' then begin + SalesReceivablesSetup.GetRecordOnce(); + if SalesReceivablesSetup."Restore Order qty. on return" then + exit(CancelPostedInvoiceFromOrderQst); + end; + exit(CancelPostedInvoiceQst); end; diff --git a/src/Layers/W1/BaseApp/Sales/History/CorrectPostedSalesInvoice.Codeunit.al b/src/Layers/W1/BaseApp/Sales/History/CorrectPostedSalesInvoice.Codeunit.al index 8c2454d5312..1b2b14152b9 100644 --- a/src/Layers/W1/BaseApp/Sales/History/CorrectPostedSalesInvoice.Codeunit.al +++ b/src/Layers/W1/BaseApp/Sales/History/CorrectPostedSalesInvoice.Codeunit.al @@ -208,7 +208,7 @@ codeunit 1303 "Correct Posted Sales Invoice" /// True if the credit memo was successfully created, otherwise false. procedure CreateCreditMemoCopyDocument(var SalesInvoiceHeader: Record "Sales Invoice Header"; var SalesHeader: Record "Sales Header"): Boolean var - SalesHdr: Record "Sales Header"; + SalesHeaderOrder: Record "Sales Header"; ConfirmQuestion: Text; begin OnBeforeCreateCreditMemoCopyDocument(SalesInvoiceHeader); @@ -219,13 +219,17 @@ codeunit 1303 "Correct Posted Sales Invoice" ShowInvoiceAppliedNotification(SalesInvoiceHeader); exit(false); end; - SalesHdr.SetRange("Document Type", SalesHdr."Document Type"::Order); - SalesHdr.SetRange("No.", SalesInvoiceHeader."Order No."); - if not SalesHdr.IsEmpty then begin - ConfirmQuestion := CreateCreditMemoQst; - OnCreateCreditMemoCopyDocumentOnBeforeConfirm(SalesInvoiceHeader, SalesHdr, ConfirmQuestion); - if not Confirm(ConfirmQuestion) then - exit(false); + + SalesReceivablesSetup.GetRecordOnce(); + if SalesReceivablesSetup."Restore Order qty. on return" then begin + SalesHeaderOrder.SetRange("Document Type", SalesHeaderOrder."Document Type"::Order); + SalesHeaderOrder.SetRange("No.", SalesInvoiceHeader."Order No."); + if not SalesHeaderOrder.IsEmpty() then begin + ConfirmQuestion := CreateCreditMemoQst; + OnCreateCreditMemoCopyDocumentOnBeforeConfirm(SalesInvoiceHeader, SalesHeaderOrder, ConfirmQuestion); + if not Confirm(ConfirmQuestion) then + exit(false); + end; end; CreateCopyDocument(SalesInvoiceHeader, SalesHeader, SalesHeader."Document Type"::"Credit Memo", false); @@ -1029,6 +1033,10 @@ codeunit 1303 "Correct Posted Sales Invoice" SalesInvoiceLine: Record "Sales Invoice Line"; TempUsedSalesInvoiceLine: Record "Sales Invoice Line" temporary; begin + SalesReceivablesSetup.GetRecordOnce(); + if not SalesReceivablesSetup."Restore Order qty. on return" then + exit; + SalesCrMemoLine.SetLoadFields("Document No.", "No.", "Appl.-from Item Entry", Quantity, "Variant Code"); SalesCrMemoLine.SetRange("Document No.", SalesCreditMemoNo); SalesCrMemoLine.SetFilter("No.", '<>%1', ''); @@ -1124,6 +1132,10 @@ codeunit 1303 "Correct Posted Sales Invoice" UndoPostingManagement: Codeunit "Undo Posting Management"; IsHandled: Boolean; begin + SalesReceivablesSetup.GetRecordOnce(); + if not SalesReceivablesSetup."Restore Order qty. on return" then + exit; + IsHandled := false; OnBeforeUpdateSalesOrderLinesFromCancelledInvoice(SalesInvoiceHeaderNo, IsHandled); if IsHandled then diff --git a/src/Layers/W1/BaseApp/Sales/Posting/SalesPost.Codeunit.al b/src/Layers/W1/BaseApp/Sales/Posting/SalesPost.Codeunit.al index 782be6a2192..8b0b4a16e4f 100644 --- a/src/Layers/W1/BaseApp/Sales/Posting/SalesPost.Codeunit.al +++ b/src/Layers/W1/BaseApp/Sales/Posting/SalesPost.Codeunit.al @@ -8951,6 +8951,10 @@ codeunit 80 "Sales-Post" CorrectPostedSalesInvoice: Codeunit "Correct Posted Sales Invoice"; IsHandled: Boolean; begin + SalesSetup.GetRecordOnce(); + if not SalesSetup."Restore Order qty. on return" then + exit; + IsHandled := false; OnBeforeUpdateSalesOrderLineIfExist(DocumentNo, IsHandled); if IsHandled then diff --git a/src/Layers/W1/BaseApp/Sales/Setup/SalesReceivablesSetup.Page.al b/src/Layers/W1/BaseApp/Sales/Setup/SalesReceivablesSetup.Page.al index 5e9c53e5449..b390d4e3850 100644 --- a/src/Layers/W1/BaseApp/Sales/Setup/SalesReceivablesSetup.Page.al +++ b/src/Layers/W1/BaseApp/Sales/Setup/SalesReceivablesSetup.Page.al @@ -58,6 +58,11 @@ page 459 "Sales & Receivables Setup" ApplicationArea = Basic, Suite; Importance = Additional; } + field("Restore Order qty. on return"; Rec."Restore Order qty. on return") + { + ApplicationArea = Basic, Suite; + Importance = Additional; + } field("Invoice Rounding"; Rec."Invoice Rounding") { ApplicationArea = Basic, Suite; diff --git a/src/Layers/W1/BaseApp/Sales/Setup/SalesReceivablesSetup.Table.al b/src/Layers/W1/BaseApp/Sales/Setup/SalesReceivablesSetup.Table.al index 96520d7410f..b3c340cdf42 100644 --- a/src/Layers/W1/BaseApp/Sales/Setup/SalesReceivablesSetup.Table.al +++ b/src/Layers/W1/BaseApp/Sales/Setup/SalesReceivablesSetup.Table.al @@ -616,6 +616,15 @@ table 311 "Sales & Receivables Setup" ToolTip = 'Specifies that the reservation confirmation message is not shown on sales lines. This is useful to avoid noise when you are processing many lines.'; } /// + /// Indicates whether posting a sales credit memo or return order restores the reversed quantities on the related sales order. + /// + field(70; "Restore Order qty. on return"; Boolean) + { + Caption = 'Restore Order quantities on Credit Memo or Return Order posting'; + ToolTip = 'Specifies whether posting a sales credit memo or sales return order restores quantities on the related sales order. When enabled, Qty. to Ship, Qty. to Invoice, and the shipped and invoiced quantities on the original sales order are updated based on the reversed quantity.'; + InitValue = true; + } + /// /// Indicates whether customer name changes on open sales documents apply only to the document without searching for matching customers. /// field(160; "Disable Search by Name"; Boolean)