Friday, 24 March 2017

A table, Extended Data Type, Base Enum or class called ExtBankTable already exists. Import of Table aborted.

A table, Extended Data Type, Base Enum or class called ExtBankTable already exists. Import of Table aborted.


Resolved :
Maybe the thing is that IMPORT should be done wihout IDs.So I try delete the cache files for my client AX system environment.
Cache files – close the client and then delete files .AUC files in cache directory:
* C:\Documents and Settings\[USERNAME]\Local Settings\Application Data for Win Xp or Server 2003.
* C:\Users\[USERNAME]\AppData\Local for Vista/Win7.   [such as : ax_{19F9525D-A1C5-4858-97D9-7863F8FE814A}.auc]

Tuesday, 21 March 2017

Date functions in AX 2009 and 2012

Date functions in AX 2009and2012

Hi....

These are some of the functions,from where we can get the day or month or year from the date...
Here is the below example....

static void date_Functions(Args _args)
{
    Transdate    d;
    ;
   
    d = today();
   
    info(strfmt("Date - %1",d));
   
    //Gets the month for the given date...
    info(strfmt("Month - %1",mthofYr(d)));
   
    //Gets the month name from the given date...
    info(strfmt("Month Name - %1",mthname(mthofYr(d))));
   
    //Gets the day for the given date...
    info(strfmt("Day - %1",dayOfMth(d)));
   
    //Gets the day name from the given date...
    info(strfmt("Day Name - %1",dayname(dayOfMth(d))));
   
    //Gets the year for the given date...
    info(strfmt("Year - %1",year(d)));
   
    //Gets the current weekday number from the date...
    info(strfmt("Weekday number - %1",dayOfwk(d)));
   
    //Gets the day of the year from the given date...
    info(strfmt("Day of year - %1",dayOfyr(d)));
   
    //Gets the week of the year from the given date...
    info(strfmt("Week of the year - %1",wkofyr(d)));
}

Thursday, 9 March 2017

SSRS Contract Class in AX 2012

[
    DataContractAttribute,
    SysOperationContractProcessingAttribute(classstr(GOD_RevenueUIBuilder))
]
class GOD_RevenueContract
{
    FromDate    fromDate;
    ToDate      toDate;
    List        verticalDimensionList;
}


[DataMemberAttribute("fromDate")]
public FromDate parmFromDate(FromDate _fromDate = fromDate)
{
    fromDate = _fromDate;
    return fromDate;
}


[DataMemberAttribute("toDate")]
public ToDate parmToDate(ToDate _toDate = toDate)
{
    toDate = _toDate;
    return toDate;
}


[
    DataMemberAttribute("verticalDimensionList"),
    AifCollectionTypeAttribute("verticalDimensionList", Types::String),
    SysOperationLabelAttribute(literalStr("@SYS62571"))
]
public List parmverticalDimensionList(List _verticalDimensionList = verticalDimensionList)
{
    verticalDimensionList = _verticalDimensionList;

    return verticalDimensionList;
}





/////////////////////////////////////////////////////////////////////////////////////////////////////
[
    SRSReportParameterAttribute(classStr(GOD_RevenueContract))
]
class GOD_RevenueDP extends SRSReportDataProviderBase//SrsReportDataProviderPreProcess//  //
{
    GOD_RevenueContract     contract;
    GOD_RevenueTmp          tempTable;
    ListIterator            dimListIterator;
    FromDate                fromDate;
    ToDate                  toDate;
    #GOD_DefaultDimension
}


[
    SRSReportDataSetAttribute(tableStr(GOD_RevenueTmp))
]
public GOD_RevenueTmp getTmpTable()
{
    select * from tempTable;

    return tempTable;
}

