code change · featureFinanceofficial - Microsoftreviewed - checked by Opus

#8959 Deliverable 638799: Spend Requests in Base App

Spend Requests allow users to create requisitions for planned expenses and link them to journal entries and purchase documents for automatic updates during posting.

Pull request · merged into main (BC30) on 2026-07-31 by BardurKnudsen · 363 files (+8123 -86), 361 AL · feature · tier official · reviewed (checked by Opus)

What changed

  • New Spend Request tables, pages, enums and a document report track requests to spend money
  • General journal lines and purchase documents can reference a spend request number, which updates the request on posting
  • General journal check, posting and reversal logic, plus purchase posting, were extended for spend request links
  • The feature is delivered early so the Expense Agent team can build Travel Requisitions on it
  • Still incomplete: approvals, an amount check at posting and a report layout are missing
  • Behaviour changes for users or extensions.

AL objects touched

  • Table 15 “G/L Account”, Base Application: modified
  • Table 81 “Gen. Journal Line”, Base Application: modified
  • Page 256 “Payment Journal”, Base Application: modified
  • Table 181 “Posted Gen. Journal Line”, Base Application: modified
  • Codeunit 13 “Gen. Jnl.-Post Batch”, Base Application: modified
  • Codeunit 12 “Gen. Jnl.-Post Line”, Base Application: modified
  • Codeunit 17 “Gen. Jnl.-Post Reverse”, Base Application: modified
  • Page 118 “General Ledger Setup”, Base Application: modified
  • Table 98 “General Ledger Setup”, Base Application: modified
  • Table 55 “Invoice Posting Buffer”, Base Application: modified
  • Table 5109 “Purchase Header Archive”, Base Application: modified
  • Table 38 “Purchase Header”, Base Application: modified
  • Table 39 “Purchase Line”, Base Application: modified
  • Table 124 “Purch. Cr. Memo Hdr.”, Base Application: modified
  • Table 122 “Purch. Inv. Header”, Base Application: modified
  • Table 123 “Purch. Inv. Line”, Base Application: modified
  • Codeunit 816 “Purch. Post Invoice”, Base Application: modified
  • Page 344 “Navigate”, Base Application: modified
  • Table 5110 “Purchase Line Archive”, Base Application: modified
  • Table 4 “Currency”, Base Application: modified
  • Codeunit 11 “Gen. Jnl.-Check Line”, Base Application: modified
  • Page 52 “Purchase Credit Memo”, Base Application: modified
  • Page 51 “Purchase Invoice”, Base Application: modified
  • Page 50 “Purchase Order”, Base Application: modified
  • Page 49 “Purchase Quote”, Base Application: modified
  • Report 1322 “Standard Purchase - Order”, Base Application: modified
  • Codeunit 230 “GenJnlManagement”, Base Application: modified
  • Page 138 “Posted Purchase Invoice”, Base Application: modified
  • Page 17 “G/L Account Card”, Base Application: modified
  • Page 39 “General Journal”, Base Application: modified
  • Page 254 “Purchase Journal”, Base Application: modified
  • Page 20 “General Ledger Entries”, Base Application: modified
  • Table 6840 “Spend Request”, Base Application: added
  • Page 6841 “Spend Request Card”, Base Application: added
  • Table 6841 “Spend Request Detail”, Base Application: added
  • Report 6850 “Spend Request Document”, Base Application: added
  • Page 6840 “Spend Request List”, Base Application: added
  • Enum 6843 “Spend Request Required”, Base Application: added
  • Enum 6841 “Spend Request Status”, Base Application: added
  • Page 6842 “Spend Request Subform”, Base Application: added
  • Page 6843 “Spend Request To G/L Link”, Base Application: added
  • Table 6845 “Spend Request To G/L Link”, Base Application: added
  • Permission set 5117 “D365 AUTOMATION”, Base Application: modified
  • Permission set 208 “D365 Basic - Edit”, Base Application: modified
  • Permission set 732 “D365 BASIC ISV”, Base Application: modified
  • Permission set 209 “D365 Basic - Read”, Base Application: modified
  • Permission set 959 “D365 BUS FULL ACCESS”, Base Application: modified
  • Permission set 1044 “D365 READ”, Base Application: modified
  • Permission set 7931 “D365 TEAM MEMBER”, Base Application: modified
  • Permission set 6121 “INTELLIGENT CLOUD”, Base Application: modified
  • Page 5167 “Purchase Order Archive”, Base Application: modified
  • Page 5168 “Purchase Order Archive Subform”, Base Application: modified
  • Page 55 “Purch. Invoice Subform”, Base Application: modified
  • Page 54 “Purchase Order Subform”, Base Application: modified
  • Page 97 “Purchase Quote Subform”, Base Application: modified
  • Page 139 “Posted Purch. Invoice Subform”, Base Application: modified
  • Page 140 “Posted Purchase Credit Memo”, Base Application: modified
  • Codeunit 1751 “Data Classification Eval. Data”, Base Application: modified
  • src/Layers/APAC/BaseApp/Finance/GeneralLedger/Account/GLAccountCard.Page.al: modified, not in the BC30 snapshot
  • src/Layers/APAC/BaseApp/Finance/GeneralLedger/Journal/GenJnlCheckLine.Codeunit.al: modified, not in the BC30 snapshot
  • src/Layers/APAC/BaseApp/Finance/GeneralLedger/Journal/GeneralJournal.Page.al: modified, not in the BC30 snapshot
  • src/Layers/APAC/BaseApp/Finance/GeneralLedger/Journal/PurchaseJournal.Page.al: modified, not in the BC30 snapshot
  • src/Layers/APAC/BaseApp/Purchases/Document/PurchInvoiceSubform.Page.al: modified, not in the BC30 snapshot
  • src/Layers/APAC/BaseApp/Purchases/Document/PurchaseCreditMemo.Page.al: modified, not in the BC30 snapshot
  • src/Layers/APAC/BaseApp/Purchases/Document/PurchaseInvoice.Page.al: modified, not in the BC30 snapshot
  • src/Layers/APAC/BaseApp/Purchases/Document/PurchaseOrder.Page.al: modified, not in the BC30 snapshot
  • src/Layers/APAC/BaseApp/Purchases/Document/PurchaseOrderSubform.Page.al: modified, not in the BC30 snapshot
  • src/Layers/APAC/BaseApp/Purchases/History/PostedPurchaseCreditMemo.Page.al: modified, not in the BC30 snapshot
  • src/Layers/APAC/BaseApp/Purchases/History/PostedPurchaseInvoice.Page.al: modified, not in the BC30 snapshot
  • src/Layers/BE/BaseApp/Finance/GeneralLedger/Account/GLAccountCard.Page.al: modified, not in the BC30 snapshot
  • src/Layers/BE/BaseApp/Finance/GeneralLedger/Ledger/GeneralLedgerEntries.Page.al: modified, not in the BC30 snapshot
  • src/Layers/BE/BaseApp/Finance/GeneralLedger/Posting/GenJnlPostBatch.Codeunit.al: modified, not in the BC30 snapshot
  • src/Layers/BE/BaseApp/Finance/GeneralLedger/Setup/GeneralLedgerSetup.Page.al: modified, not in the BC30 snapshot
  • src/Layers/BE/BaseApp/Purchases/Document/PurchInvoiceSubform.Page.al: modified, not in the BC30 snapshot
  • src/Layers/BE/BaseApp/Purchases/Document/PurchaseInvoice.Page.al: modified, not in the BC30 snapshot
  • src/Layers/CH/BaseApp/Finance/GeneralLedger/Account/GLAccountCard.Page.al: modified, not in the BC30 snapshot
  • src/Layers/CH/BaseApp/Finance/GeneralLedger/Journal/GenJnlCheckLine.Codeunit.al: modified, not in the BC30 snapshot
  • src/Layers/CH/BaseApp/Finance/GeneralLedger/Journal/GeneralJournal.Page.al: modified, not in the BC30 snapshot
  • src/Layers/CH/BaseApp/Finance/GeneralLedger/Journal/PurchaseJournal.Page.al: modified, not in the BC30 snapshot
  • src/Layers/CH/BaseApp/Finance/GeneralLedger/Ledger/GeneralLedgerEntries.Page.al: modified, not in the BC30 snapshot
  • src/Layers/CH/BaseApp/Purchases/Document/PurchaseCreditMemo.Page.al: modified, not in the BC30 snapshot
  • src/Layers/CH/BaseApp/Purchases/Document/PurchaseInvoice.Page.al: modified, not in the BC30 snapshot
  • src/Layers/CH/BaseApp/Purchases/Document/PurchaseOrder.Page.al: modified, not in the BC30 snapshot
  • src/Layers/CH/BaseApp/Purchases/Document/PurchaseQuote.Page.al: modified, not in the BC30 snapshot
  • src/Layers/CH/BaseApp/Purchases/History/PostedPurchInvoiceSubform.Page.al: modified, not in the BC30 snapshot
  • src/Layers/CH/BaseApp/Purchases/Posting/PurchPostInvoice.Codeunit.al: modified, not in the BC30 snapshot
  • src/Layers/DACH/BaseApp/Finance/GeneralLedger/Journal/PaymentJournal.Page.al: modified, not in the BC30 snapshot
  • src/Layers/DACH/BaseApp/Purchases/Document/PurchaseOrder.Page.al: modified, not in the BC30 snapshot
  • src/Layers/ES/BaseApp/Finance/GeneralLedger/Account/GLAccountCard.Page.al: modified, not in the BC30 snapshot
  • src/Layers/ES/BaseApp/Finance/GeneralLedger/Journal/GenJnlManagement.Codeunit.al: modified, not in the BC30 snapshot
  • src/Layers/ES/BaseApp/Finance/GeneralLedger/Journal/GeneralJournal.Page.al: modified, not in the BC30 snapshot
  • src/Layers/ES/BaseApp/Finance/GeneralLedger/Journal/PaymentJournal.Page.al: modified, not in the BC30 snapshot
  • src/Layers/ES/BaseApp/Finance/GeneralLedger/Journal/PurchaseJournal.Page.al: modified, not in the BC30 snapshot
  • src/Layers/ES/BaseApp/Finance/GeneralLedger/Ledger/GeneralLedgerEntries.Page.al: modified, not in the BC30 snapshot
  • src/Layers/ES/BaseApp/Finance/GeneralLedger/Reversal/GenJnlPostReverse.Codeunit.al: modified, not in the BC30 snapshot
  • src/Layers/ES/BaseApp/Finance/GeneralLedger/Setup/GeneralLedgerSetup.Page.al: modified, not in the BC30 snapshot
  • src/Layers/ES/BaseApp/Purchases/Document/PurchInvoiceSubform.Page.al: modified, not in the BC30 snapshot
  • src/Layers/ES/BaseApp/Purchases/Document/PurchaseCreditMemo.Page.al: modified, not in the BC30 snapshot
  • src/Layers/ES/BaseApp/Purchases/Document/PurchaseInvoice.Page.al: modified, not in the BC30 snapshot
  • src/Layers/ES/BaseApp/Purchases/Document/PurchaseOrder.Page.al: modified, not in the BC30 snapshot
  • src/Layers/ES/BaseApp/Purchases/Document/PurchaseOrderSubform.Page.al: modified, not in the BC30 snapshot
  • src/Layers/ES/BaseApp/Purchases/Document/PurchaseQuote.Page.al: modified, not in the BC30 snapshot
  • src/Layers/ES/BaseApp/Purchases/History/PostedPurchInvoiceSubform.Page.al: modified, not in the BC30 snapshot
  • src/Layers/ES/BaseApp/Purchases/History/PostedPurchaseCreditMemo.Page.al: modified, not in the BC30 snapshot
  • src/Layers/ES/BaseApp/Purchases/History/PostedPurchaseInvoice.Page.al: modified, not in the BC30 snapshot
  • src/Layers/FI/BaseApp/Finance/GeneralLedger/Account/GLAccountCard.Page.al: modified, not in the BC30 snapshot
  • src/Layers/FI/BaseApp/Finance/GeneralLedger/Journal/GenJnlCheckLine.Codeunit.al: modified, not in the BC30 snapshot
  • src/Layers/FI/BaseApp/Finance/GeneralLedger/Journal/GeneralJournal.Page.al: modified, not in the BC30 snapshot
  • src/Layers/FI/BaseApp/Finance/GeneralLedger/Journal/PaymentJournal.Page.al: modified, not in the BC30 snapshot
  • src/Layers/FI/BaseApp/Finance/GeneralLedger/Journal/PurchaseJournal.Page.al: modified, not in the BC30 snapshot
  • src/Layers/FI/BaseApp/Purchases/Document/PurchaseInvoice.Page.al: modified, not in the BC30 snapshot
  • src/Layers/FI/BaseApp/Purchases/Document/PurchaseOrder.Page.al: modified, not in the BC30 snapshot
  • src/Layers/FI/BaseApp/Purchases/History/PostedPurchaseInvoice.Page.al: modified, not in the BC30 snapshot
  • src/Layers/FR/BaseApp/Finance/GeneralLedger/Account/GLAccountCard.Page.al: modified, not in the BC30 snapshot
  • src/Layers/FR/BaseApp/Finance/GeneralLedger/Journal/GenJnlCheckLine.Codeunit.al: modified, not in the BC30 snapshot
  • src/Layers/FR/BaseApp/Finance/GeneralLedger/Setup/GeneralLedgerSetup.Page.al: modified, not in the BC30 snapshot
  • src/Layers/FR/BaseApp/Purchases/Document/PurchInvoiceSubform.Page.al: modified, not in the BC30 snapshot
  • src/Layers/FR/BaseApp/Purchases/Document/PurchaseOrderSubform.Page.al: modified, not in the BC30 snapshot
  • src/Layers/GB/BaseApp/Finance/GeneralLedger/Journal/PaymentJournal.Page.al: modified, not in the BC30 snapshot
  • src/Layers/GB/BaseApp/Finance/GeneralLedger/Setup/GeneralLedgerSetup.Page.al: modified, not in the BC30 snapshot
  • src/Layers/GB/BaseApp/Permissions/d365busfullaccess.permissionset.al: modified, not in the BC30 snapshot
  • src/Layers/IT/BaseApp/Finance/GeneralLedger/Journal/GeneralJournal.Page.al: modified, not in the BC30 snapshot
  • src/Layers/IT/BaseApp/Finance/GeneralLedger/Journal/PaymentJournal.Page.al: modified, not in the BC30 snapshot
  • src/Layers/IT/BaseApp/Finance/GeneralLedger/Journal/PurchaseJournal.Page.al: modified, not in the BC30 snapshot
  • src/Layers/IT/BaseApp/Finance/GeneralLedger/Ledger/GeneralLedgerEntries.Page.al: modified, not in the BC30 snapshot
  • src/Layers/IT/BaseApp/Finance/GeneralLedger/Posting/GenJnlPostBatch.Codeunit.al: modified, not in the BC30 snapshot
  • src/Layers/IT/BaseApp/Finance/GeneralLedger/Reversal/GenJnlPostReverse.Codeunit.al: modified, not in the BC30 snapshot
  • src/Layers/IT/BaseApp/Finance/GeneralLedger/Setup/GeneralLedgerSetup.Page.al: modified, not in the BC30 snapshot
  • src/Layers/IT/BaseApp/Purchases/Archive/PurchaseOrderArchive.Page.al: modified, not in the BC30 snapshot
  • src/Layers/IT/BaseApp/Purchases/Document/PurchInvoiceSubform.Page.al: modified, not in the BC30 snapshot
  • src/Layers/IT/BaseApp/Purchases/Document/PurchaseOrderSubform.Page.al: modified, not in the BC30 snapshot
  • src/Layers/IT/BaseApp/Purchases/History/PostedPurchInvoiceSubform.Page.al: modified, not in the BC30 snapshot
  • src/Layers/IT/BaseApp/Purchases/History/PostedPurchaseCreditMemo.Page.al: modified, not in the BC30 snapshot
  • src/Layers/IT/BaseApp/Purchases/History/PostedPurchaseInvoice.Page.al: modified, not in the BC30 snapshot
  • src/Layers/NA/BaseApp/Finance/Currency/Currency.Table.al: modified, not in the BC30 snapshot
  • src/Layers/NA/BaseApp/Finance/GeneralLedger/Account/GLAccountCard.Page.al: modified, not in the BC30 snapshot
  • src/Layers/NA/BaseApp/Finance/GeneralLedger/Journal/GeneralJournal.Page.al: modified, not in the BC30 snapshot
  • src/Layers/NA/BaseApp/Finance/GeneralLedger/Posting/GenJnlPostBatch.Codeunit.al: modified, not in the BC30 snapshot
  • src/Layers/NA/BaseApp/Finance/GeneralLedger/Setup/GeneralLedgerSetup.Page.al: modified, not in the BC30 snapshot
  • src/Layers/NA/BaseApp/Purchases/Archive/PurchaseOrderArchive.Page.al: modified, not in the BC30 snapshot
  • src/Layers/NA/BaseApp/Purchases/Archive/PurchaseOrderArchiveSubform.Page.al: modified, not in the BC30 snapshot
  • src/Layers/NA/BaseApp/Purchases/Document/PurchInvoiceSubform.Page.al: modified, not in the BC30 snapshot
  • src/Layers/NA/BaseApp/Purchases/Document/PurchaseCreditMemo.Page.al: modified, not in the BC30 snapshot
  • src/Layers/NA/BaseApp/Purchases/Document/PurchaseOrderSubform.Page.al: modified, not in the BC30 snapshot
  • src/Layers/NA/BaseApp/Purchases/Document/PurchaseQuote.Page.al: modified, not in the BC30 snapshot
  • src/Layers/NA/BaseApp/Purchases/Document/PurchaseQuoteSubform.Page.al: modified, not in the BC30 snapshot
  • src/Layers/NA/BaseApp/Purchases/History/PostedPurchInvoiceSubform.Page.al: modified, not in the BC30 snapshot
  • src/Layers/NA/BaseApp/Purchases/History/PostedPurchaseCreditMemo.Page.al: modified, not in the BC30 snapshot
  • src/Layers/NA/BaseApp/Purchases/History/PostedPurchaseInvoice.Page.al: modified, not in the BC30 snapshot
  • src/Layers/NL/BaseApp/Finance/GeneralLedger/Journal/GenJnlCheckLine.Codeunit.al: modified, not in the BC30 snapshot
  • src/Layers/NL/BaseApp/Finance/GeneralLedger/Journal/GeneralJournal.Page.al: modified, not in the BC30 snapshot
  • src/Layers/NL/BaseApp/Finance/GeneralLedger/Ledger/GeneralLedgerEntries.Page.al: modified, not in the BC30 snapshot
  • src/Layers/NL/BaseApp/Finance/GeneralLedger/Reversal/GenJnlPostReverse.Codeunit.al: modified, not in the BC30 snapshot
  • src/Layers/NL/BaseApp/Finance/GeneralLedger/Setup/GeneralLedgerSetup.Page.al: modified, not in the BC30 snapshot
  • src/Layers/NL/BaseApp/Purchases/Document/PurchInvoiceSubform.Page.al: modified, not in the BC30 snapshot
  • src/Layers/NL/BaseApp/Purchases/Document/PurchaseCreditMemo.Page.al: modified, not in the BC30 snapshot
  • src/Layers/NL/BaseApp/Purchases/Document/PurchaseInvoice.Page.al: modified, not in the BC30 snapshot
  • src/Layers/NL/BaseApp/Purchases/Document/PurchaseOrder.Page.al: modified, not in the BC30 snapshot
  • src/Layers/NL/BaseApp/Purchases/History/PostedPurchaseCreditMemo.Page.al: modified, not in the BC30 snapshot
  • src/Layers/NL/BaseApp/Purchases/History/PostedPurchaseInvoice.Page.al: modified, not in the BC30 snapshot
  • src/Layers/NO/BaseApp/Finance/GeneralLedger/Account/GLAccountCard.Page.al: modified, not in the BC30 snapshot
  • src/Layers/NO/BaseApp/Finance/GeneralLedger/Journal/GeneralJournal.Page.al: modified, not in the BC30 snapshot
  • src/Layers/NO/BaseApp/Finance/GeneralLedger/Journal/PurchaseJournal.Page.al: modified, not in the BC30 snapshot
  • src/Layers/NO/BaseApp/Finance/GeneralLedger/Setup/GeneralLedgerSetup.Page.al: modified, not in the BC30 snapshot
  • src/Layers/NO/BaseApp/Purchases/Document/PurchaseInvoice.Page.al: modified, not in the BC30 snapshot
  • src/Layers/NO/BaseApp/Purchases/Document/PurchaseOrder.Page.al: modified, not in the BC30 snapshot
  • src/Layers/RU/BaseApp/Finance/GeneralLedger/Account/GLAccountCard.Page.al: modified, not in the BC30 snapshot
  • src/Layers/RU/BaseApp/Finance/GeneralLedger/Journal/GeneralJournal.Page.al: modified, not in the BC30 snapshot
  • src/Layers/RU/BaseApp/Finance/GeneralLedger/Journal/PaymentJournal.Page.al: modified, not in the BC30 snapshot
  • src/Layers/RU/BaseApp/Finance/GeneralLedger/Journal/PurchaseJournal.Page.al: modified, not in the BC30 snapshot
  • src/Layers/RU/BaseApp/Finance/GeneralLedger/Ledger/GeneralLedgerEntries.Page.al: modified, not in the BC30 snapshot
  • src/Layers/RU/BaseApp/Finance/GeneralLedger/Setup/GeneralLedgerSetup.Page.al: modified, not in the BC30 snapshot
  • src/Layers/RU/BaseApp/Permissions/d365busfullaccess.permissionset.al: modified, not in the BC30 snapshot
  • src/Layers/RU/BaseApp/Purchases/Document/PurchInvoiceSubform.Page.al: modified, not in the BC30 snapshot
  • src/Layers/RU/BaseApp/Purchases/Document/PurchaseCreditMemo.Page.al: modified, not in the BC30 snapshot
  • src/Layers/RU/BaseApp/Purchases/Document/PurchaseOrder.Page.al: modified, not in the BC30 snapshot
  • src/Layers/RU/BaseApp/Purchases/Document/PurchaseOrderSubform.Page.al: modified, not in the BC30 snapshot
  • src/Layers/RU/BaseApp/Purchases/Document/PurchaseQuote.Page.al: modified, not in the BC30 snapshot
  • src/Layers/RU/BaseApp/Purchases/History/PostedPurchInvoiceSubform.Page.al: modified, not in the BC30 snapshot
  • src/Layers/RU/BaseApp/Purchases/History/PostedPurchaseCreditMemo.Page.al: modified, not in the BC30 snapshot
  • src/Layers/RU/BaseApp/Purchases/Posting/PurchPostInvoice.Codeunit.al: modified, not in the BC30 snapshot
  • src/Layers/SE/BaseApp/Finance/GeneralLedger/Journal/GeneralJournal.Page.al: modified, not in the BC30 snapshot
  • src/Layers/SE/BaseApp/Finance/GeneralLedger/Setup/GeneralLedgerSetup.Table.al: modified, not in the BC30 snapshot
  • src/Layers/W1/BaseApp/Finance/SpendRequest/SpendRequestType.Enum.al: added, not in the BC30 snapshot yet

Context

  • Work items: AB#638799
  • Labels: Ownership: Manual, Team: Finance
  • Systems: finance, purchasing, administration, platform

Source: metadata of a merged pull request in microsoft/BCApps (bcapps): title, labels, changed paths and counts, with a summary in our words. No source text and no description beyond one short quote (D10, D61).