Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

REG:Function module

Former Member
0 Kudos

hai,

i want to convert numeric value into text format.

any function module is there.

it's very help full for me..

thank you ,

regards,

sn

8 REPLIES 8

Former Member
0 Kudos

try..

<b>C14W_NUMBER_CHAR_CONVERSION</b>

Former Member
0 Kudos

hi SN,

If that is the amount use FM <b>SPELL_AMOUNT</b> else use <b>C14W_NUMBER_CHAR_CONVERSION</b> based on your requirement

Regards,

Santosh

Former Member
0 Kudos

Hello Sn,

I am assuming you are giving numeric value and want to spell out the value.

Use SPELL_AMOUT and don't provide currency.

Simha_
Employee
Employee
0 Kudos

Hi ,

use this one....

function module....

FUNCTION Z_CONVERT_AMOUNT_TO_WORDS.

*"----


""Local interface:

*" IMPORTING

*" VALUE(F_AMOUNT) LIKE KONV-KAWRT

*" VALUE(F_CURRENCY) LIKE EKKO-WAERS

*" EXPORTING

*" REFERENCE(WORDS) LIKE SPELL-WORD

*" EXCEPTIONS

*" ZERO_VALUE

*" INCORRECT_AMOUNT

*" AMOUNT_HIGH

*" INVALID_CURRENCY

*"----


tables : tcurt.

data: maxno type p.

data : words1 like SPELL.

SELECT SINGLE * FROM TCURt WHERE WAERS = F_CURRENCY

and SPRAS = 'EN'.

if sy-subrc <> 0.

raise invalid_currency.

endif.

if F_CURRENCY = 'INR'.

maxno = 10 ** 10.

if ( F_AMOUNT >= maxno ).

raise AMOUNT_HIGH.

endif.

data declaration----


data: ten(10),single(6),final(130),dec(20),res type i,rp(7).

data: a1 type i,a2 type i,str(20),d type p,m type i,wrdrep(20).

data: cntr type i,f1 type i,f2 type i,f3 type i,f4 type i,f5 type i.

data: f6 type i,f7 type i,f8 type i,f9 type i,f10 type i.

d = ( F_AMOUNT * 100 ) div 100.

res = ( F_AMOUNT * 100 ) mod 100.

if res > 100.

raise incorrect_amount.

endif.

f1 = res div 10.

f2 = res mod 10.

perform setnum using f1 f2 changing wrdrep.

f1 = 0. f2 = 0.

dec = wrdrep.

cntr = 1.

*Go in a loop dividing the numbers by 10 and store the

*residues as a digit in f1 .... f9

while ( d > 0 ).

m = d mod 10.

d = d div 10.

case cntr.

when 1. f1 = m.

when 2. f2 = m.

when 3. f3 = m.

when 4. f4 = m.

when 5. f5 = m.

when 6. f6 = m.

when 7. f7 = m.

when 8. f8 = m.

when 9. f9 = m.

when 10. f10 = m.

endcase.

cntr = cntr + 1.

endwhile.

cntr = cntr - 1.

*Going in loop and sending pair of digits to function setnum to get

*the standing value of digits in words

while ( cntr > 0 ).

if ( cntr <= 2 ).

perform setnum using f2 f1 changing wrdrep.

concatenate final wrdrep into final separated by ' '.

elseif ( cntr = 3 ).

if ( f3 <> 0 ).

perform setnum using 0 f3 changing wrdrep.

concatenate final wrdrep 'Hundred' into final separated by ' '.

endif.

elseif ( cntr <= 5 ).

if ( f5 <> 0 ) or ( f4 <> 0 ).

perform setnum using f5 f4 changing wrdrep.

concatenate final wrdrep 'Thousand' into final separated by ' '.

endif.

if ( cntr = 4 ).

cntr = 5.

endif.

elseif ( cntr <= 7 ).

if ( f7 <> 0 ) or ( f6 <> 0 ).

perform setnum using f7 f6 changing wrdrep.

concatenate final wrdrep 'Lakh' into final separated by ' ' .

endif.

elseif ( cntr <= 9 ).

perform setnum using f9 f8 changing wrdrep.

concatenate final wrdrep 'Crore' into final separated by ' ' .

elseif ( cntr = 10 ).

perform setnum using 0 f10 changing wrdrep.

concatenate final wrdrep 'Hundred' 'And' into final separated by ' '.

endif.

cntr = cntr - 2.

endwhile.

*Output the final

if ( final = ' One' ).rp = 'Rupee'.else. rp = 'Rupees'.endif.

if ( final = '' ) and ( dec = '' ).

final = 'NIL'.

elseif ( final = '' ).

concatenate 'Paise' dec 'Only' into final separated by ' ' .

elseif ( dec = '' ).

concatenate rp final 'Only' into final separated by ' ' .

else.

concatenate rp final 'Paise' dec 'Only' into final separated by ' '

.

endif.

words = final.

else.

call function 'SPELL_AMOUNT'

EXPORTING

AMOUNT = F_AMOUNT

CURRENCY = F_CURRENCY

  • FILLER = ' '

  • LANGUAGE = SY-LANGU

IMPORTING

IN_WORDS = words1

  • EXCEPTIONS

  • NOT_FOUND = 1

  • TOO_LARGE = 2

  • OTHERS = 3

.

if sy-subrc = 0.

words = words1-word. endif.

concatenate tcurt-ktext words 'Only' into words separated by ' '

.

endif.

endfunction.

&----


*& Form SETNUM

&----


  • converts a number into words *

----


  • --> a1,a2 two digits for 2nd and 1st place

  • <-- str outpur in words

----


data: ten(10),single(6),str(20).

*

form setnum using a1 a2 changing str.

ten = ''.single = ''.

if ( a1 = 1 ).

case a2.

when 0. ten = 'Ten'.

when 1. ten = 'Eleven'.

when 2. ten = 'Twelve'.

when 3. ten = 'Thirteen'.

when 4. ten = 'Fourteen'.

when 5. ten = 'Fifteen'.

when 6. ten = 'Sixteen'.

when 7. ten = 'Seventeen'.

when 8. ten = 'Eighteen'.

when 9. ten = 'Nineteen'.

endcase.

else.

case a2.

when 1. single = 'One'.

when 2. single = 'Two'.

when 3. single = 'Three'.

when 4. single = 'Four'.

when 5. single = 'Five'.

when 6. single = 'Six'.

when 7. single = 'Seven'.

when 8. single = 'Eight'.

when 9. single = 'Nine'.

endcase.

case a1.

when 2. ten = 'Twenty'.

when 3. ten = 'Thirty'.

when 4. ten = 'Forty'.

when 5. ten = 'Fifty'.

when 6. ten = 'Sixty'.

when 7. ten = 'Seventy'.

when 8. ten = 'Eighty'.

when 9. ten = 'Ninety'.

endcase.

endif.

if ( single <> '' ) and ( ten <> '' ).

concatenate ten single into str separated by ' '.

elseif single = ''.

str = ten.

else.

str = single.

endif.

endform. " SETNUM

cheers,

Simha.

<b>Reward all the helful answers...</b>

Former Member
0 Kudos

Just use the FM <b>SPELL_AMOUNT</b>

Former Member
0 Kudos

hai,

i want to convert 1 means one

2 means two

like that not curreny field..

spell_amount

C14W_NUMBER_CHAR_CONVERSION

any other function module is there..

thanks in advance,

sn

0 Kudos

Hi,

Consider this code using <b>SPELL_AMOUNT</b> just pass the number 1, 2 ... and will get in words. If not this then use <b>CASE...ENDCASE</b>

Ex:

 CASE int.

WHEN 1.

var = 'ONE'

WHEN 2.

var = 'TWO'

ENDCASE.

<b>Just copy the code and execute.</b>


REPORT  zztest_prd_1                            .

DATA : amount   TYPE i,
       in_words TYPE STANDARD TABLE OF spell WITH HEADER LINE.



DO 9 TIMES.

  amount = sy-index.

  CALL FUNCTION 'SPELL_AMOUNT'
    EXPORTING
      amount    = amount
      language  = sy-langu
    IMPORTING
      in_words  = in_words
    EXCEPTIONS
      not_found = 1
      too_large = 2
      OTHERS    = 3.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  READ TABLE in_words WITH KEY number = amount.
  WRITE : /(5) amount,
           10(15) in_words-word.


ENDDO.

Regards,

AS

0 Kudos

I think the simplest solution is to read table T015Z with language, unit and figure.

example in T015Z

Language = EN

Unit = 0

Figure = 1

Number in words = ONE;

It ends with semi-colon but surely you can use translate command to replace it with space.

Regards

Anurag

Regards

Anurag