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

Amount in words Problem in sapscript

Former Member
0 Likes
1,517

I am working on cheque zprint form. In sapscript I passed amount value to se38 program. I got spell words.But

When I given large amount in the table for example ***97,233,999.58. Amount in words is not coming correctly in the sapscript form. 'Nine crore seventy two lakh thirty three thousand nine hundred ninety nine rupe'. Please help meu2026

I am working on cheque zprint form. In sapscript I passed amount value to se38 program. I got spell words.But

When I given large amount in the table for example ***97,233,999.58. Amount in words is not coming correctly in the sapscript form. 'Nine crore seventy two lakh thirty three thousand nine hundred ninety nine rupe'. Please help meu2026

12 REPLIES 12
Read only

Former Member
0 Likes
1,446

Hi,

Try using FM SPELL_AMOUNT

Santhosh

Read only

0 Likes
1,446

please see the code..

In sapscript. Note point: Here amount in words not coming correctly.(&SPELL-WORD1&)

PERFORM CHECK_DATA IN PROGRAM Zcheque

USING &REGUH-RWBTR&

CHANGING &SPELL-WORD1&

ENDPERFORM

PROTECT

&SPELL-WORD1&

ENDPROTECT

ENDIF

In Program Note Point: Here amount in words coming correctly. when i pass the value to sapscript.it is not coming correctly.

FORM check_data TABLES input_table STRUCTURE itcsy

output_table STRUCTURE itcsy .

READ TABLE input_table WITH KEY name = 'REGUH-RWBTR'.

MOVE input_table-value TO wa_amount.

CONDENSE wa_amount NO-GAPS.

wa_spell = wa_amount.

CALL FUNCTION 'HR_IN_CHG_INR_WRDS'

EXPORTING

amt_in_num = wa_spell

IMPORTING

amt_in_words = wa_spell1

  • EXCEPTIONS

  • DATA_TYPE_MISMATCH = 1

  • OTHERS = 2

.

IF sy-subrc <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

*

TRANSLATE wa_spell1 TO LOWER CASE.

*

TRANSLATE wa_spell1+0(2) TO UPPER CASE.

*

CONCATENATE wa_spell1 wa_only INTO wa_amountwords1 SEPARATED BY space.

break-point.

REFRESH: output_table.

MOVE: 'SPELL-WORD1' TO output_table-name,

wa_amountwords1 TO output_table-value.

APPEND output_table .

CLEAR output_table.

ENDFORM. "CHECK_DATA

Read only

0 Likes
1,446

Hi,

What is the result in SAPSCRIPT.

santhosh

Read only

0 Likes
1,446

MOVE: 'SPELL-WORD1' TO output_table-name,

wa_amountwords1 TO output_table-value.

APPEND output_table .

CLEAR output_table.

replace the above by...

READ TABLE output_table WITH KEY 'SPELL-WORD1' .

CHECK SY-SUBRC = 0.

wa_amountwords1 TO output_table-value.

MODIFY output_table INDEX SY-TABIX.

Read only

0 Likes
1,446

In program. for example amount value : 97233999.58

Output table Value . Note point.. here everything is coming correctly

Line : 1

Name: SPELL-WORD1

Value : Nine crore seventy two lakh thirty three thousand nine hundred ninety nine rupees fifty eight paise only.

IN SAPSCRIPT RESULT.. Here it is not coming.

SPELL-WORD1 Result = 'Nine crore seventy two lakh thirty three thousand nine hundred ninety nine rupe'.

Please help me...

Read only

Former Member
0 Likes
1,446

Hi

Go to link given below :

Try :

the function module : SPELL_AMOUNT

With Regards

Nikunj Shah

Read only

Former Member
0 Likes
1,446

Hi Raj,

Using the SPELL_AMOUNT you will get the words in Millions and Billions.

if you want in Lakhs and Crores follow as below.

This example for Checks you can create as your requirements.

First Create 2 funtions in SQL server: and apply trigger for system filed you can get data automatically amount in words when ever user is adding Outgoing payment.

1.set ANSI_NULLS ON

set QUOTED_IDENTIFIER ON

go

select dbo.AmountToWords (4980)

ALTER function dbo.AmountToWords

(

@InNumber Numeric(18,2)

)

--Returns the number as words.

returns VARCHAR(2000)

as

BEGIN

--SEt NoCount ON

Declare @Num Varchar(20)

Declare @Dec Varchar(3)

Declare @Return Varchar(2000)

Set @Dec = SubString(Convert(Varchar(20),@Innumber),Len(Convert(Varchar(20),@Innumber))-2,3)

Set @Num = SubString(Convert(Varchar(20),@Innumber),1, Len(Convert(Varchar(20),@Innumber))-3)

Declare @Hundred Char(8)

Declare @HundredAnd Char(12)

Declare @Thousand Char(9)

Declare @Lakh Char(5)

Declare @Lakhs Char(6)

Declare @Crore Char(6)

Declare @Crores Char(7)

Set @Hundred = 'Hundred '

Set @Thousand = 'Thousand '

Set @Lakh = 'Lakh '

Set @Lakhs = 'Lakhs '

Set @Crore = 'Crore '

Set @Crores = 'Crores '

Set @HundredAnd = 'Hundred '

if Len(@Num) = 1 -- One

Begin

Set @Return = dbo.GetTextValue(@Num)

End

Else if Len(@Num) = 2 -- Ten

Begin

Set @Return = dbo.GetTextValue(@Num)

End

Else if Len(@Num) = 3 -- Hundred

Begin

Set @Return = dbo.GetTextValue(SubString(@Num,1,1)) + @Hundred

IF SubString(@num,2,2) '00'

Set @Return = @Return + ' '

Set @Return = @Return + dbo.GetTextValue(SubString(@Num,2,2))

End

Else if Len(@Num) = 4 -- thousand

Begin

Set @Return = dbo.GetTextValue(SubString(@Num,1,1)) + @Thousand

If SubString(@Num,2,1) '0'

Set @Return = @Return + dbo.GetTextValue(SubString(@Num,2,1)) + @Hundred

IF SubString(@num,3,2) '00'

Set @Return = @Return + ''

Set @Return = @Return + dbo.GetTextValue(SubString(@Num,3,2))

End

Else if Len(@Num) = 5 -- Ten Thousand

Begin

Set @Return = dbo.GetTextValue(SubString(@Num,1,2)) + @Thousand

If SubString(@Num,3,1) '0'

Set @Return = @Return + dbo.GetTextValue(SubString(@Num,3,1)) + @Hundred

IF SubString(@num,4,2) '00'

Set @Return = @Return + ''

Set @Return = @Return + dbo.GetTextValue(SubString(@Num,4,2))

End

Else if Len(@Num) = 6 -- Lakh

Begin

If SubString(@Num,1,1) = '1'

Set @Return = dbo.GetTextValue(SubString(@Num,1,1)) + @Lakh

Else

Set @Return = dbo.GetTextValue(SubString(@Num,1,1)) + @Lakhs

If SubString(@Num,2,2) '00'

Set @Return = @Return + dbo.GetTextValue(SubString(@Num,2,2)) + @Thousand

If SubString(@Num,4,1) '0'

Set @Return = @Return + dbo.GetTextValue(SubString(@Num,4,1)) + @Hundred

IF SubString(@num,5,2) '00'

Set @Return = @Return + ''

Set @Return = @Return + dbo.GetTextValue(SubString(@Num,5,2))

End

Else if Len(@Num) = 7 -- Ten Lakhs

Begin

Set @Return = dbo.GetTextValue(SubString(@Num,1,2)) + @Lakhs

If SubString(@Num,3,2) '00'

Set @Return = @Return + dbo.GetTextValue(SubString(@Num,3,2)) + @Thousand

If SubString(@Num,6,1) '0'

Set @Return = @Return + dbo.GetTextValue(SubString(@Num,5,1)) + @Hundred

IF SubString(@num,6,2) '00'

Set @Return = @Return + ''

Set @Return = @Return + dbo.GetTextValue(SubString(@Num,6,2))

End

Else if Len(@Num) = 8 -- Crore

Begin

Set @Return = dbo.GetTextValue(SubString(@Num,1,1)) + @Crore

If SubString(@Num,2,2) '00'

Set @Return = @Return + dbo.GetTextValue(SubString(@Num,2,2)) + @Lakhs

If SubString(@Num,4,2) '00'

Set @Return = @Return + dbo.GetTextValue(SubString(@Num,4,2)) + @Thousand

If SubString(@Num,6,1) '0'

Set @Return = @Return + dbo.GetTextValue(SubString(@Num,6,1)) + @Hundred

