Ayuda con esta funcion...
Posted: Thu Jan 14, 2010 1:41 pm
Hola amigos del foro
La funcion adjunta la utilizo para convertir los numeros a letras y la he empleado con exito desde clipper 5x pasando por FW23 pero ahora que trato de utilizarla en FWH al parecer no funciona debido a que no se pueden utilizar variables privadas ni publicas. Esta funcion es de vital importancia para mi ya que el sistema que estoy desarrollando debe imprimir cheques... he buscado en el foro una funcion equivalente y me he encontrado con una bastante larga. Me gustaria la ayuda de alguno de ustedes que me pueda decir como reutilizar este codigo en FWH. Esta funcion trabaja perfectamente en mis programas de FW23 agradezco mucho la ayuda que me puedan brindar.
CODIGO DE LA FUNCION: (Fue tomada de un libro que se llama Clipper Sumer 87 de EIDOS...)
(para tratar de resolver el caso he definido todas las locales y publicas como STATIC pero no ha funcionado...)
*--------------------------------------------------------------------------------------------------------------------------*
FUNC NUMLETRAS(NUM)
PRIV GRUPOS[5],ENLETRA,GRUPO,NUMSTR,UNIDAD,DECENA,CENTENA,;
UNI0,UNI1,UNI2,UNI3,UNI4,UNI5,UNI6,UNI7,UNI8,UNI9,DEC0,;
DEC1,DEC2,DEC3,DEC4,DEC5,DEC6,DEC7,DEC8,DEC9,CEN0,CEN1,;
CEN2,CEN3,CEN4,CEN5,CEN6,CEN7,CEN8,CEN9,DEC11,DEC12,DEC13,;
DEC14,DEC15,DEC16,DEC17,DEC18,DEC19,CONECT1,CONECT2,CONECT3,;
CONECT4,CONECT5,UNILET,DECLET,CENLET,CONECTOR,GRUPOST,GRUPOSTR
PUBLIC NUMERO:=NUM
UNI0="IIF(NUMERO=0 .AND. GRUPO=1,'cero','')"
UNI1="IIF(DECENA='1',DEC1&UNIDAD,IIF(GRUPOS[GRUPO]='001'.AND. (GRUPO=2 .OR. GRUPO=4),'',IIF(GRUPO>2,'un','una')))"
UNI2="IIF(DECENA='1',DEC1&UNIDAD,'dos')"
UNI3="IIF(DECENA='1',DEC1&UNIDAD,'tres')"
UNI4="IIF(DECENA='1',DEC1&UNIDAD,'cuatro')"
UNI5="IIF(DECENA='1',DEC1&UNIDAD,'cinco')"
UNI6="IIF(DECENA='1',DEC1&UNIDAD,'seis')"
UNI7="IIF(DECENA='1',DEC1&UNIDAD,'siete')"
UNI8="IIF(DECENA='1',DEC1&UNIDAD,'ocho')"
UNI9="IIF(DECENA='1',DEC1&UNIDAD,'nueve')"
DEC0="''"
DEC1="IIF(UNIDAD='0','diez','')"
DEC11="once"
DEC12="doce"
DEC13="trece"
DEC14="catorce"
DEC15="quince"
DEC16="dieciseis"
DEC17="diecisiete"
DEC18="dieciocho"
DEC19="diecinueve"
DEC2="IIF(UNIDAD='0','veinte','veinti')"
DEC3="'treinta'+IIF(UNIDAD<>'O',' y ','')"
DEC4="'cuarenta'+IIF(UNIDAD<>'O',' y ','')"
DEC5="'cincuenta'+IIF(UNIDAD<>'O',' y ','')"
DEC6="'sesenta'+IIF(UNIDAD<>'O',' y ','')"
DEC7="'setenta'+IIF(UNIDAD<>'O',' y ','')"
DEC8="'ochenta'+IIF(UNIDAD<>'O',' y ','')"
DEC9="'noventa'+IIF(UNIDAD<>'O',' y ','')"
CEN0="''"
CEN1="IIF(DECENA+UNIDAD='00','cien','ciento')"
CEN2="'doscient'+IIF(GRUPO<3,'os','os')"
CEN3="'trescient'+IIF(GRUPO<3,'os','os')"
CEN4="'cuatrocient'+IIF(GRUPO<3,'os','os')"
CEN5="'quinient'+IIF(GRUPO<3,'os','os')"
CEN6="'seiscient'+IIF(GRUPO<3,'os','os')"
CEN7="'setecient'+IIF(GRUPO<3,'os','os')"
CEN8="'ochocient'+IIF(GRUPO<3,'os','os')"
CEN9="'novecient'+IIF(GRUPO<3,'os','os')"
CONECT1="''"
CONECT2="IIF(GRUPOS[2]>'000',' mil','')"
CONECT3="IIF(GRUPOS[3]>'000' .OR. GRUPOS[4]>'000',IIF(GRUPOS[3]='001','mill¢n','millones'),'')"
CONECT4="IIF(GRUPOS[4]>'000',' mil','')"
CONECT5="IIF(GRUPOS[5]>'000',IIF(GRUPOS[5]='001','bill¢n','billones'),'')"
ENLETRA=''
NUMSTR=ALLTRIM(STR(NUMERO))
NUMSTR=REPLICATE('0',15-LEN(NUMSTR))+NUMSTR
FOR GRUPO=1 TO 5
GRUPOS[5-GRUPO+1]=SUBSTR(NUMSTR,(GRUPO-1)*3+1,3)
NEXT
FOR GRUPO=5 TO 1 STEP -1
UNIDAD=RIGHT(GRUPOS[GRUPO],1)
DECENA=SUBSTR(GRUPOS[GRUPO],2,1)
CENTENA=LEFT(GRUPOS[GRUPO],1)
UNILET=UNI&UNIDAD
DECLET=DEC&DECENA
CENLET=CEN&CENTENA
GRUPOSTR=STR(GRUPO,1)
CONECTOR=CONECT&GRUPOSTR
ENLETRA=ENLETRA+" "+&CENLET+" "+&DECLET+&UNILET+&CONECTOR
NEXT
RETU ENLETRA
La funcion adjunta la utilizo para convertir los numeros a letras y la he empleado con exito desde clipper 5x pasando por FW23 pero ahora que trato de utilizarla en FWH al parecer no funciona debido a que no se pueden utilizar variables privadas ni publicas. Esta funcion es de vital importancia para mi ya que el sistema que estoy desarrollando debe imprimir cheques... he buscado en el foro una funcion equivalente y me he encontrado con una bastante larga. Me gustaria la ayuda de alguno de ustedes que me pueda decir como reutilizar este codigo en FWH. Esta funcion trabaja perfectamente en mis programas de FW23 agradezco mucho la ayuda que me puedan brindar.
CODIGO DE LA FUNCION: (Fue tomada de un libro que se llama Clipper Sumer 87 de EIDOS...)
(para tratar de resolver el caso he definido todas las locales y publicas como STATIC pero no ha funcionado...)
*--------------------------------------------------------------------------------------------------------------------------*
FUNC NUMLETRAS(NUM)
PRIV GRUPOS[5],ENLETRA,GRUPO,NUMSTR,UNIDAD,DECENA,CENTENA,;
UNI0,UNI1,UNI2,UNI3,UNI4,UNI5,UNI6,UNI7,UNI8,UNI9,DEC0,;
DEC1,DEC2,DEC3,DEC4,DEC5,DEC6,DEC7,DEC8,DEC9,CEN0,CEN1,;
CEN2,CEN3,CEN4,CEN5,CEN6,CEN7,CEN8,CEN9,DEC11,DEC12,DEC13,;
DEC14,DEC15,DEC16,DEC17,DEC18,DEC19,CONECT1,CONECT2,CONECT3,;
CONECT4,CONECT5,UNILET,DECLET,CENLET,CONECTOR,GRUPOST,GRUPOSTR
PUBLIC NUMERO:=NUM
UNI0="IIF(NUMERO=0 .AND. GRUPO=1,'cero','')"
UNI1="IIF(DECENA='1',DEC1&UNIDAD,IIF(GRUPOS[GRUPO]='001'.AND. (GRUPO=2 .OR. GRUPO=4),'',IIF(GRUPO>2,'un','una')))"
UNI2="IIF(DECENA='1',DEC1&UNIDAD,'dos')"
UNI3="IIF(DECENA='1',DEC1&UNIDAD,'tres')"
UNI4="IIF(DECENA='1',DEC1&UNIDAD,'cuatro')"
UNI5="IIF(DECENA='1',DEC1&UNIDAD,'cinco')"
UNI6="IIF(DECENA='1',DEC1&UNIDAD,'seis')"
UNI7="IIF(DECENA='1',DEC1&UNIDAD,'siete')"
UNI8="IIF(DECENA='1',DEC1&UNIDAD,'ocho')"
UNI9="IIF(DECENA='1',DEC1&UNIDAD,'nueve')"
DEC0="''"
DEC1="IIF(UNIDAD='0','diez','')"
DEC11="once"
DEC12="doce"
DEC13="trece"
DEC14="catorce"
DEC15="quince"
DEC16="dieciseis"
DEC17="diecisiete"
DEC18="dieciocho"
DEC19="diecinueve"
DEC2="IIF(UNIDAD='0','veinte','veinti')"
DEC3="'treinta'+IIF(UNIDAD<>'O',' y ','')"
DEC4="'cuarenta'+IIF(UNIDAD<>'O',' y ','')"
DEC5="'cincuenta'+IIF(UNIDAD<>'O',' y ','')"
DEC6="'sesenta'+IIF(UNIDAD<>'O',' y ','')"
DEC7="'setenta'+IIF(UNIDAD<>'O',' y ','')"
DEC8="'ochenta'+IIF(UNIDAD<>'O',' y ','')"
DEC9="'noventa'+IIF(UNIDAD<>'O',' y ','')"
CEN0="''"
CEN1="IIF(DECENA+UNIDAD='00','cien','ciento')"
CEN2="'doscient'+IIF(GRUPO<3,'os','os')"
CEN3="'trescient'+IIF(GRUPO<3,'os','os')"
CEN4="'cuatrocient'+IIF(GRUPO<3,'os','os')"
CEN5="'quinient'+IIF(GRUPO<3,'os','os')"
CEN6="'seiscient'+IIF(GRUPO<3,'os','os')"
CEN7="'setecient'+IIF(GRUPO<3,'os','os')"
CEN8="'ochocient'+IIF(GRUPO<3,'os','os')"
CEN9="'novecient'+IIF(GRUPO<3,'os','os')"
CONECT1="''"
CONECT2="IIF(GRUPOS[2]>'000',' mil','')"
CONECT3="IIF(GRUPOS[3]>'000' .OR. GRUPOS[4]>'000',IIF(GRUPOS[3]='001','mill¢n','millones'),'')"
CONECT4="IIF(GRUPOS[4]>'000',' mil','')"
CONECT5="IIF(GRUPOS[5]>'000',IIF(GRUPOS[5]='001','bill¢n','billones'),'')"
ENLETRA=''
NUMSTR=ALLTRIM(STR(NUMERO))
NUMSTR=REPLICATE('0',15-LEN(NUMSTR))+NUMSTR
FOR GRUPO=1 TO 5
GRUPOS[5-GRUPO+1]=SUBSTR(NUMSTR,(GRUPO-1)*3+1,3)
NEXT
FOR GRUPO=5 TO 1 STEP -1
UNIDAD=RIGHT(GRUPOS[GRUPO],1)
DECENA=SUBSTR(GRUPOS[GRUPO],2,1)
CENTENA=LEFT(GRUPOS[GRUPO],1)
UNILET=UNI&UNIDAD
DECLET=DEC&DECENA
CENLET=CEN&CENTENA
GRUPOSTR=STR(GRUPO,1)
CONECTOR=CONECT&GRUPOSTR
ENLETRA=ENLETRA+" "+&CENLET+" "+&DECLET+&UNILET+&CONECTOR
NEXT
RETU ENLETRA