Impresión inclinada

Hola a todos; yo imprimo las líneas con @ PROW()+1,50 say transf (a,"$999,999.99"), pero no me alinea los números y va "comiendo " un carácter de atrás hacia adelante y siempre me queda la columna en escalera. Por ejemplo:
$ 1,234.00
$ 123.00
$ 12.00
$ 1.00
¿Qué puedo hacer? . Muchas gracias. Inés.
Respuesta
1
Segura que son esos los valores..
Si fuera un problema de impresión no tendría porque cambiar un 1234 por un 123, porque si sale con .00 quiere decir que esta cambiando el valor de la variable "a"
Por otro lado si fuera un problema de impresión (que lo corta) debería ir cortando de izquierda a derecha, o de derecha a izquierda.. algo como..
$ 1,234.00
1,123.00
, 123.00
Pero si te fijas en tu ejemplo, veras que el $ de adelante y .00 de atrás siempre están y lo que cambia es el valor de "a"
Pero de todos modos si el ejemplo esta un poco errado.. te cuento que prow() devuelve la posición de la fila que dice la impresora..
porque no probas haciendo así..
@ prow(),50 say transf(1234,"$999,999.99")+chr(13)+chr(10)
Esto hará que se envíe un avance de carro y la función prow() traerá para la próxima linea el nuevo valor..
También depende de que haya delante de esos 50 caracteres.. acordate que el carro de la impresora no vuelve por más que vos pongas después 10, por ejemplo..
Por eso, en mi respuestas anteriores te recomendé que la longitud de los datos que imprimas, sean prestablecidos. Por ejemplo..
Si imprimís una dato numérico, usas transf()
Si imprimís un tipo carácter utilizas padre(), padc() o padl() según necesites alineación a la izquierda, centrada o a la derecha..
Por ejemplo padre('Descripcion', 40) rellena de espacios a la derecha hasta llegar a 40 en total
Si el texto de descripción supera los 40, lo recorta, entonces te aseguras que todos los datos siempre tienen el valor que quieres.. y al final de la linea pones chr(13)+chr(10) para empezar una nueva..
Bueno.
Hola Christian, perdón por molestar tanto. Tal vez no puse el ejemplo correcto. Lo que "come" es una espacio al principio de cada línea, por eso los números quedan alineados con una diferencia hacia la izquierda, quedan como en el ejemplo que vos pusiste pero sin truncar los datos de la variable. Da la sensación que la primer línea se inicia en la columna 7, la segunda en la columna 6, la próxima en la 5 y así sucesivamente. Espero me puedas ayudar, ya no sé que probar, saqué los formateos de fuente, probé pasando la var a carácter, usé pict, transf, str. No se qué más hacer. Gracias. Inés.
Pásame la linea completa
Que es todo lo que imprimís y en que columna debe empezar (pero todas las columnas)
Así te paso el código de la linea directamente..
Christian; te paso el código que modifiqué muchas veces y siempre me pasa lo mismo:
@ prow()+1 , 3 say transf(cantidad,"$999,999") STYLE "T"
@ prow(),15 say m.detalle STYLE "T"
@ prow(), 80 say transf(precio, "$999,999.99") STYLE "T"
@ prow(), 95 say transf(importe, "$999,999.99") STYLE "T"
Gracias y perdón por las molestias. Inés.
Primero que todo, fíjate que la fuente de la impresora este condensada para llegar a 120 o 132 caracteres según el tipo..
Yo haria asi..
@ prow(),1 say space(2)+;
transf(cantidad,"$999,999")+space(4)+;
padr(m.detalle,64)+;
transf(precio, "$999,999.99")+space(3)+;
transf(importe, "$999,999.99")+chr(13)+chr(10)
Tambien podes cambiar "@prow(), 1 say" por "???" como te contaba.. lo bueno de este segundo caso es que no tenes que manejar set device to printer o to screen a aca rato.
Y acordate que prow() devuelve la posición de la fila de la impresora.. así que en lugar de sumarle uno, pasaje el retorno de carro y se actualiza sola..(bueno, como quieras.. )
En cantidad no lleva $ pero yo lo dejé así porque estaba en el ejemplo.
Ah, y cuidado con m.detalle y precio por ejemplo, porque si estas parada en una tabla que tiene un campo precio no toma a una variable.. si son variables asegurate que de poner m. siempre.
Espero que ayude.
Suerte..
Keystone - Christian

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas