Breaking

Tuesday, August 28, 2018

Convert numbers to words in Dynamics Ax 2012

Overview:

Sometimes we need to display amount in work instead of digits. In one of my project I need to display total amount along with words. There are many functionality in the Dynamics Ax to convert digits to words but sometimes we need more better then built-in functionality. So h have create method based on code which will return word instead of digits.

There are more functionality to convert digits to words for different country. If we need to convert digits in US Doller, in IN Rupees, in CA Doller etc…

Here I have convert Digits to words in IN Rupees.

Here I have given simple demonstration to create amount to word in Dynamics Ax. Here I have create method for return word value what you are passing amount. Create below method in your class or form and pass parameter you will get word value.
Public str 1000 ConvertAmountInWords(real _num,str 30 subCurrency="")
{
    int     numOfPennies = frac(_num)*100 mod 100;
    int     test         = real2int(round(_num,0));
    int     paise;
    int     numOfTenths;
    str 20  ones[20], tenths[9], hundreds, thousands, lakhs, crores, millions, billions;
    str 40  textpaise;
    int     tmpnumofpennies;
    int     temp;
    str 200 returntxt;
    boolean Con2;
     int checkPower(int  _test, int _power)
     {
         int     numOfPower;

         if (_test >= _power)
         {
             Con2 = true;
             numOfPower = _test DIV _power;
             if (numOfPower >= 100)
             {
                 temp = numOfPower DIV 100;
                 returntxt = returntxt + ' ' + ones[temp] + ' ' + hundreds;
                 numOfPower = numOfPower MOD 100;
             }
             if (numOfPower >= 20)
             {
                 temp = numOfPower DIV 10;
                 returntxt = returntxt + ' ' + tenths[temp];
                 numOfPower = numOfPower MOD 10;
             }
             if (numOfPower >= 1)
             {
                 returntxt = returntxt + ' ' + ones[numOfPower];
                 numOfPower = numOfPower MOD 10;
             }
             switch(_power)
             {
                 case 1000000000 :
                 {
                     returntxt = returntxt + ' ' + billions;
                     _test = _test MOD 1000000000;
                     break;
                 }
                 case 10000000 :
                 {
                     returntxt = returntxt + ' ' + crores;
                     _test = _test MOD 10000000;
                     break;
                 }
                case 100000 :
                 {
                     returntxt = returntxt + ' ' + lakhs;
                     _test = _test MOD 100000;
                     break;
                 }
                 case 1000 :
                 {
                     returntxt = returntxt + ' ' + thousands;
                     _test = _test MOD 1000;
                     break;
                 }
                 case 100 :
                 {
                     returntxt = returntxt + ' ' + hundreds;
                     _test = _test MOD 100;
                     break;
                 }
             }
         }
         else if(_test == 0)
         {
             if(Con2 == false)
             {
                numOfPower = 20;
                returntxt = returntxt + ' ' + ones[numOfPower];// + ' ' + hundreds;
                 Con2 = true;
             }
            //break;
         }
         return _test;
     }

    ones[20]  = "Zero";
    ones[1]   = "@SYS26620";
    ones[2]   = "@SYS26621";
    ones[3]   = "@SYS26622";
    ones[4]   = "@SYS26626";
    ones[5]   = "@SYS26627";
    ones[6]   = "@SYS26628";
    ones[7]   = "@SYS26629";
    ones[8]   = "@SYS26630";
    ones[9]   = "@SYS26631";
    ones[10]  = "@SYS26632";
    ones[11]  = "@SYS26633";
    ones[12]  = "@SYS26634";
    ones[13]  = "@SYS26635";
    ones[14]  = "@SYS26636";
    ones[15]  = "@SYS26637";
    ones[16]  = "@SYS26638";
    ones[17]  = "@SYS26639";
    ones[18]  = "@SYS26640";
    ones[19]  = "@SYS26641";

    tenths[1] = 'Not used';
    tenths[2] = "@SYS26643";
    tenths[3] = "@SYS26644";
    tenths[4] = "@SYS26645";
    tenths[5] = "@SYS26646";
    tenths[6] = "@SYS26647";
    tenths[7] = "@SYS26648";
    tenths[8] = "@SYS26649";
    tenths[9] = "@SYS26650";

    hundreds  = "@SYS26651";
    thousands = "@SYS26652";
    lakhs     = "Lakh";
    crores    = "Crore";
    millions  = "@SYS26653";
    billions  = "@SYS26654";

 test = checkPower(test, 1000000000);
 test = checkPower(test, 10000000);
 test = checkPower(test, 100000);
 test = checkPower(test, 1000);
 test = checkPower(test, 100);

 if (test >= 20)
 {
  numOfTenths = test DIV 10;
  returntxt = returntxt + ' ' + tenths[numofTenths];
  numOfTenths = numOfTenths MOD 10;
  test = test MOD 10;
 }
 if (test >= 1)
 {
  numOfTenths = test;
  returntxt = returntxt + ' ' + ones[numOfTenths];
 }
 if (numOfPennies)
 {
  returntxt = returntxt + ' ' + "@SYS5534" + "\n\n";
 }
 paise = numofPennies;
 if(paise)
 {
  if(paise >= 20)
  {
   numofTenths = paise DIV 10;
   returntxt = returntxt + ' '+tenths[numofTenths];
   numofTenths = numofTenths MOD 10;
   paise   = paise MOD 10;
  }
  if(paise >= 1)
  {
   numOfTenths=paise;
   returntxt=returntxt+ ' '+ones[numOfTenths];
  }
 returntxt=returntxt + " Paise";
 }
    //Text =    returntxt + " Only";
    return returntxt ;
}
Example:-

In my example like i m giving value of 1500.20 it will return.

"One Thousand Five Hundred And Twenty Paisa"

No comments:

Post a Comment

Thanks for your comment.