no imprime la ultima linea del total, al utilizar @f,c para imprimir

558 views
Skip to first unread message

Jose Mario

unread,
Sep 4, 2013, 2:35:18 PM9/4/13
to publice...@googlegroups.com
yo se que los estoy molestando seguido
y les pido disculpas, pero necesito de su ayuda
tengo un prg para imprimir una factura, un credito fiscal, 
lo raro es que la parte del detalle esta e la ccolumna 63
y lo imprime bien, al final imprime el volar en letras
y la imprime bien, pero cuando quiero imprimir
el total simpre en la columna 63 y es la ultima impresion
el total, esta ya la imprime en la siguiente pagina
estas hojas son sultas no son continuas, que sera
ya revise todo y no lo encuentro el cliente en excel
la imprime y le imrime bien este total
como les digo ya revise todo, es uan epson lx-300+
y las hohas son sueltas
que tendre que declar el tamaño
de la pagina

limpresor="Epson LX-300+"
SET PRINTER TO NAME (limpresor)

SET DEVICE TO PRINTER 
???chr(27)+chr(80)+chr(18)
@0,0 say chr(27)+"C"+chr(50)

Arnaldo Toledano

unread,
Sep 4, 2013, 3:34:18 PM9/4/13
to publice...@googlegroups.com
Primero tenes que ver la cantidad de lineas que tiene la hoja.
Para ello, en el Wordpad escribí lo siguiente desde el inicio.
1
2
3
4
5
.
.
.
70
Lo imprimís en una hoja, y a partir de allí sabrás con exactitud que cantidad de lineas tiene
la hoja.
Quizás la linea 63 este fuera del rango de linea para imprimir desde VFP, NO ASÍ para excel.

Arnaldo Toledano
--
Arnaldo Toledano Tesys Informática Córdoba Argentina

Arnaldo Toledano

unread,
Sep 4, 2013, 3:36:30 PM9/4/13
to publice...@googlegroups.com
PERDÓN.
Me falto eso
12345678901234567890123456789012345678901234567890123456789012345678901234567890

1
2
3
4
5
.
.
.
70

Donde dice Lineas, debe decir COLUMNAS
-------- Mensaje original --------
Asunto: Re: [vfp] no imprime la ultima linea del total, al utilizar @f,c para imprimir
Fecha: Wed, 04 Sep 2013 16:34:18 -0300
De: Arnaldo Toledano <arnaldo....@gmail.com>
Responder-a:: arnaldo....@gmail.com
Organización: Tesys Informatica
A: publice...@googlegroups.com

Víctor Hugo Espínola Domínguez

unread,
Sep 4, 2013, 4:12:36 PM9/4/13
to publicesvfoxpro
Hola José Mario

Es probable que esté quedando en el buffer el último dato a imprimir, para solucionarlo imprime SPACE(1) al final del informe.

Saludos,
Víctor.

Jose Mario

unread,
Sep 4, 2013, 4:57:30 PM9/4/13
to publice...@googlegroups.com, arnaldo....@gmail.com
tesys
tenes razon ya hice eso en donde el cliente
y el cliente no tiene ese manual y aunque lo tuviera
no entiendo, perdon por esto

???chr(27)+chr(80)+chr(18)
este codigo que crei que era para inicializar el impresor
me esta cortando hasta la linea 40 

y total esta en la linea 43
entonces es el codigo

que bruto



El miércoles, 4 de septiembre de 2013 13:36:30 UTC-6, tesys escribió:
PERDÓN.
Me falto eso
12345678901234567890123456789012345678901234567890123456789012345678901234567890
1
2
3
4
5
.
.
.
70

Donde dice Lineas, debe decir COLUMNAS
-------- Mensaje original --------
Asunto: Re: [vfp] no imprime la ultima linea del total, al utilizar @f,c para imprimir
Fecha: Wed, 04 Sep 2013 16:34:18 -0300
De: Arnaldo Toledano <arnaldo...@gmail.com>

Fernando D. Bozzo

