localization · BC29official - Microsoftreviewed - checked by Opus

France (FR)

France localization of Business Central 29. It adds French payment management with payment slips, RIB bank keys, the FEC tax audit export, fiscal year closing, accelerated (derogatory) depreciation, SIREN/SIRET identifiers, DEB Intrastat and service declarations. It answers questions about local setup, posting rules and reports.

What FR changes in W1 71 objects, BC29

table/79 "Company Information" +15, 3 changed
  • +field(10801; "Trade Register"; Text[30])
  • +field(10802; "APE Code"; Code[10])
  • +field(10803; "Legal Form"; Text[30])
  • +field(10804; "Stock Capital"; Text[30])
  • +field(10805; "SIRET No."; Code[14])
  • +field(10810; "Default Bank Account No."; Code[20])
  • +field(10811; "CISD"; Code[10])
  • +field(10812; "Last Intrastat Declaration ID"; Integer)
  • +local event OnBeforeValidateSIRETNo(var CompanyInformation: Record "Company Information"; var IsHandled: Boolean)
  • +procedure GetPartyID(): Code[18]
  • +local procedure GetControlSum(): Text[2]
  • +procedure GetSIREN(): Integer
  • +local procedure ValidateSIRET(SIRETNo: Code[14])
  • +local procedure CheckSIRETConsistency(RegistrationNo: Text[20]; SIRETNo: Code[14])
  • +local procedure CheckNumericOnly(Value: Code[20]; ErrorMsg: Text)
  • Δfield(11; "Giro No."; Text[20])
  • Δfield(14; "Bank Account No."; Text[30])
  • Δfield(38; "IBAN"; Code[50])
table/50 "Accounting Period" +13
  • +field(10800; "Fiscally Closed"; Boolean)
  • +field(10801; "Fiscal Closing Date"; Date)
  • +field(10802; "Period Reopened Date"; Date)
  • +key(Key4; "New Fiscal Year", "Fiscally Closed")
  • +local event OnCheckOpenFiscalYearsOnBeforeError(var AccountingPeriod: Record "Accounting Period"; var IsHandled: Boolean)
  • +procedure CheckOpenFiscalYears()
  • +procedure CloseFiscalPeriod()
  • +procedure ReopenFiscalPeriod()
  • +procedure UpdateGLSetup(PeriodEndDate: Date)
  • +procedure UpdateUserSetup(PeriodEndDate: Date)
  • +procedure CheckPostingRangeSetup(FYEndDate: Date): Boolean
  • +local procedure CheckPostingRangeInAccPeriod(ExcludePeriod: Date)
  • +local procedure GetPostingAllowedToDate(ExcludePeriod: Date): Date
table/17 "G/L Entry" +11, 1 changed
  • +field(10811; "Applies-to ID"; Code[50])
  • +field(10812; "Letter"; Text[10])
  • +field(10813; "Letter Date"; Date)
  • +key(Key14; "Source Code", "Document No.", "Posting Date")
  • +key(Key15; "G/L Account No.", "Posting Date", "Source Code")
  • +key(Key16; "G/L Account No.", "Document No.", "Posting Date")
  • +key(Key17; "G/L Account No.", "Source Type", "Source No.")
  • +key(Key18; "G/L Account No.", "Letter")
  • +key(Key19; "Posting Date")
  • +key(Key20; "Document Type", "Document No.")
  • +key(Key21; "Dimension Set ID")
  • Δkey(Key13; "Source Code", "Posting Date", "Document No.")
codeunit/12 "Gen. Jnl.-Post Line" +9
  • +local procedure RealizeDelayedUnrealizedVAT(GenJnlLine: Record "Gen. Journal Line")
  • +local procedure MakeDerogFAJnlLine(var FAJnlLine: Record "FA Journal Line"; GenJnlLine: Record "Gen. Journal Line")
  • +procedure PostDelayedUnrealizedVAT(GenJnlLine: Record "Gen. Journal Line")
  • +procedure SetTransactionNo(GenJnlLine: Record "Gen. Journal Line")
  • +procedure UpdateUnrealCVLedgEntryBuffer(GenJnlLine: Record "Gen. Journal Line"; TransactionNo: Integer)
  • +procedure CalcPaidAmount(GenJnlLine: Record "Gen. Journal Line"): Decimal
  • +procedure CheckHeaderNo(DocNo: Code[20]): Boolean
  • +local procedure CreateAndPostDerogatoryEntry(SourceGenJournalLine: Record "Gen. Journal Line")
  • +local procedure MakeGenJnlLineOfTypeDerogatory(var DerogGenJnlLine: Record "Gen. Journal Line"; GenJnlLine: Record "Gen. Journal Line"; DerogAmount: Decimal)
codeunit/5605 "Calculate Disposal" +5, 4 removed
  • +procedure CalcGainLoss(FANo: Code[20]; DeprBookCode: Code[10]; var EntryAmounts: array[15] of Decimal)
  • +procedure CalcSecondGainLoss(FANo: Code[20]; DeprBookCode: Code[10]; LastDisposalPrice: Decimal; var EntryAmounts: array[15] of Decimal)
  • +procedure CalcReverseAmounts(FANo: Code[20]; DeprBookCode: Code[10]; var EntryAmounts: array[5] of Decimal)
  • +procedure GetErrorDisposal(FANo: Code[20]; DeprBookCode: Code[10]; OnlyGainLoss: Boolean; MaxDisposalNo: Integer; var EntryAmounts: array[15] of Decimal; var EntryNumbers: array[15] of Integer)
  • +local procedure CalcDerogatoryReverseAmount(FADeprBook: Record "FA Depreciation Book"): Decimal
  • −procedure CalcGainLoss(FANo: Code[20]; DeprBookCode: Code[10]; var EntryAmounts: array[14] of Decimal)
  • −procedure CalcSecondGainLoss(FANo: Code[20]; DeprBookCode: Code[10]; LastDisposalPrice: Decimal; var EntryAmounts: array[14] of Decimal)
  • −procedure CalcReverseAmounts(FANo: Code[20]; DeprBookCode: Code[10]; var EntryAmounts: array[4] of Decimal)
  • −procedure GetErrorDisposal(FANo: Code[20]; DeprBookCode: Code[10]; OnlyGainLoss: Boolean; MaxDisposalNo: Integer; var EntryAmounts: array[14] of Decimal; var EntryNumbers: array[14] of Integer)
table/5606 "FA Posting Group" +9
  • +field(10800; "Derogatory Account"; Code[20])
  • +field(10801; "Derogatory Acc. (Decrease)"; Code[20])
  • +field(10802; "Derog. Bal. Acc. (Decrease)"; Code[20])
  • +field(10803; "Derogatory Expense Account"; Code[20])
  • +field(10804; "Allocated Derogatory %"; Decimal)
  • +procedure GetDerogatoryAccount(): Code[20]
  • +procedure GetDerogatoryAccountDecrease(): Code[20]
  • +procedure GetDerogatoryBalAccountDecrease(): Code[20]
  • +procedure GetDerogatoryExpenseAccount(): Code[20]
table/5050 "Contact" +7
  • +field(10801; "Trade Register"; Text[30])
  • +field(10802; "APE Code"; Code[10])
  • +field(10803; "Legal Form"; Text[30])
  • +field(10804; "Stock Capital"; Text[30])
  • +field(10805; "SIREN No."; Code[9])
  • +local procedure UpdateRelatedRecordsPreservingCustomerSIREN()
  • +local procedure UpdateSIRENNoInCustomer(CustomerNo: Code[20]; SIRENNo: Code[9])
table/5611 "Depreciation Book" +6, 1 removed
  • +field(10800; "Derogatory Calculation"; Code[10])
  • +field(10801; "Used with Derogatory Book"; Code[10])
  • +field(10802; "G/L Integration - Derogatory"; Boolean)
  • +procedure IndexGLIntegration(var GLIntegration: array[13] of Boolean)
  • +procedure CheckIntegrationFields()
  • +procedure IsDerogatoryBook(): Boolean
  • −procedure IndexGLIntegration(var GLIntegration: array[9] of Boolean)
table/81 "Gen. Journal Line" +7
  • +field(10801; "Bank Account Name"; Text[100])
  • +field(10860; "Entry No."; Integer)
  • +field(10861; "Derogatory Line"; Boolean)
  • +field(10862; "Delayed Unrealized VAT"; Boolean)
  • +field(10863; "Realize VAT"; Boolean)
  • +field(10864; "Created from No."; Code[20])
  • +procedure GetDerogatorySetup()
