Application Development and Automation 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: 
Read only

Regd: Converting Numbers

Former Member
0 Likes
1,154

Hi All,

How to Conver the Numbers into Alphabetical words i.e. if the toal value of a bill is Rs.6078.30/- in words how to convert it into words. like Ruppess Six thousand seventy eight and thiry paise only.

I tried with conversion from the last but while converting it gives an abap dump error.

Pls Suggestions and Help will be much appreciated.

Thanks & Regds.

Ramesh.

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
1,036

HI ramesh

you can use the functional module

CALL FUNCTION 'SPELL_AMOUNT'

EXPORTING

AMOUNT = IS_HEADER-NETWR

CURRENCY = IS_HEADER-WAERK

LANGUAGE = SY-LANGU

IMPORTING

IN_WORDS = G_AMOUNT_WORDS

EXCEPTIONS

NOT_FOUND = 1

TOO_LARGE = 2

OTHERS = 3.

<b>

tyr this code it will help you</b>

FUNCTION Z_FI_AMT_WRDS_CONVERT .

*"----


""Local interface:

*" IMPORTING

*" REFERENCE(AMT)

*" EXPORTING

*" REFERENCE(WORD) TYPE SPELL-WORD

*"----


amt_c1 = amt.

replace '.' with 'D' into amt_c1.

SEARCH amt_c1 for 'D'.

IF sy-subrc = 0.

amt_wh1 = amt_c1+0(sy-fdpos).

wrk_fdpos = sy-fdpos + 1.

amt_dc1 = amt_c1+wrk_fdpos(2).

ELSE.

amt_wh1 = amt_c1.

amt_dc1 = '00'.

ENDIF.

amtnmr = amt_wh1.

amtdec = amt_dc1.

CONCATENATE amtnmr amtdec INTO amount.

CALL FUNCTION 'SPELL_AMOUNT'

EXPORTING

amount = amount

currency = 'INR'

filler = ' '

language = 'E'

IMPORTING

in_words = amountrs.

*WRITE: / 'amount in figures: ' ,'Rs.-->', AMTNMR,'.',AMTDEC.

*WRITE: / 'Amount in WORDS.: ' ,' Rs.' ,AMOUNTRS-WORD,

*'AND' ,AMOUNTRS-DECWORD ,'Paisa Only'.

*SKIP.

CLEAR: unit1,digit1,unit2,digit2,unit3,digit3,unit4,digit4,word1,word2,

word3,word4,word.

digit1 = amtnmr+14.

unit1 = amtnmr+13.

digit2 = amtnmr+12.

unit2 = '0'.

digit3 = amtnmr+11.

unit3 = amtnmr+10.

digit4 = amtnmr+9.

unit4 = amtnmr+8.

digit5 = amtnmr+7.

unit5 = amtnmr+6.

digit6 = amtnmr+5.

unit6 = '0'.

digit7 = amtnmr+4.

unit7 = amtnmr+3.

digit8 = amtnmr+2.

unit8 = amtnmr+1.

digit9 = amtnmr.

unit9 = '0'.

*WRITE:/ 'UNIT9 = ' , UNIT9, 'DIGIT9 = ', DIGIT9.

IF ( unit1 NE '0' ) OR ( digit1 NE '0' ).

SELECT SINGLE wort INTO word1 FROM t015z WHERE einh = unit1

AND ziff = digit1 AND spras = 'E'.

  • word1 = t015z-wort.

REPLACE ';' WITH '' INTO word1.

*write: / word1.

ENDIF.

IF unit2 NE '0' OR digit2 NE '0'.

SELECT SINGLE * FROM t015z WHERE einh = unit2

AND ziff = digit2 AND spras = 'E'.

word2 = t015z-wort.

REPLACE ';' WITH '' INTO word2.

CONCATENATE word2 ' HUNDRED ' INTO word2.

*REPLACE '(FEMININE)' WITH '' INTO WORD2.

*write: / word2.

ENDIF.

IF unit3 NE '0' OR digit3 NE '0'.

SELECT SINGLE * FROM t015z WHERE einh = unit3

AND ziff = digit3 AND spras = 'E'.

