Monday, March 17, 2014

X++ code to copying a record in AX 2012


static void MainAccountCopy(Args _args)
{
MainAccount mainAccount1;
MainAccount mainAccount2;
mainAccount1 = MainAccount::findByMainAccountId('211100');
ttsBegin;
mainAccount2.data(mainAccount1);
mainAccount2.MainAccountId = '211101';
if (!mainAccount2.validateWrite())
{
throw Exception::Error;
}
mainAccount2.insert();
ttsCommit;
}

Deploying SSRS reports in AX 2012

The following syntax willbe used to deploy the SSRS report in AX 2012

To deploy a specific report, enter the name of the report. For example, to deploy the CustTransList report, enter the following command:
Windows PowerShell

Publish-AXReport –Id SSRSConfigID -ReportName CustTransList

To deploy two or more specific reports, enter the names of the reports. For example, to deploy the CustTransList and CustTransOpenPerDate reports, enter the following command:
Windows PowerShell

Publish-AXReport –Id SSRSConfigID -ReportName CustTransList, CustTransOpenPerDate

To deploy all reports, enter the following command:
Windows PowerShell

Publish-AXReport –Id SSRSConfigID –ReportName *

Saturday, March 8, 2014

X++ code to find the Hierarchy Positions in AX 2012

This code will be used to find out the Reporting Hierarchy positions In AX 2012


class RecursionPosition
{
    str UserId;
}

void recursiveCallProj(HcmPositionRecid    _position = 0)
{
    HcmPositionHierarchy HcmPositionHierarchy;
    HierarchyPosition   hierarchyPosition;
    HcmPosition         posi;
    HcmWorker           work;
    int64               recid;
    ;
    while select HcmPositionHierarchy
    where HcmPositionHierarchy.ParentPosition == _position
    {
       
        select Posi where posi.RecId == HcmPositionHierarchy.Position;
        recid = hcmposition::getWorker(posi.RecId);
        select work where work.RecId == recid;
        hierarchyPosition.Position = work.RecId;
        hierarchyPosition.userid = curuserid();
        hierarchyPosition.insert();

        this.recursiveCallProj(HcmPositionHierarchy.Position);

    }
}

public static void postion(str userid)
{
    HcmPositionRecid        _position; //= 5637144597;
    HcmPositionHierarchy    HcmPositionHierarchy;
    RecursionPosition       RecursionPosition;
    HcmPosition             posi;
    int64                   recid;
    HcmWorker               work;
    HierarchyPosition   hierarchyPosition;//temp Table
   

    ;
   
    _position = HcmPositionWorkerAssignment::getActivePositionWorkerAssignment(HcmWorker::find(HcmWorker::userId2Worker(userid)).RecId).Position;
    //_position = HcmPositionWorkerAssignment::getActivePositionWorkerAssignment(HcmWorker::findByPersonnelNumber(personnelno).RecId).Position;
    RecursionPosition = new RecursionPosition();
    while select HcmPositionHierarchy
    where HcmPositionHierarchy.ParentPosition == _position
    {
       
        select Posi where posi.RecId == HcmPositionHierarchy.Position;
        recid = hcmposition::getWorker(posi.RecId);
        select work where work.RecId == recid;
        hierarchyPosition.Position = work.RecId;
        hierarchyPosition.userid = curUserId();
        hierarchyPosition.insert();


        RecursionPosition.recursiveCallProj(HcmPositionHierarchy.Position);

    }


 }

X++ code to create Project Invoice Proposal and Posting in AX 2012

static void ProjectInvoiceProposalCreateAndPost(Args _args)
{
    ProjInvoiceProjId       _ProjectContractId = "";    //Project Contract Id for which we want to create Invoice Proposal
    ProjProposalJour        projProposalJour;           //Table which will store journal records after creating Invoice Proposal
    ProjInvoiceChoose       m_oProjInvoiceChooseNormal; //Class for creating Invoice Proposal
    ProjFormLetter          projFormLetter;             //Class for Posting Invoice Proposal
    ProjTable               projTable;

    ttsBegin;


    projTable = projTable::find("10001");
    //Creation of Invoice Proposal
    m_oProjInvoiceChooseNormal = ProjInvoiceChoose::PSANew_InvoiceChoose(projTable.ProjInvoiceProjId);
    m_oProjInvoiceChooseNormal.run();

    while select forUpdate projProposalJour where projProposalJour.ProjInvoiceProjId == projTable.ProjInvoiceProjId
    {
        //For approving Invoice proposals
        projProposalJour.LineProperty = ProjLinePropertyCode::Approved;
        projProposalJour.update();
        //For Posting Invoice Proposals
        projFormLetter = ProjFormLetter::construct(DocumentStatus::ProjectInvoice);
        projFormLetter.createParmLine(projProposalJour);
        projFormLetter.run();
        //To get latest record
        projProposalJour = projProposalJour::find(projProposalJour.ProposalId);

        info(strFmt("Invoice ProposalId: %1 \t InvoiceId: %2",projProposalJour.ProposalId,projProposalJour.ProjInvoiceId));

    }

    ttsCommit;

}