IF SubString(@num,7,2) '00'

Set @Return = @Return + ' '

Set @Return = @Return + dbo.GetTextValue(SubString(@Num,7,2))

End

Else if Len(@Num) = 9 -- Ten Crore

Begin

Set @Return = dbo.GetTextValue(SubString(@Num,1,2)) + @Crores

If SubString(@Num,3,2) '00'

Set @Return = @Return + dbo.GetTextValue(SubString(@Num,3,2)) + @Lakhs

If SubString(@Num,5,2) '00'

Set @Return = @Return + dbo.GetTextValue(SubString(@Num,5,2)) + @Thousand

If SubString(@Num,7,1) '0'

Set @Return = @Return + dbo.GetTextValue(SubString(@Num,7,1)) + @Hundred

IF SubString(@num,8,2) '00'

Set @Return = @Return + ''

Set @Return = @Return + dbo.GetTextValue(SubString(@Num,8,2))

End

Else if Len(@Num) = 10 -- Hundred Crore

Begin

Set @Return = dbo.GetTextValue(Substring(@Num,1,1)) + @Hundred

IF Substring(@Num,2,2) '00'

Set @Return = @Return + dbo.GetTextValue(SubString(@Num,2,2))

Set @Return = @Return + @Crores

If SubString(@Num,4,2) '00'

Set @Return = @Return + dbo.GetTextValue(SubString(@Num,4,2)) + @Lakhs

If SubString(@Num,6,2) '00'

Set @Return = @Return + dbo.GetTextValue(SubString(@Num,6,2)) + @Thousand

If SubString(@Num,8,1) '0'

Set @Return = @Return + dbo.GetTextValue(SubString(@Num,8,1)) + @Hundred

IF SubString(@num,9,2) '00'

Set @Return = @Return + ''

Set @Return = @Return + dbo.GetTextValue(SubString(@Num,9,2))

End

Else if Len(@Num) = 11 -- Thousand Crore

Begin

Set @Return = dbo.GetTextValue(Substring(@Num,1,1)) + @Thousand

IF SubString(@Num,2,1) '0'

Set @Return = @Return + dbo.GetTextValue(Substring(@Num,2,1)) + @Hundred

IF Substring(@Num,3,2) '00'

Set @Return = @Return + dbo.GetTextValue(SubString(@Num,3,2))

Set @Return = @Return + @Crores

If SubString(@Num,5,2) '00'

Set @Return = @Return + dbo.GetTextValue(SubString(@Num,5,2)) + @Lakhs

If SubString(@Num,7,2) '00'

Set @Return = @Return + dbo.GetTextValue(SubString(@Num,7,2)) + @Thousand

If SubString(@Num,9,1) '0'

Set @Return = @Return + dbo.GetTextValue(SubString(@Num,9,1)) + @Hundred

IF SubString(@num,10,2) '00'

Set @Return = @Return + ''

Set @Return = @Return + dbo.GetTextValue(SubString(@Num,10,2))

End

Else if Len(@Num) = 12 -- Ten thousand Crore

Begin

Set @Return = dbo.GetTextValue(Substring(@Num,1,2)) + @Thousand

IF SubString(@Num,3,1) '0'

Set @Return = @Return + dbo.GetTextValue(Substring(@Num,3,1)) + @Hundred

IF Substring(@Num,4,2) '00'

Set @Return = @Return + dbo.GetTextValue(SubString(@Num,4,2))

Set @Return = @Return + @Crores

If SubString(@Num,6,2) '00'

Set @Return = @Return + dbo.GetTextValue(SubString(@Num,6,2)) + @Lakhs

If SubString(@Num,8,2) '00'

Set @Return = @Return + dbo.GetTextValue(SubString(@Num,8,2)) + @Thousand

If SubString(@Num,10,1) '0'

Set @Return = @Return + dbo.GetTextValue(SubString(@Num,10,1)) + @Hundred

IF SubString(@num,11,2) '00'

Set @Return = @Return + ''

Set @Return = @Return + dbo.GetTextValue(SubString(@Num,11,2))

End

Else if Len(@Num) = 13 -- Lakh Crore

Begin

Set @Return = dbo.GetTextValue(Substring(@Num,1,1)) + @Lakh

If Substring(@Num,2,2) '00'

Set @Return = @Return + dbo.GetTextValue(Substring(@Num,2,2)) + @Thousand

IF SubString(@Num,4,1) '0'

Set @Return = @Return + dbo.GetTextValue(Substring(@Num,4,1)) + @Hundred

IF Substring(@Num,5,2) '00'

Set @Return = @Return + dbo.GetTextValue(SubString(@Num,5,2))

Set @Return = @Return + @Crores

If SubString(@Num,7,2) '00'

Set @Return = @Return + dbo.GetTextValue(SubString(@Num,7,2)) + @Lakhs

If SubString(@Num,9,2) '00'

Set @Return = @Return + dbo.GetTextValue(SubString(@Num,9,2)) + @Thousand

If SubString(@Num,11,1) '0'

Set @Return = @Return + dbo.GetTextValue(SubString(@Num,11,1)) + @Hundred

IF SubString(@num,12,2) '00'

Set @Return = @Return + ''

Set @Return = @Return + dbo.GetTextValue(SubString(@Num,12,2))

End

Else if Len(@Num) = 14 -- Ten Lakh Crore

Begin

Set @Return = dbo.GetTextValue(Substring(@Num,1,2)) + @Lakhs

If Substring(@Num,3,2) '00'

Set @Return = @Return + dbo.GetTextValue(Substring(@Num,3,2)) + @Thousand

IF SubString(@Num,5,1) '0'

Set @Return = @Return + dbo.GetTextValue(Substring(@Num,5,1)) + @Hundred

IF Substring(@Num,6,2) '00'

Set @Return = @Return + dbo.GetTextValue(SubString(@Num,6,2))

Set @Return = @Return + @Crores

If SubString(@Num,8,2) '00'

Set @Return = @Return + dbo.GetTextValue(SubString(@Num,8,2)) + @Lakhs

If SubString(@Num,10,2) '00'

Set @Return = @Return + dbo.GetTextValue(SubString(@Num,10,2)) + @Thousand

If SubString(@Num,12,1) '0'

Set @Return = @Return + dbo.GetTextValue(SubString(@Num,12,1)) + @Hundred

IF SubString(@num,13,2) '00'

Set @Return = @Return + ''

Set @Return = @Return + dbo.GetTextValue(SubString(@Num,13,2))

End

If @Dec '.00'

Set @Return = @Return + ' And ' + dbo.GetTextValue(SubString(@Dec,2,2)) + 'Paise'

Return @return

END

2.This is for Get texl vavlue funtion:

set ANSI_NULLS ON

set QUOTED_IDENTIFIER ON

go

ALTER function dbo.GetTextValue

(

@num varchar(20)

)

returns VARCHAR(2000)

as

BEGIN

Declare @Return varchar(2000)

Declare @temp char(1)

Declare @tempZero char(1)

Declare @Zero char(1)

Declare @One char(4)

Declare @Two char(4)

Declare @Three char(6)

Declare @Four char(5)

Declare @Five char(5)

Declare @Six char(4)

Declare @Seven char(6)

Declare @Eight char(6)

Declare @Nine char(5)

Declare @Eleven char(7)

Declare @Twelve char(7)

Declare @Thirteen char(9)

Declare @Fourteen char(9)

Declare @Fifteen char(8)

Declare @Sixteen char(8)

Declare @Seventeen char(10)

Declare @Eighteen char(9)

Declare @Nineteen char(9)

Declare @Ten char(4)

Declare @Twenty char(6)

Declare @Thirty char(7)

Declare @Forty char(6)

Declare @Fifty char(6)

Declare @Sixty char(6)

Declare @Seventy char(8)

Declare @Eighty char(7)

Declare @Ninety char(7)

set @tempZero = '0'

set @Zero = ''

set @One = 'One '

set @Two = 'Two '

set @Three = 'Three '

set @Four = 'Four '

set @Five = 'Five '

set @Six = 'Six '

set @Seven = 'Seven '

set @Eight = 'Eight '

set @Nine = 'Nine '

set @Eleven = 'Eleven '

set @Twelve = 'Twelve '

set @Thirteen = 'Thirteen '

set @Fourteen = 'Fourteen '

set @Fifteen = 'Fifteen '

set @Sixteen = 'Sixteen '

set @Seventeen = 'Seventeen '

set @Eighteen = 'Eighteen '

set @Nineteen = 'Nineteen '

set @Ten = 'Ten '

set @Twenty = 'Twenty '

