por IvanGabriel » Lun Sep 07, 2009 3:42 pm
Hola! primero que nada muchas gracias por la ayuda Gustavo!!
Me ha sido de mucha ayuda tu ayuda, y ha sido muy rapido!... Muchas gracias, abusando de tus respuestas y de tu experiencia en todas las aplicaciones que manejas, no se si habra manera de que pudieras ayudarme con lo siguiente se que es algo largo pero si pudieras ayudarme seria de mucha utilidad. Mira tengo este algoritmo,
&TxtImp2 = '' // Pone variable en blanco
&MndTxt = lower(&Moneda) // convierte texto de moneda a minusculas
&UX ="uno dos tres cuatro cinco seis siete ocho nueve" // asigna valores a variable
&D1X ="once doce trece catorce quince "
&DX0 ="diez veinte treinta cuarenta cincuenta sesenta setenta ochenta noventa "
&CX00 ="cien docientos trecieentos cuatrocientos quinientos seisientos novecientos "
&Unidad = " "
&Centena = " "
&Decena = " "
&E_NUM = int(&IMPORTE) //convierte el importe a entero
&D_NUM = &IMPORTE - &E_NUM //resta la variable
&D_NUM = &D_NUM * 100
&CIFRA = trim(str(&E_NUM))
&CIFRA = ltrim(&CIFRA)
&L = len(&CIFRA)
&VALOR = 0
&LET = " "
if &L > 6
&VECES=3
else
if &L>3
&VECES=2
else
&VECES=1
endif
endif
do while &VECES <> 0
if &L=9 .OR. &L=6 .OR. &L=3
&CENTENA=substr(&CIFRA,1,1)
&DECENA =substr(&CIFRA,2,1)
&UNIDAD =substr(&CIFRA,3,1)
&VALOR =val(substr(&CIFRA,1,3))
endif
if &L=8 .OR. &L=5 .OR. &L=2
&CENTENA=" "
&DECENA =substr(&CIFRA,1,1)
&UNIDAD =substr(&CIFRA,2,1)
&VALOR =val(substr(&CIFRA,1,2))
endif
if &L=7 .OR. &L=4 .OR. &L=1
&CENTENA=" "
&DECENA =" "
&UNIDAD =substr(&CIFRA,1,1)
&VALOR =val(&UNIDAD)
endif
if &CENTENA<>" " .AND. &CENTENA<>"0"
&DESDE=(13*val(&CENTENA))-12
&VERSO=trim(substr(&CX00,&DESDE,13))
if &VALOR=100
&VERSO="cien"
endif
&LET=&LET+&VERSO+" "
endif
&VERSO=""
if &DECENA<>" " .AND. &DECENA<>"0"
&DESDE=(9*val(&DECENA))-8
&VERSO=trim(substr(&DX0,&DESDE,9))+" "
if &DECENA="1" .AND. &UNIDAD<>"0"
if &UNIDAD<"6"
&DESDE=(8*val(&UNIDAD))-7
&VERSO=trim(substr(&D1X,&DESDE,8))+" "
else
Do Case
Case &Unidad = 6
&Verso = 'diesiseis '
Case &Unidad = 7
&Verso = 'diesisiete '
Case &Unidad = 8
&Verso = 'disiocho '
Case &Unidad = 9
&Verso = 'diesinueve '
EndCase
endif
else
if &UNIDAD<>"0"
if &DECENA="2"
&VERSO="veinte "
else
&VERSO=&VERSO
endif
endif
endif
&LET=&LET+&VERSO
endif
&VERSO=""
if &UNIDAD<>"0"
if &DECENA<>"1"
&DESDE=(6*val(&UNIDAD))-5
&VERSO=trim(substr(&UX,&DESDE,6))+" "
if &UNIDAD="1" .AND. &VECES<>1
&VERSO="uno "
endif
else
if &UNIDAD>"5"
&DESDE=(6*val(&UNIDAD))-5
&VERSO1 = trim(substr(&UX,&DESDE,6))+" "
&VERSO=&VERSO
endif
endif
&LET=&LET+&VERSO
endif
if &VALOR=0 .AND. &IMPORTE<1000
&LET=&LET+"zero "
endif
if &VECES = 3
if &VALOR = 1
&LET=&LET+"millon "
else
&LET=&LET+"millones "
endif
&I = &L - 5
&CIFRA = substr(&CIFRA,&I ,6)
&L=6
else
if &VECES = 2
if &VALOR<>0
&LET=&LET+"mil "
endif
&I = &L - 2
&CIFRA = substr(&CIFRA,&I ,3)
&L=3
else
if &VECES = 1
if &D_Num > 0
if &D_Num > 9
&LET=&LET+"and "+trim(substr(str(&D_NUM),9,2))+"/100"
else
&LET=&LET+"and 0"+trim(substr(str(&D_NUM),9,2))+"/100"
endif
else
&LET = trim(&LET)
endif
endif
endif
endif
&VECES=&VECES-1
enddo
&L=len(&LET)
&LET1 = ""
&LET2 = ""
&LET3 = ""
if &L>50
&I=50
do while substr(&LET,&I,1)<>" "
&I=&I-1
enddo
&N = &I + 1
&LET1=substr(&LET,1,&I)
&L = len(&LET )- len(&LET1 )
&LET2=substr(&LET,&N ,&L)
&L = len(&LET2)
if &L>50
&I=50
do while substr(&LET2,&I,1)<>" "
&I=&I-1
enddo
&LET=&LET2
&N =&I +1
&LET2=substr(&LET,1,&I)
&L = len(&LET )- len(&LET2 )
&LET3=substr(&LET,&N,&L )
endif
else
&LET1=&LET
endif
&xVerso1 = &LET1
&xVerso2 = &LET2
&xVerso3 = &LET3
&TxtImp = trim(&MndTxt)+' '+trim(&xVerso1)+' '+trim(&xVerso2)+' '+trim(&xVerso3)
&I = 80
do while substr(&TxtImp,&I,1) <> ' '
&I = &I - 1
enddo
&TxtImp1 =substr(&TxtImp,1,&I)
&I = &I + 1
&N = 160 - &I
&TxtImp2 = substr(&TxtImp,&I,&N)
&LitNum = trim(&TxtImp1 )+' '+trim(&TxtImp2 )
Return
....Y bueno lo he bajado de internet para lo que te comente del trabajo que tengo que hacer, pero no me gustaria saber y profundizar mas sobre el algoritmo, y me preguntaba si tu podrias ayudarme a razonar las lineas de el mismo, entender por que es cada cosa, no se si esto se pueda pero de cualquier forma te agradesco mucho tu ayuda ya proporcionada en los otros casos, MUCHAS GRACIAS! bueno cuidate mucho, suerte,
Saludos.