Wednesday, 30 August 2017

How to get Company information and tax information using X++ code in Ax 2012

 How to get Company information and tax information using X++ code in Ax 2012


static void CompanyInformation(Args _args)
{
    CompanyInfo     Company;
    ;
    Company = CompanyInfo::find();
    info(strFmt("Company Name : %1", Company.Name));
    info(strFmt("Company Phone : %1", Company.phone()));
    info(strFmt("Company Phone : %1", Company.telefax()));
    info(strFmt("Company Address : %1", Company.postalAddress().Address));
}
How to get Company full name using x++ code 
str     countryName;

countryName= logisticsAddressCountryRegion::name(countryRegionId);

Company Tax details using X++ code
IEC
display TaxRegistrationNumber_IN  tax_IEC()
{
    TaxInformation_IN        taxInformation_IN;

    taxInformation_IN   = TaxInformation_IN::findDefaultbyLocation(LogisticsPostalAddress::findRecId(this.PrimaryAddressLocation).Location);

    return TaxRegistrationNumbers_IN::find(taxInformation_IN.IECRegistrationNumberTable).RegistrationNumber;
}

Service Tax (STC)
display TaxRegistrationNumber_IN  tax_STC()
{
    TaxInformation_IN        taxInformation_IN;

    taxInformation_IN   = TaxInformation_IN::findDefaultbyLocation(LogisticsPostalAddress::findRecId(this.PrimaryAddressLocation).Location);

    return TaxRegistrationNumbers_IN::find(taxInformation_IN.STCRegistrationNumberTable).RegistrationNumber;

}

Vendor STC number
public str vendorSTC(AccountNum   _accountNum)
{
    VendTable           vendTable;
    DirPartyTable       dirPartyTable;
    LogisticsLocation   logisticsLocation;
    TaxInformation_IN   taxInformation_IN;

    select vendTable where vendTable.AccountNum == _accountNum
        join dirPartyTable
            where dirPartyTable.RecId == vendTable.Party
        join logisticsLocation
            where logisticsLocation.RecId == dirPartyTable.PrimaryAddressLocation;


    taxInformation_IN   = TaxInformation_IN::findDefaultbyLocation(logisticsLocation.RecId);

    return TaxRegistrationNumbers_IN::find(taxInformation_IN.STCRegistrationNumberTable).RegistrationNumber;


}


Tax Identification number (TIN)
display TaxRegistrationNumber_IN  tax_TIN()
{
    TaxInformation_IN        taxInformation_IN;

    taxInformation_IN   = TaxInformation_IN::findDefaultbyLocation(LogisticsPostalAddress::findRecId(this.PrimaryAddressLocation).Location);

    return TaxRegistrationNumbers_IN::find(taxInformation_IN.TIN).RegistrationNumber;

}

Tax Account number(TAN) or PAN

display TaxRegistrationNumber_IN  tax_TAN()
{
    TaxInformation_IN           taxInformation_IN;
    utcDateTime                 fromDate, toDate;
    TaxRegistrationNumbers_IN   TaxRegistrationNumbers_IN;

    fromDate = DateTimeUtil::getSystemDateTime();
    toDate = DateTimeUtil::maxValue();

    taxInformation_IN   = TaxInformation_IN::findDefaultbyLocation(LogisticsPostalAddress::findByLocationAndValidDateTime_IN(this.PrimaryAddressLocation, fromDate, toDate).Location);
    select firstFast TaxRegistrationNumbers_IN
            where TaxRegistrationNumbers_IN.RecId   == taxInformation_IN.TAN
                &&   TaxRegistrationNumbers_IN.TaxType == TaxType_IN::None;

    return TaxRegistrationNumbers_IN.RegistrationNumber;
}

// Company GSTINNumber 
   select companyInfo where companyInfo.DataArea == curext()
           join dirpartytable where dirpartytable.PartyNumber == companyInfo.PartyNumber
               join dirPartyLocation where dirPartyLocation.Party == dirpartytable.RecId
                   join logisticsLocation where logisticsLocation.RecId == dirPartyLocation.Location
                      join taxInformation_IN where taxInformation_IN.RegistrationLocation == logisticsLocation.RecId
                                                              && taxInformation_IN.IsPrimary == NoYes::Yes;

  tmp.comapanyGSTINNumber = TaxRegistrationNumbers_IN::find(taxInformation_IN.GSTIN).RegistrationNumber;

 //Vendor GSTINNumber
  select vendtable1 where vendtable1.AccountNum==vendtable.AccountNum
          join dirPartyLocation where dirPartyLocation.Party == vendtable1.Party
              join logisticsLocation where logisticsLocation.RecId == dirPartyLocation.Location
                   join taxInformation_IN where taxInformation_IN.RegistrationLocation == logisticsLocation.RecId
                                                          && taxInformation_IN.IsPrimary == NoYes::Yes;

     tmp.vendorGSTINNumber = TaxRegistrationNumbers_IN::find(taxInformation_IN.GSTIN).RegistrationNumber;

  // CGST , SGST & IGST numbers with rates.
  select firstOnly HSNCode, SAC from taxDocumentRowTransaction_IN
          join RecId, DiscountAmount from taxDocumentRowTransaction
               where taxDocumentRowTransaction.RecId == taxDocumentRowTransaction_IN.TaxDocumentRowTransactionRecId
               && taxDocumentRowTransaction.TransactionHeaderTableId == vendInvoiceinfotable.TableId
               && taxDocumentRowTransaction.TransactionHeaderRecId == vendInvoiceinfotable.RecId
               && taxDocumentRowTransaction.TransactionLineTableId == vendInvoiceinfoline.TableId
               && taxDocumentRowTransaction.TransactionLineRecId == vendInvoiceinfoline.RecId;

      if(taxDocumentRowTransaction.RecId)
     {
           while select taxDocumentComponentTransaction

            where taxDocumentComponentTransaction.TaxDocumentRowTransactionRecId == taxDocumentRowTransaction.RecId
         {
               if(taxDocumentComponentTransaction.TaxCode =="CGST")
               {
                     tmp.CGST_TaxRate = taxDocumentComponentTransaction.TaxRate*100;
                     tmp.CGST = taxDocumentComponentTransaction.TaxAmountCur;
               }
              if(taxDocumentComponentTransaction.TaxCode == "SGST")
              {
                    tmp.SGST_Taxrate = taxDocumentComponentTransaction.TaxRate*100;
                    tmp.SGST = taxDocumentComponentTransaction.TaxAmountCur;
              }
             if(taxDocumentComponentTransaction.TaxCode == "IGST")
             {
                   tmp.IGST_Taxrate = taxDocumentComponentTransaction.TaxRate*100;
                   tmp.IGST = taxDocumentComponentTransaction.TaxAmountCur;
             }
       }
   }



For multiple Phone numbers and fax Details

static void Companywithmultiplephonenumber(Args _args)
{
 
    DirPartyContactInfoView         contactInfoView;
    CompanyInfo companyinfo;
 
    companyinfo = CompanyInfo::find();
    info(strfmt("%1",companyinfo.Name));
 
  while  select  contactInfoView
        where
             contactInfoView.Type == LogisticsElectronicAddressMethodType::Phone
            || contactInfoView.Type == LogisticsElectronicAddressMethodType::Fax
            && contactInfoView.Party == companyinfo.RecId
    {
         
        if(contactInfoView.Type == LogisticsElectronicAddressMethodType::Phone)
        {
            info(strFmt("Description - %1   Phone -             %2",contactInfoView.LocationName,contactInfoView.Locator));
        }
        else
        {
            info(strFmt("Description - %1   Fax - %2",contactInfoView.LocationName,contactInfoView.Locator));
        }  
    }
}



