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

2 comments:

  1. Good Post! Thank you so much for sharing this post, it was so good to read and useful to improve my knowledge as updated one, keep blogging…
    Microsoft Dynamics Online Training

    ReplyDelete

I will appreciate your comments !

Download large bacpac (sandbox database) to DEV environment much faster

As the LCS website gets slower and slower and the database backups get bigger and bigger.  Use AZCopy to download objects out of LCS asset l...