‎2006 Mar 07 6:27 AM
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.
‎2006 Mar 07 6:37 AM
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
‎2006 Mar 07 6:29 AM
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
‎2006 Mar 07 6:37 AM
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
‎2006 Mar 07 6:39 AM
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
‎2006 Mar 07 6:42 AM
‎2006 Mar 07 6:45 AM
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
‎2006 Mar 07 6:45 AM
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.
‎2006 Mar 07 6:48 AM
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.
‎2006 Mar 07 7:20 AM
Hi Ramesh,
you can try with this FM <b>HR_IN_CHG_INR_WRDS</b>
Regards
vijay