static void CompanyInfo(Args _args)
{
    DirPartyContactInfoView         contactInfoView,contactInfoPhone,contactInfoFax;
    Name                            LocationName,Phone,Fax;
    description255                  contactAddress;
    CompanyInfo                     companyInfo = CompanyInfo::find();
    container                       CompanyLogo = FormLetter::companyLogo();
    Name                            PrintedBy   = xUserInfo::find(false,curUserId()).name;

    while  select contactInfoView group by LocationName
        where contactInfoView.Party == companyinfo.RecId
     {
           LocationName = contactInfoView.LocationName;

         select contactInfoPhone where contactInfoPhone.Party == companyinfo.RecId
         && contactInfoPhone.Type == LogisticsElectronicAddressMethodType::Phone
         && contactInfoPhone.LocationName == LocationName;

         if(contactInfoPhone)
         {
             Phone     = contactInfoPhone.Locator;
         }
         select contactInfoFax where contactInfoFax.Party == companyinfo.RecId
         && contactInfoFax.Type == LogisticsElectronicAddressMethodType::Fax
         && contactInfoFax.LocationName == LocationName;

         if(contactInfoFax)
         {
            Fax       = contactInfoFax.Locator;
         }

         contactAddress += LocationName + " Tel: " + Phone + " Fax: " + Fax + " " +'\n';


    }
    info(strFmt("ContactAddress = %1 , ExcutedBy = %2",contactAddress,PrintedBy));
}

Thursday, 24 August 2017

How to Validate GSTIN Number in ax 2012

How to Validate GSTIN Number in ax 2012

What is GSTIN - Goods & Services Tax Identification Number?

All the business entities registering under GST will be provided a unique identification number known as GSTIN or GST Identification Number. 

Currently any dealer registered under state VAT law has a unique TIN number assigned to him by state tax authorities. Similarly, service tax registration number is assigned to a service provider by Central Board of Excise and Customs (CBEC). 

Under GST regime, all these parties will come under one single authority and the different identification numbers will be replaced by a single type of registration number for everyone (GSTIN). This will ensure better administration by the authority and greater compliance by taxpayers and hopefully improve tax collection.

Let’s understand the structure of GST Identification Number:

Every taxpayer will be assigned a state-wise PAN-based Goods and Services Taxpayer Identification Number (GSTIN) which will be 15 digit long.
The first two digits of GSTIN will represent the state code according to Indian Census 2011. Each state has a unique two digit code like “27” for Maharashtra and “10” for Bihar.
The next ten digits of GSTIN will be the PAN number of the taxpayer.
13th digit indicates the number of registrations an entity has within a state for the same PAN. 

It will be an alpha-numeric number (first 1-9 and then A-Z) and will be assigned on the basis of number of registrations a legal entity (having the same PAN) has within one state. 

For example, if a legal entity has single or one registration only within a state then it will be assigned the number “1” as 13th digit of the GSTIN. If the same legal entity gets another or second registration for a second business vertical within the same state, then the 13th digit of GSTIN assigned to this entity will become “2”. Similarly, if an entity has 11 registrations in the same state then it will be assigned letter “B” in the 13th place. This way up to 35 business verticals of any legal entity can be registered within a state using this system.
The fourteenth digit currently has no use and therefore will be “Z” by default.
The last digit will be a check code which will be used for detection of errors.


Will existing taxpayers under Central Excise or Service Tax or State VAT have to apply for fresh registration under GST?

The answer is no. All the taxpayers with PAN validated from CBDT’s database are not required to apply for fresh registration under GST. They can get provisional GSTIN from GST portal with a validity of 6 months so that they can provide relevant data as per GST registration form. 

Once they complete data filing process, their provisional registration will get converted into regular registration. After this, further notification by relevant tax authorities will be issued for giving timelines. 

However, the service tax assesses having centralized registration will have to apply for a fresh registration in the respective states wherever they operate their businesses.

static void ValidateGSTIN(Args _args)
{
    str RegistrationNumber;

    RegistrationNumber ="24AACHA6869P1Z1";

    #define.alphabets('ABCDEFGHIJKLMNOPQRSTUVWXYZ')
    #define.numbers('0123456789')
    #define.15(15)
    #define.20(20)

    if(
    (strkeep(substr(RegistrationNumber, 1, 2), #numbers) != substr(RegistrationNumber, 1, 2)) ||
    (strkeep(substr(RegistrationNumber, 3, 5), #alphabets)   != substr(RegistrationNumber, 3, 5)) ||
    (strkeep(substr(RegistrationNumber, 8, 4), #numbers) != substr(RegistrationNumber, 8, 4)) ||
    (strkeep(substr(RegistrationNumber, 12, 1), #alphabets)   != substr(RegistrationNumber, 12, 1)) ||
    (strlen(RegistrationNumber)   != #15 ) ||
    (strkeep(substr(RegistrationNumber, 13, 1), #numbers)   != substr(RegistrationNumber, 13, 1)) ||
    (strkeep(substr(RegistrationNumber, 14, 1), #alphabets)   != substr(RegistrationNumber, 14, 1))
    //Number or Charactor
    //(strkeep(substr(RegistrationNumber, 15, 1), #numbers)   != substr(RegistrationNumber, 15, 1))
    //(strkeep(substr(RegistrationNumber, 15, 1), #alphabets)   != substr(RegistrationNumber, 15, 1))
    )
    {
        info("Registration Number must be 2 Number, 5 Charactors, 4 Numbers, 1 Charactor, 1 Number, 1 Charactor, Last Char Number or Alpha");
    }
    else
    {
        info(strFmt("Valid GSTTIN Numbet - %1",RegistrationNumber));
    }

}

How to get PAN From GSTIN in ax 2012

How to get PAN From GSTIN in ax 2012

What is Goods and Services Identification number (GSTIN)?

All the business entities registering under GST will be provided a unique identification number known as GSTIN or GST Identification Number.

Currently any dealer registered under state value added tax (VAT) law has a unique TIN number assigned to him by state tax authorities. Similarly, Service Tax Registration Number is assigned to a service provider by Central Board of Excise and Customs (CBEC).

Under GST regime, all these parties will come under one single authority and the different identification numbers(IN) that will be replaced by a single type of registration number for everyone i.e.,  Goods and Services Identification number (GSTIN). This will ensure better administration by the authority and greater compliance by taxpayers and hopefully improve tax collection.

The first 2 digits of the 15 digit GSTIN will represent the state code.
The next 10 digits will be the PAN number of person or firm engaged in Business.
As proposed the State Code as defined under the Indian Census 2011 would be adopted In the GSTIN. As per the terms of the Indian Census 2011, every State has been allotted a unique two digit code. For 01 for Jammu and Kashmir, 02 for Himachal Pradesh, 03 for Punjab.
The 13th would represent the number of registrations an entity has with in a state under the same PAN. It will be an alpha-numeric number (first 1-9 and then A-Z) and will be assigned on the basis of a number of registrations a legal entity (having the same PAN) in the same state.

What is Permanent account number ( PAN )

Permanent Account Number (PAN) is a ten-digit alphanumeric number, issued in the form of a laminated tamper proof card, by the Income Tax Department of India.

The Permanent Account Number (PAN) is unique to an individual or entity and it is valid across India. Permanent Account Number once allotted to an individual or entity is unaffected by a change of name, address within or across states in India or other factors.

Meaning of PAN card

A typical Permanent Account Number is would look like AFZPK7190K... The logic behind the array of numbers and alphabets is as follows: 

First three characters i.e. "AFZ" in the above PAN are alphabetic series running from AAA to ZZZ. 
Fourth character i.e. "P" in the above PAN represents the status of the PAN holder.

"P" stands for Individual.
"F" stands for Firm.
"C" stands for Company.
"H" stands for HUF. 
"A" stands for AOP. 
"T" stands for TRUST etc.

Fifth character i.e. "K" in the above PAN represents first character of the PAN holder's last name/surname.
Next four characters i.e. "7190" in the above PAN are sequential number running from 0001 to 9999.
Last character i.e. "K" in the above PAN is an alphabetic check digit.

static void GetPANFromGSTIN(Args _args)
{
    str RegistrationNumber;

    RegistrationNumber ="24AACHA6869P1ZA";
    RegistrationNumber = substr(RegistrationNumber,3,strLen(RegistrationNumber)-5);
    info(strFmt("%1",RegistrationNumber));
}

How to get salesline taxes in ax 2012

Description : If we customize Sales Invoice and Free Tax Invoice report for AX2012, we may need to get sales tax information. But how to get it. They are quite several ways to get it, and it depends only type of document you print also.

If you need go to until every line level, you can use.

static void CalcTaxForSalesLine(Args _args)
{
    TaxOnItem       TaxOnItem;
    TaxGroupData    TaxGroupData;
    real            TaxAmount;
    TaxValue        TaxValue;
    SalesLine       SalesLine
    ;
    
    select firstOnly salesLine where salesLine.SalesId == 'YourSalesOrderId';
    if(salesLine.TaxItemGroup && salesLine.TaxGroup && salesLine.LineAmount != 0)
    {
        while select TaxOnItem
            where TaxOnItem.TaxItemGroup == salesline.TaxItemGroup
        {
            if(TaxOnItem)
            {
                while select TaxGroupData
                    where TaxGroupData.TaxGroup == Salesline.TaxGroup
                        && TaxGroupData.TaxCode  == TaxOnItem.TaxCode
                {
                    if(TaxGroupData)
                    {
                        TaxValue  =  TaxData::find(TaxOnItem.TaxCode, Systemdateget(), 0).TaxValue;
                        TaxAmount = (Salesline.LineAmount * TaxValue) / 100;
                        info(strFmt("Rate = %1, Tax Amount = %2",TaxValue,TaxAmount));
                        
                    }
                }
            }
        }
    }
}

How to Calculate Purchase order confirmation tax details (IGST,CGST,SGST) in Dynamics Ax 2012

How to Calculate Purchase order confirmation tax details (IGST,CGST,SGST) in Dynamics Ax 2012

Description : How to calculate the GST taxes on purchase order confirmation. Here i am sharing some code to get Taxes details (IGST/CGST/SGST) in AX.

static void GSTTotal(Args _args)
{
    vendPurchOrderJour vendPurchOrderJour;
    ITaxDocument taxDocument;
    ITaxDocumentComponentLineEnumerator componentLineEnumerator;
    ITaxDocumentComponentLine componentLineObject;
    ITaxDocumentMeasureEnumerator measureEnumerator;
    TaxAmount taxAmount,taxValue;
    TaxComponent_IN taxComponent;
    ;
    vendPurchOrderJour = vendPurchOrderJour::findRecId(5637291565); //Need to pass Confirmation journal recid
    taxDocument = TaxBusinessService::getTaxDocumentBySource(vendPurchOrderJour.TableId, vendPurchOrderJour.RecId);

    componentLineEnumerator = taxDocument.componentLines();

    while(componentLineEnumerator.moveNext())
    {
        componentLineObject = componentLineEnumerator.current();

        taxComponent = componentLineObject.metaData().taxComponent();
        taxValue = componentLineObject.getMeasure("Rate").value().value() * 100;
        taxAmount = componentLineObject.getMeasure("Tax Amount").value().value();

        info(strFmt("Component %1 ,Rate %2, Amount%3",taxComponent,taxValue,taxAmount));
    }
}

Wednesday, 23 August 2017

Container Example in ax 2012


1.      Difference between following
condel   :- Use condel to delete one or more items from a container.
confind :- Use confind to locate a sequence of items in a container. 
conins   :- Use conins to insert some items into a container.
conlen   :- Use conlen to find out how many items there are in a container.
connull  :- Use connull to explicitly dispose of the contents of a container.
conpeek :- Use conpeek to extract an item from a container, and to convert it into another data type  
conpoke :- Use conpoke to replace (poke) an item in a container.

public void postJournal(container   _journalNum)
{
    int cnt;
    LedgerjournalCheckPost     ledgerjournalCheckPost;
    cnt = 1;
    while(cnt <= conLen(_journalNum))
    {
        try
        {
            if(cnt > conLen(_journalNum))
            {
                break;
            }
            ledgerjournalTable = LedgerjournalTable::find(conPeek(_journalNum,cnt));
            ledgerjournalCheckPost = LedgerjournalCheckPost::newLedgerJournalTable(ledgerjournalTable,NoYes::Yes);
            ttsBegin;
            ledgerjournalCheckPost.run();
            this.updateStagingDBRecRead(conPeek(_journalNum,cnt),NoYes::Yes);
            ttsCommit;
            cnt++;
        }
        catch
        {
            this.updateStagingDBRecRead(conPeek(_journalNum,cnt),NoYes::No);
            cnt++;
            continue;
        }
    }
}

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)