table/181 "Posted Gen. Journal Line" +6
  • +field(10801; "Bank Account Name"; Text[100])
  • +field(10860; "Entry No."; Integer)
  • +field(10861; "Derogatory Line"; Boolean)
  • +field(10862; "Delayed Unrealized VAT"; Boolean)
  • +field(10863; "Realize VAT"; Boolean)
  • +field(10864; "Created from No."; Code[20])
table/270 "Bank Account" +4, 2 changed
  • +field(10851; "Agency Code"; Text[5])
  • +field(10852; "RIB Key"; Integer)
  • +field(10853; "RIB Checked"; Boolean)
  • +field(10854; "National Issuer No."; Code[6])
  • Δfield(13; "Bank Account No."; Text[30])
  • Δfield(110; "IBAN"; Code[50])
table/287 "Customer Bank Account" +4, 2 changed
  • +field(10851; "Agency Code"; Text[5])
  • +field(10852; "RIB Key"; Integer)
  • +field(10853; "RIB Checked"; Boolean)
  • +key(Key2; "Code")
  • Δfield(14; "Bank Account No."; Text[30])
  • Δfield(24; "IBAN"; Code[50])
table/288 "Vendor Bank Account" +4, 2 changed
  • +field(10851; "Agency Code"; Text[5])
  • +field(10852; "RIB Key"; Integer)
  • +field(10853; "RIB Checked"; Boolean)
  • +key(Key2; "Code")
  • Δfield(14; "Bank Account No."; Text[30])
  • Δfield(24; "IBAN"; Code[50])
table/98 "General Ledger Setup" +5, 1 changed
  • +field(10800; "Posting Allowed From"; Date)
  • +field(10801; "Posting Allowed To"; Date)
  • +field(10805; "Local Currency"; Option)
  • +field(10806; "Currency Euro"; Code[10])
  • +procedure CheckPostingDateRange(DateToCheck: Date; FldCaption: Text[50])
  • Δfield(57; "Local Address Format"; Option)
table/271 "Bank Account Ledger Entry" +4, 1 changed
  • +key(Key9; "Source Code", "Document No.", "Posting Date")
  • +key(Key10; "Bank Account No.", "Posting Date", "Source Code")
  • +key(Key11; "Bank Account No.", "Document No.", "Posting Date")
  • +key(key12; "Statement No.", "Statement Line No.")
  • Δkey(Key8; "Source Code", "Posting Date", "Document No.")
codeunit/1233 "SEPA DD-Check Line" +2, 2 changed
  • +local event OnBeforeCheckPaymentLine(var DirectDebitCollectionEntry: Record "Direct Debit Collection Entry"; var PaymentLine: Record "Payment Line"; var Result: Boolean; var IsHandled: Boolean)
  • +procedure CheckPaymentLine(DirectDebitCollectionEntry: Record "Direct Debit Collection Entry"; PaymentLine: Record "Payment Line"; var AppliesToEntryNo: Integer): Boolean
  • Δprocedure CheckCollectionEntry(DirectDebitCollectionEntry: Record "Direct Debit Collection Entry")
  • Δlocal procedure AddFieldEmptyError(var DirectDebitCollectionEntry: Record "Direct Debit Collection Entry"; TableCaption2: Text; FieldCaption: Text; KeyValue: Text)
page/370 "Bank Account Card" +1, 3 removed
  • +procedure action()
  • −local event OnBeforeOnOpenPage()
  • −local procedure SetNoFieldVisible()
  • −local procedure RunReport(ReportNumber: Integer; BankActNumber: Code[20])
report/1303 "Standard Sales - Draft Invoice" +4
  • +local procedure GetGoodsAndServicesText(): Text
  • +local procedure IsItemInventory(ItemNo: Code[20]): Boolean
  • +local procedure GetVATPaidonDebitsText(): Text
  • +local procedure FormatAddressFields(var SalesHeader: Record "Sales Header")
report/1401 "Check" +3, 1 removed
  • +procedure FormatNoTextFR(var NoText: array[2] of Text[80]; No: Decimal; CurrencyCode: Code[10])
  • +procedure FormatTens(var NoText: array[2] of Text[80]; var NoTextIndex: Integer; var PrintExponent: Boolean; Exponent: Integer; Hundreds: Integer; Tens: Integer; Ones: Integer)
  • +procedure FormatNoTextINTL(var NoText: array[2] of Text[80]; No: Decimal; CurrencyCode: Code[10])
  • −local procedure GetAmtDecimalPosition(): Decimal
