Importe en letras.

JE
10 de Enero del 2004
Desearía me envien alguna rutina para convertir un importe en su equivalente en letras. Muchas Gracias.

monofre
10 de Enero del 2004
Espero te sirva, es el procedimiento que nosotros utilizamos.. saludos

PROCEDURE LETRERO1
SELE 12
USE RUTA+"MNUMERO" Order Tag NUMERO
MTotal=FrmFactura.TexTotal.Value
XTotal=FrmFactura.TexTotal.Value
CENTAVO=SUBSTR(STR(MTotal,13,2),12,2)
IF FrmFactura.OpMoneda.Value = 1
PESO=' PESOS '+CENTAVO+'/100 M.N.)'
ELSE
PESO=' DOLARES '+CENTAVO+'/100 USD)'
ENDIF
ImpLet=""
XTotal=MTotal
MTotal= INT(MTotal)
A=LEN(ALLT(STR(MTotal)))
DIMENSION X(12)
X(1)="ENERO"
X(2)="FEBRERO"
X(3)="MARZO"
X(4)="ABRIL"
X(5)="MAYO"
X(6)="JUNIO"
X(7)="JULIO"
X(8)="AGOSTO"
X(9)="SEPTIEMBRE"
X(10)="OCTUBRE"
X(11)="NOVIEMBRE"
X(12)="DICIEMBRE"
SELE 12
IF A=1
GO TOP
SEEK MTotal
IF FOUN()
UU=DES_NUM
ImpLet = "("+ALLT(UU)+PESO
ENDIF
ENDIF
IF A=2
GO TOP
SEEK MTotal
IF FOUN()
DD=DES_NUM
ImpLet = "("+ALLT(DD)+PESO
ELSE
U=SUBSTR(ALLT(STR(MTotal)),2,1)
D=SUBSTR(ALLT(STR(MTotal)),1,1)
DO DECENA
ImpLet = "("+ALLT(D)+" Y "+ALLT(U)+PESO
ENDIF
ENDIF

IF A=3
GO TOP
SEEK MTotal
IF FOUN()
CC=ALLT(DES_NUM)
ImpLet = "("+CC+PESO
ELSE
U= SUBSTR(ALLT(STR(MTotal)),3,1)
D= SUBSTR(ALLT(STR(MTotal)),2,1)
DD=SUBSTR(ALLT(STR(MTotal)),2,2)
C= SUBSTR(ALLT(STR(MTotal)),1,1)
DO CENTENA
ImpLet = "("+ALLT(C)+PESO
ENDIF
ENDIF

IF A=4
M=SUBSTR(ALLT(STR(MTotal)),1,1)
C=SUBSTR(ALLT(STR(MTotal)),2,3)
GO TOP
SEEK M
IF FOUN()
IF M="1"
M="MIL"
ELSE
M=ALLT(DES_NUM)+" MIL"
ENDIF
IF C="000"
ImpLet = "("+M+PESO
ELSE
GO TOP
SEEK C
IF FOUN()
C=ALLT(DES_NUM)
ImpLet = "("+M+" "+C+PESO
ELSE
U= SUBSTR(ALLT(STR(MTotal)),4,1)
D= SUBSTR(ALLT(STR(MTotal)),3,1)
DD=SUBSTR(ALLT(STR(MTotal)),3,2)
C= SUBSTR(ALLT(STR(MTotal)),2,1)
DO CENTENA
ImpLet = "("+ALLT(M)+" "+C+PESO
ENDIF
ENDIF
ENDIF
ENDIF

IF A=5
DD=SUBSTR(ALLT(STR(MTotal)),1,2)
D =SUBSTR(ALLT(STR(MTotal)),1,1)
U =SUBSTR(ALLT(STR(MTotal)),2,1)
C =SUBSTR(ALLT(STR(MTotal)),3,3)
GO TOP
SEEK DD
IF FOUN()
IF C="000"
DM=ALLT(DES_NUM)+" MIL"
ImpLet = "("+DM+PESO
ELSE
DM=ALLT(DES_NUM)+" MIL "
ENDIF
ELSE
DO DECENA
IF C="000"
DM=ALLT(D)+" Y "+ALLT(U)
ImpLet = "("+DM+" MIL "+PESO
ELSE
DM=ALLT(D)+" Y "+ALLT(U)+" MIL "
ENDIF
ENDIF
IF C<>"000"
U= SUBSTR(ALLT(STR(MTotal)),5,1)
D= SUBSTR(ALLT(STR(MTotal)),4,1)
DD=SUBSTR(ALLT(STR(MTotal)),4,2)
C= SUBSTR(ALLT(STR(MTotal)),3,1)
DO CENTENA
ImpLet = "("+DM+C+PESO
ENDIF
ENDIF

IF A=6
CM=SUBSTR(ALLT(STR(MTotal)),1,3)
D =SUBSTR(ALLT(STR(MTotal)),2,1)
U =SUBSTR(ALLT(STR(MTotal)),3,1)
C =SUBSTR(ALLT(STR(MTotal)),1,1)
CC=SUBSTR(ALLT(STR(MTotal)),4,3)
DD=SUBSTR(ALLT(STR(MTotal)),2,2)
GO TOP
SEEK CM
IF FOUN()
IF CC="000"
CM=ALLT(DES_NUM)+" MIL"
ImpLet = "("+CM+PESO
ELSE
CM=ALLT(DES_NUM)+" MIL "
ENDIF
ELSE
DO CENTENA
IF CC="000"
CM=C+" MIL"
ImpLet = "("+CM+PESO
ELSE
CM=C+" MIL "
ENDIF
ENDIF
IF CC<>"000"
D =SUBSTR(ALLT(STR(MTotal)),5,1)
U =SUBSTR(ALLT(STR(MTotal)),6,1)
C =SUBSTR(ALLT(STR(MTotal)),4,1)
DD=SUBSTR(ALLT(STR(MTotal)),5,2)
CC=SUBSTR(ALLT(STR(MTotal)),4,3)
GO TOP
SEEK CC
IF FOUND()
CCM=ALLT(DES_NUM)
ImpLet = "("+CM+CCM+PESO
ELSE
DO CENTENA
ImpLet = "("+CM+C+PESO
ENDIF
ENDIF
ENDIF

IF A=7
M= SUBSTR(ALLT(STR(MTotal)),1,1)
C= SUBSTR(ALLT(STR(MTotal)),2,3)
MM=SUBSTR(ALLT(STR(MTotal)),2,6)
M1=SUBSTR(ALLT(STR(MTotal)),5,3)
GO TOP
SEEK M
IF FOUN()
IF M="1"
M=ALLT(DES_NUM)+" MILLON"
ELSE
M=ALLT(DES_NUM)+" MILLONES"
ENDIF
IF MM="000000"
ImpLet = "("+M+" DE"+PESO
ELSE
IF C="000"
MC=M
ELSE
GO TOP
SEEK C
IF FOUN()
IF C="001"
MCC="MIL "
ELSE
MCC=ALLT(DES_NUM)+" MIL "
ENDIF
IF M1="000"
ImpLet = "("+M+" "+MCC+PESO
ELSE
MC=M+" "+MCC
ENDIF
ELSE
U= SUBSTR(ALLT(STR(MTotal)),4,1)
D= SUBSTR(ALLT(STR(MTotal)),3,1)
DD=SUBSTR(ALLT(STR(MTotal)),3,2)
C= SUBSTR(ALLT(STR(MTotal)),2,1)
DO CENTENA
MC=M+" "+C+" MIL "
IF M1="000"
ImpLet = "("+MC+PESO
ENDIF
ENDIF
ENDIF
IF M1<>"000"
U= SUBSTR(ALLT(STR(MTotal)),7,1)
D= SUBSTR(ALLT(STR(MTotal)),6,1)
DD=SUBSTR(ALLT(STR(MTotal)),6,2)
C= SUBSTR(ALLT(STR(MTotal)),5,1)
CC=SUBSTR(ALLT(STR(MTotal)),5,3)
GO TOP
SEEK CC
IF FOUND()
MCC=ALLT(DES_NUM)
ImpLet = "("+MC+MCC+PESO
ELSE
DO CENTENA
ImpLet = "("+MC+C+PESO
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF

IF A=8
MD=SUBSTR(ALLT(STR(MTotal)),1,2)
D =SUBSTR(ALLT(STR(MTotal)),1,1)
U =SUBSTR(ALLT(STR(MTotal)),2,1)
C =SUBSTR(ALLT(STR(MTotal)),3,3)
MM=SUBSTR(ALLT(STR(MTotal)),3,6)
M1=SUBSTR(ALLT(STR(MTotal)),3,3)
CC=SUBSTR(ALLT(STR(MTotal)),6,3)
GO TOP
SEEK MD
IF FOUN()
MMD=ALLT(DES_NUM)+" MILLONES"
IF M1="000"
MMC=MMD
ENDIF
IF MM="000000"
ImpLet = "("+MMD+" DE"+PESO
ENDIF
ELSE
DO DECENA
MMD=ALLT(D)+" Y "+ALLT(U)+" MILLONES"
IF M1="000"
MMC=MMD
ENDIF
IF MM="000000"
ImpLet = "("+MMD+" DE"+PESO
ENDIF
ENDIF
IF MM<>"000000"
CM=SUBSTR(ALLT(STR(MTotal)),3,3)
D =SUBSTR(ALLT(STR(MTotal)),4,1)
U =SUBSTR(ALLT(STR(MTotal)),5,1)
C =SUBSTR(ALLT(STR(MTotal)),3,1)
DD=SUBSTR(ALLT(STR(MTotal)),4,2)
IF M1<>"000"
GO TOP
SEEK CM
IF FOUN()
IF CM="001"
MMC=MMD+" MIL"
ELSE
MMC=MMD+" "+ALLT(DES_NUM)+" MIL"
ENDIF
IF CC="000"
ImpLet = "("+MMC+PESO
ENDIF
ELSE
DO CENTENA
MMC=MMD+" "+C+" MIL"
IF C="UN"
MMC=MMD+" MIL"
ENDIF
IF CC="000"
ImpLet = "("+MMC+PESO
ENDIF
ENDIF
ENDIF
ENDIF
IF CC<>"000".AND.MM<>"000000"
D =SUBSTR(ALLT(STR(MTotal)),7,1)
U =SUBSTR(ALLT(STR(MTotal)),8,1)
C =SUBSTR(ALLT(STR(MTotal)),6,1)
DD=SUBSTR(ALLT(STR(MTotal)),7,2)
CC=SUBSTR(ALLT(STR(MTotal)),6,3)
GO TOP
SEEK CC
IF FOUND()
CCM=ALLT(DES_NUM)
ImpLet = "("+MMC+" "+CCM+PESO
ELSE
DO CENTENA
ImpLet = "("+MMC+" "+C+PESO
ENDIF
ENDIF
ENDIF

