Clipper/FiveWin - RUTINAS DE CLIPPER

 
Vista:

RUTINAS DE CLIPPER

Publicado por JUAN (3 intervenciones) el 12/07/2007 18:44:15
Hola, queria saber si alguien tiene una rutina o me dice, como puedo convertir una impresion de clipper, en archivo txt, por ejemplo una factura que estoy tirando desde un programa creado en clipper, todo esto ya que estoy trabajando con XP, y la impresora no me obedece, y si alguien tiene una rutinita, para convertir texto en palabra, por ejemplo 70.000, convertirlo, en SETENTA MIL.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE: RUTINAS DE CLIPPER

Publicado por Antoni Masana (168 intervenciones) el 12/07/2007 22:14:30
Para imprimir en un fichero solo necesitas añadir la siguiente linea al imprimir:

SET PRINTER TO ("C:\FICHERO.TXT") ADDITIVE

Para el segundo punto no tengo la rutina en clipper pero he visto que en la red hay varias con mayor o menor exito. El exito tambien depende de la utilidad de la misma, por ejemplo hace unos años en españa la rutina para hacer un talón bancario deberia traducir algo asi como:

1 ptas --> Una peseta

Hoy seria asi:

1 € --> Un euro

Porque Un peseta o Una Euro no suenan muy bien.

Si busca en el google:

"CLIPPER NUMEROS LETRAS" o "CLIPPER NUMEROS TEXTO" o "CLIPPER CONVERTIR NUMEROS" o ETC...

encontradas muchas referencias.

Incluso en este foro:

http://www.lawebdelprogramador.com/codigo/codigo.php?idp=98&id=17&texto=Clipper/FiveWin
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE: RUTINAS DE CLIPPER

Publicado por Antoni Masana (168 intervenciones) el 12/07/2007 22:21:23
Para no molestar a nadie, que no es mi intención rectifico.

En esta dirección encontraras varios ejemplos

http://lawebdelprogramador.com/codigo/mostrar.php?d=17&texto=Clipper/FiveWin

Que todo el mundo se lo curra y no pretendia decir que una rutina es mejor que la otra.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE: RUTINAS DE CLIPPER

Publicado por pepe (39 intervenciones) el 13/07/2007 08:24:37
Aquí tienes :

// -------------------------------------------------------------------------
FUNCTION Letras( nNumero, cGenero )

// Declaraci¢n de constantes
#define Y "y "
#define F "as "
#define M "os "
#define MIL "mil "
#define MILLON "mill¢n "
#define MILLONES "millones "
#define BILLON "bill¢n "
#define BILLONES "billones "

// Declaraci¢n de Variables
LOCAL aGrupos[5], aUnidad[10], aDecena[10,10], aCentena[10],;
aConector[5], cEnLetra, nGrupo, cNumStr, cUnidad,;
cDecena, cCentena

// Control de Par metros opcionales
if cGenero = NIL
cGenero := "F"
else
cGenero := upper( cGenero )
end if

// Control del tipo de los par metros
if valtype( nNumero ) != "N" .or. valtype( cGenero ) != "C"
RETURN ""
end if

// Code Blocks para las Unidades
aUnidad[ 1] := {|| if( nNumero = 0 .and. nGrupo = 1, ;
"cero", "" )}
aUnidad[ 2] := {|| if( cDecena = "1", ;
aDecena[2, val( cUnidad ) + 1], ;
if( aGrupos[nGrupo] = "001" .and. ;
( nGrupo = 2.or.nGrupo = 4 ), ;
"", ;
if( nGrupo > 2, "un ", ;
if( cGenero = "F", "una ",;
"uno " ) ) ) ) }

aUnidad[ 3] := {|| if( cDecena="1", ;
aDecena[2, val( cUnidad ) + 1], ;
"dos " )}

aUnidad[ 4] := {|| if( cDecena="1", ;
aDecena[2, val( cUnidad ) + 1], ;
"tres " )}

aUnidad[ 5] := {|| if( cDecena="1", ;
aDecena[2, val( cUnidad ) + 1], ;
"cuatro " )}

