Convert numbers to words with own UDF in TDL

Discussion in 'Free Source Codes' started by Ozair Ahmad, Nov 24, 2019.

    
?

Anyone would have code more easily?

  1. Yes

    0 vote(s)
    0.0%
  2. No

    0 vote(s)
    0.0%
  1. Ozair Ahmad

    Ozair Ahmad New Member


    [#Menu: Gateway of Tally]
    Add:Item:Number in Words : Alter: Number in Words

    [Report: Number in Words]
    Form :Number in Words
    Auto :Yes ;;For disappearing "Accept Box"

    [Form: Number in Words]
    Part :Number in Words

    [Part: Number in Words]
    Lines :MyNumber, MyWords

    [Line:MyNumber]
    Field :Short Prompt, MyNumber
    Local :Field:Short Prompt:Info:"My Number"
    [Field:My Number]
    Use :Number Field
    ;;Align :Right

    [Line: My Words]
    Field :Short Prompt, MyWords
    Local :Field:Short Prompt:Info:"Spells"
    Local :Field:Default :Inactive:$$IsEmpty:#MyNumber
    [Field:My Words]
    Set as :$$SpellWords:#MyNumber
    Set Always:Yes
    Width :60

    [Function:SpellWords]
    Parameter: MyNum : Number

    Return :String

    Variable :varLakh :Number
    Variable :varThousand:Number
    Variable :varHundred :Number
    Variable :varTen :Number
    Variable :varUnit :Number

    Variable :strNum :String
    Variable :amtLength :Number
    Variable :MyWord :String

    0009: SET :MyWord: ""

    0010: SET :strNum:$$String:##MyNum
    0020: SET :strNum:$$ZeroFill:##strNum:8
    0030: SET :amtLength:$$StringLength:##strNum

    0040: SET :varLakh:$$Number:$$StringPart:##strNum:0:(##amtLength-5)
    0050: SET :varThousand:$$Number:$$StringPart:##strNum:(##amtLength-5):2
    0060: SET :varHundred:$$Number:$$StringPart:##strNum:(##amtLength-3):1
    0070: SET :varTen:$$Number:$$StringPart:##strNum:(##amtLength-2):2
    ;0080: SET :varUnit:$$Number:$$StringPart:##strNum:(##amtLength-1):1

    0090: IF :##varLakh > 0
    0100: SET :MyWord :$$InWords:##varLakh + " Lakh "
    ;0101: SET :MyWord :$$GetTens:##varLakh + "Lakh "
    0110: END IF

    0120: IF :##varThousand > 0
    0130: SET :MyWord :##MyWord + $$GetTens:##varThousand + "Thousand "
    0140: END IF

    0150: IF :##varHundred > 0
    0160: SET :MyWord :##MyWord + $$GetUnits:##varHundred + "Hundred and "
    0170: END IF

    0180: IF :##varTen > 0
    0190: SET :MyWord :##MyWord + $$GetTens:##varTen
    0200: END IF

    0220: RETURN :##MyWord + "Only."

    [Function:GetTens]
    Parameter :MyNum :Number

    Return :String

    Variable :strWords :String
    Variable :Tens :Number
    Variable :Units :Number

    0009: SET:strWords: ""

    0010: If :##MyNum <= 19
    0020: DO IF :##MyNum = 10 :SET :strWords:"Ten "
    0030: DO IF :##MyNum = 11 :SET :strWords:"Eleven "
    0040: DO IF :##MyNum = 12 :SET :strWords:"Twelve "
    0050: DO IF :##MyNum = 13 :SET :strWords:"Thirteen "
    0060: DO IF :##MyNum = 14 :SET :strWords:"Fourteen "
    0070: DO IF :##MyNum = 15 :SET :strWords:"Fifteen "
    0080: DO IF :##MyNum = 16 :SET :strWords:"Sixteen "
    0090: DO IF :##MyNum = 17 :SET :strWords:"Seventeen "
    0100: DO IF :##MyNum = 18 :SET :strWords:"Eighteen "
    0101: DO IF :##MyNum = 19 :SET :strWords:"Nineteen "
    0102: SET: strWords:##strWords + $$GetUnits:##MyNum
    0110: End If

    0120: If :##MyNum >= 20
    0121: Set:Tens:$$Number:$$StringPart:($$ZeroFill:($$String:##MyNum):2):0:1
    0130: DO IF :##Tens = 2 :SET :strWords:"Twenty "
    0140: DO IF :##Tens = 3 :SET :strWords:"Thirty "
    0150: DO IF :##Tens = 4 :SET :strWords:"Forty "
    0160: DO IF :##Tens = 5 :SET :strWords:"Fifty "
    0170: DO IF :##Tens = 6 :SET :strWords:"Sixty "
    0180: DO IF :##Tens = 7 :SET :strWords:"Seventy "
    0190: DO IF :##Tens = 8 :SET :strWords:"Eighty "
    0200: DO IF :##Tens = 9 :SET :strWords:"Ninety "

    0210: SET: Units :$$Number:$$StringPart:($$ZeroFill:($$String:##MyNum):1):1:1
    0220: SET: strWords :##strWords + $$GetUnits:##Units
    0230: End If

    0240: RETURN :##strWords

    [Function:GetUnits]
    Parameter:MyNum :Number

    RETURN :String

    Variable :UWords :String

    0010: SET :UWords:""

    0020: DO IF :##MyNum = 1 :SET :UWords:"One "
    0030: DO IF :##MyNum = 2 :SET :UWords:"Two "
    0040: DO IF :##MyNum = 3 :SET :UWords:"Three "
    0050: DO IF :##MyNum = 4 :SET :UWords:"Four "
    0060: DO IF :##MyNum = 5 :SET :UWords:"Five "
    0070: DO IF :##MyNum = 6 :SET :UWords:"Six "
    0080: DO IF :##MyNum = 7 :SET :UWords:"Seven "
    0090: DO IF :##MyNum = 8 :SET :UWords:"Eight "
    0100: DO IF :##MyNum = 9 :SET :UWords:"Nine "

    0130: RETURN :##UWords

    ;;end
     

    Attached Files:

    Last edited: Nov 24, 2019
    Vikram Bhat likes this.


  2. Rohit Khedar

    Rohit Khedar Member


    very nice....
     
    Ozair Ahmad likes this.


  3. ONKAR

    ONKAR Active Member


    awesome
     
    Ozair Ahmad likes this.


  4. Jay kumar tailor

    Jay kumar tailor Well-Known Member


    Use
    Max :10
     
    sattam and Ozair Ahmad like this.


  5. sattam

    sattam Active Member


    yes if we put over 10 character it spell wrongly
     
    Ozair Ahmad and Jay kumar tailor like this.


  6. Jay kumar tailor

    Jay kumar tailor Well-Known Member


    Yes Sir,
    I tested....
     
    Ozair Ahmad and sattam like this.


  7. rmraja

    rmraja Active Member


    Nice
     
    Ozair Ahmad likes this.


  8. tulip

    tulip New Member


    Nice Tdl sir
    I want to use it in UAE, as we can't use lakh, we use one hundred thousand for one lakh and one million for 10 lakhs, please advice.
    Thanks and Regards
    Tulip
     


  9. Ozair Ahmad

    Ozair Ahmad New Member


    Ok Tulip. Thanks for remark.
    I will try for your requirement.
     


Share This Page