word3 = t015z-wort .

CONCATENATE word3 ' THOUSAND ' INTO word3.

REPLACE ';' WITH '' INTO word3.

*write: / word3.

ENDIF.

IF unit4 NE '0' OR digit4 NE '0'.

SELECT SINGLE * FROM t015z WHERE einh = unit4

AND ziff = digit4 AND spras = 'E'.

word4 = t015z-wort.

REPLACE ';' WITH '' INTO word4.

CONCATENATE word4 ' LAKH ' INTO word4.

*WRITE: / WORD4.

ENDIF.

IF unit5 NE '0' OR digit5 NE '0'.

SELECT SINGLE * FROM t015z WHERE einh = unit5

AND ziff = digit5 AND spras = 'E'.

word5 = t015z-wort.

REPLACE ';' WITH '' INTO word5.

*write: / word5.

ENDIF.

IF unit6 NE '0' OR digit6 NE '0'.

*UNIT6 = 'H'.

SELECT SINGLE * FROM t015z WHERE einh = unit6

AND ziff = digit6 AND spras = 'E'.

word6 = t015z-wort.

REPLACE ';' WITH ' ' INTO word6.

CONCATENATE word6 ' HUNDRED ' INTO word6.

*REPLACE '(FEMININE)' WITH '' INTO WORD6.

*write: / word6.

ENDIF.

IF unit7 NE '0' OR digit7 NE '0'.

SELECT SINGLE * FROM t015z WHERE einh = unit7

AND ziff = digit7 AND spras = 'E'.

word7 = t015z-wort.

REPLACE ';' WITH ' ' INTO word7.

CONCATENATE word7 ' THOUSAND ' INTO word7.

*write: / word7.

ENDIF.

IF unit8 NE '0' OR digit8 NE '0'.

SELECT SINGLE * FROM t015z WHERE einh = unit8

AND ziff = digit8 AND spras = 'E'.

word8 = t015z-wort.

REPLACE ';' WITH '' INTO word8.

CONCATENATE word8 ' LAKHS ' INTO word8.

*write: / word8.

ENDIF.

IF digit9 NE '0'.

unit9 = '0'.

SELECT SINGLE * FROM t015z WHERE einh = unit9

AND ziff = digit9 AND spras = 'E'.

word9 = t015z-wort.

REPLACE ';' WITH ' ' INTO word9.

*REPLACE '(FEMININE)' WITH ' ' INTO WORD9.

CONCATENATE word9 ' HUNDRED ' INTO word9.

ENDIF.

CONCATENATE word9 word8 word7 word6 word5 ' CRORE ' INTO wordc

SEPARATED BY space.

*WRITE:/ 'Amount in Rs.------->'.

IF amountrs-decword NE 'ZERO'.

CONCATENATE ' AND PAISE ' amountrs-decword INTO dcwrd

SEPARATED BY space.

ENDIF.

IF amtnmr > 9999999.

*WRITE: / WORDC.

*ENDIF.

CONCATENATE 'RUPEES' wordc word4 word3 word2 word1 dcwrd 'ONLY'

INTO word SEPARATED BY space.

ELSE.

CONCATENATE 'RUPEES'word4 word3 word2 word1 dcwrd 'ONLY'

INTO word SEPARATED BY space.

ENDIF.

CLEAR dcwrd.

*WRITE 😕 WORD.

*WRITE: 'AND' ,AMOUNTRS-DECWORD ,'Paise Only

ENDFUNCTION.

regards

kishore

Message was edited by: Harikishore Sreenivasulu

8 REPLIES 8
Read only

Former Member
0 Likes
1,036

use fm

SPELL_AMOUNT

=================================================

I hope u are not getting the words for decimal values using the above fm.

solution:

the function does give the wording of the decimal part , the structure which stores the result has two fields word and decword. Decword stores the wording for the decimal part.

e.g. if you enter 10.50 INR as the input , the output is

Word --> TEN

Decword --> FIFTY.

Hi Ramesh,

here is the code

data: v_amt type p decimals 2 value '10.50'.

data: s_spell like spell,

v_desc type string.

CALL FUNCTION 'SPELL_AMOUNT'

EXPORTING

AMOUNT = v_amt

CURRENCY = 'INR'

  • FILLER = ' '

LANGUAGE = SY-LANGU

IMPORTING

IN_WORDS = s_spell

  • EXCEPTIONS

  • NOT_FOUND = 1

  • TOO_LARGE = 2

  • OTHERS = 3

.

IF sy-subrc = 0.

concatenate s_spell-word 'RUPEES AND'

s_spell-decword 'PAISE'

into v_desc separated by space.

write: v_desc.

ENDIF.

Message was edited by: Eswar Kanakanti

Read only

Former Member
0 Likes
1,037

HI ramesh

you can use the functional module

CALL FUNCTION 'SPELL_AMOUNT'

EXPORTING

AMOUNT = IS_HEADER-NETWR

CURRENCY = IS_HEADER-WAERK

LANGUAGE = SY-LANGU

IMPORTING

IN_WORDS = G_AMOUNT_WORDS

EXCEPTIONS

NOT_FOUND = 1

TOO_LARGE = 2

OTHERS = 3.

<b>

tyr this code it will help you</b>

FUNCTION Z_FI_AMT_WRDS_CONVERT .

*"----


""Local interface:

*" IMPORTING

*" REFERENCE(AMT)

*" EXPORTING

*" REFERENCE(WORD) TYPE SPELL-WORD

*"----


amt_c1 = amt.

replace '.' with 'D' into amt_c1.

SEARCH amt_c1 for 'D'.

IF sy-subrc = 0.

amt_wh1 = amt_c1+0(sy-fdpos).

wrk_fdpos = sy-fdpos + 1.

amt_dc1 = amt_c1+wrk_fdpos(2).

ELSE.

amt_wh1 = amt_c1.

amt_dc1 = '00'.

ENDIF.

amtnmr = amt_wh1.

amtdec = amt_dc1.

CONCATENATE amtnmr amtdec INTO amount.

CALL FUNCTION 'SPELL_AMOUNT'

EXPORTING

amount = amount

currency = 'INR'

filler = ' '

language = 'E'

IMPORTING

in_words = amountrs.

*WRITE: / 'amount in figures: ' ,'Rs.-->', AMTNMR,'.',AMTDEC.

*WRITE: / 'Amount in WORDS.: ' ,' Rs.' ,AMOUNTRS-WORD,

*'AND' ,AMOUNTRS-DECWORD ,'Paisa Only'.

*SKIP.

CLEAR: unit1,digit1,unit2,digit2,unit3,digit3,unit4,digit4,word1,word2,

word3,word4,word.

digit1 = amtnmr+14.

unit1 = amtnmr+13.

digit2 = amtnmr+12.

unit2 = '0'.

digit3 = amtnmr+11.

unit3 = amtnmr+10.

digit4 = amtnmr+9.

unit4 = amtnmr+8.

digit5 = amtnmr+7.

unit5 = amtnmr+6.

digit6 = amtnmr+5.

unit6 = '0'.

digit7 = amtnmr+4.

unit7 = amtnmr+3.

digit8 = amtnmr+2.

unit8 = amtnmr+1.

digit9 = amtnmr.

unit9 = '0'.

*WRITE:/ 'UNIT9 = ' , UNIT9, 'DIGIT9 = ', DIGIT9.

IF ( unit1 NE '0' ) OR ( digit1 NE '0' ).

SELECT SINGLE wort INTO word1 FROM t015z WHERE einh = unit1

AND ziff = digit1 AND spras = 'E'.

  • word1 = t015z-wort.

REPLACE ';' WITH '' INTO word1.

*write: / word1.

ENDIF.

IF unit2 NE '0' OR digit2 NE '0'.

SELECT SINGLE * FROM t015z WHERE einh = unit2

AND ziff = digit2 AND spras = 'E'.

word2 = t015z-wort.

REPLACE ';' WITH '' INTO word2.

CONCATENATE word2 ' HUNDRED ' INTO word2.

*REPLACE '(FEMININE)' WITH '' INTO WORD2.

*write: / word2.

ENDIF.

IF unit3 NE '0' OR digit3 NE '0'.

