Sunday, September 4, 2016

AX 2012 - Create and Post hour journal through X++

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();
}