Sunday, March 2, 2014

X++ code to create Production Route Card Journal in AX 2012

static void ProductionRouteCardJournalCreate(Args _args)
{
    ProdJournalTable                      prodJournalTable;
    ProdJournalRoute                     prodJournalRoute;
    ProdRoute                               prodRoute;
    ProdId                                     prodId = 'PRD_00004667';
    OprNum                                  oprNum = 10;
    RouteOprId                              routeOprId;
    ProdJournalCheckPostRoute     prodJournalCheckPostRoute;

    select prodRoute where prodRoute.ProdId == prodId;
                       && prodRoute.OprNum == oprNum;

    prodJournalTable.clear();
    prodJournalTable.initValue();
    prodJournalTable.JournalType        = prodjournaltype::RouteCard;
    prodJournalTable.ProdId             = prodId;
    prodJournalTable.JournalNameId      = ProdParametersDim::findDefault().RouteJournalNameId;
    prodJournalTable.Description        =                                                  ProdJournalName::find(prodJournalTable.JournalNameId).Description;
    prodJournalTable.VoucherSeqRecId    = ProdJournalName::find(prodJournalTable.JournalNameId).VoucherSeqRecId;
    prodJournalTable.VoucherDraw        = journalVoucherDraw::Post;
    prodJournalTable.NumOfLines         = 1;
    prodJournalTable.insert();

    //Route card entry
    prodJournalRoute.clear();
    prodJournalRoute.JournalId               = prodJournalTable.journalId;
    prodJournalRoute.ProdId                   = prodId;
    prodJournalRoute.initValue();
    prodJournalRoute.OprNum                = oprNum;
    prodJournalRoute.OprId                    = prodRoute.OprId;
    prodJournalRoute.JobType                = RouteJobType::Process;
    prodJournalRoute.CategoryHoursId   = prodRoute.SetUpCategoryId;
    prodJournalRoute.CategoryQtyId      = prodRoute.ProcessCategoryId;
    prodJournalRoute.DefaultDimension  = prodRoute.DefaultDimension;
    prodJournalRoute.WrkCtrId              = prodRoute.WrkCtrIdCost;
    prodJournalRoute.QtyGood              = 2;
    prodJournalRoute.Hours                   = 1;
    prodJournalRoute.insert();
    info(prodJournalTable.JournalId);
 
    ProdJournalCheckPostRoute = ProdJournalCheckPostRoute::newPostJournal(prodJournalRoute.journalId,true);
    ProdJournalCheckPostRoute.run();
}

X++ code to create Production Report as finished Journal in AX 2012

static void ProductionReportAsFinishedJournal(Args _args)
{
    Struct struct = new Struct();
    DimensionDefault    DimensionDefault;
    container  ledgerDimensions;
    DimensionDynamicAccount     offsetDimensions;
    Args    args;
    container ledgerDimension;
    InventDim   inventDim;
    ProdJournalRoute    prodJOurnalRoute;
    AxProdJournalTable  header = new axProdJournalTable();
    ProdJournalProd prodJournalProd;
    ProdRoute       prodRoute;
    ProdRouteJob    prodRouteJob;
    ProdBOM         prodBom;
    ProdTable       prodTable;
    InventTable     inventTable;

    header.parmprodId("PRD_00004667");
    header.parmJournalNameId("Finish");
    header.save();

    prodJournalProd.JournalId = header.prodJournalTable().JournalId;
    prodJournalProd.ProdId = "PRD_00004667";
    prodJournalProd.QtyGood = 2;
    prodJournalProd.QtyError = 1;
    prodJournalProd.ErrorCause = ProdErrorCause::Machine;
    prodJournalProd.TransDate = today();
    select prodTable where prodTable.ProdId == "PRD_00004667"
        join prodBom where prodbom.ProdId == prodTable.ProdId
        join inventTable where inventTable.ItemId == prodTable.ItemId;
    prodJournalProd.InventTransId = prodBom.InventTransId;
    prodJournalProd.ItemId = prodTable.ItemId;
    prodJournalProd.InventDimId = prodTable.InventDimId;
    prodJournalProd.PmfProductType = inventTable.PmfProductType;
    prodJournalProd.insert();


}

X++ code to create Project item Journal in AX 2012