unread,
Sep 4, 2013, 4:57:49 PM9/4/13
to publice...@googlegroups.com
O un Form Feed para que saque la hoja, o un EJECT PAGE (había un comando parecido en Fox)

Jose Mario

unread,
Sep 4, 2013, 4:59:36 PM9/4/13
to publice...@googlegroups.com, arnaldo....@gmail.com
pero la factura tiene para 45 lineas mas o menos
eso si estoy seguro

Jose Mario

unread,
Sep 4, 2013, 5:00:46 PM9/4/13
to publice...@googlegroups.com
no es este codigo
que imprimie hasta la linea 41
???chr(27)+chr(80)+chr(18)
no se donde lo saque

Fidel Charny

unread,
Sep 4, 2013, 5:05:23 PM9/4/13
to publice...@googlegroups.com
???chr(27)+"C"+chr(41)    && 41 líneas por página

Víctor Hugo Espínola Domínguez

unread,
Sep 4, 2013, 5:07:05 PM9/4/13
to publicesvfoxpro
Hola José Mario

>no es este codigo
>que imprimie hasta la linea 41
>???chr(27)+chr(80)+chr(18)

??? chr(18)                            && cancelar impresión condensada
??? chr(27)+chr(80)                && es para fijar en 10 caracteres por pulgada

Publica o envía el código que usas, será más fácil ayudarte.

Saludos,
Víctor.

Jose Mario

unread,
Sep 4, 2013, 5:08:24 PM9/4/13
to publice...@googlegroups.com
utilice este codigo de inicializar porque
me imprimia asi
'''''''''''''''''''''''''''''''''''''''
''''''49.50'''''''''''''''''
''''''''''''''''''''''''''''''''''''''
los valores como manchado abajo tenia como un fondo de
apostrofes
no se enque modalidad estaba la impresora y decidi buscar un 
codigo e inicializar y le comoque este
y se le quito esa mancha, pero no me fije que imprime hasta la 
fila 41

Jose Mario

unread,
Sep 4, 2013, 5:13:25 PM9/4/13
to publice...@googlegroups.com
set cons off
limpresor="Epson LX-300+"
SET PRINTER TO NAME (limpresor)
SET DEVICE TO PRINTER 

*??? Chr(27)+Chr(64)
*??? Chr(64)+Chr(18)
*??? Chr(64)+Chr(77)

*@0,0 say chr(27)+"C"+chr(51)

con1=" C O N T A D O "
con2=" C R E D I T O"

pago=m.fpago
do case
case pago="1"
pg="1"
case pago="2"
pg="2"
endc

sele clientes
seek m.cliente
m.negocio=ALLTRIM(negocio)
m.direccion=ALLTRIM(direccion)
m.nit=ALLTRIM(nit)

c=1
stor 0 to vapa
select _detail
go top
SCAN  
if c=1
@09,41 say STR(DAY(DATE()),2)
@09,49 say STR(MONTH(DATE()),2)
@09,55 say STR(YEAR(DATE()),4)
@11,09 say ALLTRIM(m.negocio)
@13,11 say ALLTRIM(m.direccion)
@15,11 say ALLTRIM(m.nit)
@15,38 say con&pg
c=2
l=18
endi
@l, 3 say TRANSFORM(cant,"999")
@l,07 say left(descrip,27)
@l,35 say TRANSFORM(precio,"999.999")
@l,52 say TRANSFORM(valor,"9,999.99")
vapa=vapa+valor
l=l+1
ENDSCAN

atot=vapa
STORE " " TO let,ctv
letras()

@38,03 say ALLTRIM(LOWER(let)+" "+LOWER(ctv))
@38,52 say TRANSFORM(vapa,"9,999.99")
@41,52 say TRANSFORM(vapa,"9,999.99")
@43,52 say TRANSFORM(vapa,"9,999.99")

eject
???CHR(12)

*SET PRINTER OFF
SET DEVICE TO SCREEN
SET PRINTER TO
*SET CONSOLE ON

Jose Mario

unread,
Sep 4, 2013, 5:15:03 PM9/4/13
to publice...@googlegroups.com

set cons off
limpresor="Epson LX-300+"
SET PRINTER TO NAME (limpresor)
SET DEVICE TO PRINTER 
???chr(27)+chr(80)+chr(18)

Jose Mario

unread,
Sep 4, 2013, 5:16:01 PM9/4/13
to publice...@googlegroups.com
asi lo pienso dejar


set cons off
limpresor="Epson LX-300+"
SET PRINTER TO NAME (limpresor)
SET DEVICE TO PRINTER 

??? Chr(27)+Chr(64)
??? Chr(64)+Chr(18)
??? Chr(64)+Chr(77)
DO letras
@38,03 say ALLTRIM(LOWER(let)+" "+LOWER(ctv))
@38,52 say TRANSFORM(vapa,"9,999.99")
@41,52 say TRANSFORM(vapa,"9,999.99")
@43,52 say TRANSFORM(vapa,"9,999.99")

ejec
???CHR(12)

SET PRINTER OFF
SET DEVICE TO SCREEN
SET PRINTER TO
SET CONSOLE ON

Víctor Hugo Espínola Domínguez

unread,
Sep 4, 2013, 5:24:55 PM9/4/13
to publicesvfoxpro
Hola José Mario

>@43,52 Say Transform(vapa,"9,999.99")
>
>Eject
>???Chr(12)

@43,52 Say Transform(vapa,"9,999.99")
@44,01 Say Space(1)

****Eject
??? Chr(12)

Saludos,
Víctor.

Fernando D. Bozzo

unread,
Sep 4, 2013, 5:36:00 PM9/4/13
to publice...@googlegroups.com
Hola Mario:

Creo que te convendría estudiar un poco los comandos ESC+P de la impresora, los comandos de impresión de Fox (no solo el "?", sino todos los demás) y hacer unas pruebas.

Yo hice una búsqueda rápida de manuales on-line, especialmente de los códigos ESC+P de la LX-300 y encontré esto en 2 minutos, lo que me deja la duda de porqué abriste el hilo pidiendo un manual en vez de buscarlo:

Resúmen de los comandos más utilizados:
http://www.epson.com/cgi-bin/Store/support/supDetail.jsp?infoType=FAQ&oid=75683&foid=76605

Listado detallado de todos los comandos:
http://support.epson.ru/products/manuals/000350/part1.pdf


Normalmente lo primero que se hace es inicializar la impresora (ESC+@), luego configurar el tipo de hoja (A4, etc) y finalmente el tipo de letra (10 CPI, 12 CPI, 18 CPI, etc)

No sirve que copies comandos al tuntún de algún sitio a ver si funciona, tenés que saber bien que és lo que querés hacer y luego buscar los comandos para hacerlo. Y si encontrás comandos, mirá en el manual a ver qué es lo que hacen, nunca uses comandos sin saber exactamente lo que hacen, porque te arriesgás a que no funcione como debe.

Finalmente, luego de imprimir los comandos de inicialización, se imprime la información y al final un FORM FEED (FF) para hacer un eject de la hoja.

No suele haber mucha más historia con esto, pero lo que sí es importante es que dediques tiempo a estudiar y probar, ya que los foros son para sacar las dudas de lo que ya se intentó previamente y que no funcionó.


Saludos.-

Jose Mario

unread,
Sep 4, 2013, 5:39:19 PM9/4/13
to publice...@googlegroups.com
gracias, probare en el cliente

Jose Mario

unread,
Sep 4, 2013, 5:47:07 PM9/4/13
to publice...@googlegroups.com
para comenzar gracias por tus sugerencias

lo que pasa que el cliente tiene el impresor en la caja
y no me lo quiere prestar
solo voy y me dice, ya , ya imprime, pero no me colabora

tenes razon no se nada de comandos de escape, nada

siempre imprimo a papel normal tipo carta
y no tengo necesidad de hacer tipos de letras y tamaños
color, todo eso

pero te prometo que estudiare, solo para estudio


gracias de todas formas

