Hi guys, today we see how to convert a Amount in Words in d365FO.
We can get it by using standard class Global::numeralsToTxt(). By this method we are not getting the correct words for lakhs. If you print Indian rupees just follow method 2. I have created display method and I added code in that method.
Method 1:
display Tempstr numberToWords() { Amount amount = this.Amount; Notes amount2Str; if (amount > 0) { amount = real2int(round(amount , 1)); } else { amount = real2int(round(-(amount) , 1)); } amount2Str = Global::numeralsToTxt(amount); amount2Str = subStr(amount2Str,5,strLen(amount2Str)-4); amount2Str = subStr(amount2Str,strLen(amount2Str)-10,- strLen(amount2Str)); amount2Str = '(Amount:' +' '+ str2Capital(amount2Str) + ' only)'; return amount2Str; }
Method 2:
display Tempstr numberToWords() { int numOfpaise = frac(this.Amount)*100 mod 100; int test = real2int(round(this.Amount,0)); int paise; int numOfTenths; str 20 ones[19], tenths[9], hundreds, thousands, lakhs, crores, millions, billions; str 40 textpaise; int tmpnumOfpaise; int temp; str 200 returntxt; ; int checkPower(int _test, int _power) { int numOfPower; if (_test >= _power) { 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; } } } return _test; } 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 (numOfpaise) { returntxt = returntxt + ' ' + "@SYS5534" + "\n\n"; } paise = numOfpaise; if (paise) { if (paise >=20) { numofTenths = paise DIV 10; returntxt = returntxt + ' rupees '+ tenths[numofTenths]; numofTenths = numofTenths MOD 10; paise = paise MOD 10; } if (paise >=1) { numOfTenths = paise; returntxt = returntxt + ' ' + ones[numOfTenths]; } return returntxt + " Paise Only"; } return returntxt + " rupees Only"; }
This above method I followed from below reference.
https://www.theaxapta.com/search?q=how+to+convert+amount+in+words
Result:
Keep Daxing!!
No comments:
Post a Comment