table/18 "Customer" +4
  • +field(10805; "SIREN No."; Code[9])
  • +field(10860; "Payment in progress (LCY)"; Decimal)
  • +field(10880; "Exclude from Payment Reporting"; Boolean)
  • +procedure GetSIRENNoWithCaption(): Text
table/263 "Intrastat Jnl. Line" +2, 2 removed
  • +key(Key3; "Type", "Country/Region Code", "Tariff No.", "Transaction Type", "Transport Method", "Country/Region of Origin Code", "Partner VAT ID")
  • +key(Key4; "Internal Ref. No.")
  • −key(Key6; "Journal Template Name", "Journal Batch Name", "Type", "Internal Ref. No.")
  • −key(Key7; "Journal Template Name", "Journal Batch Name", "Type", "Country/Region Code", "Tariff No.", "Transaction Type", "Transport Method", "Country/Region of Origin Code", "Partner VAT ID")
codeunit/358 "DateFilter-Calc" +3
  • +procedure VerifiyDateFilter(Filter: Text[30])
  • +procedure VerifMonthPeriod(Filter: Text[30])
  • +procedure ReturnEndingPeriod(StartPeriod: Date; PeriodType: Option Date,Week,Month,Quarter,Year): Date
codeunit/5600 "FA Insert Ledger Entry" +3
  • +procedure InsertFARevEntryForDerog(FAEntryType: Option " ","Fixed Asset",Maintenance; var NewFAEntryNo: Integer; FALedgEntry: Record "FA Ledger Entry")
  • +procedure InsertMaintRevEntryForDerog(FAEntryType: Option; var NewFAEntryNo: Integer; MaintenanceLedgEntry: Record "Maintenance Ledger Entry")
  • +local procedure CalcExcludeDerogatory(FALedgEntry: Record "FA Ledger Entry"): Boolean
codeunit/5632 "FA Jnl.-Post Line" +3
  • +procedure GenJnlPostLineContinue(GenJnlLine: Record "Gen. Journal Line"; FAAmount: Decimal; VATAmount: Decimal; NextTransactionNo: Integer; NextGLEntryNo: Integer; GLRegisterNo: Integer)
  • +procedure InsertBalAcc(var FALedgEntry: Record "FA Ledger Entry")
  • +procedure GetNextMatchingFALedgEntry(SourceFAJournalLine: Record "FA Journal Line"; FromEntryNo: Integer; DeprBookCode: Code[10]): Integer
report/1306 "Standard Sales - Invoice" +3
  • +local procedure GetGoodsAndServicesText(): Text
  • +local procedure IsItemInventory(ItemNo: Code[20]): Boolean
  • +local procedure GetVATPaidonDebitsText(): Text
report/1307 "Standard Sales - Credit Memo" +3
  • +local procedure GetGoodsAndServicesText(): Text
  • +local procedure IsItemInventory(ItemNo: Code[20]): Boolean
  • +local procedure GetVATPaidonDebitsText(): Text
table/23 "Vendor" +3
  • +field(10805; "SIREN No."; Code[9])
  • +field(10860; "Payment in progress (LCY)"; Decimal)
  • +field(10880; "Exclude from Payment Reporting"; Boolean)
table/254 "VAT Entry" +2, 1 removed
  • +procedure GetUnrealizedVATPart(SettledAmount: Decimal; Paid: Decimal; Full: Decimal; TotalUnrealVATAmountFirst: Decimal; TotalUnrealVATAmountLast: Decimal; DelayedUnrealizedVAT: Boolean; RealizeVAT: Boolean): Decimal
  • +procedure CheckDelayedUnrealVATType()
  • −procedure GetUnrealizedVATPart(SettledAmount: Decimal; Paid: Decimal; Full: Decimal; TotalUnrealVATAmountFirst: Decimal; TotalUnrealVATAmountLast: Decimal): Decimal
table/5200 "Employee" +1, 2 changed
  • +field(10800; "Marital Status"; Enum "Employee Marital Status")
  • Δfield(57; "Bank Account No."; Text[30])
  • Δfield(58; "IBAN"; Code[50])
table/5601 "FA Ledger Entry" +1, 2 changed
  • +field(10800; "Exclude Derogatory"; Boolean)
  • Δkey(Key4; "FA No.", "Depreciation Book Code", "Part of Book Value", "FA Posting Date", "Exclude Derogatory")
  • Δkey(Key6; "FA No.", "Depreciation Book Code", "FA Posting Category", "FA Posting Type", "Posting Date", "Exclude Derogatory")
