El prototipo del Source es: NumeroaLetras(REAL),STRING

Procedimiento:
NumeroaLetras        PROCEDURE  (Numero)

!Esto va en Local Data
Centavos             REAL
Unidades             REAL
Decenas              REAL
Centenas             REAL
Valor                REAL
SinCientos           REAL
Respuesta            STRING(300)
Modulo               STRING(34)
Parcial              STRING(34)
D_Unidades_G         STRING(210)
D_Unidades           STRING(10),DIM(21),OVER(D_Unidades_G)
D_Decenas_G          STRING(72)
D_Decenas            STRING(9),DIM(8),OVER(D_Decenas_G)
D_Centenas_G         STRING(117)
D_Centenas           STRING(13),DIM(9),OVER(D_Centenas_G)

!Codigo
  CODE
  D_Unidades_G = 'CERO      ' |        !Carga de Unidades
               & 'UNO       ' |
               & 'DOS       ' |
               & 'TRES      ' |
               & 'CUATRO    ' |
               & 'CINCO     ' |
               & 'SEIS      ' |
               & 'SIETE     ' |
               & 'OCHO      ' |
               & 'NUEVE     ' |
               & 'DIEZ      ' |
               & 'ONCE      ' |        ! Y de primera decena
               & 'DOCE      ' |
               & 'TRECE     ' |
               & 'CATORCE   ' |
               & 'QUINCE    ' |
               & 'DIECISEIS ' |
               & 'DIECISIETE' |
               & 'DIECIOCHO ' |
               & 'DIECINUEVE' |
               & 'VEINTE    '
  D_Decenas_G =  'VEINTI   ' |         !Carga de Decenas
               & 'TREINTA  ' |
               & 'CUARENTA ' |
               & 'CINCUENTA' |
               & 'SESENTA  ' |
               & 'SETENTA  ' |
               & 'OCHENTA  ' |
               & 'NOVENTA  '
  D_Centenas_G = 'CIENTO       ' |     !Carga de Centenas
               & 'DOSCIENTOS   ' |
               & 'TRESCIENTOS  ' |
               & 'CUATROCIENTOS' |
               & 'QUINIENTOS   ' |
               & 'SEISCIENTOS  ' |
               & 'SETECIENTOS  ' |
               & 'OCHOCIENTOS  ' |
               & 'NOVECIENTOS  '
!--------------------------------------------------------------------------
  Clear(Respuesta)

  Valor = INT(Numero)
  Centavos = (Numero - Valor) * 100                        !Centavos
  Valor = INT(Centavos + 0.01)
! Activar la lnea siguiente si no se quiere la parte de centavos en letras
! Respuesta = 'CON '&FORMAT(Valor,@n02)&'/100 CENTAVOS'
  If Valor = 1 Then
    Respuesta = 'CON UN CENTAVO'
  ElsIf Valor <> 0 Then
    Do Calc_Parcial
    Respuesta = 'CON '&Clip(Parcial)&' CENTAVOS'
  END

  Valor = INT (Numero - (INT(Numero / 1000) *1000))        !Unidades
  If Valor <> 0 Then
    Do Calc_Modulo
    Respuesta = Clip (Modulo) &' '&Clip (Respuesta)
  END

  Valor = INT (Numero / 1000) - (INT(Numero / 1000000) * 1000)  !Miles
  If Valor = 1 Then
    Respuesta = 'UN MIL '&Clip (Respuesta)
  ElsIf Valor <> 0 Then
    Do Calc_Modulo
    Respuesta = Clip (Modulo) &' MIL '&Clip (Respuesta)
  END

  Valor = INT (Numero / 1000000)   !Millones
  If Valor = 1 Then
    Respuesta = 'UN MILLON '&Clip (Respuesta)
  ElsIf Valor <> 0 Then
    Do Calc_Modulo
    Respuesta = Clip (Modulo) &' MILLONES '&Clip (Respuesta)
  END

  Return(Respuesta)

!---------------------------------------------------------------------------
Calc_Modulo        ROUTINE
  If valor = 100 Then
    Modulo = 'CIEN'
  Else
    Do Calc_Parcial
    IF Valor > 100 Then
      Valor = int(Valor / 100)
      If SinCientos = 0 Then
        Modulo = Clip(D_Centenas[Valor])
      Else
        Modulo = Clip(D_Centenas[Valor]) &' '& Clip(Parcial)
      END
    Else
      Modulo = Clip(Parcial)
    END
  END

!---------------------------------------------------------------------------
Calc_Parcial       ROUTINE

  Centenas = Int(Valor/100)
  Decenas  = INT(Valor/10) - Centenas*10
  Unidades = Valor - (Decenas*10) - (Centenas*100) +1
  SinCientos = (Decenas*10)+ Unidades - 1

  Case SinCientos

     Of 0 to 20
       Parcial = Clip(D_Unidades[SinCientos+1])

     Of 21 to 99
       If Unidades = 1 Then
         Parcial = Clip(D_Decenas[Decenas-1])
       ElsIF Decenas > 2 Then
         Parcial = Clip(D_Decenas[Decenas-1]) & ' Y '& Clip(D_Unidades[Unidades])
       Else
         Parcial = Clip(D_Decenas[Decenas-1]) & Clip(D_Unidades[Unidades])
       END

  END