set @Thirty = 'Thirty '

set @Forty = 'Forty '

set @Fifty = 'Fifty '

set @Sixty = 'Sixty '

set @Seventy = 'Seventy '

set @Eighty = 'Eighty '

set @Ninety = 'Ninety '

IF Len(@num) = 2

Begin

If SubString(@num,2,1) '0'

Begin

Set @temp = SubString(@num,1,1)

Set @Return = dbo.GetTextValue(@temp+@tempZero)

Set @Return = @Return + dbo.GetTextValue(SubString(@num,2,1))

End

END

If @num = 0

Begin

set @Return = @Zero

End

Else if @num = 1

Begin

set @Return = @One

End

Else if @num = 2

Begin

set @Return = @Two

End

Else if @num = 3

Begin

set @Return = @Three

End

Else if @num = 4

Begin

set @Return = @Four

End

Else if @num = 5

Begin

set @Return = @Five

End

Else if @num = 6

Begin

set @Return = @Six

End

Else if @num = 7

Begin

set @Return = @Seven

End

Else if @num = 8

Begin

set @Return = @Eight

End

Else if @num = 9

Begin

set @Return = @Nine

End

Else if @num = 10

Begin

set @Return = @Ten

End

Else if @num = 11

Begin

set @Return = @Eleven

End

Else if @num = 12

Begin

set @Return = @Twelve

End

Else if @num = 13

Begin

set @Return = @Thirteen

End

Else if @num = 14

Begin

set @Return = @Fourteen

End

Else if @num = 15

Begin

set @Return = @Fifteen

End

Else if @num = 16

Begin

set @Return = @Sixteen

End

Else if @num = 17

Begin

set @Return = @Seventeen

End

Else if @num = 18

Begin

set @Return = @Eighteen

End

Else if @num = 19

Begin

set @Return = @Nineteen

End

Else if @num = 20

Begin

set @Return = @Twenty

End

Else if @num = 30

Begin

set @Return = @Thirty

End

Else if @num = 40

Begin

set @Return = @Forty

End

Else if @num = 50

Begin

set @Return = @Fifty

End

Else if @num = 60

Begin

set @Return = @Sixty

End

Else if @num = 70

Begin

set @Return = @Seventy

End

Else if @num = 80

Begin

set @Return = @Eighty

End

Else if @num = 90

Begin

set @Return = @Ninety

End

Return @Return

END

3. Create trigger for OCHO table:

set ANSI_NULLS ON

set QUOTED_IDENTIFIER ON

go

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

Author: <Author,,Name>

Create date: <Create Date,,>

Description: <Description,,>

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

ALTER TRIGGER AmountToWordsTrigger

ON dbo.OCHO

AFTER INSERT,UPDATE

AS

BEGIN

SET NOCOUNT ON added to prevent extra result sets from

interfering with SELECT statements.

SET NOCOUNT ON;

UPDATE dbo.OCHO

SET TotalWords = dbo.AmountToWords (LinesSum)+'Only'

WHERE CheckKey IN ( SELECT CheckKey From Inserted)

END

it will update exisitng filed i.e.,Amount in words. call this field in your PLD.

Read only

Former Member
0 Likes
1,446

Hi,

Try this

U can use PERFORM in sapscript use the following syntax :

PERFORM PICK_words IN PROGRAM Z_spellamt using &Amount&

CHANGING &words&.

REPORT Z_SPELLAMT.

FORM pick_words USING amount1 CHANGING words.

CALL FUNCTION 'SPELL_AMOUNT'

EXPORTING

AMOUNT = amount1

CURRENCY = ' '

LANGUAGE = SY-LANGU

IMPORTING

IN_WORDS = 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.

This will solve ur problem.

Read only

GauthamV
Active Contributor
0 Likes
1,446

use this function module.

HR_IN_CHG_INR_WRDS

Read only

Former Member
0 Likes
1,446

Hi,

Also you can use function module

HR_IN_CHG_INR_WRDS

Regards

Read only

Former Member
0 Likes
1,446

i was solved my problem.

Read only

Former Member
0 Likes
1,446

Hi,

If you are looking for an output of the amount in indian currency the function module

HR_IN_CHG_INR_WRDS will solve your purpose. In the exporting section pass a variable of type PC207-BETRG holding the value of the amount and in the importing parameter pass a variable of type c to get the output in words.

Regards,

Sachin