table/5612 "FA Depreciation Book" +2, 1 changed
  • +field(10800; "Derogatory"; Decimal)
  • +field(10801; "Last Derogatory Date"; Date)
  • Δfield(17; "Book Value"; Decimal)
codeunit/426 "Payment Tolerance Management" +1, 1 changed
  • +procedure PmtTolPaymentLine(var NewPaymentLine: Record "Payment Line"): Boolean
  • Δprocedure SalesPmtTolGenJnl(var GenJnlLine: Record "Gen. Journal Line"): Boolean
codeunit/5601 "FA Insert G/L Account" +1, 1 removed
  • +local procedure GetGLAccNoFromFAPostingGroup(FAPostingGr: Record "FA Posting Group"; FAPostingType: Enum "FA Posting Group Account Type"; AllocAmount: Decimal): Code[20]
  • −local procedure GetGLAccNoFromFAPostingGroup(FAPostingGr: Record "FA Posting Group"; FAPostingType: Enum "FA Posting Group Account Type"): Code[20]
codeunit/5633 "FA Jnl.-Post Batch" +2
  • +procedure MakeDerogFAJnlLine(var NewFAJnlLine: Record "FA Journal Line"; FAJnlLine: Record "FA Journal Line"): Boolean
  • +local procedure CreateAndPostDerogatoryEntry(SourceFAJournalLine: Record "FA Journal Line")
codeunit/80 "Sales-Post" +2
  • +local event OnBeforeInsertInvoicedShipment(var ShipmentInvoiced: Record "Shipment Invoiced"; var IsHandled: Boolean)
  • +local procedure InsertInvoicedShipment(InvoiceNo: Code[20]; InvoiceLineNo: Integer; ShipmentNo: Code[20]; ShipmentLineNo: Integer; QtyToInvoice: Decimal; QtyToShip: Decimal; PostingDate: Date)
report/5605 "Fixed Asset - Book Value 01" +2
  • +procedure GetDeprBookInfo()
  • +procedure GetDerogDeprBookInfo()
report/5606 "Fixed Asset - Book Value 02" +2
  • +procedure GetDeprBookInfo()
  • +procedure GetDerogDeprBookInfo()
table/1207 "Direct Debit Collection" +2
  • +field(10800; "Source Table ID"; Integer)
  • +procedure SetErrorLink(var GenJnlLine: Record "Gen. Journal Line")
table/1381 "Customer Templ." +1, 1 changed
  • +field(10880; "Exclude from Payment Reporting"; Boolean)
  • Δfield(14; "Our Account No."; Text[20])
table/1383 "Vendor Templ." +1, 1 changed
  • +field(10880; "Exclude from Payment Reporting"; Boolean)
  • Δfield(14; "Our Account No."; Text[20])
table/317 "Payable Vendor Ledger Entry" +2
  • +field(10800; "Due Date"; Date)
  • +key(Key2; "Vendor No.", "Due Date")
codeunit/1222 "SEPA CT-Prepare Source" +1
  • +local event OnCreateTempJnlLinesOnBeforeInsertTempGenJnlLine(var TempGenJnlLine: Record "Gen. Journal Line" temporary; var PaymentLine: Record "Payment Line")
codeunit/1232 "SEPA DD-Prepare Source" +1
  • +local event OnCreateTempCollectionEntriesOnBeforeInsert(var ToDirectDebitCollectionEntry: Record "Direct Debit Collection Entry"; PaymentHeader: Record "Payment Header"; PaymentLine: Record "Payment Line")
codeunit/5613 "Calculate Acq. Cost Depr." +1
  • +procedure DerogatoryCalc(var DeprAmount: Decimal; FANo: Code[20]; DeprBookCode: Code[10]; LocalDerogatoryBasis: Decimal)
codeunit/5626 "FA General Report" +1
  • +procedure SetSign(Sign: Boolean)
page/131 "Posted Sales Shpt. Subform" +1
  • +local procedure InvoiceLines()
page/133 "Posted Sales Invoice Subform" +1
  • +procedure LinesInvoiced()
report/5692 "Calculate Depreciation" +1
  • +procedure CalcDerogDeprAmount(Amount1: Decimal; Amount2: Decimal): Decimal