SELECT SINGLE * FROM t015z WHERE einh = unit3

AND ziff = digit3 AND spras = 'E'.

word3 = t015z-wort .

CONCATENATE word3 ' THOUSAND ' INTO word3.

REPLACE ';' WITH '' INTO word3.

*write: / word3.

ENDIF.

IF unit4 NE '0' OR digit4 NE '0'.

SELECT SINGLE * FROM t015z WHERE einh = unit4

AND ziff = digit4 AND spras = 'E'.

word4 = t015z-wort.

REPLACE ';' WITH '' INTO word4.

CONCATENATE word4 ' LAKH ' INTO word4.

*WRITE: / WORD4.

ENDIF.

IF unit5 NE '0' OR digit5 NE '0'.

SELECT SINGLE * FROM t015z WHERE einh = unit5

AND ziff = digit5 AND spras = 'E'.

word5 = t015z-wort.

REPLACE ';' WITH '' INTO word5.

*write: / word5.

ENDIF.

IF unit6 NE '0' OR digit6 NE '0'.

*UNIT6 = 'H'.

SELECT SINGLE * FROM t015z WHERE einh = unit6

AND ziff = digit6 AND spras = 'E'.

word6 = t015z-wort.

REPLACE ';' WITH ' ' INTO word6.

CONCATENATE word6 ' HUNDRED ' INTO word6.

*REPLACE '(FEMININE)' WITH '' INTO WORD6.

*write: / word6.

ENDIF.

IF unit7 NE '0' OR digit7 NE '0'.

SELECT SINGLE * FROM t015z WHERE einh = unit7

AND ziff = digit7 AND spras = 'E'.

word7 = t015z-wort.

REPLACE ';' WITH ' ' INTO word7.

CONCATENATE word7 ' THOUSAND ' INTO word7.

*write: / word7.

ENDIF.

IF unit8 NE '0' OR digit8 NE '0'.

SELECT SINGLE * FROM t015z WHERE einh = unit8

AND ziff = digit8 AND spras = 'E'.

word8 = t015z-wort.

REPLACE ';' WITH '' INTO word8.

CONCATENATE word8 ' LAKHS ' INTO word8.

*write: / word8.

ENDIF.

IF digit9 NE '0'.

unit9 = '0'.

SELECT SINGLE * FROM t015z WHERE einh = unit9

AND ziff = digit9 AND spras = 'E'.

word9 = t015z-wort.

REPLACE ';' WITH ' ' INTO word9.

*REPLACE '(FEMININE)' WITH ' ' INTO WORD9.

CONCATENATE word9 ' HUNDRED ' INTO word9.

ENDIF.

CONCATENATE word9 word8 word7 word6 word5 ' CRORE ' INTO wordc

SEPARATED BY space.

*WRITE:/ 'Amount in Rs.------->'.

IF amountrs-decword NE 'ZERO'.

CONCATENATE ' AND PAISE ' amountrs-decword INTO dcwrd

SEPARATED BY space.

ENDIF.

IF amtnmr > 9999999.

*WRITE: / WORDC.

*ENDIF.

CONCATENATE 'RUPEES' wordc word4 word3 word2 word1 dcwrd 'ONLY'

INTO word SEPARATED BY space.

ELSE.

CONCATENATE 'RUPEES'word4 word3 word2 word1 dcwrd 'ONLY'

INTO word SEPARATED BY space.

ENDIF.

CLEAR dcwrd.

*WRITE 😕 WORD.

*WRITE: 'AND' ,AMOUNTRS-DECWORD ,'Paise Only

ENDFUNCTION.

regards

kishore

Message was edited by: Harikishore Sreenivasulu

Read only

Former Member
0 Likes
1,036

Hi,

Use FM SPELL_AMOUNT


SELECTION-SCREEN SKIP 2.
SELECTION-SCREEN BEGIN OF BLOCK 1 WITH FRAME TITLE TEXT-001.
PARAMETERS:
  SPRACHE    LIKE SY-LANGU      DEFAULT SY-LANGU,
  WAEHRUNG   LIKE PAYR_FI-WAERS DEFAULT 'DEM',
  BETRAG     LIKE PAYR_FI-RWBTR DEFAULT '123456789.12',
  FILLER(1)  TYPE C             DEFAULT ' '.
SELECTION-SCREEN END OF BLOCK 1.

TABLES: PAYR_FI, SPELL.

AT SELECTION-SCREEN OUTPUT.
  IF WAEHRUNG IS INITIAL.
    PAYR_FI-WAERS = '0'.
  ELSE.
    PAYR_FI-WAERS = WAEHRUNG.
  ENDIF.

AT SELECTION-SCREEN ON WAEHRUNG.
  IF WAEHRUNG IS INITIAL.
    PAYR_FI-WAERS = '0'.
  ELSE.
    PAYR_FI-WAERS = WAEHRUNG.
  ENDIF.

START-OF-SELECTION.
  CALL FUNCTION 'SPELL_AMOUNT'
       EXPORTING
            LANGUAGE = SPRACHE
            CURRENCY = WAEHRUNG
            AMOUNT   = BETRAG
            FILLER   = FILLER
       IMPORTING
            IN_WORDS = SPELL.

  PERFORM BETRAG_SCHREIBEN.

  WRITE:
      / SPELL-DIG15,
      8 SPELL-DIG14,
     15 SPELL-DIG13,
     22 SPELL-DIG12,
     29 SPELL-DIG11,
     36 SPELL-DIG10,
     43 SPELL-DIG09,
     50 SPELL-DIG08,
      / SPELL-DIG07,
      8 SPELL-DIG06,
     15 SPELL-DIG05,
     22 SPELL-DIG04,
     29 SPELL-DIG03,
     36 SPELL-DIG02,
     43 SPELL-DIG01.
  SKIP 2.
  WRITE:
      / SPELL-WORD(64),
      / SPELL-WORD+64(64),
      / SPELL-WORD+128(64),
      / SPELL-WORD+192.
  SKIP.
  WRITE:
      / SPELL-DECWORD(64),
      / SPELL-DECWORD+64(64).
  SKIP 2.
  WRITE:
      / SPELL-NUMBER,
        SPELL-DECIMAL.

FORM BETRAG_SCHREIBEN.
  NEW-PAGE NO-TITLE.
  IF WAEHRUNG EQ SPACE OR WAEHRUNG EQ '0'.
    WRITE:
      /(23) BETRAG CURRENCY '0'.
  ELSE.
    WRITE:
      /(23) BETRAG CURRENCY WAEHRUNG, WAEHRUNG.
  ENDIF.
  SKIP 2.
ENDFORM.

Hope it helps...

Lokesh

Read only

Former Member
0 Likes
1,036

Hi,

Use FM SPELL_AMOUNT.

Regards,

Shashank

Read only

vinod_gunaware2
Active Contributor
0 Likes
1,036

SPELL_AMOUNT : Convert numbers and figures in words

convert an amount into words

convert a number into words (CURRENCY=space)

set decimal point in an amount and return number of decimals for the currency (LANGUAGE=space)

HRCM_AMOUNT_TO_STRING_CONVERT

FWOS_CURRENCY_DECIMALS_READ

CONVERT_TO_FOREIGN_CURRENCY : Translate local currency amount into foreign currency

regards

vinod

Read only

jayanthi_jayaraman
Active Contributor
0 Likes
1,036

Hi,

Sample code:

data c1 type SPELL.

CALL FUNCTION 'SPELL_AMOUNT'

EXPORTING

AMOUNT = '1000'

CURRENCY = 'RS'

LANGUAGE = sy-langu

IMPORTING

IN_WORDS = c1.

write c1-word.

Since it will take 1000 as 10.00,it will display the output as ten.

Read only

0 Likes
1,036

Hi,

You can try this also.Kindly reward points if it helps.

data c1(100).

CALL FUNCTION 'HR_IN_CHG_INR_WRDS'

EXPORTING

amt_in_num = '10.00'

IMPORTING

AMT_IN_WORDS = c1.

write c1.

Read only

Former Member
0 Likes
1,036

Hi Ramesh,

you can try with this FM <b>HR_IN_CHG_INR_WRDS</b>

Regards

vijay