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
- Loop LedgerJournalTrans lines
- Validate each line
- Create Subledger Journal (temporary)
- Pass entries to LedgerVoucher
- Post to GeneralJournalAccountEntry & GeneralJournalEntry
- 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
Post a Comment