table/10 "Shipment Method" +1
  • +procedure ValidateShipmentMethod(): Boolean
table/112 "Sales Invoice Header" +1
  • +field(10801; "VAT Paid on Debits"; Boolean)
table/114 "Sales Cr.Memo Header" +1
  • +field(10801; "VAT Paid on Debits"; Boolean)
table/15 "G/L Account" +1
  • +field(10811; "Detailed Balance"; Boolean)
table/32 "Item Ledger Entry" +1
  • +field(10800; "Shipment Method Code"; Code[10])
table/36 "Sales Header" +1
  • +field(10801; "VAT Paid on Debits"; Boolean)
table/379 "Detailed Cust. Ledg. Entry" +1
  • +field(10801; "Curr. Adjmt. G/L Account No."; Code[20])
table/380 "Detailed Vendor Ledg. Entry" +1
  • +field(10801; "Curr. Adjmt. G/L Account No."; Code[20])
table/5600 "Fixed Asset" +1
  • +field(10810; "Professional Tax"; Option)
table/5624 "FA Reclass. Journal Line" +1
  • +field(10800; "Reclassify Derogatory"; Boolean)
table/83 "Item Journal Line" +1
  • +field(10800; "Shipment Method Code"; Code[10])
table/9 "Country/Region" +1
  • +field(10800; "SEPA Allowed"; Boolean)
xmlport/1000 "SEPA CT pain.001.001.03" 1 removed
  • −local event OnSpecifyRemittanceTextSeparatorText(var SeparatorText: Text)
xmlport/1001 "SEPA CT pain.001.001.09" 1 removed
  • −local event OnSpecifyRemittanceTextSeparatorText(var SeparatorText: Text)
enum/5601 "FA Ledger Entry FA Posting Type" body changes only
enum/5602 "FA Journal Line FA Posting Type" body changes only
enum/5603 "Gen. Journal Line FA Posting Type" body changes only
enum/5606 "FA Posting Group Account Type" body changes only
enum/5615 "FA Allocation Type" body changes only
enum/8 "Country/Region Address Format" body changes only
permissionset/1001 "LOCAL" body changes only
permissionset/1002 "LOCAL READ" body changes only
report/117 "Reminder" body changes only

BC29 · country layer against W1 · Learn: local functionality · narrative reviewed (checked by Opus)

Overview

The French layer is dominated by payment management: payment classes, statuses, steps, payment slips (with archive), payment addresses and step ledgers. These come as an FR-suffixed object set (for example codeunit 10837 "Payment Management FR", codeunit 10834 "Payment-Apply FR", page 10843 "Payment Slip FR" and page 10834 "Payment Class FR") plus a second set of non-suffixed objects (codeunit 10860 "Payment Management", pages 10860 to 10882). Bank, customer and vendor bank accounts get French RIB fields (Agency Code, RIB Key, RIB Checked). Learn documents creating, posting, archiving and exporting payment slips, payment classes, payment addresses and parameter export/import.\n\nFinance changes cover the FEC audit file export (codeunits 10826 to 10830, an Audit File Export format enum extension), fiscal period and fiscal year closing (new fields on table 50 "Accounting Period", table 98 "General Ledger Setup" posting ranges), G/L entry application (Applies-to ID, Letter, Letter Date on table 17 "G/L Entry"), delayed unrealized VAT, and local ledger reports such as journals, trial balances and the GL/Cust. Ledger Reconciliation. Fixed assets add derogatory (accelerated) depreciation through new fields on posting groups, depreciation books and ledger entries, and extra procedures in disposal and posting codeunits.\n\nElsewhere the country adds company identifiers: SIRET No., APE Code, Trade Register, Legal Form and Stock Capital on Company Information, the same registration fields plus SIREN No. on Contact, and SIREN No. on Customer and Vendor. It also adds VAT Paid on Debits and goods/services text on sales invoices, DEB Intrastat objects, and French service declaration extensions. Learn also covers UBL 2.1 and Factur-X e-invoicing and E-Reporting FR, though the code listed here shows no dedicated objects for them.

