Sunday, March 12, 2017

Computed column date to get max day on month for AX 2012 R3

public static server str getMaxDateTransDate()
{
    #define.ViewName(InventValueTransViewSumLoc)
    #define.DataSourceName("InventValueTransView")
    #define.FieldDisplayValue("RecID")

    str sWhereClause1;
    DictView dictView;
    SysDictTable dicTable;

    // Construct a DictView object for the present view.
    dictView = new DictView(tableNum(#ViewName));
    //Construct a table object for the account table
    dicTable = new SysDictTable(tableNum(InventValueTransView));

    // Create the where clause
    sWhereClause1 = DictView.computedColumnString
    (
        'InventValueTransView',
        fieldStr(InventValueTransView, RecId),
        FieldNameGenerationMode::WhereClause
    );

    return strFmt
    (
        //'select year(TransDate) from %1 where %2 = %3',
        'SELECT DATEADD(d,-1,DATEADD(mm, DATEDIFF(m,0,TRANSDATE)+1,0))',
        dicTable.name(DbBackend::Sql),
        dicTable.fieldName(fieldNum(InventValueTransView, RecId), DbBackend::Sql),
        sWhereClause1
    );
}

Thursday, February 23, 2017

Rebuild Management Report 2012 Datamart for AX 2012 R3

DELETE
=======
1. Backup datamart database. i.e.: ManagementReporterDM
2. Run MR Config Console
3. Select database connection on ERP Integration
4. Disable Integration
5. Remove
6. Stop both MR Services
7. Delete Database : ManagementReporterDM

RECREATE
=========
8. Run both MR Services
9. Configure datamart

Thursday, October 20, 2016

Run report SSRS SrsReportRunController and passing parameter from form in AX 2012 R3


void clicked()
{
    Query query;
    LedgerJournalTable          dataTable;
    SrsReportRunController      controller;
    ;

    dataTable = LedgerJournalTable;

    //info(strFmt('%1',dataTable.JournalNum));

    controller = new SrsReportRunController();
      controller.parmReportName('MyCustomReport.PrecisionDesign1');

    query = controller.parmReportContract().parmQueryContracts().lookup('
MyCustomReport_DynamicParameter');
    //Set parameter value;
    query.dataSourceNo(1).clearRanges();  
    query.dataSourceNo(1).addRange(fieldNum(
MyCustomReportView, JournalNum)).Value(dataTable.JournalNum);

    controller.runReport();

}

 


Reference:
http://xhellot.blogspot.co.id/

Thursday, October 13, 2016

Reverse Settlement Accout Receivable on AX 2012 R3

static void Update_Reverse_Settlement(Args _args)
{
    CustTrans           invCustTrans,findCustTrans;
    SpecTransManager    specTransManager;
    DocumentNum         invdocnumx,paydocnumx;
    CustSettlement      custSettlement;
    AccountNum          accnumx;
    date                paydatex;
    CustTable           custTable;
    ;

    invdocnumx  = 'PY16100100561';
    accnumx     = '631331';

    select invCustTrans
    order by TransDate asc
    where   invCustTrans.DocumentNum == invdocnumx
        &&  invCustTrans.AmountMST > 0
        &&  invCustTrans.AccountNum == accnumx;
   
    while select findCustTrans where findCustTrans.RecId == invCustTrans.RecId
    {       
        custTable = custTable::find(findCustTrans.AccountNum);

        if(findCustTrans.TransType != ledgerTransType::Payment)
        {
            //We must go to the customer settlement table and locate the records that were used to settle the invoice in scope and pass them into the class
            // that manages the marking and updating of applied credits and payments to invoices. We remove the credit marking to remove the link between the invoice
            //and the credits used to settle the invoice. Then we must reverse the transactions using the reverseTransact method on the customer transaction table
              select firstonly custSettlement where custSettlement.TransCompany == findCustTrans.dataAreaId &&
                                                    custSettlement.TransRecId   == findCustTrans.RecId &&
                                                    custSettlement.AccountNum   == findCustTrans.AccountNum;

            specTransManager = SpecTransManager::newRefTableId(custTable,tablenum(custSettlement), true);
            specTransManager.insert(custSettlement.DataAreaId, custSettlement.TableId, custSettlement.RecId, custSettlement.SettleAmountCur, findCustTrans.CurrencyCode);
            custSettlement.CustVendSettlement::markOffsets(specTransManager, findCustTrans.CurrencyCode, true);

            if (CustTrans::reverseTransact(custTable,null,settleDatePrinc::DateOfPayment,custSettlement.TransDate))
            {
                specTransManager.deleteAll();
            }
        }
    }
    info(strFmt('Done %1',findCustTrans.txt));


}

Reference:

http://www.winfosoft.com/blog/uncategorized/dynamics-ax-how-to-void-an-ar-payment-and-remove-applied-credits-to-invoices-using-code
 

Monday, October 10, 2016

Using jumpref method on PurchReqLine on AX 2012 R3

Override method jumpRef ItemId field on Form DataSources

public void jumpRef()
{
    //super();
    PurchReqLine    _purchRLine;
    Args            args;
    MenuFunction    menuFunction;
    Common          rec;
    ;   
    _purchRLine = PurchReqLine;
   
    rec = InventTable::find(_purchRline.ItemId);

    args = new Args();
    args.caller(element);
    args.lookupRecord();
   
    args.record(rec);
    args.caller(element);

    // Create a new MenuFunction that launches the Reasons Menu Item

    menuFunction = new MenuFunction(menuitemdisplaystr(EcoResProductDetailsExtended),MenuItemType::Display);

    menuFunction.run(args);       
}

Friday, August 19, 2016

Disable Password Policy on Active Directory (Domain) Win Server 2012

1. Administrative Tools > Group Policy Management

2.  Default Domain Policy > Settings > Security Settings > Account Policies/Password Policy

3. Right Click on Account Policies/Password Policy, select Edit...

4. Right Click, select properties, and change/update policy setting for each Policy.

Error System.IO.File::Move when using batch process on AX 2012 R3

Problem:

On syntax

System.IO.File::Move(fileName, newFileName);

You get this error when using batch process:

 "System.IO.IOException: The process cannot access the file because it is being used by another process"


Cause:
Possibility
A. Your AOS services is using user which have less security access to folders.
B. You read or access files but not closed yet.


Solution:
A. Add more security access to user who run the AOS services.

B. Closing File

Step-1

Close the files before CodeAccessPermission::revertAssert();

Example:

io              = new TextIO(filenameOp, "r");
io.read();

.....
io.finalized;
io = null;
  
CodeAccessPermission::revertAssert();

Step-2 

Build Generate Increament CIL


Step-3
Close and Open AX.