Friday, 27 May 2016

Periodic journal through x++ code


 static void CON_PeriodicJournal_Multiplelines(Args _args)
{
    LedgerJournalTrans          ledgerJournalTrans,LedgerJournaltrans1;
    LedgerJournalTable          ledgerJournalTable;
    ledgerJournalname           ledgerJournalname;
    NumberSeq                   numberSeq;
    NumberSequenceTable         numSeqTable;
    container                   cont1,cont2,ledgerDimension,offSetAcctPattern;
    DimensionDynamicAccount     ledgerDim, offsetledgerDim;
    ledgerJournalCheckPost      ledgerJournalCheckPost;
    int                         cnt;
    DimensionDefault            DimensionDefault;
    LedgerJournalPeriodicCopy   LedgerJournalPeriodicCopy;
    CopyMove                    CopyMove;
    LedgerJournalId             periodicLedgerJournalId,genjourLedgerJournalId;
    LedgerJournalACType         periodicACType,periodicOffSetACType;
    DimensionDynamicAccount     periodicAccount,periodicoffsetAccount ;
    AmountCurCredit             credit;
    RecId                       RecId;

     // find ledgerjournalname record
    select firstonly   ledgerjournalname where LedgerJournalName.JournalName =='PerJrn';

    //create ledger journal table
    ledgerjournaltable.journalname      = ledgerjournalname.journalname ;
    ledgerjournaltable.initfromledgerjournalname();
    ledgerjournaltable.name             = " May Periodic Journal";
    ledgerJournalTable.insert();

    /////Line 1 Created
    //ledgerJournalTable = LedgerJournalTable::find("00553");
      try
        {
            ttsbegin;
            ledgerJournalTrans.clear();
            ledgerJournalTrans.initValue();
            ledgerJournalTrans.JournalNum   = ledgerJournalTable.JournalNum;
            ledgerJournalTrans.TransDate    = today();
            ledgerJournalName = ledgerJournalName::find(ledgerJournalTable.JournalName);
            periodicLedgerJournalId = ledgerJournalTrans.JournalNum ;
            select firstOnly numSeqTable
                where numSeqTable.RecId  == ledgerJournalName.NumberSequenceTable;
            if (numSeqTable)
            {
                numberseq = numberseq::newGetVoucherFromCode(numSeqTable.NumberSequence);
                ledgerJournalTrans.voucher = numberseq.voucher();
            }

            //ledgerJournalTrans.Voucher              = voucher;
            ledgerJournalTrans.AccountType          = LedgerJournalACType::Vend;
            ledgerJournalTrans.OffsetAccountType = LedgerJournalACType::Ledger;
            // Main account dimensions

            periodicACType = ledgerJournalTrans.AccountType;
            periodicOffSetACType = ledgerJournalTrans.OffsetAccountType;


            cont1=conNull();
            cont2=conNull();
            ledgerDimension =conNull();
            cont2 += ['BusinessUnit','082','Department','023'];
            cnt =2;
            if(ledgerJournalTrans.AccountType  == LedgerJournalACType::Ledger)
            {
                cont1+=['MainAccount','112100',2];
                cont1+=cont2;
                ledgerDim=AxdDimensionUtil::getLedgerAccountId(cont1);

                if(ledgerDim==0)
                {
                        offSetAcctPattern = ['112100','112100'];
                        ledgerDim = AxdDimensionUtil::getLedgerAccountId(offSetAcctPattern);
                }

                ledgerJournalTrans.LedgerDimension  = ledgerDim;
            }
            else
            {
                ledgerDim = DimensionStorage::getDynamicAccount( '000021',ledgerJournalTrans.AccountType);
                ledgerJournalTrans.LedgerDimension  = ledgerDim;
                ledgerDimension +=cnt;
                ledgerDimension +=cont2;
                DimensionDefault = AxdDimensionUtil::getDimensionAttributeValueSetId(ledgerDimension);
                ledgerJournalTrans.DefaultDimension = DimensionDefault;
            }

            periodicAccount = ledgerDim;
            cont1=conNull();
            cont2=conNull();
            ledgerDimension =conNull();
            cont2 += ['BusinessUnit','082','Department','023'];
            cnt =2;
            if(ledgerJournalTrans.OffsetAccountType  == LedgerJournalACType::Ledger)
            {
                cont1+=['MainAccount','112140',2];
                cont1+=cont2;
                offsetledgerDim=AxdDimensionUtil::getLedgerAccountId(cont1);

                if(ledgerDim==0)
                {
                        offSetAcctPattern = ['112140','112140'];
                        offsetledgerDim = AxdDimensionUtil::getLedgerAccountId(offSetAcctPattern);
                }

                ledgerJournalTrans.OffsetLedgerDimension  = offsetledgerDim;
            }
            else
            {
                offsetledgerDim = DimensionStorage::getDynamicAccount( '000021',ledgerJournalTrans.AccountType);
                ledgerJournalTrans.OffsetLedgerDimension = offsetledgerDim;
                ledgerDimension +=cnt;
                ledgerDimension +=cont2;
                DimensionDefault = AxdDimensionUtil::getDimensionAttributeValueSetId(ledgerDimension);
                ledgerJournalTrans.OffsetDefaultDimension = DimensionDefault;
            }

            periodicoffsetAccount = offsetledgerDim;

            ledgerJournalTrans.CurrencyCode          = "USD";
            ledgerJournalTrans.AmountCurCredit       = 6000;
            ledgerJournalTrans.FreqCode              = PeriodUnit::Month;
            ledgerJournalTrans.FreqValue             = 1;

            credit = ledgerJournalTrans.AmountCurCredit;
            if (ledgerJournalTrans.validateWrite())
            {
                ledgerJournalTrans.insert();
            }

            ttscommit;

        }
        catch(Exception::Error)
        {
            info(strFmt('Catched an error in row: %1',ledgerJournalTrans.OffsetDefaultDimension));
        }
        info(strFmt('Periodic journal inserted %1',ledgerJournalTable.JournalNum));


        ////Line 2 Created
        try
        {
            ttsbegin;
            ledgerJournalTrans.clear();
            ledgerJournalTrans.initValue();
            ledgerJournalTrans.JournalNum   = ledgerJournalTable.JournalNum;
            ledgerJournalTrans.TransDate    = today();
            ledgerJournalName = ledgerJournalName::find(ledgerJournalTable.JournalName);
            periodicLedgerJournalId = ledgerJournalTrans.JournalNum ;
            select firstOnly numSeqTable
                where numSeqTable.RecId  == ledgerJournalName.NumberSequenceTable;
            if (numSeqTable)
            {
                numberseq = numberseq::newGetVoucherFromCode(numSeqTable.NumberSequence);
                ledgerJournalTrans.voucher = numberseq.voucher();
            }

            //ledgerJournalTrans.Voucher              = voucher;
            ledgerJournalTrans.AccountType          = LedgerJournalACType::Vend;
            ledgerJournalTrans.OffsetAccountType = LedgerJournalACType::Ledger;
            // Main account dimensions

            periodicACType = ledgerJournalTrans.AccountType;
            periodicOffSetACType = ledgerJournalTrans.OffsetAccountType;


            cont1=conNull();
            cont2=conNull();
            ledgerDimension =conNull();
            cont2 += ['BusinessUnit','082','Department','023'];
            cnt =2;
            if(ledgerJournalTrans.AccountType  == LedgerJournalACType::Ledger)
            {
                cont1+=['MainAccount','112100',2];
                cont1+=cont2;
                ledgerDim=AxdDimensionUtil::getLedgerAccountId(cont1);

                if(ledgerDim==0)
                {
                        offSetAcctPattern = ['112100','112100'];
                        ledgerDim = AxdDimensionUtil::getLedgerAccountId(offSetAcctPattern);
                }

                ledgerJournalTrans.LedgerDimension  = ledgerDim;
            }
            else
            {
                ledgerDim = DimensionStorage::getDynamicAccount( '000021',ledgerJournalTrans.AccountType);
                ledgerJournalTrans.LedgerDimension  = ledgerDim;
                ledgerDimension +=cnt;
                ledgerDimension +=cont2;
                DimensionDefault = AxdDimensionUtil::getDimensionAttributeValueSetId(ledgerDimension);
                ledgerJournalTrans.DefaultDimension = DimensionDefault;
            }

            periodicAccount = ledgerDim;
            cont1=conNull();
            cont2=conNull();
            ledgerDimension =conNull();
            cont2 += ['BusinessUnit','082','Department','023'];
            cnt =2;
            if(ledgerJournalTrans.OffsetAccountType  == LedgerJournalACType::Ledger)
            {
                cont1+=['MainAccount','112140',2];
                cont1+=cont2;
                offsetledgerDim=AxdDimensionUtil::getLedgerAccountId(cont1);

                if(ledgerDim==0)
                {
                        offSetAcctPattern = ['112140','112140'];
                        offsetledgerDim = AxdDimensionUtil::getLedgerAccountId(offSetAcctPattern);
                }

                ledgerJournalTrans.OffsetLedgerDimension  = offsetledgerDim;
            }
            else
            {
                offsetledgerDim = DimensionStorage::getDynamicAccount( '000021',ledgerJournalTrans.AccountType);
                ledgerJournalTrans.OffsetLedgerDimension = offsetledgerDim;
                ledgerDimension +=cnt;
                ledgerDimension +=cont2;
                DimensionDefault = AxdDimensionUtil::getDimensionAttributeValueSetId(ledgerDimension);
                ledgerJournalTrans.OffsetDefaultDimension = DimensionDefault;
            }

            periodicoffsetAccount = offsetledgerDim;

            ledgerJournalTrans.CurrencyCode          = "USD";
            ledgerJournalTrans.AmountCurCredit       = 4000;
            ledgerJournalTrans.FreqCode              = PeriodUnit::Month;
            ledgerJournalTrans.FreqValue             = 1;

            credit = ledgerJournalTrans.AmountCurCredit;
            if (ledgerJournalTrans.validateWrite())
            {
                ledgerJournalTrans.insert();
            }

            ttscommit;

        }
        catch(Exception::Error)
        {
            info(strFmt('Catched an error in row: %1',ledgerJournalTrans.OffsetDefaultDimension));
        }
        //info(strFmt('Periodic journal inserted %1',ledgerJournalTable.JournalNum));

    ledgerJournalTable.clear();
    //General Ledger create
    select firstonly   ledgerjournalname where LedgerJournalName.JournalName =='GenJrn';

    //create ledger journal table
    ledgerjournaltable.journalname      = ledgerjournalname.journalname ;
    ledgerjournaltable.initfromledgerjournalname();
    ledgerjournaltable.name             = " General Journal";
    genjourLedgerJournalId= ledgerjournaltable.JournalNum;

    ledgerJournalTable.insert();
    info(strFmt("General journal is %1",ledgerjournaltable.JournalNum));


    //ledgerJournalTrans1.clear();
    //ledgerJournalTrans1.initValue();

    //if(genjourLedgerJournalId)
    //{
       //ledgerJournalTrans = ledgerJournalTrans::find(periodicLedgerJournalId,ledgerJournalTrans.Voucher,true);
      while  select ledgerJournalTrans where ledgerJournalTrans.JournalNum==periodicLedgerJournalId
        {
       ttsBegin;
       ledgerJournalTrans1.initValue();
       ledgerJournalTrans1.data(ledgerJournalTrans);

       ledgerJournalTrans1.JournalNum=ledgerjournaltable.JournalNum;

        //ledgerJournalTrans1.initValue();

        select firstOnly numSeqTable
                where numSeqTable.RecId  == ledgerJournalName.NumberSequenceTable;
            if (numSeqTable)
            {
                numberseq = numberseq::newGetVoucherFromCode(numSeqTable.NumberSequence);
                ledgerJournalTrans1.voucher = numberseq.voucher();
            }

        if(!ledgerJournalTrans1.validateWrite())
        {
           throw error("ERROR");
        }
        else
        {
            ledgerJournalTrans1.insert();
        }

       ttsCommit;
        }



        //Post Journal
        ledgerJournalCheckPost      = ledgerJournalCheckPost::newLedgerJournalTable(ledgerJournaltable,Noyes::Yes);
        LedgerJournalCheckPost.run();

        //Lastdate updated
        while  select forUpdate ledgerJournalTrans where ledgerJournalTrans.JournalNum==periodicLedgerJournalId
        {
        ttsBegin;
        ledgerJournalTrans.LastTransferred=today();
        ledgerJournalTrans.update();
        ttsCommit;
        }


}