Key points

  • Payment management: payment classes, statuses, steps, slips, archive, payment addresses and step ledgers, in FR and non-suffixed object sets
  • RIB fields (Agency Code, RIB Key, RIB Checked) on Bank Account, Customer Bank Account and Vendor Bank Account, with RIB Key codeunits
  • FEC tax audit export built on the Audit File Export framework, with opening balances and data checks
  • Fiscal period and year closing: Fiscally Closed, Fiscal Closing Date and Period Reopened Date on Accounting Period, plus posting allowed range on General Ledger Setup
  • Accelerated depreciation with derogatory books, posting group accounts and FA reports
  • Company identifiers: SIRET No., APE Code, Trade Register, Legal Form and Stock Capital on Company Information; registration fields and SIREN No. on Contact; SIREN No. on Customer and Vendor
  • French sales invoice specifics: VAT Paid on Debits and goods/services text on standard sales reports
  • DEB Intrastat reporting (obligation level) and French service declaration (DES) extensions

Narrative written by Sonnet from the code diff and 34 Learn page summaries. In numbers: France (FR) localization of Business Central in BC29: 240 objects of its own, 71 W1 objects changed (78 fields and 6 events added). From the code; country apps outside the Base Application are not included yet.

By area

Area W1 objects changed Own objects Fields added
Bank 10 153 5
Finance 8 42 20
FixedAssets 21 7 13
Sales 14 8 11
Inventory 3 10 2
Purchases 5 5 9
Foundation 6 2 12
(no namespace) 0 6 0
Service 0 6 0
Security 2 0 0
CRM 1 0 5
ExpenseAgent 0 1 0
HumanResources 1 0 1

Bank

Adds the French payment management feature: payment classes, statuses, steps, payment slips with archive, payment bank and addresses, step ledgers. Adds RIB key fields to table 270 “Bank Account”, plus SEPA check and Check report changes for French amount text.

Why: Learn describes payment classes, steps and slips used to manage bills of exchange, checks and SEPA transfers, and export of payment files.

Objects: codeunit/10860 “Payment Management” (own), codeunit/10837 “Payment Management FR” (own), codeunit/10801 “RIB Key” (own), table/270 “Bank Account”, codeunit/10861 “Payment-Apply” (own), page/10864 “Payment Class” (own), page/10868 “Payment Slip” (own), report/1401 “Check”.

All 163 objects of Bank in the diff

Finance

Adds FEC audit export, French trial balance and journal reports, fiscal year closing, G/L entry application and delayed unrealized VAT. Extends Gen. Jnl.-Post Line and journal line tables with derogatory and VAT realization fields, and G/L Setup with posting ranges.

Why: Learn documents FEC export for tax audits, fiscal period closing with two open fiscal years, and year-end closing entries.

Objects: codeunit/12 “Gen. Jnl.-Post Line”, codeunit/10826 “Generate File FEC” (own), codeunit/10862 “Fiscal Year-FiscalClose” (own), codeunit/10842 “G/L Entry Application” (own), table/81 “Gen. Journal Line”, table/98 “General Ledger Setup”, table/17 “G/L Entry”, report/10803 “G/L Trial Balance” (own).

All 50 objects of Finance in the diff

FixedAssets

Adds derogatory (accelerated) depreciation: fields on FA Posting Group, Depreciation Book, FA Depreciation Book and FA Ledger Entry, derogatory posting types in enums, and procedures in disposal, depreciation and posting codeunits. Adds professional tax reports.

Why: Learn explains accelerated depreciation as the difference between tax and accounting depreciation books.

Objects: table/5606 “FA Posting Group”, table/5611 “Depreciation Book”, table/5612 “FA Depreciation Book”, codeunit/5605 “Calculate Disposal”, codeunit/5613 “Calculate Acq. Cost Depr.”, codeunit/5633 “FA Jnl.-Post Batch”, report/5692 “Calculate Depreciation”, report/10817 “FA-Proj. Value (Derogatory) FR” (own).

All 28 objects of FixedAssets in the diff

Sales

Adds SIREN No. and payment reporting fields on Customer, VAT Paid on Debits on sales headers, goods and services text procedures on standard sales invoice reports, and French customer ledger reports. Adds shipment-invoice linking via table 10825 “Shipment Invoiced”.

Why: Learn covers customer SIREN numbers, printing VAT on debits and automatic goods/services indication on invoices.

Objects: table/18 “Customer”, table/36 “Sales Header”, report/1306 “Standard Sales - Invoice”, report/1303 “Standard Sales - Draft Invoice”, table/10825 “Shipment Invoiced” (own), codeunit/80 “Sales-Post”, report/10805 “Customer Trial Balance FR” (own), table/287 “Customer Bank Account”.

All 22 objects of Sales in the diff

Inventory

Adds DEB Intrastat support: codeunits for filtering receipts and shipments, an obligation level enum, and extensions on the Intrastat report and company information. Adds Shipment Method Code on item entries.

Why: Learn describes DEB reporting that needs company information and Intrastat fields filled in, with obligation level filters.

Objects: codeunit/10851 “IntrastatReportManagementFR” (own), codeunit/10853 “Intrastat Rep. Filter Rcpt. FR” (own), codeunit/10854 “Intrastat Rep. Filter Shpt. FR” (own), enum/10851 “Obligation Level” (own), tableextension/10851 “Intrastat Report Header FR” (own), pageextension/10852 “Intrastat Report FR” (own), table/32 “Item Ledger Entry”.

All 13 objects of Inventory in the diff

Purchases

Adds RIB fields on Vendor Bank Account, SIREN No. and payment fields on Vendor, plus vendor trial balance and journal reports.

Why: not explained by a Learn page in the input; the code shows the change, not the requirement.

Objects: table/288 “Vendor Bank Account”, table/23 “Vendor”, report/10814 “Vendor Journal” (own), report/10807 “Vendor Trial Balance FR” (own), report/10808 “Vendor Detail Trial Balance FR” (own), table/1383 “Vendor Templ.”, table/317 “Payable Vendor Ledger Entry”.

All 10 objects of Purchases in the diff

Foundation

Extends Company Information with French registration fields and SIRET validation with an event, and Accounting Period with fiscal closing logic. Adds a SEPA Allowed flag on Country/Region and date filter helpers.

Why: Learn notes that company information such as SIRET and SIREN is needed for e-invoicing and DEB reporting.

Objects: table/79 “Company Information”, table/50 “Accounting Period”, codeunit/358 “DateFilter-Calc”, table/9 “Country/Region”, codeunit/10833 “Local Navigate Handler FR” (own), table/10 “Shipment Method”.

All 8 objects of Foundation in the diff

(no namespace)

Holds mostly upgrade code, the FR-PMS permission set, a source code table extension and an Employee Marital Status enum.

Why: not explained by a Learn page in the input; the code shows the change, not the requirement.

Objects: permissionset/10800 “FR-PMS” (own), tableextension/10810 “SourceCodeFR” (own), enum/5226 “Employee Marital Status” (own).

All 6 objects of (no namespace) in the diff

Service

Adds local service declaration (DES) management and export codeunits, with setup page extensions and a permission set extension.

Why: not explained by a Learn page in the input; the code shows the change, not the requirement.

Objects: codeunit/10890 “Local Service Declaration Mgt.” (own), codeunit/10891 “Local Export Serv. Decl.” (own), codeunit/10892 “Local Serv. Decl. Exp. Ext.” (own), pageextension/10890 “Local Serv. Decl. Setup” (own), pageextension/10891 “Local Serv. Decl. Setup Wizard” (own).

All 6 objects of Service in the diff

Security

Changes the LOCAL and LOCAL READ permission sets to include French objects.

Why: not explained by a Learn page in the input; the code shows the change, not the requirement.

Objects: permissionset/1001 “LOCAL”, permissionset/1002 “LOCAL READ”.

All 2 objects of Security in the diff

CRM

Adds French registration fields (Trade Register, APE Code, Legal Form, Stock Capital, SIREN No.) to Contact, with procedures to keep the customer SIREN number in sync.

Why: not explained by a Learn page in the input; the code shows the change, not the requirement.

Objects: table/5050 “Contact”.

All 1 objects of CRM in the diff

ExpenseAgent

Adds an FR expense event subscriber codeunit.

Why: not explained by a Learn page in the input; the code shows the change, not the requirement.

Objects: codeunit/6920 “Expense Event Subscriber FR” (own).

All 1 objects of ExpenseAgent in the diff

HumanResources

Adds a Marital Status field to Employee.

Why: not explained by a Learn page in the input; the code shows the change, not the requirement.

Objects: table/5200 “Employee”.

All 1 objects of HumanResources in the diff

Objects of its own

240 objects only this country has.

Other versions

  • BC30: 311 objects differ from W1 (78 fields, 6 events added)

Source: country layer of the Base Application compared with W1 of the same version (data/code/diffs/country/).