2009 Jan 05 4:58 AM
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
please see the code..
In sapscript. Note point: Here amount in words not coming correctly.(&SPELL-WORD1&)
PERFORM CHECK_DATA IN PROGRAM Zcheque
USING ®UH-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
2009 Jan 05 5:02 AM
2009 Jan 05 5:09 AM
please see the code..
In sapscript. Note point: Here amount in words not coming correctly.(&SPELL-WORD1&)
PERFORM CHECK_DATA IN PROGRAM Zcheque
USING ®UH-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
2009 Jan 05 5:19 AM
2009 Jan 05 5:31 AM
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.
2009 Jan 05 5:49 AM
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...
2009 Jan 05 5:02 AM
2009 Jan 05 5:04 AM
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.
2009 Jan 05 5:06 AM
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.
2009 Jan 05 5:08 AM
2009 Jan 05 5:09 AM
Hi,
Also you can use function module
HR_IN_CHG_INR_WRDSRegards
2009 Jan 05 10:17 AM
2009 Jan 05 10:30 AM
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
| User | Count |
|---|---|
| 3 | |
| 2 | |
| 2 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |