// Table buffers
LedgerJournalTable journalTable;
LedgerJournalName journalName = LedgerJournalName::find("custPaym");
CustTable custTable = CustTable::find('Test001');
CustPaymModeTable paymModeTable = CustPaymModeTable::find('Test');
LedgerJournalTrans journalTrans;
NumberSeq numberSeq;
DimensionDefault defDimension = 0;
ExchangeRateHelper exchangeRateHelper;
LedgerRecId ledgerRecIdLocal;
ExchangeRateHelper exchangeRateHelperRep;
// Generate Journal ID
JournalNum journalNum = JournalTableData::newTable(journalTable).nextJournalId();
// Initialize Journal header
journalTable.clear();
journalTable.JournalNum = journalNum;
journalTable.JournalName = "custPaym";
// Populate from journal name setup
journalTable.initFromLedgerJournalName(journalTable.JournalName);
journalTable.Name = journalName.Name;
// Insert Journal header
if (journalTable.validateWrite())
{
journalTable.doInsert();
}
// Prepare NumberSeq for voucher
numberSeq = NumberSeq::newGetVoucherFromId(journalName.NumberSequenceTable);
// Initialize Journal line
journalTrans.initValue();
journalTrans.initFromLedgerJournalTable_LT(journalTable);
journalTrans.JournalNum = journalTable.JournalNum;
journalTrans.Voucher = numberSeq.voucher();
numberSeq.used();
journalTrans.AccountType = LedgerJournalACType::Cust;
journalTrans.TransactionType = LedgerTransType::Payment;
// Customer dynamic account (ledger dimension)
DimensionDynamicAccount dynAccount = LedgerDynamicAccountHelper::getDynamicAccountFromAccountNumber(
custTable.AccountNum,
journalTrans.AccountType);
journalTrans.LedgerDimension = DimensionAttributeValueCombination::find(dynAccount).RecId;
journalTrans.initFromCustTable(custTable, false);
// Default dimensions merge
journalTrans.DefaultDimension = DimensionDefaultFacade::serviceMergeDefaultDimensions(
defDimension,
custTable.DefaultDimension);
// Dates
journalTrans.TransDate = str2Date('09/01/2025', 123); // Date in system format
journalTrans.DocumentDate = str2Date('09/01/2025', 123);
journalTrans.Due = journalTrans.TransDate;
// Document details
journalTrans.DocumentNum = 'Test1';
journalTrans.AmountCurCredit = 200;
journalTrans.AmountCurDebit = 0;
journalTrans.CurrencyCode = 'USD';
journalTrans.Company = 'USMF';
journalTrans.Txt = "testing01";
// Approval details
journalTrans.AcknowledgementDate = DateTimeUtil::date(DateTimeUtil::getSystemDateTime());
journalTrans.PaymMode = paymModeTable.PaymMode;
journalTrans.PaymReference = 'Test123';
journalTrans.Approved = NoYes::Yes;
journalTrans.Approver = HcmWorker::userId2Worker(curUserId());
// Offset account
journalTrans.OffsetAccountType = LedgerJournalACType::Ledger;
journalTrans.OffsetLedgerDimension = LedgerDimensionFacade::serviceCreateLedgerDimension(
paymModeTable.PaymentLedgerDimension,
journalTrans.DefaultDimension);
// Line number
journalTrans.LineNum = LedgerJournalTrans::lastLineNum(journalTrans.JournalNum) + 1;
// Exchange rate
exchangeRateHelper = ExchangeRateHelper::newCurrency(
Ledger::primaryLedger(CompanyInfo::findDataArea(journalTrans.Company).RecId),
journalTrans.CurrencyCode);
journalTrans.ExchRate = ExchangeRateHelper::exchRate(
journalTrans.CurrencyCode,
journalTrans.TransDate);
// Ledger dimension name
journalTrans.LedgerDimensionName = LedgerJournalTransLedgerDimensionNameHelper::findName(
journalTrans.Company,
journalTrans.AccountType,
journalTrans.LedgerDimension);
// Tax withholding check
if (TaxThaiGovCertificationFeatureChecker::isTaxWithholdEnabled())
{
journalTrans.TaxWithholdGroup = custTable.getTaxWithholdGroup();
}
else
{
journalTrans.TaxWithholdGroup = custTable.TaxWithholdGroup_TH;
}
journalTrans.TaxWithholdCalculate_TH = custTable.TaxWithholdCalculate_TH;
// Reporting currency exchange rate
ledgerRecIdLocal = Ledger::primaryLedger(CompanyInfo::findDataArea(journalTrans.company()).RecId);
exchangeRateHelperRep = ExchangeRateHelper::newExchangeDate(
ledgerRecIdLocal,
journalTrans.CurrencyCode,
journalTrans.TransDate);
exchangeRateHelperRep.parmToCurrency(Ledger::reportingCurrency());
exchangeRateHelperRep.parmExchangeRateTypeRecId(Ledger::reportingCurrencyExchangeRateType());
journalTrans.ReportingCurrencyExchRate = exchangeRateHelperRep.getExchangeRate1();
journalTrans.ReportingCurrencyExchRateSecondary = exchangeRateHelperRep.getExchangeRate2();
// Final insert
if (journalTrans.validateWrite())
{
journalTrans.doInsert();
}