Split Ledger Account through x++

Some times when developing we encounter some strings of which we only need a segment of the string, let’s say for example the Ledger Account.

static void ledgeraccount(Args _args)
{
    GeneralJournalAccountEntry      gjae; //Table name
    container                                  con;
    List                                         list = new List(types::string);
    ListIterator                              iterator;
    str                                          ch;
    ;
    select gjae  where gjae.RecId == 5637151397;
    ch = strFmt("%1",gjae.LedgerAccount);//510500-002-022-007-Audio

//we will initialize the list using the standard method strSplit of Dynamics AX, we will use as the separator the “-” character without quotes.

    list = Global::strSplit(Ch, '-');

//Now we must start the iterator for our list.
//The iterator will loop through the lines of our list and them to a container which in our example will be “con”.

    iterator = new ListIterator(List);
    while(iterator.more())
    {
        con+=iterator.value();
        iterator.next();
    }
    info(conPeek(con,1));//510500
    info(conPeek(con,2));//002
    info(conPeek(con,3));//022
    info(conPeek(con,4));//007
    info(conPeek(con,5));//Audio

//Now we have a populated container and,  using the “conPeek” standard function we can retrieve the elements from the container by the index.
}

Wednesday, 25 May 2016

conversition of date to UTC DateTime

The DateTimeUtil class can be used to convert or modify utcdatetime and Timezone values.


static void Job39(Args _args)
{
    utcDateTime         rangeStart, rangeEnd;

    date               startDate, endDate;

    TimeOfDay           startTime, endTime;

    startDate   = 2\4\2011;       // day\month\year

    endDate     = 6\12\2012;       // day\month\year
    
    startTime   = str2time("1:22:59 am");     //GMT, NOT user time zone – this is how stored in the table

    endTime     = str2time("09:00:00 am");   
    
    rangeStart = DateTimeUtil::newDateTime(startDate,startTime,DateTimeUtil::getUserPreferredTimeZone());// apply user time zone to range
    
    rangeEnd   = DateTimeUtil::newDateTime(endDate,endTime,DateTimeUtil::getUserPreferredTimeZone());   
    
    info(strFmt("%1,%2",datetime2str(rangeStart),datetime2str(rangeEnd)));
}


The output will be































Thursday, 19 May 2016

Create and Post General Journal through x++

static void GeneralJournalCreateandPost(Args _args)
{
    LedgerJournalTable          jourTable;
    LedgerJournalTrans          jourTrans;
    LedgerJournalTableData      jourTableData;
    LedgerJournalTransData      jourTransData;
    LedgerJournalStatic         jourStatic;
    DimensionDynamicAccount     ledgerDim;
    DimensionDynamicAccount     offsetLedgerDim;
    LedgerJournalCheckPost      jourPost;
    ttsBegin;
    ledgerDim = DimensionStorage::getDynamicAccount('000001',LedgerJournalACType::Vend);
    offsetLedgerDim = DimensionStorage::getDynamicAccount('USMF OPER',LedgerJournalACType::Bank);
    jourTableData = JournalTableData::newTable(jourTable);
    jourTable.JournalNum = jourTableData.nextJournalId();
    jourTable.JournalType = LedgerJournalType::Payment;
    jourTable.JournalName = 'IntJrn';
    jourTableData.initFromJournalName(
    LedgerJournalName::find(jourTable.JournalName));
    jourStatic = jourTableData.journalStatic();
    jourTransData = jourStatic.newJournalTransData(
    jourTrans,
    jourTableData);
    jourTransData.initFromJournalTable();
    jourTrans.CurrencyCode = 'USD';
    jourTrans.initValue();
    jourTrans.TransDate = systemDateGet();
    jourTrans.AccountType = LedgerJournalACType::Vend;
    jourTrans.LedgerDimension = ledgerDim;
    jourTrans.Txt = 'Vendor payment journal demo';
    jourTrans.OffsetAccountType = LedgerJournalACType::Bank;
    jourTrans.OffsetLedgerDimension = offsetLedgerDim;
    jourTrans.AmountCurDebit = 1000;
    jourTransData.create();
    jourTable.insert();
    ttsCommit;
   //Post
    jourPost = LedgerJournalCheckPost::newLedgerJournalTable(jourTable,NoYes::Yes);
    jourPost.run();
    info(strFmt("Journal '%1' has been created", jourTable.JournalNum));

}

