Process of Journal Creation in D365fo

 

  • LedgerJournalSetup → Number sequences, posting setup

Key events

  • LedgerJournalTable.initValue()
  • LedgerJournalTable.validateWrite()
  • LedgerJournalTable.insert()

Class framework

  • LedgerJournalCheckPost → Validations & posting
  • LedgerJournalTableType → Controls defaulting & behavior
  • NumberSeq → Number sequence assignment

Extension points

  • LedgerJournalTable.OnValidatingField()
  • LedgerJournalTable.OnModifiedField()
  • class LedgerJournalTableType_Extension

2. Journal Lines Creation

Each journal header contains lines:

Table

  • LedgerJournalTrans → Journal lines
  • LedgerDimensionAccount → Ledger dimension
  • DimensionAttributeValueCombination → Segment combination
  • CustTable / VendTable / LedgerTable (based on account type)

Key technical operations

  • When user selects account:
    • Combination built by DimensionEntry engine
    • Validated via DimensionValidation framework

Methods involved

  • LedgerJournalTrans.initFromLedgerJournalTable()
  • LedgerJournalTrans.initValue()
  • LedgerJournalTrans.validateWrite()
  • LedgerJournalTrans.validateAccount()
  • LedgerJournalCalcTransAmount (calculates debit/credit)

Class framework

  • LedgerJournalEngine
  • LedgerJournalTransType — determines behavior of line
  • LedgerVoucher (voucher assignment)

3. Journal Validation (Simulate / Check)

User clicks Validate button.

Class

  • LedgerJournalCheckPost (core class for validation AND posting)

Main methods

  • LedgerJournalCheckPost.validate()
  • LedgerJournalCheckPost.validateJournal()
  • LedgerJournalCheckPost.validateLine()

Validation rules

  • Debit = Credit
  • Financial dimensions are required
  • Posting profile rules (for vendor/customer)
  • Inventory availability (for inventory journals)
  • Fixed asset rules (for FA journals)

4. Workflow Submission (if enabled)

📌 Applicable when journal approval workflow is turned on.

Tables

  • WorkflowTable
  • WorkflowWorkItemTable
  • WorkflowTrackingStatusTable

Methods

  • canSubmitToWorkflow() event
  • submitToWorkflow()
  • WorkflowWorkItemActionManager

Events to extend

  • LedgerJournalTable.onCanSubmitToWorkflow()
  • LedgerJournalTable.onSubmitting()

5. Journal Posting

User clicks Post or Post & transfer.

Main class

  • LedgerJournalCheckPost
    • Both validation and posting are handled here.

Key methods

  • run()
  • runAsynchronously()
  • update()
  • initParmDefault()

Posting logic flow

  1. Loop LedgerJournalTrans lines
  2. Validate each line
  3. Create Subledger Journal (temporary)
  4. Pass entries to LedgerVoucher
  5. Post to GeneralJournalAccountEntry & GeneralJournalEntry
  6. Update balances, subledger entries, settlements

6. Accounting / Ledger Impact

This is handled by the Subledger journal framework.

Tables

  • SubledgerJournalAccountEntry (DETAILED posting record)
  • SubledgerVoucher
  • GeneralJournalAccountEntry (GL entry)
  • GeneralJournalEntry (header)

Classes

  • LedgerVoucher
  • LedgerPosting
  • LedgerDimensionFacade

7. Special Journal Types (Short Technical Notes)


A. Vendor Payment Journal

Extra tables:

  • VendTrans (settlement)
  • VendSettlement
  • BankTrans

Class extensions:

  • VendVoucher
  • VendPaymJournalPost

B. Customer Payment Journal

Extra:

  • CustTrans
  • CustSettlement

Classes:

  • CustVoucher
  • CustPaymJournalPost

C. Inventory Journals

Tables:

  • InventJournalTable
  • InventJournalTrans
  • InventTrans (inventory transactions)

Classes:

  • InventJournalCheckPost
  • InventMov_* classes (movement posting)

D. Fixed Asset Journals

Tables:

  • AssetLedger tables*
  • AssetsTable

Classes:

  • AssetPost
  • AssetLedgerJournalCheckPost

8. Journal Reversal

User clicks Reverse transaction or Reverse journal.

Class

  • LedgerJournalReversal

Method

  • reverseVoucher()
  • Creates a new journal with opposite amounts

 


Comments

Popular Posts