Following job can be used to create, validate, and post hour journal in Project Management and Accounting module in AX 2012 R3.
static void
createHourJournal(Args _args)
{
ProjJournalTableData JournalTableData;
ProjJournalTransData journalTransData;
ProjJournalTable journalTable, journalTableUpdate;
ProjJournalTrans journalTrans;
ProjTable projTable;
ProjInvoiceTable projInvoiceTable;
NumberSeq numberSeq;
ProjJournalCheckPost jourPost;
ProjQtyEmpl qty;
JournalNumOfLines numOfLines;
ttsBegin;
journalTableData =
JournalTableData::newTable(journalTable);
journalTransData =
journalTableData.journalStatic().newJournalTransData(journalTrans,
journalTableData);
// Init
JournalTable -- header
journalTable.clear();
journalTable.JournalId = journalTableData.nextJournalId();
journalTable.JournalType = ProjJournalType::Hour;
journalTable.JournalNameId = MROParameters::find().JournalHour;
journalTable.initFromProjJournalName(ProjJournalName::find(journalTable.JournalNameId));
journalTable.insert();
// Init
JournalTrans -- lines
journalTableData.initFromJournalName(journalTableData.journalStatic().findJournalName(journalTable.JournalNameId));
journalTrans.clear();
journalTransData.initFromJournalTable();
projTable = ProjTable::find('000057');
projInvoiceTable = projTable.projInvoice();
journalTrans.setTransDate();
journalTrans.TransDate = systemDateGet();
journalTrans.ProjTransDate = systemDateGet();
journalTrans.ProjId = projTable.ProjId;
journalTrans.Qty = 7.5;
journalTrans.CategoryId = 'Category
ID';
journalTrans.LinePropertyId = 'Line property ID';
journalTrans.Worker = DirPersonUser::currentWorker();
journalTrans.ActivityNumber = 'Activity number';
journalTrans.Txt = 'Sample
Text';
if
(projInvoiceTable.CurrencyId)
journalTrans.CurrencyId =
projInvoiceTable.CurrencyId;
else
journalTrans.CurrencyId =
CompanyInfo::standardCurrency();
journalTrans.DefaultDimension = projTable.DefaultDimension;
journalTrans.TaxGroupId =
ProjParameters::taxGroupInvoice(projTable.ProjId);
if
(journalTrans.Worker)
{
journalTrans.setHourPrices();
journalTrans.setPeriodDate();
}
numberSeq =
NumberSeq::newGetVoucherFromId(journalTable.VoucherNumberSequenceTable, false);
journalTrans.Voucher = numberSeq.voucher();
journalTransData.create();
ttsCommit;
// Validating
the journal
jourPost =
ProjJournalCheckPost::newJournalCheckPost(true,true,JournalCheckPostType::Check,tableNum(ProjJournalTable),journalTable.JournalId);
// Posting the
journal
jourPost =
ProjJournalCheckPost::newJournalCheckPost(true,true,JournalCheckPostType::Post,tableNum(ProjJournalTable),
journalTable.JournalId);
jourPost.run();
}