Monday, 9 May 2016

passing the number of records that are selected in the grid to another form control:

First of all  create  a new form "GridLinesCounter".
After that add the intedit control in that  form Design and change the property auto declaration to yes.
Create a new menu item and add this form to that menu item.

Go to the sales table list page form and add the created menu item in the ActionPane.
Then  override the clicked method in that menu item botton.

void clicked()
{
     FormDataSource fds;
    Common common;
    int counter;
    Args                args;
    FormRun             formrun;
    ;
    //super();
                     args = new Args();

    fdS = SalesTable_ds;
    for (common = fdS.getFirst(true) ? fdS.getFirst(true) : SalesTable_ds.cursor(); common; common = fdS.getNext())
    {
        counter++;
    }
    args.parm(int2str(counter));
    args.name(formstr(gridlinescounter));
    formRun = classFactory.formRunClass(Args);
    formRun.init();
    formrun.run();
    formrun.wait();
    info(int2str(counter));
}


Open the "GridLinesCounter" form and add init method.

public void init()
{
    str counter;
    counter = element.args().parm();
    super();
   intedit.value(str2int(Counter));
}
Now,go to salestablelistpage form and select some records .
Then click newmenuitem button (gridlinescounter) then a form will be opened showing the no of records selected.

-----------------------------------------------------------------
Another code to get the same result .
void clicked()
{
    int                 recordsCount;
    HcmPosition         hcmPosition1;
    container           con;
    Args                args;
    str                 multiSelectString;
    FormRun             formrun;
    args = new Args();
    // gets the total records selected
    recordsCount = HcmPosition_ds.recordsMarked().lastIndex();

    hcmPosition1= HcmPosition_ds.getFirst(1);

    while(hcmPosition1)
    {
        // storing recid of selected record in container
        con = conIns(con,1, hcmPosition1.RecId);
        // converting container to string with comma separated
        multiSelectString = con2Str(con,',');

        hcmPosition1= HcmPosition_ds.getNext(); // moves to next record
    }
    // passing string
    args.parm(multiSelectString);
    args.name(formstr(CH_RecrutmentForm));
    formRun = classFactory.formRunClass(Args);
    formRun.init();
    formrun.run();
    formrun.wait();
}

public void init()
{
    container con;
    int i;
    str multipleRecords;
    int record;
    super();
    // getting string value from caller
    multipleRecords = element.args().parm();
    // string to container
    con = str2con(multipleRecords,",");

     for(i = 1;i<= conLen(con) ;i++)
    {
           intedit.value(i);    
    }  
}