static void ProjectItemJournalCreate(Args _args)
{
    InventJournalTableData    JournalTableData;
    InventJournalTransData    journalTransData;
    InventJournalTable        journalTable;
    InventJournalTrans        journalTrans;
    InventTable               InventTable;
    CommaTextIO                 csvFile;
    container                   readCon;
    counter                     icount,inserted;
    Dialog                      dialog;
    DialogField                 dfFileName;
    FileName                    fileName;
    ProjTable                   projTable;
    inventDim                   inventDim;

    inserted =0;
    #File


    dialog = new Dialog("Pick the file");
    dfFileName = dialog.addField(extendedTypeStr("FilenameOpen"));
    dialog.filenameLookupFilter(["All files", #AllFiles]);

    if (dialog.run())
    {
        csvFile = new CommaTextIo(dfFileName.value(), 'r');
        csvFile.inFieldDelimiter(',');
        readCon = csvFile.read();
        ttsBegin;

        journalTableData = JournalTableData::newTable(journalTable);
        journalTransData = journalTableData.journalStatic().newJournalTransData(journalTrans,journalTableData);
        // Init JournalTable
        journalTable.clear();
        journalTable.JournalId = journalTableData.nextJournalId();
        journalTable.JournalType = InventJournalType::project;
        journalTable.JournalNameId = "ProjItem";


        while(csvFile.status() == IO_Status::OK)
        {
            readCon = csvFile.read();

            if(readCon)
            {
                icount++;

                // Init JournalTrans
                journalTableData.initFromJournalName(journalTableData.journalStatic().findJournalName(journalTable.JournalNameId));

                journalTrans.clear();
                journalTransData.initFromJournalTable();
                projTable                      = ProjTable::find(conPeek(readCon,1));
                journalTrans.TransDate = systemDateGet();
                journalTrans.ProjId = conPeek(readCon,1);
                inventDim.InventSiteId = "2";
                inventDim.InventLocationId = "21";
                inventDim = InventDim::findOrCreate(inventDim);
                journalTrans.InventDimId = inventDim.inventDimId;
                journalTrans.Qty = str2num(conPeek(readCon,2));
                journalTrans.costPrice = str2num(conPeek(readCon,3));
                journalTrans.ItemId = conPeek(readCon,4);
                journalTrans.ProjUnitID = conPeek(readCon,5);
                journalTrans.ProjLinePropertyId = "charge";//projTable.psaRetainageBillingDesc();
                journalTrans.ProjCategoryId = "car audio";
                journalTrans.ProjSalesCurrencyId = "usd";//ProjInvoiceTable::find(projTable.ProjInvoiceProjId).CurrencyId;
                journalTrans.Worker = HcmWorker::userId2Worker(curUserId());
                journalTrans.ProjSalesPrice = 10;


                //journalTrans.Voucher = NumberSeq::newGetVoucherFromCode(JournalTable.getNumberSequenceTable().NumberSequence).voucher();
                journalTransData.create();



            }

        }
        journalTable.insert();
        ttsCommit;
    }


}

X++ code to create Project Hours Journal in AX 2012

static void ProjectHoursJournalCreate(Args _args)
{
    ProjJournalTableData    JournalTableData;
    ProjJournalTransData    journalTransData;
    ProjJournalTable        journalTable;
    ProjJournalTrans        journalTrans;
    ProjTable               projTable;
    CommaTextIO             csvFile;
    container               readCon;
    counter                 icount,inserted;
    Dialog                  dialog;
    DialogField             dfFileName;
    FileName                fileName;

    inserted =0;
    #File


    dialog = new Dialog("Pick the file");
    dfFileName = dialog.addField(extendedTypeStr("FilenameOpen"));
    dialog.filenameLookupFilter(["All files", #AllFiles]);

    if (dialog.run())
    {
        csvFile = new CommaTextIo(dfFileName.value(), 'r');
        csvFile.inFieldDelimiter(',');
        readCon = csvFile.read();
        ttsBegin;

        journalTableData = JournalTableData::newTable(journalTable);
        journalTransData = journalTableData.journalStatic().newJournalTransData(journalTrans,journalTableData);
        // Init JournalTable
        journalTable.clear();
        journalTable.JournalId = journalTableData.nextJournalId();
        journalTable.JournalType = ProjJournalType::Hour;
        journalTable.JournalNameId = "hours";


        while(csvFile.status() == IO_Status::OK)
        {
            readCon = csvFile.read();

            if(readCon)
            {
                icount++;

                // Init JournalTrans
                journalTableData.initFromJournalName(journalTableData.journalStatic().findJournalName(journalTable.JournalNameId));

                journalTrans.clear();
                journalTransData.initFromJournalTable();
                projTable                      = ProjTable::find(conPeek(readCon,1));
                journalTrans.TransDate = systemDateGet();
                journalTrans.ProjTransDate = systemDateGet();
                journalTrans.ProjId = conPeek(readCon,1);
                journalTrans.Qty = str2num(conPeek(readCon,2));
                journalTrans.SalesPrice = str2num(conPeek(readCon,3));
                journalTrans.CostPrice =  1;//str2num(conPeek(readCon,4));
                journalTrans.Txt = projTable.psaRetainageBillingDesc();
                journalTrans.CurrencyId = ProjInvoiceTable::find(projTable.ProjInvoiceProjId).CurrencyId;
                journalTrans.Worker = HcmWorker::userId2Worker(curUserId());
                journalTrans.CategoryId = "design";
                journalTrans.LinePropertyId = "charge";
                journalTrans.Voucher = NumberSeq::newGetVoucherFromCode(JournalTable.getNumberSequenceTable().NumberSequence).voucher();
                journalTransData.create();



            }

        }
        journalTable.insert();
        ttsCommit;
    }


}


X++ code to create Project Fee Journal in AX 2012

static void ProjectFeeJournalCreate(Args _args)
{
    ProjJournalTableData    JournalTableData;
    ProjJournalTransData    journalTransData;
    ProjJournalTable        journalTable;
    ProjJournalTrans        journalTrans;
    ProjTable               projTable;
    CommaTextIO                 csvFile;
    container                   readCon;
    counter                     icount,inserted;
    Dialog                      dialog;
    DialogField                 dfFileName;
    FileName                    fileName;

    inserted =0;
    #File


    dialog = new Dialog("Pick the file");
    dfFileName = dialog.addField(extendedTypeStr("FilenameOpen"));
    dialog.filenameLookupFilter(["All files", #AllFiles]);

    if (dialog.run())
    {
        csvFile = new CommaTextIo(dfFileName.value(), 'r');
        csvFile.inFieldDelimiter(',');
        readCon = csvFile.read();
        ttsBegin;

        journalTableData = JournalTableData::newTable(journalTable);
        journalTransData =    journalTableData.journalStatic().newJournalTransData(journalTrans,journalTableData);
        // Init JournalTable
        journalTable.clear();
        journalTable.JournalId = journalTableData.nextJournalId();
        journalTable.JournalType = ProjJournalType::Hour;
        journalTable.JournalNameId = "fee";


        while(csvFile.status() == IO_Status::OK)
        {
            readCon = csvFile.read();

            if(readCon)
            {
                icount++;

                // Init JournalTrans
                journalTableData.initFromJournalName(journalTableData.journalStatic().findJournalName(journalTable.JournalNameId));

                journalTrans.clear();
                journalTransData.initFromJournalTable();
                projTable                      = ProjTable::find(conPeek(readCon,1));
                journalTrans.TransDate = systemDateGet();
                journalTrans.ProjTransDate = systemDateGet();
                journalTrans.ProjId = conPeek(readCon,1);
                journalTrans.Qty = str2num(conPeek(readCon,2));
                journalTrans.SalesPrice = str2num(conPeek(readCon,3));
                journalTrans.Txt = projTable.psaRetainageBillingDesc();
                journalTrans.CurrencyId = ProjInvoiceTable::find(projTable.ProjInvoiceProjId).CurrencyId;
                journalTrans.Worker = HcmWorker::userId2Worker(curUserId());
                journalTrans.CategoryId = "consult";
                journalTrans.LinePropertyId = "charge";
                journalTrans.Voucher = NumberSeq::newGetVoucherFromCode(JournalTable.getNumberSequenceTable().NumberSequence).voucher();
                journalTransData.create();



            }

        }
        journalTable.insert();
        ttsCommit;
    }


}

X++ code to create Project Expense Journal in AX 2012

static void ProjectExpenseJournalCreate(Args _args)
{
    AxLedgerJournalTable   header = new AxLedgerJournalTable();
    AxLedgerJournalTrans   trans = new AxLedgerJournalTrans();
    LedgerJournalTrans_Project  ledgerJournalTrans_Project;
    LedgerJournalTable      jourTable;
    LedgerJournalTrans      jourTrans;
   
    Dialog                      dialog;
    DialogField                 JournalName,dffilename;
    FileName                    fileName;
    Struct struct = new Struct();
    DimensionDefault    DimensionDefault;
    container  ledgerDimensions,offsetDimensioncon;
    DimensionDynamicAccount     offsetDimensions;
    Args    args;
    container ledgerDimension,dimm;
    InventDim   inventDim;
    ProdBOM     prodBom;
    HcmWorker   hcmworker;
    str 64       dimension,offsetdim,dept,cc;
    DimensionAttributeValueCombination  ledgerDimensionvalueCombination;
    ProjTable   projTable;
    str journalnameid,ledgeraccount;
    //DialogRunbase       dialog = super();
    NumberSequenceTable                 numberSequenceTable;
    Voucher         voucher;
    int inserted =0,icount;
    CommaTextIO             csvFile;
    container               readCon;
    str                     transdate,qty,costprice,ProjTransDate,salesprice,Txt,currencyid,worker,CategoryId,linepropertyid;
    str                     ActivityNumber,SalesCurrencyId;
    str 60 ProjId;
    #File


    dialog = new Dialog("Pick the file");
    dfFileName = dialog.addField(extendedTypeStr("FilenameOpen"));
    dialog.filenameLookupFilter(["All files", #AllFiles]);

    if (dialog.run())
    {
        csvFile = new CommaTextIo(dfFileName.value(), 'r');
        csvFile.inFieldDelimiter(',');
        readCon = csvFile.read();
        ttsBegin;

         header.parmJournalName("PrjJrn");
         header.parmJournalType(ledgerJournalType::Cost);
         header.save();

        while(csvFile.status() == IO_Status::OK)
        {
            readCon = csvFile.read();

            if(readCon)
            {
                icount++;
                projid = conPeek(readCon,1);
                transdate = conPeek(readCon,2);
                qty = conPeek(readCon,3);
                costprice = conPeek(readCon,4);
                salesprice = conPeek(readCon,5);
                Txt = conPeek(readCon,6);
                currencyid = conPeek(readCon,7);
                worker = conPeek(readCon,8);
                CategoryId = conPeek(readCon,9);
                linepropertyid = conPeek(readCon,10);
                SalesCurrencyId = conPeek(readCon,11);
                ledgeraccount = conPeek(readCon,12);
               
                struct = new Struct();
                struct.add('Department',"00000024");
                struct.add('costcenter', "OU_3566");

                ledgerDimension = conNull();
                ledgerDimension += struct.fields();
                ledgerDimension += struct.fieldName(1);
                ledgerDimension += struct.valueIndex(1);
                ledgerDimension += struct.fieldName(2);
                ledgerDimension += struct.valueIndex(2);
                DimensionDefault = AxdDimensionUtil::getDimensionAttributeValueSetId(ledgerDimension);
                jourTable = LedgerJournalTable::find(header.LedgerJournalTable().JournalNum);
               
                jourTrans.JournalNum = header.LedgerJournalTable().JournalNum;
                jourTrans.DefaultDimension = DimensionDefault;
                jourTrans.AccountType = LedgerJournalACTypE::Project;
               
               
                numberSequenceTable = NumberSequenceTable::find(LedgerJournalName::find(header.LedgerJournalTable().JournalName).NumberSequenceTable);

                voucher = NumberSeq::newGetVoucherFromCode(numberSequenceTable.NumberSequence).voucher();

                select firstonly projTable join RecId from ledgerDimensionvalueCombination where ledgerDimensionvalueCombination.DisplayValue == projTable.ProjId && projTable.ProjId == projid;//ledgerDimensionvalueCombination
                jourTrans.Voucher = voucher;
                jourTrans.CurrencyCode = currencyid;
                jourTrans.Qty = str2num(qty);
                jourTrans.TransDate = str2Date(TransDate,213);
                offsetdim = strFmt("%1,%1",ledgeraccount);
                offsetDimensioncon = str2con(offsetdim);
                jourTrans.ledgerDimension  =ledgerDimensionvalueCombination.recid;
                jourTrans.OffsetAccountType = LedgerJournalACType::Ledger;
                jourTrans.ExchRate = 100;
                jourTrans.insert();
               
               
                ledgerJournalTrans_Project.ActivityNumber = ActivityNumber;
                ledgerJournalTrans_Project.CategoryId = CategoryId;
                ledgerJournalTrans_Project.Qty = str2num(qty);
                ledgerJournalTrans_Project.CostPrice = str2num(CostPrice);
               
                ledgerJournalTrans_Project.SalesPrice = str2num(SalesPrice);
                ledgerJournalTrans_Project.SalesCurrencyId = SalesCurrencyId;
                ledgerJournalTrans_Project.LinePropertyId = LinePropertyId;
                ledgerJournalTrans_Project.ProjId = ProjId;
                ledgerJournalTrans_Project.RefRecId = jourtrans.RecId;
                hcmworker = hcmworker::findByPersonnelNumber(worker);
                ledgerJournalTrans_Project.Worker = hcmworker.RecId;
                ledgerJournalTrans_Project.insert();
                ledgerJournalTrans_Project.clear();
                jourtrans.clear();
               
               

            }

        }
       
        ttsCommit;
    }


}


X++ code to create Project Begining Balance Journal in AX 2012

static void ProjectBegBalanceJournalCreate(Args _args)
{
    AxProjJournalTable                  header = new AxProjJournalTable();

    LedgerJournalTrans_Project          ledgerJournalTrans_Project;
    ProjBegBalJournalTrans_CostSales    projBegBalJournalTrans_CostSales;
    ProjBegBalJournalTrans_Fee          projBegBalJournalTrans_Fee;
    ProjBegBalJournalTrans_OnAcc        projBegBalJournalTrans_OnAcc;
    projTable                           projTable;
    ProjFundingSource                   projfundingSource;
    numberSequenceTable                 numberSequenceTable;
    Voucher voucher;



    Dialog                              dialog;
    DialogField                         JournalName;
    DialogField                         dfFileName;
    FileName                            fileName;
    Struct                              struct = new Struct();
    DimensionDefault                    DimensionDefault;
    container                           ledgerDimensions,offsetDimensioncon;
    DimensionDynamicAccount             offsetDimensions;
    Args                                args;
    container                           ledgerDimension,dimm;
    InventDim                           inventDim;
    ProdBOM                             prodBom;
    HcmWorker                           hcmworker;
    str 64                              dimension,offsetdim,dept,cc,projId;
    DimensionAttributeValueCombination  ledgerDimensionvalueCombination;
    ProjLedgerStatus                    ProjLedgerStatus;
    BegBalProjTransTypeCost             BegBalProjTransTypeCost;
    //ProjTable   projTable;
    str journalnameid,ProjTransType,ProjCategoryId,ActivityNumber,itemid,worker,CostAmount,CostPrice,Quantity,SalesPrice,ProjSalesCurrencyId;
    str projname,ProjSalesAmount,TransDate,ProjTransDate,LinePropertyId,CategoryId,ProjLedgerCostStatus,ProjTotalRevenue,CurrencyId,Txt;
    //DialogRunbase       dialog = super();
    CommaTextIO                 csvFile;
    container                   readCon;
    counter                     icount,inserted;
   

    inserted =0;
    #File


    dialog = new Dialog("Pick the file");
    dfFileName = dialog.addField(extendedTypeStr("FilenameOpen"));
    dialog.filenameLookupFilter(["All files", #AllFiles]);

    if (dialog.run())
    {
        csvFile = new CommaTextIo(dfFileName.value(), 'r');
        csvFile.inFieldDelimiter(',');
        readCon = csvFile.read();
        ttsBegin;
        header.parmJournalNameid("BegBal");
        //header.parmJournalType(prodJournalType::Cost);
        header.save();
        //progbeg
        numberSequenceTable = NumberSequenceTable::find(projJournalName::find(header.projJournalTable().JournalNameId).VoucherNumberSequenceTable);
        voucher = NumberSeq::newGetVoucherFromCode(numberSequenceTable.NumberSequence).voucher();


        while(csvFile.status() == IO_Status::OK)
        {
            readCon = csvFile.read();

            if(readCon)
            {
                icount++;
                projId = conPeek(readCon,1);
                ProjTransType = conPeek(readCon,2);
                ProjCategoryId = conPeek(readCon,3);
                ActivityNumber = conPeek(readCon,4);
                ItemId         = conPeek(readCon,5);
                Worker         = conPeek(readCon,6);
                CostAmount     = conPeek(readCon,7);
                CostPrice      = conPeek(readCon,8);
                Quantity       = conPeek(readCon,9);
                SalesPrice     = conPeek(readCon,10);
                ProjSalesCurrencyId = conPeek(readCon,11);
                ProjSalesAmount = conPeek(readCon,12);
                ProjLedgerCostStatus = conPeek(readCon,13);
                TransDate = conPeek(readCon,14);
                ProjTransDate = conPeek(readCon,15);
                LinePropertyId = conPeek(readCon,16);
                CategoryId = conPeek(readCon,17);
                ProjTotalRevenue = conPeek(readCon,18);
                //CategoryId = conPeek(readCon,19);
                CurrencyId = conPeek(readCon,19);
                Txt = conPeek(readCon,20);
               
                struct = new Struct();
                struct.add('Department',"00000024");
                struct.add('costcenter', "OU_3566");

                ledgerDimension = conNull();
                ledgerDimension += struct.fields();
                ledgerDimension += struct.fieldName(1);
                ledgerDimension += struct.valueIndex(1);
                ledgerDimension += struct.fieldName(2);
                ledgerDimension += struct.valueIndex(2);

                DimensionDefault = AxdDimensionUtil::getDimensionAttributeValueSetId(ledgerDimension);
                projBegBalJournalTrans_CostSales.JournalId = header.projJournalTable().Journalid;

                projBegBalJournalTrans_CostSales.ProjId = projId;
                projBegBalJournalTrans_CostSales.ProjTransType = str2enum(BegBalProjTransTypeCost,ProjTransType);
                projBegBalJournalTrans_CostSales.ProjCategoryId = ProjCategoryId;
                projBegBalJournalTrans_CostSales.ActivityNumber = ActivityNumber;
                projBegBalJournalTrans_CostSales.ItemId = itemid;
                hcmworker = hcmworker::findByPersonnelNumber(Worker);
                projBegBalJournalTrans_CostSales.Worker = hcmworker.RecId;
                projBegBalJournalTrans_CostSales.CostAmount = any2real(CostAmount);
                projBegBalJournalTrans_CostSales.CostPrice = any2real(CostPrice);
                projBegBalJournalTrans_CostSales.Quantity = any2real(Quantity);
                projBegBalJournalTrans_CostSales.SalesPrice = any2real(SalesPrice);
                projBegBalJournalTrans_CostSales.ProjSalesCurrencyId = ProjSalesCurrencyId;
                projBegBalJournalTrans_CostSales.ProjSalesAmount = any2real(ProjSalesAmount);
                projBegBalJournalTrans_CostSales.ProjLedgerCostStatus = str2enum(ProjLedgerStatus,ProjLedgerCostStatus);
                projBegBalJournalTrans_CostSales.Voucher = voucher;
                projBegBalJournalTrans_CostSales.TransDate = str2Date(TransDate,213);
                projBegBalJournalTrans_CostSales.DefaultDimension = DimensionDefault;
                projBegBalJournalTrans_CostSales.ProjTransDate = str2Date(ProjTransDate,213);
                projBegBalJournalTrans_CostSales.LinePropertyId = LinePropertyId;
                projTable = projTable::find(projId);
               
                select projfundingSource where projfundingSource.ContractId == projTable.ProjInvoiceProjId;

                projBegBalJournalTrans_Fee.JournalId = header.projJournalTable().Journalid;
                projBegBalJournalTrans_Fee.DefaultDimension = DimensionDefault;
                projBegBalJournalTrans_Fee.ProjId = projId;
                projBegBalJournalTrans_Fee.ProjTransDate = str2Date(ProjTransDate,213);
                projBegBalJournalTrans_Fee.CategoryId = CategoryId;
                projBegBalJournalTrans_Fee.Worker = hcmworker.RecId;
                projBegBalJournalTrans_Fee.ProjSalesAmount = any2real(ProjSalesAmount);
                projBegBalJournalTrans_Fee.ProjSalesCurrencyId = ProjSalesCurrencyId;
                projBegBalJournalTrans_Fee.ProjTotalRevenue = any2real(ProjTotalRevenue);
                projBegBalJournalTrans_Fee.Voucher = voucher;
                projBegBalJournalTrans_Fee.TransDate = str2Date(TransDate,213);
                projBegBalJournalTrans_Fee.LinePropertyId = LinePropertyId;
                ProjName = projTable::find(projId).Name;

                projBegBalJournalTrans_Fee.ProjFundingSource = projfundingSource.RecId;//projTable::find("10001").RecId;


                ProjBegBalJournalTrans_OnAcc.JournalId = header.projJournalTable().Journalid;
                ProjBegBalJournalTrans_OnAcc.ProjId = projId;
                ProjBegBalJournalTrans_OnAcc.ProjTransDate = str2Date(ProjTransDate,213);
                ProjBegBalJournalTrans_OnAcc.SalesPrice = str2num(SalesPrice);
                ProjBegBalJournalTrans_OnAcc.CurrencyId = CurrencyId;
                ProjBegBalJournalTrans_OnAcc.ProjSalesAmount = str2num(ProjSalesAmount);
                ProjBegBalJournalTrans_OnAcc.DefaultDimension = DimensionDefault;
                ProjBegBalJournalTrans_OnAcc.Voucher = voucher;
                ProjBegBalJournalTrans_OnAcc.Txt = Txt;
                ProjBegBalJournalTrans_OnAcc.ProjFundingSource = projfundingSource.RecId;
                projBegBalJournalTrans_CostSales.insert();
                projBegBalJournalTrans_Fee.insert();
                ProjBegBalJournalTrans_OnAcc.insert();




            }

        }
        //journalTable.insert();
        ttsCommit;
    }
    args = new Args();
    args.record(ProjJournalTable::find(header.ProjJournalTable().Journalid ));
    new MenuFunction(MenuItemDisplayStr(ProjjournalTable),MenuItemType::Display).run(args);

}

X++ code to create production Picking List Journal in AX 2012

static void ProductionPickingListJournal(Args _args)
{

    AxProdJournalTable header = new AxProdJournalTable();
    AxProdJournalBOM   trans = new AxProdJournalBOM();
    Struct struct = new Struct();
    DimensionDefault    DimensionDefault;
    container  ledgerDimensions;
    DimensionDynamicAccount     offsetDimensions;
    Args    args;
    container ledgerDimension;
    InventDim   inventDim;
    ProdBOM     prodBom;

    //Journal
    header.parmJournalNameId("Pick");
    header.save();
    while select prodBom where prodBom.ProdId == "PRD_00005257"
    {

        trans.parmProdId("PRD_00005257");//prodjournaltype::Picklist);
        //select prodBom where prodBom

        struct = new Struct();
        struct.add('Department',"00000024");
        struct.add('costcenter', "OU_3566");

        ledgerDimension = conNull();
        ledgerDimension += struct.fields();
        ledgerDimension += struct.fieldName(1);
        ledgerDimension += struct.valueIndex(1);
        ledgerDimension += struct.fieldName(2);
        ledgerDimension += struct.valueIndex(2);

        DimensionDefault = AxdDimensionUtil::getDimensionAttributeValueSetId(ledgerDimension);
        trans.parmJournalId(header.prodJournalTable().JournalId);
        trans.parmDefaultDimension(DimensionDefault);
        trans.parmItemId(prodBom.ItemId);
        trans.parmBOMUnitId("ea");
        inventDim.InventSiteId = "2";
        inventDim.InventLocationId = "21";
        inventDim = InventDim::findOrCreate(inventDim);
        trans.parmInventDimId(inventDim.inventDimId);
        trans.parmInventTransId(prodBom.InventTransId);
        trans.parmTransDate(today());
        trans.currentRecord().insert();
        trans.save();
        trans.currentRecord().clear();
    }

    info(strFmt("Journal %1 created",  header.prodJournalTable().JournalId));

    args = new Args();
    args.record(prodJournalTable::find(header.prodJournalTable().Journalid ));

    new MenuFunction(MenuItemDisplayStr(prodJournalTable),MenuItemType::Display).run(args);
}

X++ code to create Production Job Card Journal in AX 2012

static void ProductionJobCardJournal(Args _args)
{
    Struct struct = new Struct();
    DimensionDefault    DimensionDefault;
    container  ledgerDimensions;
    DimensionDynamicAccount     offsetDimensions;
    Args    args;
    container ledgerDimension;
    InventDim   inventDim;
    ProdJournalRoute    prodJOurnalRoute;
    AxProdJournalTable  header = new axProdJournalTable();
    AxProdJournalRoute  trans = new axProdJournalRoute();
    ProdRoute       prodRoute;
    ProdRouteJob    prodRouteJob;


    header.parmJournalNameId("job");
    header.save();



     while select ProdRouteJob where ProdRouteJob.ProdId == "PRD_00004667"
    {

    struct = new Struct();
    struct.add('Department',"00000024");
    struct.add('costcenter', "OU_3566");

    ledgerDimension = conNull();
    ledgerDimension += struct.fields();
    ledgerDimension += struct.fieldName(1);
    ledgerDimension += struct.valueIndex(1);
    ledgerDimension += struct.fieldName(2);
    ledgerDimension += struct.valueIndex(2);

    DimensionDefault = AxdDimensionUtil::getDimensionAttributeValueSetId(ledgerDimension);
    trans.parmJournalId(header.prodJournalTable().JournalId);
    trans.parmProdId("PRD_00004667");
    trans.parmJobId(prodRouteJob.JobId);
    trans.parmDefaultDimension(DimensionDefault);
    //inventDim.InventSiteId = "2";
    //inventDim.InventLocationId = "21";
    //inventDim = InventDim::findOrCreate(inventDim);
    //trans.parm(inventDim.inventDimId);


    trans.parmVoucher("test");
    trans.parmCategoryHoursId("sdssetup");
    trans.parmCategoryQtyId("sdsqty");
    trans.parmOprNum(ProdRouteJob.OprNum);
    trans.parmHourPrice(10);
    trans.parmHours(10);
    trans.parmQtyGood(20);
    //trans.parmQtyError(1);
    //trans.parmWorker(000457);
    trans.parmTransDate(today());
    trans.parmJobType(RouteJobType::Process);

    Trans.currentRecord().insert();
    trans.save();
    Trans.currentRecord().clear();
    }


    info(strFmt("Journal %1 created",  header.prodJournalTable().JournalId));

   
}