[SysEntryPointAttribute]
public void processReport()
{
    CustInvoiceJour         custInvoiceJour;
    MainAccount             mainAccount;
    GOD_IntegrationPostingProfile       postingProfile;
    DimensionValue                      dimvalue;
    int                                 dimExists;
    TaxTrans                            taxTrans;
    boolean                 isTaxInserted = false;
    container               vertDims = conNull();
    GOD_GeneralJournalSubledgerVoucher  generalJournalEntry;
    contract = this.parmDataContract() as GOD_RevenueContract;
    fromDate        =   contract.parmFromDate();
    toDate          =   contract.parmToDate();

    if(contract.parmverticalDimensionList())
    {
        dimListIterator = new ListIterator(contract.parmverticalDimensionList());

        while(dimListIterator.more())
        {
            vertDims += dimListIterator.value();

            dimListIterator.next();
        }
    }

    while select LedgerVoucher,InvoiceId,InvoiceDate  from custInvoiceJour
        where custInvoiceJour.InvoiceDate >= fromDate &&
              custInvoiceJour.InvoiceDate <= toDate// && custInvoiceJour.InvoiceId == 'IMTM-000001'
    {
        generalJournalEntry.clear();
        isTaxInserted = false;
        while select Voucher,LedgerDimension,MainAccount,AccountingCurrencyAmount from generalJournalEntry
                            where generalJournalEntry.Voucher == custInvoiceJour.LedgerVoucher
        {
            mainAccount = MainAccount::find(generalJournalEntry.MainAccount);
            select firstonly postingProfile where postingProfile.MainAccountId == mainAccount.MainAccountId;
            if(postingProfile)// || generalJournalEntry.PostingType == LedgerPostingType::ServiceTax_IN)
            {
                dimvalue = conPeek(GOD_getDimAttrFromLedgerDimension(#Vertical,generalJournalEntry.LedgerDimension),1);
                dimExists = conFind(vertDims,dimvalue);
                if(dimExists || !vertDims)
                {
                    tempTable.InvoiceId                 = custInvoiceJour.InvoiceId;
                    tempTable.InvoiceDate               = custInvoiceJour.InvoiceDate;
                    tempTable.DiscAmount                = custInvoiceJour.CashDisc;
                    tempTable.MainAccount               = mainAccount.Name;
                    tempTable.Vertical                  = dimvalue;
                    tempTable.EventName                 = conPeek(GOD_getDimAttrFromLedgerDimension(#Event,generalJournalEntry.LedgerDimension),2);
                    tempTable.AccountingCurrencyAmount  =  generalJournalEntry.AccountingCurrencyAmount;
                    if(isTaxInserted == false)
                    {
                        select sum(TaxAmount) from taxTrans where taxTrans.Voucher == generalJournalEntry.Voucher
                                                                    && taxTrans.GOD_isSBT == NoYes::No;
                                tempTable.STAmount              = taxTrans.TaxAmount;
                        taxTrans.clear();
                        select sum(TaxAmount) from taxTrans where taxTrans.Voucher == generalJournalEntry.Voucher
                                                                && taxTrans.GOD_isSBT == NoYes::Yes;
                            tempTable.SBAmount              = taxTrans.TaxAmount;
                        isTaxInserted = true;
                    }
                    else
                    {
                        tempTable.STAmount = 0;
                        tempTable.SBAmount = 0;
                    }
                    tempTable.insert();
                }
            }
        }
    }
}


///////////////////////


class GOD_RevenueUIBuilder extends SrsReportDataContractUIBuilder
{
    #GOD_DefaultDimension

    DialogField                 dialogfromDate,dialogtoDate,dialogDimName;
    GOD_RevenueContract       contract;
}
public void build()
{
    contract            = this.dataContractObject();
    dialogfromDate      = this.addDialogField(methodStr(GOD_RevenueContract, parmFromDate),contract);
    dialogtoDate        = this.addDialogField(methodStr(GOD_RevenueContract, parmToDate),contract);
    dialogDimName       = this.addDialogField(methodStr(GOD_RevenueContract, parmverticalDimensionList),contract);
    dialogDimName.value("");
    //dialogproductSubGroup.value("");
}

private void dimNameValueLookUp(FormStringControl dimNameLookUp)
{
    Query                   query = new Query();
    container   conDim;
    DimensionAttributeDirCategory   dimAttributeDirCategory;
    DimensionAttribute      dimensionAttribute;
    ;

    select firstonly Type, RecId from dimensionAttribute where dimensionAttribute.Name == #Vertical;
    if(dimensionAttribute.Type == DimensionAttributeType::CustomList)
    {
        select firstonly DirCategory from dimAttributeDirCategory where dimAttributeDirCategory.DimensionAttribute == dimensionAttribute.RecId;

        query.addDataSource(tableNum(DimensionFinancialTag)).

        addRange(fieldNum(DimensionFinancialTag, FinancialTagCategory)).

        value(queryValue(dimAttributeDirCategory.DirCategory));

        SysLookupMultiSelectGrid::lookup(query,dimNameLookUp,dimNameLookUp,conDim);
    }
}



public void getFromDialog()
{
    contract = this.dataContractObject();
    super();
}


public void postBuild()
{
    super();
    dialogfromDate              = this.bindInfo().getDialogField(this.dataContractObject(),methodStr(GOD_RevenueContract, parmFromDate));
    dialogtoDate                = this.bindInfo().getDialogField(this.dataContractObject(),methodStr(GOD_RevenueContract, parmToDate));
    dialogDimName                = this.bindInfo().getDialogField(this.dataContractObject(),methodStr(GOD_RevenueContract, parmverticalDimensionList));

    dialogDimName.registerOverrideMethod(methodStr(FormStringControl, lookup), methodStr(GOD_RevenueUIBuilder,dimNameValueLookUp), this);
    if (dialogDimName)
    {
        dialogDimName.lookupButton(2);
    }
}


public void postRun()
{
    //super();
}




////


[DataContractAttribute,
SysOperationContractProcessingAttribute(classstr(GOD_ServiceTaxPayUIBuilder))]

class GOD_ServiceTaxPayContract_New
{
    DimensionValue      vertical;
    yearBase            fromYear;
}

[DataMemberAttribute("year"),
SysOperationLabelAttribute(literalStr("@IMT197")),
SysOperationHelpTextAttribute(literalStr("@SYS107162")),
SysOperationDisplayOrderAttribute('2')]

public YearBase parmFromYear(YearBase _fromYear = fromYear)
{
    fromYear = _fromYear;
    return fromYear;
}

[DataMemberAttribute("DimensionValue"),
SysOperationLabelAttribute(literalStr("@SYS62571")),
SysOperationHelpTextAttribute(literalStr("@SYS62571")),
SysOperationDisplayOrderAttribute('1')]

public DimensionValue parmVertical(DimensionValue _vertical = vertical)
{
    vertical = _vertical;
    return vertical;
}


//

//////////////////////////////////////////////////////////
[  SRSReportParameterAttribute(classstr(GOD_ServiceTaxPayContract))]

public class GOD_ServiceTaxPayDP extends SRSReportDataProviderBase//SrsReportDataProviderPreProcess//
{
    #define.ServiceTax("Serv. Tax")
    #define.VAT("VAT")
    #GOD_DefaultDimension
    GOD_ServiceTaxPayTmp                    god_ServiceTaxTmp,god_ServiceTaxTmpCust;
    CustInvoiceJour                         custInvoiceJour;
    TaxTrans_IN                             taxTrans;
    MonthsOfYear                            MonthsOfYear;
    TransDate                               fromDate,toDate,curDate;
    Amount                                  preClosingBal;
    DimensionValue                          vertical;
    GeneralJournalAccountEntry              generalJournalAccountEntry;
    YearBase                                fromYear;
}

private Amount getAdditionsAmt(TransDate    _transdate)
{
    TransDate               fromd,tod;
    TaxTrans_IN             taxTransInOpening;
    ;

    fromd   = mkDate(1,mthOfYr(_transdate),year(_transdate));
    tod     = nextMth(fromd);

    select sum(TaxAmount) from taxTransInOpening
        where taxTransInOpening.Source == TaxModuleType::Purch ||
              taxTransInOpening.Source == TaxModuleType::Voucher &&
              taxTransInOpening.TransDate >= fromd &&
              taxTransInOpening.TransDate <= tod;

    return taxTransInOpening.TaxAmount;
}

public boolean getDimensionCombinationValues(GeneralJournalAccountEntry gjAccEntry)
{

    DimensionAttributeValueCombination  dimAttrValueComb;
    DimensionStorage        dimensionStorage;
    DimensionStorageSegment segment;
    int                     segmentCount, segmentIndex;
    int                     hierarchyCount, hierarchyIndex;
    str                     segmentName;
    SysDim                  segmentValue;
    ;

    dimAttrValueComb = DimensionAttributeValueCombination::find(gjAccEntry.LedgerDimension);
    dimensionStorage = DimensionStorage::findById(gjAccEntry.LedgerDimension);
    if (dimensionStorage == null)
    {
        throw error("@SYS83964");
    }
    hierarchyCount = dimensionStorage.hierarchyCount();
    for(hierarchyIndex = 1; hierarchyIndex <= hierarchyCount; hierarchyIndex++)
    {
        segmentCount = dimensionStorage.segmentCountForHierarchy(hierarchyIndex);
        for (segmentIndex = 1; segmentIndex <= segmentCount; segmentIndex++)
        {
            segment = dimensionStorage.getSegmentForHierarchy(hierarchyIndex, segmentIndex);

            if (segment.parmDimensionAttributeValueId() != 0)
            {
                segmentName          = DimensionAttribute::find(DimensionAttributeValue::find(segment.parmDimensionAttributeValueId()).DimensionAttribute).Name;
                segmentValue        = segment.parmDisplayValue();
                if(segmentName == #Vertical && segmentValue == vertical)
                {
                    return true;
                }
                else
                {
                    return false;
                }

            }
        }
    }
    return false;
}


private int getMonthNum(MonthsOfYear _month)
{
    switch(_month)
    {
        case MonthsOfYear::April :
            return 1;
        case MonthsOfYear::May :
            return 2;
        case MonthsOfYear::June :
            return 3;
        case MonthsOfYear::July :
            return 4;
        case MonthsOfYear::August :
            return 5;
        case MonthsOfYear::September :
            return 6;
        case MonthsOfYear::October :
            return 7;
        case MonthsOfYear::November :
            return 8;
        case MonthsOfYear::December :
            return 9;
        case MonthsOfYear::January :
            return 10;
        case MonthsOfYear::February :
            return 11;
        case MonthsOfYear::March :
            return 12;
    }
    return 0;
}


private Amount getOpeningBalance(TransDate    _asOnDate)
{
    TaxTrans_IN                 taxTransInOpening;
    GeneralJournalAccountEntry  generalJournalAccEntry;
    GeneralJournalEntry         generalJournalEntry;
    MainAccount                 mainAccnt;
    Amount                      openingBal;

    while select TaxAmount from taxTransInOpening
        where taxTransInOpening.TransDate < _asOnDate
    join SubledgerVoucher, RecId from generalJournalEntry
        where generalJournalEntry.SubledgerVoucher == taxTransInOpening.Voucher
    join MainAccount, PostingType from generalJournalAccEntry
        where generalJournalAccEntry.GeneralJournalEntry == generalJournalEntry.RecId &&
              generalJournalAccEntry.PostingType == LedgerPostingType::ServiceTax_IN
    join MainAccountId from mainAccnt
        where mainAccnt.RecId == generalJournalAccEntry.MainAccount &&
              mainAccnt.MainAccountId == "2001314"
    {
        if(this.getDimensionCombinationValues(generalJournalAccEntry))
        {
            openingBal += taxTransInOpening.TaxAmount;
        }
    }
    return  openingBal;
}

[SRSReportDataSetAttribute(tablestr(GOD_ServiceTaxPayTmp))]
public GOD_ServiceTaxPayTmp getServiceTaxPayTmpDetails()
{
    select  god_ServiceTaxTmp;

    return  god_ServiceTaxTmp;
}


public void insertFromCustTrans()
{
    TransDate                               currentDate;
    CustTrans                               custTrans;
    DimensionAttributeValueSetItem          dimensionAttributeValueSetItem;
    DimensionAttributeValue                 dimensionAttributeValue;
    DimensionAttribute                      dimensionAttribute;
    TransDate                               fd,td;
    while select forUpdate god_ServiceTaxTmpCust
    {
        if(god_ServiceTaxTmpCust.MonthNumber != 1)
        {
            god_ServiceTaxTmpCust.OpeningBal = preClosingBal;
        }

        if(god_ServiceTaxTmpCust.MonthNumber <= 9)
        {
            fd = mkDate(1,god_ServiceTaxTmpCust.MonthNumber + 3,fromYear);
        }
        else
        {
            fd = mkDate(1,god_ServiceTaxTmpCust.MonthNumber - 9,fromYear + 1);
        }
        td  = endmth(fd);


        select sum(SourceBaseAmountCur) from taxTrans
            where taxTrans.Source == TaxModuleType::FreeTxtInvoice &&
                  taxTrans.TransDate >= fd &&
                  taxTrans.TransDate <= td
        join custTrans
            where taxTrans.Voucher == custTrans.Voucher
        join dimensionAttributeValueSetItem
            where dimensionAttributeValueSetItem.DimensionAttributeValueSet == custTrans.DefaultDimension &&
                dimensionAttributeValueSetItem.DisplayValue == vertical
        join dimensionAttributeValue
            where dimensionAttributeValue.RecId == dimensionAttributeValueSetItem.DimensionAttributeValue
        join dimensionAttribute
            where dimensionAttribute.RecId == dimensionAttributeValue.DimensionAttribute &&
                  dimensionAttribute.Name == #Vertical;

        god_ServiceTaxTmpCust.TaxableAdvance    = abs(taxTrans.SourceBaseAmountCur);

        select sum(SourceBaseAmountCur) from taxTrans
            where taxTrans.Source == TaxModuleType::Voucher &&
                  taxTrans.TransDate >= fd &&
                  taxTrans.TransDate <= td
        join custTrans
            where taxTrans.Voucher == custTrans.Voucher
        join dimensionAttributeValueSetItem
            where dimensionAttributeValueSetItem.DimensionAttributeValueSet == custTrans.DefaultDimension &&
                dimensionAttributeValueSetItem.DisplayValue == vertical
        join dimensionAttributeValue
            where dimensionAttributeValue.RecId == dimensionAttributeValueSetItem.DimensionAttributeValue
        join dimensionAttribute
            where dimensionAttribute.RecId == dimensionAttributeValue.DimensionAttribute &&
                  dimensionAttribute.Name == #Vertical;

        god_ServiceTaxTmpCust.TaxableIncome     = abs(taxTrans.SourceBaseAmountCur);

        select sum(TaxAmount) from taxTrans
            where taxTrans.TaxPeriod == #VAT &&
                  taxTrans.TransDate >= fd &&
                  taxTrans.TransDate <= td
        join custTrans
            where taxTrans.Voucher == custTrans.Voucher
        join dimensionAttributeValueSetItem
            where dimensionAttributeValueSetItem.DimensionAttributeValueSet == custTrans.DefaultDimension &&
                dimensionAttributeValueSetItem.DisplayValue == vertical
        join dimensionAttributeValue
            where dimensionAttributeValue.RecId == dimensionAttributeValueSetItem.DimensionAttributeValue
        join dimensionAttribute
            where dimensionAttribute.RecId == dimensionAttributeValue.DimensionAttribute &&
                  dimensionAttribute.Name == #Vertical;

        god_ServiceTaxTmpCust.VAT               = abs(taxTrans.TaxAmount);

       select sum(TaxAmount) from taxTrans
            where taxTrans.TaxPeriod == #ServiceTax &&
                  taxTrans.TransDate >= fd &&
                  taxTrans.TransDate <= td
        join DefaultDimension, Voucher from custTrans
            where taxTrans.Voucher == custTrans.Voucher
        join DimensionAttributeValue, DisplayValue from dimensionAttributeValueSetItem
            where dimensionAttributeValueSetItem.DimensionAttributeValueSet == custTrans.DefaultDimension &&
                dimensionAttributeValueSetItem.DisplayValue == vertical
        join DimensionAttribute from dimensionAttributeValue
            where dimensionAttributeValue.RecId == dimensionAttributeValueSetItem.DimensionAttributeValue
        join Name from dimensionAttribute
            where dimensionAttribute.RecId == dimensionAttributeValue.DimensionAttribute &&
                  dimensionAttribute.Name == #Vertical;

        god_ServiceTaxTmpCust.ServiceTax            = abs(taxTrans.TaxAmount);

        god_ServiceTaxTmpCust.Total                 = god_ServiceTaxTmpCust.VAT + god_ServiceTaxTmpCust.ServiceTax;

        this.insertFromVendTrans(fd,td);

        if(god_ServiceTaxTmpCust.Total > (god_ServiceTaxTmpCust.Additions + god_ServiceTaxTmpCust.OpeningBal))
        {
            god_ServiceTaxTmpCust.Utilisations      = god_ServiceTaxTmpCust.Additions + god_ServiceTaxTmpCust.OpeningBal;
            god_ServiceTaxTmpCust.ClosingBalance    = 0;
        }
        else
        {
            god_ServiceTaxTmpCust.Utilisations      = god_ServiceTaxTmpCust.Total;
            god_ServiceTaxTmpCust.ClosingBalance    = god_ServiceTaxTmpCust.Utilisations - (god_ServiceTaxTmpCust.Additions + god_ServiceTaxTmpCust.OpeningBal);
        }
        preClosingBal                               = god_ServiceTaxTmpCust.ClosingBalance;

        currentDate = nextMth(fd);
        if(god_ServiceTaxTmpCust.MonthNumber == 12)
        {
            god_ServiceTaxTmpCust.DueDate               = mkDate(31,mthOfYr(fd),year(fd));
        }
        else
        {
            god_ServiceTaxTmpCust.DueDate               = mkDate(5,mthOfYr(currentDate),year(currentDate));
        }

        god_ServiceTaxTmpCust.update();

    }
}

public void insertFromVendTrans(FromDate _fd, ToDate _td)
{
    VendTrans                               vendTrans;
    DimensionAttributeValueSetItem          dimensionAttributeValueSetItem;
    DimensionAttributeValue                 dimensionAttributeValue;
    DimensionAttribute                      dimensionAttribute;

    select sum(TaxAmount) from taxTrans
        where taxTrans.TaxPeriod == #ServiceTax &&
              taxTrans.TransDate >= _fd &&
              taxTrans.TransDate <= _td
    join DefaultDimension, Voucher from vendTrans
        where taxTrans.Voucher == vendTrans.Voucher
    join DimensionAttributeValue, DisplayValue from dimensionAttributeValueSetItem
        where dimensionAttributeValueSetItem.DimensionAttributeValueSet == vendTrans.DefaultDimension &&
              dimensionAttributeValueSetItem.DisplayValue == vertical
    join DimensionAttribute from dimensionAttributeValue
        where dimensionAttributeValue.RecId == dimensionAttributeValueSetItem.DimensionAttributeValue
    join Name from dimensionAttribute
        where dimensionAttribute.RecId == dimensionAttributeValue.DimensionAttribute &&
              dimensionAttribute.Name == #Vertical;

    god_ServiceTaxTmpCust.Additions = taxTrans.TaxAmount;
}


[SysEntryPointAttribute(false)]
public void processReport()
{
    #define.VERTICALS("VERTICALS")


    GOD_ServiceTaxPayContract               dataContract;
    int                                     flag = 0;
    TransDate                               fd;

    delete_from god_ServiceTaxTmp;
    dataContract = this.parmDataContract() as GOD_ServiceTaxPayContract;

    vertical        = dataContract.parmVertical();

    fromYear        = dataContract.parmFromYear();

    fromDate        = mkDate(1,4,fromYear);
    fd              = fromDate;
    toDate          = mkDate(31,3,fromYear+1);

    ttsBegin;
    while(fd < toDate)
    {
        god_ServiceTaxTmp.clear();
        god_ServiceTaxTmp.month                 = str2enum(MonthsOfYear,mthName(mthOfYr(fd)));
        god_ServiceTaxTmp.MonthNumber           = this.getMonthNum(god_ServiceTaxTmp.month);
        god_ServiceTaxTmp.FromDate              = fromDate;
        god_ServiceTaxTmp.ToDate                = toDate;
        if(god_ServiceTaxTmp.MonthNumber == 1)
        {
            god_ServiceTaxTmp.OpeningBal        = this.getOpeningBalance(fromDate);
        }
        else
        {
            god_ServiceTaxTmp.OpeningBal        = 0;
        }
        god_ServiceTaxTmp.insert();

        fd = nextMth(fd);
    }
    this.insertFromCustTrans();
    ttsCommit;
}


private void updateClosingBalance()
{
    GOD_ServiceTaxPayTmp        god_ServiceTaxPayTmpUp;

    while select god_ServiceTaxPayTmpUp
    {
        god_ServiceTaxPayTmpUp.selectForUpdate(true);
        ttsBegin;
        god_ServiceTaxPayTmpUp.Total             = god_ServiceTaxPayTmpUp.VAT + god_ServiceTaxPayTmpUp.ServiceTax;

        if((god_ServiceTaxPayTmpUp.Additions + god_ServiceTaxPayTmpUp.OpeningBal) < god_ServiceTaxPayTmpUp.Total)
        {
            god_ServiceTaxPayTmpUp.OpeningBal       = preClosingBal;
            god_ServiceTaxPayTmpUp.Utilisations     = god_ServiceTaxPayTmpUp.Additions + god_ServiceTaxPayTmpUp.OpeningBal;
            god_ServiceTaxPayTmpUp.NetServiceTax    = god_ServiceTaxPayTmpUp.Total -(god_ServiceTaxPayTmpUp.OpeningBal + god_ServiceTaxPayTmpUp.Additions);
            god_ServiceTaxPayTmpUp.ClosingBalance   = 0;
        }
        else
        {
            god_ServiceTaxPayTmpUp.OpeningBal       = preClosingBal;
            god_ServiceTaxPayTmpUp.Utilisations     = god_ServiceTaxPayTmpUp.Total;
            god_ServiceTaxPayTmpUp.NetServiceTax    = 0;
            god_ServiceTaxPayTmpUp.ClosingBalance   = (god_ServiceTaxPayTmpUp.Additions + god_ServiceTaxPayTmpUp.OpeningBal) - god_ServiceTaxPayTmpUp.Total;
        }
        preClosingBal                               = god_ServiceTaxPayTmpUp.ClosingBalance;
        if((god_ServiceTaxPayTmpUp.DateOfPaym - god_ServiceTaxPayTmpUp.DueDate) > 0)
        {
            god_ServiceTaxPayTmpUp.Delay = god_ServiceTaxPayTmpUp.DateOfPaym - god_ServiceTaxPayTmpUp.DueDate;
        }
        else
        {
           god_ServiceTaxPayTmpUp.Delay  = 0;
        }
        god_ServiceTaxPayTmpUp.update();
        ttsCommit;
    }
}

private void updateServiceTaxPayTmp(GOD_ServiceTaxPayTmp _god_ServiceTaxTmp)
{
    if(_god_ServiceTaxTmp)
    {
        _god_ServiceTaxTmp.selectForUpdate(true);
        ttsBegin;
        if(taxTrans.Source == TaxModuleType::FreeTxtInvoice)
        {
            god_ServiceTaxTmp.TaxableIncome     += abs(taxTrans.SourceBaseAmountCur);
        }
        if(taxTrans.Source == TaxModuleType::Voucher)
        {
            god_ServiceTaxTmp.TaxableAdvance    += abs(taxTrans.SourceBaseAmountCur);
        }
        if(taxTrans.TaxPeriod == #ServiceTax)
        {
            _god_ServiceTaxTmp.ServiceTax       += abs(taxTrans.TaxAmount);
        }
        if(taxTrans.TaxPeriod == #VAT)
        {
            _god_ServiceTaxTmp.VAT              += abs(taxTrans.TaxAmount);
        }
        _god_ServiceTaxTmp.update();
        ttsCommit;
    }


}


///////////////////////
//////////////
class GOD_ServiceTaxPayUIBuilder extends SrsReportDataContractUIBuilder
{
    DialogField                     dialogvertical,dialogyear;
    boolean                         enable;
    GOD_ServiceTaxPayContract       contract;
}

public void build()
{
    contract            = this.dataContractObject();
    dialogvertical      = this.addDialogField(methodStr(GOD_ServiceTaxPayContract, parmVertical),contract);
    dialogyear          = this.addDialogField(methodStr(GOD_ServiceTaxPayContract, parmFromYear),contract);
    dialogvertical.value("");

}

public void getFromDialog()
{
    contract = this.dataContractObject();
    super();
}
public void postBuild()
{
    super();
    dialogvertical  = this.bindInfo().getDialogField(this.dataContractObject(),methodStr(GOD_ServiceTaxPayContract, parmVertical));
    dialogyear      = this.bindInfo().getDialogField(this.dataContractObject(),methodStr(GOD_ServiceTaxPayContract, parmFromYear));
    dialogvertical.registerOverrideMethod(methodStr(FormStringControl, lookup), methodStr(GOD_ServiceTaxPayUIBuilder,verticalLookup), this);

}

private void verticalLookup(FormStringControl verticalLookup)
{
   #define.DimensionName("VERTICALS")
    Query                   query;
    QueryBuildDataSource    qbds,qbds1;
    SysTableLookup          sysTableLookup;
    DimensionAttribute      dimAttr;

    ;

    dimAttr = DimensionAttribute::findByName(#DimensionName);
    sysTableLookup  = SysTableLookup::newParameters(tablenum(DimensionFinancialTag),verticalLookup);

    sysTableLookup.addLookupfield(fieldnum(DimensionFinancialTag, Value));
    sysTableLookup.addLookupfield(fieldNum(DimensionFinancialTag,Description));

    query = new Query();
    qbds = query.addDataSource(tableNum(DimensionFinancialTag));
    qbds1 = qbds.addDataSource(tableNum(DimensionAttributeDirCategory));
    qbds1.addLink(fieldNum(DimensionFinancialTag,FinancialTagCategory),fieldnum(DimensionAttributeDirCategory,RecId));

    qbds1.addRange(fieldNum(DimensionAttributeDirCategory, DimensionAttribute)).value(queryvalue(dimAttr.recid));

    sysTableLookup.parmQuery(query);
    sysTableLookup.parmUseLookupValue(False);
    sysTableLookup.performFormLookup();

}

///////////////

In SSRS Show the Serial Number in Reports Automatically Using Expression in .NET

 Serial Number in SSRS Reports 


Purpose: I want to add the sequence number or serial number to every row.

Solution

To do this I will use an expression named "RowNumber".
  1. Insert a new column on the left side and name it "Serial No."

    Insert a new column
  2. Create the expression by right-clicking on that column as in the following:

    column
  3. Select the "Miscellaneous" as a category and "RowNumber" as an item, then expression will be like:

    =RowNumber(nothing)

    RowNumber

    Where the nothing keyword indicates that the function will begin counting at the first row in the outermost data region. Click the "OK" button.

    row
     
  4. Run the "Default.aspx" page.

    Default

Friday, 17 February 2017

Menu item

if ( this.parmMenuItemDesc()=="CustInvoicePrintJob_FreeText")
    {
     return Dialog::newFormnameRunbase(formstr(CustInvoicePrintJob), this);
    }
    //17022017
   else if ( this.parmMenuItemDesc()=="GODCustInvoicePrintJobCopy")
    {
        return Dialog::newFormnameRunbase(formstr(GODCustInvoicePrintJobCopy), this);
    }
    //17022017
    else
    {

    return Dialog::newFormnameRunbase(formstr(GODCustInvoicePrintJob), this);
    }

Tuesday, 7 February 2017

ID change in Dynamics AX data dictionary

ID change in Dynamics AX data dictionary

The other day we upgraded to Cumulative Update 3 for Dynamics AX 2012. After that we got some problems in the SqlDictionary table - several table and field IDs did not much those in the AOT anymore.

One of our developers found this post, which contained a job fixing such issues. We had to correct the job a bit, otherwise it failed when trying to process Views or update field IDs that had been "swapped" during upgrade (e.g. before: fieldId1 = 6001, fieldId2 = 6002; after installing CU3: fieldId1 = 6002, fieldId2 = 6001).

This is the final version of the job. I know the change violates DRY principle, but for an ad-hoc job it is probably OK :)

static void fixTableAndFieldIds(Args _args)
{
    Dictionary dictionary = new Dictionary();
    SysDictTable dictTable;
    DictField dictField;
    TableId tableId;
    FieldId fieldId;
    SqlDictionary sqlDictionaryTable;
    SqlDictionary sqlDictionaryField;
 
    setPrefix("Update of data dictionary IDs");
    tableId = dictionary.tableNext(0);
    ttsbegin;
 
    while (tableId)
    {
        dictTable = new SysDictTable(tableId);
 
        setPrefix(dictTable.name());
 
        if (!dictTable.isSystemTable() && !dictTable.isView())
        {
            //Finds table in SqlDictionary by name in AOT, if ID was changed.
            //Empty field ID represents a table.
            select sqlDictionaryTable
                where sqlDictionaryTable.name == dictTable.name()
                && sqlDictionaryTable.fieldId == 0
                && sqlDictionaryTable.tabId != dictTable.id();
 
            if (sqlDictionaryTable)
            {
                info(dictTable.name());
                //Updates table ID in SqlDictionary
                if (ReleaseUpdateDB::changeTableId(
                    sqlDictionaryTable.tabId,
                    dictTable.id(),
                    dictTable.name()))
                {
                    info(strFmt("Table ID changed (%1 -> %2)", sqlDictionaryTable.tabId, dictTable.id()));
                }
            }
 
            fieldId = dictTable.fieldNext(0);
 
            //For all fields in table
            while (fieldId)
            {
                dictField = dictTable.fieldObject(fieldId);
 
                if (!dictField.isSystem())
                {
                    //Finds fields in SqlDictionary by name and compares IDs
                    select sqlDictionaryField
                        where sqlDictionaryField.tabId == dictTable.id()
                        && sqlDictionaryField.name == dictField.name()
                        && sqlDictionaryField.fieldId != 0
                        && sqlDictionaryField.fieldId != dictField.id();
 
                    if (sqlDictionaryField)
                    {
                        //Updates field ID in SqlDictionary
                        if (ReleaseUpdateDB::changeFieldId(
                            dictTable.id(),
                            sqlDictionaryField.fieldId,
                            -dictField.id(),
                            dictTable.name(),
                            dictField.name()))
                        {
                            info(strFmt("Pre-update: Field %1 - ID changed (%2 -> %3)",
                                dictField.name(),
                                sqlDictionaryField.fieldId,
                                -dictField.id()));
                        }
                    }
                }
                fieldId = dictTable.fieldNext(fieldId);
            }
 
            fieldId = dictTable.fieldNext(0);
 
            //For all fields in table
            while (fieldId)
            {
                dictField = dictTable.fieldObject(fieldId);
 
                if (!dictField.isSystem())
                {
                    select sqlDictionaryField
                        where sqlDictionaryField.tabId == dictTable.id()
                        && sqlDictionaryField.name == dictField.name()
                        && sqlDictionaryField.fieldId < 0;
 
                    if (sqlDictionaryField)
                    {
                        //Updates field ID in SqlDictionary
                        if (ReleaseUpdateDB::changeFieldId(
                            dictTable.id(),
                            sqlDictionaryField.fieldId,
                            -sqlDictionaryField.fieldId,
                            dictTable.name(),
                            dictField.name()))
                        {
                            info(strFmt("Final update: Field %1 - ID changed (%2 -> %3)",
                                dictField.name(),
                                sqlDictionaryField.fieldId,
                                -sqlDictionaryField.fieldId));
                        }
                    }
                }
                fieldId = dictTable.fieldNext(fieldId);
            }
        }
        tableId = dictionary.tableNext(tableId);
    }
    ttscommit;
}

Wednesday, 28 December 2016

ledger Dimension creation

        journalTrans.parmAccountType(str2enum(accType,c4));
        switch(journalTrans.parmAccountType())
        {
            case LedgerJournalACType::Ledger:
                accEntryPattern = [strFmt("%1-%2-%3-%4-%5",c5,c6,c7,c8,c9),c5];
                if(c6)
                {
                    accEntryPattern += "Division";
                    accEntryPattern += c6;
                    dimcount++;
                }
                if(c7)
                {
                    accEntryPattern += "Region";
                    accEntryPattern += c7;
                    dimcount++;
                }
                if(c8)
                {
                    accEntryPattern += "Branch";
                    accEntryPattern += c8;
                    dimcount++;
                }
                if(c9)
                {
                    accEntryPattern += "Department";
                    accEntryPattern += c9;
                    dimcount++;
                }
                if(c43)
                {
                    accEntryPattern += "Employee";
                    accEntryPattern += c43;
                    dimcount++;
                }
                if(c44)
                {
                    accEntryPattern += "Customer";
                    accEntryPattern += c44;
                    dimcount++;
                }
              accEntryPattern = conIns(accEntryPattern,3,dimcount);
              journalTrans.parmLedgerDimension(AxdDimensionUtil::getLedgerAccountId(accEntryPattern));






public void createJournalLines_Second()
{
    #define.INR("INR")
    GOD_IntegrationPostingProfile       integrationPostingProfile;
    container                           dimensionValues;
    int                                 i;
    DimensionDisplayValue               membership;
    NumberSeq                           numberSeq;
    NumberSeq                           numSeqVoucher;
    GOD_CashAccountMapping              CashAccountMapping;
     DimensionDynamicAccount             ledgerdimension;
    DimensionDefault                dimensionDefaultnew;


    //
    DimensionDefault dimensionDefault;
    LedgerDimensionAccount ledgerDimensionAccount;
    int        dimcount =0;
    container       accEntryPattern;
    //
    ;

    hasError =false;
    integrationPostingProfile                   = this.getIntegrationPostingProfile();
    LedgerjournalTrans.clear();

    numberSeq                                   = NumberSeq::newGetVoucherFromId((ledgerjournalname.NumberSequenceTable));
    ledgerJournalTrans.Voucher                  = numberSeq.voucher();

    LedgerjournalTrans.Company                  = curext();
    ledgerJournalTrans.modifiedField(fieldNum(LedgerJournalTrans, Company));

    ledgerJournalTrans.JournalNum               = LedgerjournalTable.JournalNum;
    LedgerJournaltrans.initFromLedgerJournalTable_LT(ledgerJournalTable);

    if(tpmsPJStagingDB.CurrencyCode && Currency::exist(tpmsPJStagingDB.CurrencyCode))
    {
        ledgerJournalTrans.CurrencyCode         = tpmsPJStagingDB.CurrencyCode;
        ledgerJournalTrans.ExchRate             = Currency::exchRate(LedgerjournalTrans.CurrencyCode);
    }
    else
    {
        errorLog += "@IMT238";
        hasError = true;
    }

    ledgerJournalTrans.PaymReference            = tpmsPJStagingDB.Paymentreference;
    ledgerJournalTrans.Prepayment               = tpmsPJStagingDB.Prepayment;
    ledgerJournalTrans.modifiedField(fieldNum(LedgerJournalTrans, Prepayment));

    //Modified by 21929 on 27/5/2016 to fetch item groups from integration parameters for
    //prepayment journals
    if(tpmsPJStagingDB.Prepayment == NoYes::No)
    {
        ledgerJournalTrans.TaxGroup                 = integrationPostingProfile.SalesTaxGroup;
        ledgerJournalTrans.TaxItemGroup             = integrationPostingProfile.SalesTaxMainGroup;
    }
    else
    {
        ledgerJournalTrans.TaxGroup                 = integrationParameter.SalesTaxMainGroup;
        ledgerJournalTrans.TaxItemGroup             = integrationParameter.SalesTaxGroup;
    }

    ledgerJournalTrans.AmountCurCredit         = tpmsPJStagingDB.AmountCurCredit;
    ledgerJournalTrans.TransDate                = tpmsPJStagingDB.TransDate;
    ledgerJournalTrans.DocumentNum              = tpmsPJStagingDB.DocumentNum;
    ledgerJournalTrans.DocumentDate             = tpmsPJStagingDB.TransDate;
    ledgerJournalTrans.AccountType              = LedgerJournalACType::Ledger;
    ledgerJournalTrans.modifiedField(fieldNum(LedgerJournalTrans,AccountType));

    if(tpmsPJStagingDB.CashPayment == NoYes::Yes)
    {
         CashAccountMapping = GOD_CashAccountMapping::find(tpmsPJStagingDB.Vertical,tpmsPJStagingDB.Location);

    }
       // ledgerJournalTrans.LedgerDimension =      this.getLedgerDimensionWithFD(CashAccountMapping.MainAccountIddebitset2);
       // if(tpmsPJStagingDB.CustAccount)
    /*{
        if(CustTable::exist(tpmsPJStagingDB.CustAccount))
        {
            ledgerJournalTrans.LedgerDimension          = DimensionStorage::getDynamicAccount(tpmsPJStagingDB.CustAccount, LedgerJournalACType::cust);
            ledgerJournalTrans.modifiedField(fieldNum(LedgerJournalTrans, LedgerDimension));
        }
        else
        {
            hasError = true;
            errorLog += strFmt("@IMT270", tpmsPJStagingDB.CustAccount);
        }
    }
    ledgerJournalTrans.LedgerDimension          = DimensionStorage::getDynamicAccount(tpmsPJStagingDB.CustAccount, LedgerJournalACType::cust);
    ledgerJournalTrans.modifiedField(fieldNum(LedgerJournalTrans, LedgerDimension));
    else
    {
        hasError = true;
        errorLog += "@IMT136";
    }*/

                accEntryPattern = [strFmt("%1-%2",CashAccountMapping.MainAccountIddebitset2,tpmsPJStagingDB.Vertical),CashAccountMapping.MainAccountIddebitset2];
                if(tpmsPJStagingDB.Vertical)
                {
                    accEntryPattern += "Verticals";
                    accEntryPattern += tpmsPJStagingDB.Vertical;
                    dimcount++;
                }


                accEntryPattern = conIns(accEntryPattern,3,dimcount);
              ledgerDimension = AxdDimensionUtil::getLedgerAccountId(accEntryPattern);


     //ledgerDimension = AxdDimensionUtil::getMultiTypeAccountId(enumNum(LedgerJournalACType),LedgerJournalACType::Ledger,[CashAccountMapping.MainAccountIddebitset2,CashAccountMapping.MainAccountIddebitset2]);
    dimensionDefaultnew = this.findDefaultDimension( tpmsPJStagingDB.Vertical,tpmsPJStagingDB.Location,tpmsPJStagingDB.Event);

    ledgerJournalTrans.LedgerDimension          = DimensionDefaultingService::serviceCreateLedgerDimension(ledgerDimension,str2int64(tpmsPJStagingDB.Vertical));//,DimensionDefault);
    //DimensionStorage::getDefaultAccountForMainAccountNum(CashAccountMapping.MainAccountIddebitset2);//, LedgerJournalACType::Ledger);
    ledgerJournalTrans.modifiedField(fieldNum(LedgerJournalTrans, LedgerDimension));
    //dimensionValues                             = GOD_getFinancialDimensionsByRecId(CustTable::find(tpmsPJStagingDB.CustAccount).DefaultDimension);



      //dimensionValues                               = GOD_getFinancialDimensionsByRecId(MainAccount::findByMainAccountId(CashAccountMapping.MainAccountIddebitset2).RecId);
     //dimensionValues = GOD_getFinancialDimensionsByRecId(5637164306);

        for(i=1; i<=conLen(dimensionValues); i+=2)
    {
        if(conPeek(dimensionValues,i) == #Membership)
        {
            membership  = conPeek(dimensionValues,i+1);
            break;
        }
    }

     //LedgerjournalTrans.defaultdimension = ledgerJournalTable.DefaultDimension;
   LedgerjournalTrans.defaultdimension         = this.DimensionDefault(membership);
   LedgerjournalTrans.OffsetDefaultDimension   = this.DimensionDefault(membership);
    ledgerJournalTable.DefaultDimension         = this.DimensionDefault(membership);
    ledgerJournalTrans.PostingProfile           = custLedgerAccount.PostingProfile;
    ledgerJournalTrans.OffsetAccountType        = this.getOffsetAccountType();
    ledgerJournalTrans.OffsetLedgerDimension    = this.CreateLedgerDimensionsforcashsecond(ledgerjournalname.OffsetLedgerDimension,LedgerjournalTrans.defaultdimension);

    if(!ledgerJournalTrans.OffsetLedgerDimension)
    {
        errorLog += "@IMT272";
    }

    if(CustPaymModeTable::find(tpmsPJStagingDB.PaymMode) || !tpmsPJStagingDB.PaymMode)
    {
        LedgerjournalTrans.PaymMode             = tpmsPJStagingDB.PaymMode;
    }
    else
    {
        LedgerjournalTrans.PaymMode = "";
        errorLog += "@IMT253";
    }

    Numseqvoucher = null;


}

Labels

#veryusefulcode (1) AIF (8) AOT Maps (1) Args (1) Ax 2009 Reports (2) AX 2012 navigation (1) Ax 2012 Interview Questions (1) AX 7 (2) AX Architecture (1) Ax Backup (1) AX Workflow (2) AX2012 (1) AX2012 R2 (1) Ax2012R3 (1) AX2012R3 Dynamics Connector Step by Step Installation and Configuration (1) AX2012R3 EP Step by Step Installation and Configuration EP R3 (1) AX2012R3 HelpServer Step by Step Installation and Configuration (1) AX2012R3 Rapid Start Connector Step by Step Installation and Configuration (1) AX2012R3 Report Server and Analysis Server Step by Step Installation and Configuration (1) AX7 (1) Best practices (1) Blocking user to enter (1) Collection Classes (1) Container (1) D365FO (3) Data Migration Frame Work ax 2012R3 (1) Deleting duplicate Record from Table – Ax2012 (1) Delivery due date notification workflow in Ax 2012 (1) Development Steps EP (1) Dimensions (1) DIXF (1) DMF in Ax 2012 R3 (1) Dynamics Ax 2012 Interview Questions (1) DYNAMICS AX 2012 INTERVIEW QUESTIONS PART 2 (1) DYNAMICS AX 7 (1) EDT relation Migration Tool (1) EP AX 2012 (1) Ep Lookup (1) Error (1) Event Handler (1) F5 (1) File Handling (4) Filter on AX2012 Listpage (1) filtering (2) financial dimensions in AX 2012 (3) form (1) images (1) Installation and Configration (4) Installation and Configuration (11) Installation of Management Reporter 2012 for AX 2012 (1) Interaction class in ax 2012 (1) Interview Question (1) Interview Questions For Ax 2012 (1) Invent DIm (1) Jobs (2) license (1) List page and form menuitem enable code (1) Methods (1) microsoft Dynamics AX 365FO (1) Number Sequence Generation – AX 2012 (5) Number Sequence2012 (1) OLTP-OLAP (1) Passing Args (1) Passing form caller and menu item caller in ax 2012 (1) Passing Multiple Records Args (1) Posting in Ax 2012 (1) POSTING PURCHASE ORDER (1) Query (1) Query Filter Form (2) Query Ranges in X++ (1) Question and Answer (1) Report (1) Reports Controller class (1) RLS in ax 2009 (1) SALES ORDER IMPORT/EXPORT FRAMEWORK BY DMF (1) Security (1) security roles (1) Security Sysqueryrangeutil (1) Sharepoint 2016 (1) SQL SERVER (1) SSRS (2) SSRS Reports Controller class (2) Table collections & Virtual company (1) Time (1) TIPS AND TRICKS (1) Web service AIF (3) Web Services on IIS (AIF) Step by Step Installation and Configuration (1) workflow ax2012 (1) Workflow installation (1) Workflow Method (3) X++ (1)