Jose Ramon Veliz Martinez

unread,
Sep 4, 2013, 5:47:36 PM9/4/13
to publice...@googlegroups.com
Buenas y porque no lo conviertes a reporte es mucho mejor y mas facil de controlar estos saltos de paginas.

Lo que veo es que tiras los totales de un solo a las lineas 38,41,53 deberias de y talvez el tamaño del papel no llegue hasta esas lineas. Deberias de ponerle menos 

Saludos



El miércoles, 4 de septiembre de 2013 15:39:19 UTC-6, Jose Mario escribió:

Jose Mario

unread,
Sep 4, 2013, 5:52:49 PM9/4/13
to publice...@googlegroups.com
gracias

WGWH

unread,
Sep 4, 2013, 6:43:11 PM9/4/13
to publice...@googlegroups.com
Estoy con José Ramón,

Envía la info de la factura a un cursor, con el diseñador de reporte haces el formato de tu factura en un instante que no tenés idea lo fácil que es y luego solo usar REPORT FORM nomreporte TO PRINTER PROMP(bueno la ayuda describe bien este comando).

Llevo alrededor de 18 años de usar el diseñador de reporte sin tener que usar los comandos que hace 19 o 20 años usé para ese mismo fin y que tú estás indicando en tu programa, sólo ahora con WIN vista y WIN7 es que e tenido problemas en tiempo de diseño con carácteres DRAFT propios de la impresora, pero si haces el reporte en WIN XP y luego lo pones en el equipo con WIN7 imprimirá carácteres DRAFT rápidisimos.

Saludos, hojala te sirva el consejo.

Arnaldo Toledano

unread,
Sep 5, 2013, 8:05:56 AM9/5/13
to publice...@googlegroups.com
Para la EPSON LX-300, el largo de pagina lo definís por
CHR de Escape + "C" + Cantidad de lineas
Para 43 Lineas
Seria
? Chr(27)+ "C" + 43

Arnaldo Toledano

Fidel Charny

unread,
Sep 5, 2013, 9:09:24 AM9/5/13
to publice...@googlegroups.com, arnaldo....@gmail.com
Arnaldo:
Indicas sumar un número a un String?. Eso es para los Viernes!.

nLineasPorPagina=43
??? Chr(27)+chr(67)+Chr(nLineasPorPagina)

Como vengo del Clipper, tengo código con @ say para los clientes que usan impresoras matriciales.
Más o menos así:
* Variables para secuencias de escape Epson * Al Inicio del sistema
**************************************
PUBLIC DPMODE,INCOMP,INDOCE,OFCOMP,OFDOCE,;
PAGNN,DRAF,QUALY,COMUN,DOBLE_WID

DPMODE=CHR(27)+CHR(64)  && Data Procesing Mode
INCOMP=CHR(27)+CHR(15)  && Caracteres comprimidos
OFCOMP=CHR(18)          && Quita Caracteres comprimidos
INDOCE=CHR(27)+CHR(77)  && 12 cpi
OFDOCE=CHR(27)+CHR(80)  && 10 cpi

PAGNN=CHR(27)+CHR(67)  && + Chr(nLineasPorPagina)

DRAF =CHR(27)+CHR(120)+CHR(0)           && Draft
QUALY =CHR(27)+CHR(gaPrint[120)+CHR(1)  && Quality
DOBLE_WID =CHR(27)+CHR(33)+CHR(32)      && Expandido
COMUN =CHR(27)+CHR(33)+CHR(0)           && Normal
**********************************************************

Procedure ImprimoAlgo()
***********************
local lnLin
IF !gImpre(72,12)
    RETURN
ENDIF
&& Comienza la impresión
lnLin=Prow()
@ lnLin,1 say cpconvert(1252,437,"Nombre de la Empresa")
@ Avalin(@Lnlin,1),1 say "Texto siguiente..."
@ Avalin(@Lnlin,1),1 say "Texto siguiente..."
if LnLin>70
    ejec
    LnLin=Prow()
endif

&& Fin de la impresión
EndPrint()
Endproc


***************************************************************
* Inicio de impresión * Para esto conviene escribir una función
*                       Enviando Lineas por página, cpi y modo
**********************
PROCEDURE gImpre(nLineas,nCpi,lQualy)
*------------------------------------
SET CONSOLE OFF
Tellimpre=GetPrinter()
IF EMPTY(tellImpre)
    Return .F.
ENDIF
SET CONSOLE OFF

lcModo=iif(lQualy,"QUALY","DRAF")
lcCpi=INDOCE
nCpi=Evl(nCpi,12)
do case
    case nCpi=10
       lcCpi=""
    CASE nCpi=12
       LCCPI=INDOCE
    case nCpi=15

       lcCpi=INCOMP

    CASE nCpi>15
       lcCpi=INDOCE+INCOMP

SET PRINTER TO NAME (TellImpre)
??? DPMODE+PAGNN+chr(nLineas)+LCMODO+OFCOMP+LCCPI  && nLineas lpp, cpi, Draft/Quality
SET DEVICE TO PRINTER
@ PROW(),0 SAY " "
lnLin=Prow()
ENDPROC


****************************
PROCEDURE EndPrint(xlNoEject)
****************************
@ prow(),1 say " "   && libera última línea del buffer de la impresora
if Prow()=0
     xlNoEject=.t.    && evita el Eject si saltó a hoja nueva
endif
??? OFCOMP+OFDOCE+draf+comun     && deja la impresora en DRAF
SET PRINTER OFF
if !xlNoEject
     EJECT
ENDIF
SET DEVICE TO SCREEN
SET PRINTER TO
SET CONSOLE 
ENDPROC

*****************************
PROCEDURE AVALIN(nLine,qlines)
*****************************
* Avance de linea en impresora de texto
* @ Avalin(@nlin,1),1 say "Texto..."

nline=nline+EVL(qLines,1)
return nLine
ENDPROC

Jose Mario

unread,
Sep 5, 2013, 9:23:15 AM9/5/13
to publice...@googlegroups.com, arnaldo....@gmail.com
si esto me hubiera salido facil hace un mes, no los estuviera hostigando, pero
no es que sea necio, el dueño dle impresor, lo quiero ultrajar, pero es tan 
desconfiado con su dinero, el impresor esta a la par de la caja del dinero
y no tengo acceso al impresor como lo tengo con los programas

pero ayer mi amigo bozzo me dijo que era asi 
??? chr(27)+CHR(67)+chr(51)
como lo indica el manual y no me funciono

probare con la    chr(27 + " C" + chr(43)

gracias por la ayuda

Jose Mario

unread,
Sep 5, 2013, 9:27:54 AM9/5/13
to publice...@googlegroups.com, arnaldo....@gmail.com
hice otra prueba 
la liberacion del bufer si me imprimio el ultimo campo
@f,0 say spac(1)
gracias

Fer

unread,
Sep 5, 2013, 12:22:30 PM9/5/13
to publice...@googlegroups.com

Hola Mario:

¿Dónde puse yo esos códigos?
El único que puse fue esc+@, el otro no sé que hace.

Mario Oviedo

unread,
Sep 5, 2013, 12:50:00 PM9/5/13
to publice...@googlegroups.com
perdon

Fernando D. Bozzo

unread,
Sep 5, 2013, 1:42:34 PM9/5/13
to publice...@googlegroups.com
Te recomiendo que veas y estudies detenidamente el excelente ejemplo que te puso Fidel, con comentarios y todo.
Más claridad no se puede pedir.

...Eso sí, obviamente tenés que adaptarlo a lo que vos necesitás, no pretendas usarlo directamente.


Saludos.-

Mario Oviedo

unread,
Sep 5, 2013, 3:16:27 PM9/5/13
to publice...@googlegroups.com
VENGO DONDE EL CLIENTE
y todo era, vaciar el buffer
@45,01 say space(1)

al fin, gracias por el tiempo
finalizado

Reply all
Reply to author
Forward
0 new messages