aUnidad[ 6] := {|| if( cDecena="1", ;
aDecena[2, val( cUnidad ) + 1], ;
"cinco " )}

aUnidad[ 7] := {|| if( cDecena="1", ;
aDecena[2, val( cUnidad ) + 1], ;
"seis " )}

aUnidad[ 8] := {|| if( cDecena="1", ;
aDecena[2, val( cUnidad ) + 1], ;
"siete " )}

aUnidad[ 9] := {|| if( cDecena="1", ;
aDecena[2, val( cUnidad ) + 1], ;
"ocho " )}

aUnidad[10] := {|| if( cDecena="1", ;
aDecena[2, val( cUnidad ) + 1], ;
"nueve " )}

// Code Blocks para las Decenas
aDecena[ 1, 1] := {|| ""}
aDecena[ 2, 1] := {|| if( cUnidad = "0", "diez ", "" )}
aDecena[ 2, 2] := "once "
aDecena[ 2, 3] := "doce "
aDecena[ 2, 4] := "trece "
aDecena[ 2, 5] := "catorce "
aDecena[ 2, 6] := "quince "
aDecena[ 2, 7] := "dieciseis "
aDecena[ 2, 8] := "diecisiete "
aDecena[ 2, 9] := "dieciocho "
aDecena[ 2,10] := "diecinueve "
aDecena[ 3, 1] := {|| if( cUnidad="0","veinte ","veinti" )}
aDecena[ 4, 1] := {|| "treinta "+if( cUnidad!="0",Y,"" )}
aDecena[ 5, 1] := {|| "cuarenta "+if( cUnidad!="0",Y,"")}
aDecena[ 6, 1] := {|| "cincuenta "+if(cUnidad!="0",Y,"")}
aDecena[ 7, 1] := {|| "sesenta "+ if( cUnidad!="0",Y,"")}
aDecena[ 8, 1] := {|| "setenta "+ if( cUnidad!="0",Y,"")}
aDecena[ 9, 1] := {|| "ochenta "+ if( cUnidad!="0",Y,"")}
aDecena[10, 1] := {|| "noventa "+ if( cUnidad!="0",Y,"")}

// Code Blocks para las Centenas
aCentena[ 1] := {|| ""}
aCentena[ 2] := {|| if( cDecena + cUnidad = "00","cien ",;
"ciento " )}

aCentena[ 3] := {|| "doscient" + if(nGrupo < 3 .and. ;
cGenero = "F", F, M )}

aCentena[ 4] := {|| "trescient" + if(nGrupo < 3 .and. ;
cGenero = "F", F, M )}

aCentena[ 5] := {|| "cuatrocient"+if(nGrupo < 3 .and. ;
cGenero = "F", F, M )}

aCentena[ 6] := {|| "quinient" + if( nGrupo < 3 .and. ;
cGenero = "F", F, M )}

aCentena[ 7] := {|| "seiscient" + if(nGrupo < 3 .and. ;
cGenero = "F", F, M )}

aCentena[ 8] := {|| "setecient" + if(nGrupo < 3 .and.;
cGenero = "F", F, M )}

aCentena[ 9] := {|| "ochocient" + if(nGrupo < 3 .and.;
cGenero = "F", F, M )}

aCentena[10] := {|| "novecient" + if(nGrupo < 3 .and.;
cGenero = "F", F, M )}

// Code Blocks para los Conectores
aConector[1] := {|| ""}
aConector[2] := {|| if( aGrupos[2] > "000", MIL , "")}
aConector[3] := {|| if( aGrupos[3] > "000" .or.;
aGrupos[4] > "000", ;
if( aGrupos[3] = "001", MILLON,;
MILLONES ), "" )}
aConector[4] := {|| if( aGrupos[4] > "000", MIL, "" )}
aConector[5] := {|| if( aGrupos[5] > "000", ;
if( aGrupos[5] = "001", BILLON,;
BILLONES ), "" )}

// Conversi¢n a car cter del n£mero,
// justificando con 0 a la izquierda
cNumStr := alltrim( str( nNumero, 15, 0 ) )
cNumStr := replicate( "0", 15 - len( cNumStr ) ) + cNumStr