IF A=9
MC=SUBSTR(ALLT(STR(MTotal)),1,3)
D =SUBSTR(ALLT(STR(MTotal)),2,1)
U =SUBSTR(ALLT(STR(MTotal)),3,1)
C =SUBSTR(ALLT(STR(MTotal)),1,1)
DD=SUBSTR(ALLT(STR(MTotal)),2,2)
MM=SUBSTR(ALLT(STR(MTotal)),4,6)
M1=SUBSTR(ALLT(STR(MTotal)),4,3)
CC=SUBSTR(ALLT(STR(MTotal)),7,3)
GO TOP
SEEK MC
IF FOUN()
MMM=ALLT(DES_NUM)+" MILLONES"
IF M1="000"
MMMM=MMM
ENDIF
IF MM="000000"
ImpLet = "("+MMM+" DE"+PESO
ENDIF
ELSE
DO CENTENA
MMM=C+" MILLONES"
IF M1="000"
MMMM=MMM
ENDIF
IF MM="000000"
ImpLet = "("+MMM+" DE"+PESO
ENDIF
ENDIF
IF MM<>"000000"
CM=SUBSTR(ALLT(STR(MTotal)),4,3)
D =SUBSTR(ALLT(STR(MTotal)),5,1)
U =SUBSTR(ALLT(STR(MTotal)),6,1)
C =SUBSTR(ALLT(STR(MTotal)),4,1)
DD=SUBSTR(ALLT(STR(MTotal)),5,2)
IF M1<>"000"
GO TOP
SEEK CM
IF FOUN()
IF CM="001"
MMMM=MMM+" MIL"
ELSE
MMMM=MMM+" "+ALLT(DES_NUM)+" MIL"
ENDIF
IF CC="000"
ImpLet = "("+MMMM+PESO
ENDIF
ELSE
DO CENTENA
MMMM=MMM+" "+C+" MIL"
IF CC="000"
ImpLet = "("+MMMM+PESO
ENDIF
ENDIF
ENDIF
ENDIF
IF CC<>"000".AND.MM<>"000000"
D =SUBSTR(ALLT(STR(MTotal)),8,1)
U =SUBSTR(ALLT(STR(MTotal)),9,1)
C =SUBSTR(ALLT(STR(MTotal)),7,1)
DD=SUBSTR(ALLT(STR(MTotal)),8,2)
CC=SUBSTR(ALLT(STR(MTotal)),7,3)
GO TOP
SEEK CC
IF FOUND()
CCM=ALLT(DES_NUM)
ImpLet = "("+MMMM+" "+CCM+PESO
ELSE
DO CENTENA
ImpLet = "("+MMMM+" "+C+PESO
ENDIF
ENDIF
ENDIF
If FrmFactura.OpImpresion.Value=1 && LETRA 8
@68,31 SAY SUBSTR(ImpLet,1,62)
IF FrmFactura.OpMoneda.Value = 1
@68,145 SAY TRANSFORM(FrmFactura.TexIva.Value,'$9,999,999.99')
ELSE
@68,145 SAY TRANSFORM(FrmFactura.TexIva.Value,'9,999,999.99')
ENDIF
@69,31 SAY SUBSTR(ImpLet,63,62)
@70,31 SAY SUBSTR(ImpLet,125,62)
IF FrmFactura.OpMoneda.Value = 1
@71,145 SAY TRANSFORM(XTotal,'$9,999,999.99')
ELSE
@71,141 SAY TRANSFORM(XTotal,'9,999,999.99')
@71,155 SAY 'DLLS'
ENDIF
@72,31 SAY SUBSTR(ImpLet,186)
@73,77 SAY TRANSFORM(DAY(FrmFactura.TexFecVen.Value),'99')
@73,84 SAY X(MONTH(FrmFactura.TexFecVen.Value))
@73,115 SAY TRANSFORM(YEAR(FrmFactura.TexFecVen.Value),'9999')
@76,68 SAY TRANSFORM(XTotal,"*9,999,999.99")
@77,31 SAY SUBS(ImpLet,1,54)
@78,31 SAY SUBS(ImpLet,55,54)
@80,42 SAY TRANSFORM(FrmFactura.TexIntMor.Value,"999")
@81,01 SAY ""
Endif
If FrmFactura.OpImpresion.Value=2 &&LETRA 7
@77,38 SAY SUBSTR(ImpLet,1,68)
IF FrmFactura.OpMoneda.Value = 1
@77,176 SAY TRANSFORM(FrmFactura.TexIva.Value,'$9,999,999.99')
ELSE
@77,176 SAY TRANSFORM(FrmFactura.TexIva.Value,'9,999,999.99')
ENDIF
@78,38 SAY SUBSTR(ImpLet,69,68)
@79,38 SAY SUBSTR(ImpLet,127,68)
IF FrmFactura.OpMoneda.Value = 1
@80,176 SAY TRANSFORM(XTotal,'$9,999,999.99')
ELSE
@80,172 SAY TRANSFORM(XTotal,'9,999,999.99')
@80,186 SAY 'DLLS'
ENDIF
@81,38 SAY SUBSTR(ImpLet,195)
@82,94 SAY TRANSFORM(DAY(FrmFactura.TexFecVen.Value),"99")
@82,102 SAY X(MONTH(FrmFactura.TexFecVen.Value))
@82,135 SAY TRANSFORM(YEAR(FrmFactura.TexFecVen.Value),"9999")
@85,87 SAY TRANSFORM(XTotal,"*9,999,999.99")
@85,101 SAY "DLLS"
@86,38 SAY SUBS(ImpLet,1,54)
@87,38 SAY SUBS(ImpLet,55,70)
@90,47 SAY TRANSFORM(FrmFactura.TexIntMor.Value,"999")
@91,60 SAY " "
Endif
sele 12
use
********************************* D E C E N A ****************************
PROCEDURE DECENA
D=D+"0"
GO TOP
SEEK D
IF FOUND()
D=DES_NUM
ENDIF
GO TOP
SEEK U
IF FOUND()
U=DES_NUM
ENDIF
RETURN
********************************* C E N T E N A **************************
PROCEDURE CENTENA
IF C<>"0"
C=C+"00"
GO TOP
SEEK C
IF FOUN()
IF C="100"
C=ALLT(DES_NUM)+"TO"
ELSE
C=ALLT(DES_NUM)
ENDIF
ENDIF
ENDIF
IF D="0"
GO TOP
SEEK U
IF FOUND()
IF A=6.AND.U="1"
U="UN"
ELSE
U=ALLT(DES_NUM)
ENDIF
IF C="0"
C=U
ELSE
C=C+" "+U
ENDIF
ENDIF
ELSE
GO TOP
SEEK DD
IF FOUN()
D=ALLT(DES_NUM)
IF C="0"
C=D
ELSE
C=C+" "+D
ENDIF
ELSE
DO DECENA
IF C="0"
C=ALLT(D)+" Y "+ALLT(U)
ELSE
C=C+" "+ALLT(D)+" Y "+ALLT(U)
ENDIF
ENDIF
ENDIF
RETU