// Confecci¢n de los Grupos
for nGrupo := 1 TO 5
aGrupos[5 - nGrupo + 1] := substr( cNumStr, ;
( nGrupo - 1 ) * 3 + 1, 3 )
next

// Proceso
cEnLetra := ""
for nGrupo := 5 to 1 step -1
// Extraer cada una de las 3 cifras del Grupo en curso
cUnidad :=right ( aGrupos[nGrupo], 1 )
cDecena :=substr( aGrupos[nGrupo], 2, 1 )
cCentena:=left ( aGrupos[nGrupo], 1 )

// Componer la cifra en letra del Grupo en curso
cEnletra:=cEnLetra+eval( aCentena[val( cCentena )+1]) +;
eval(aDecena[val(cDecena)+1,1])+;
eval(aUnidad[val(cUnidad)+1]) +;
eval( aConector[nGrupo] )
next

// Salida
RETURN cEnLetra
// -------------------------------------------------------------------------

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE: RUTINAS DE CLIPPER

Publicado por Gabriel Pascual (913 intervenciones) el 13/07/2007 19:12:29
Bien, bien, me gusta este topico, aqui tienes mi rutina:

FUNCTION NumALet(nNum,lReset)
STATIC cVret
LOCAL aNums := ARRAY(900)
LOCAL nCien, nMil, nMillon
DEFAULT lReset := .T.
IF lReset
cVret := ""
ENDIF
aNums[1] := "un"; aNums[2] := "dos"; aNums[3] := "tres"; aNums[4] := "cuatro"; aNums[5] := "cinco"
aNums[6] := "seis"; aNums[7] := "siete"; aNums[8] := "ocho"; aNums[9] := "nueve"; aNums[10] := "diez"
aNums[11] := "once"; aNums[12] := "doce"; aNums[13] := "trece"; aNums[14] := "catorce"; aNums[15] := "quince"
aNums[20] := "veinti"; aNums[30] := "treinta"; aNums[40] := "cuarenta"; aNums[50] := "cincuenta"; aNums[60] := "sesenta"
aNums[70] := "setenta"; aNums[80] := "ochenta"; aNums[90] := "noventa"; aNums[100] := "ciento"; aNums[200] := "doscientos"
aNums[300] := "trescientos"; aNums[400] := "cuatrocientos"; aNums[500] := "quinientos"; aNums[600] := "seiscientos"
aNums[700] := "setecientos"; aNums[800] := "ochocientos"; aNums[900] := "novecientos"
nMillon := Int(nNum / 1000000)
IF nMillon > 0
cVret := NumAlet(nMillon,.f.)
cVret += " millones "
nNum := nNum - INT(nMillon * 1000000)
ENDIF
nMil := Int(nNum / 1000)
IF nMil > 0
cVret := NumALet(nMil,.f.)
nNum := nNum - (nMil * 1000)
cVret += " mil "
ENDIF
nCien := Int (nNum/100)
IF nCien > 0
cVret += aNums[nCien * 100]+" "
nNum := nNum - (nCien * 100)
ENDIF
DO CASE
CASE nNum >= 11 .AND. nNum <= 15
cVret += aNums[nNum]
nNum := 0
CASE nNum >= 16 .AND. nNum <= 19
nDiez := Int(nNum/10)
cVret += aNums[10]+ " y "
nNum := nNum - (nDiez * 10)
CASE INT(nNum/10) >= 2
nDiez := Int(nNum/10)
IF nNum == 20
cVret += "veinte "
ELSE
cVret += aNums[nDiez * 10] + IIF(nDiez > 2 ," y " ,"")
ENDIF
nNum := nNum - (nDiez * 10)
ENDCASE
IF INT(nNum) > 0
cVret += aNums[nNum]
ENDIF
RETURN (cVret)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE: RUTINAS DE CLIPPER

Publicado por juan (6 intervenciones) el 16/07/2007 02:04:59
GRACIAS A TODOS LOS SU AYUDA, TAMBIEN NCONTRE ENTRE MIS CACHUREOS UNA RUTINA, SE LAS ENVIARE POR SI LES PUEDE SERVIR, GACIAS, CHAOOO
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar