FoxPro/Visual FoxPro - Ayuda con impresion

 
Vista:

Ayuda con impresion

Publicado por Many (332 intervenciones) el 26/04/2013 13:21:14
Saludo a todos

Necesito que por favor me echen una mirada a este código para imprimir en un printer star sp500, este imprime bien pero no he podido controlar todo el papel que sale antes o después de imprimir, ya gasté un rollo de papel en un momento.

SET DEVICE TO printer
SET PRINTER TO

USE c:\supern\dettem

??? " FACTURA"
?
??? "-----------------------------------"
?
??? "CANT. PRECIO VALOR"
?
??? "-----------------------------------"

SCAN
?
?? dettem.ge
?? " "
??? dettem.descrip
?
??? transf(dettem.cantidad,"999.99")
?? " "
??transf(dettem.venta,"9,999.99")
?? " "
??transf(dettem.valor,"99,999.99")

ENDSCAN

?
?
?

??? "Ok"

SET DEVICE TO SCREEN
SET PRINTER TO

Si alguien tiene la posibilidad de probarlo hágalo por favor para que vea lo que hace, el problema esta cuando se ejecuta el SET PRINTER TO que inmediatamente manda el papel a correr.

Cuando desactivo el primer SET PRINTER TO inicia la impresión sin salto pero salta al final de la impresión. Y si no se lo pongo al principio o al final entonces no imprime.

Nota importante:
el papel que sale por cada SET PRINTER TO que se ejecuta es el tamaño de una oja ocho y medio por once (tamaño carta)

Adiós amigos, queda de ustedes.
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
sin imagen de perfil
Val: 1.011
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Ayuda con impresion

Publicado por Fidel (558 intervenciones) el 26/04/2013 16:05:41
No conozco esa impresora, pero te digo lo siguiente:
SET DEVICE TO PRINTER | TO SCREEN son comandos que se utilizan para imprimir en impresoras matriciales con secuencia de escape y los viejos comandos @ say nFila,nCol cTexto
Por lo que veo, estás imprimiendo con ?, por lo que correspondería:

nmargen=5
cFont="Lucida Console"
nSize=8
cEstilo="N"

set console off
SET PRINTER TO NAME (WhoImpre) && WhoImpre es la impresora de Windows
Set Printer ON
? "Primer Linea" AT nMargen FONT cFont,nSize STYLE cEstilo
? ... etc
? "Ultima línea" AT nMargen font cFont,nSize STYLE cEstilo
eject
SET CONSOLE ON
Set Printer Off
SEt printer to

Para acumular en una sola línea, en lugar de complicarte con ??, puedes concatenar en una variable, ayudandote con Padr(). En muchos casos conviene armar una matriz (array) y después imprimir el array.
Ahora bien, fijate que ??? se utiliza para enviar un comando no imprimible a la impresora (una secuencia de escape), generalmente para acomodar el largo de página, el ancho de fuente, el tipo de fuente, en impresoras de matriz de punto. Eso va con SET DEVICE TO PRINTER.

Esto debería funcionar en cualquier impresora que soporte modo gráfico. Pero repito que no conozco la impresora que citas.
LOCAL ARRAY gap(1)
ng=0
SELECT dettem
SCAN
ng=ng+1
Dimension gap(ng)
ng=ge + Padr(descrip,40) +Transform(cantidad,"999.99")+" ";
+TRansform(venta,"9,999.99")+" ";
+TRansform(valor,"99,999.99")
endscan

nmargen=5
cFont="Lucida Console"
nSize=8
cEstilo="N"
nTopFile=60

set console off
SET PRINTER TO NAME (WhoImpre) && WhoImpre es la impresora de Windows
Set Printer ON
for i=1 to alen(gap)
if Prow()=0
GetEncabezado()
endif
? gap[i] AT nMargen FONT cFont,nSize STYLE cEstilo
if Prow()>=nTopfie
ejec
endif
next
eject
SET CONSOLE ON
Set Printer Off
SEt printer to

Procedure GetEncabezado()
? "Pimer Linea Encabezado" at 2 FONT "Arial",9 STYLE "B"
? "Segunda Encabezado" at 2 FONT "Arial",8 STYLE "N"
RETURN

Con Prow() puedes saber en qué linea está imprimiendo y si hay que hacer un salto de hoja.
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

Ayuda con impresion

Publicado por Many (332 intervenciones) el 26/04/2013 19:13:13
Saludo

Aquí esta la impresora star sp500 :

https://www.google.com.do/search?hl=es&q=star+sp500&bav=on.2,or.r_qf.&bvm=bv.45645796,d.dmQ&biw=1024&bih=681&um=1&ie=UTF-8&tbm=isch&source=og&sa=N&tab=wi&ei=GbF6UbegK9H94AOty4C4Bw

Fidel, mi amigo del alma:

Como puede ver estas impresoras usan un rollo de papel contrario a una epson lx-300.

Debo aclarar que no tengo problemas con el desplazamiento o salto de paginas o linea, si tengo 50 artículos imprimirá 50 sin ningún saldo.

Mi problema es que imprime y continua saliendo papel en blanco del largo del papel tipo carta.

Esto es para una factura tipo supermercado, tiendas, bancas de loterías etc. Lo intente con un report form pero parece mas difícil detener el printer donde yo quiera.

por otro lado no entiendo esto:
SET PRINTER TO NAME (WhoImpre) && WhoImpre es la impresora de Windows

Gracias por sus esfuerzos, sigo buscando y esperando por ustedes.
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

Ayuda con impresion

Publicado por Many (332 intervenciones) el 26/04/2013 21:10:42
Saludo nuevamente

Debo aclarar que uso VISUAL FOXPRO 9 y que el papel sale en blanco cuando uso set printer on

hasta pronto.
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
sin imagen de perfil
Val: 1.011
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Ayuda con impresion

Publicado por Fidel (558 intervenciones) el 26/04/2013 21:43:35
WhoImpre=GETPRINTER() && selecciona impresora de Windows
?whoimpre
SET PRINTER TO NAME (WHOIMPRE) && envía la impresión a esa impresora


Acá para ventas minoristas se utilizan las impresoras fiscales (Epson, Hasar y alguna otra) y el mecanismo de impresión lo decide el controlador fiscal. Son puerto serie, por lo que no se utiliza la impresión de Fox sino un protocolo de conexión y despacho de datos.
Lo demás, insisto. Si utilizas SET DEVICE TO PRINTER, va a imprimir si los comandos son @ x,y Say

Si es una impresora de rollo no necesitas el Prow() y tampoco debes usar EJECT. Solamente avanzas unas líneas para el corte. (no sé si tiene comando de corte de rollo)

Por ejemplo, utilizo la siguiente rutina para arrancar una impresión matricial.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
Function Zimpre(nLarPage,CHA,Loc_prn,Supcomp,xlNotReasig)
**********************************************
* Convocatoria de impresoras de matriz de puntos
* cha es el valor de INDOCE,INCOMP etc.
* Formatos de SEcuencia de escape Impresoras de texto Only.
********************************
if Vartype(nLarPage)#"N"
	LLP=PAG72
ELSE
	llP=iif(nLarPage=0,"",PAGNN+CHR(nLarPage) )
ENDIF
SET CONSOLE OFF
if !xlNotReasig
	if Empty(Loc_prn)
		TellImpre=GetPrinter()
		if Empty(TellImpre)
			REturn .f.
		endif
		Loc_Prn=TellIMpre
	else
		TellImpre=Loc_Prn
	endif
	if TellImpre="No Existe"
		MessageBox("La impresora especificada no existe!",0,Th_mensaje)
		return .f.
	endif
	SET HEADINGS OFF
 
	SET PRINTER TO NAME (TellImpre)
 
endif
 
* dpmode, llp, draf, ofcomp, cha son variables públicas que contienen los códigos ascii
 
IF !SUPCOMP
	??? DPMODE+LLP+DRAF+OFCOMP+CHA    && secuencia de escape
ELSE
	??? DPMODE+LLP+DRAF+OFCOMP+CHA+INCOMP     && secuencia de escape
ENDIF
 
 
SET DEVICE TO PRINTER
@ PROW(),0 SAY " "
RETURN .t.
ENDFUNC


Y la siguiente función para cerrar una impresión matricial
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
*************************
PROCEDURE PANTALLA(lEjec)
*************************
* Cierra la impresora de TExto
@ prow(),1 say " "
_Screen.Th_Pantalla=.T.
Th_prinfile=""
??? OFCOMP+OFDOCE+draf+comun
SET PRINTER OFF
if lEjec
	EJECT
ENDIF
SET DEVICE TO SCREEN
SET PRINTER TO
SET CONSOLE ON
ENDPROC
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

Ayuda con impresion

Publicado por Many (332 intervenciones) el 26/04/2013 22:32:04
Saludo

Mientras analizo lo recibido vean esto:

Vean solo las dos primeras lineas y las dos ultima, como está ya no deja papel en blanco al iniciar pero ahora solo si los deja después que termina de imprimir.

Como puedo modificar estas dos ultimas lineas ya que todo está imprimiendo bien lo único es el papel que sale al final. Ya el problema está en las dos ultimas lineas.


SET PRINTER ON
SET DEVICE TO PRINT

?
?" SUPERMERCADO PRUEBA"
? " Avenida Circ. Norte, Edif. 1"
? " San Juan, Tel. 809-557-4414"
? " RNC: 01200126249"
?

? " FACTURA"

? "-----------------------------------"
? "CANT. PRECIO VALOR"
? "-----------------------------------"

USE c:\supern\dettem

SCAN
? dettem.ge
?? " "
?? dettem.descrip

? transf(dettem.cantidad,"999.99")
?? " "
??transf(dettem.venta,"9,999.99")
?? " "
??transf(dettem.valor,"99,999.99")
?

ENDSCAN

?
?
?

? "Ok"

SET PRINTER TO
SET DEVICE TO SCREEN
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

Ayuda con impresion

Publicado por Many (332 intervenciones) el 27/04/2013 05:18:33
Muy bien, muchachos

Acabo de finalizar un programa y no puedo instalarlo por este problema.

Se supone que alguien ha hecho un programa que imprima en impresoras pequeña (la que usan rollo de papel), ya sea hecho manual o con report form.

solo quiero saber como se detiene inmediatamente termina de imprimir y que no tire papel en blanco.

Adiós y sigo confiando en todos.
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

Ayuda con impresion

Publicado por Many (332 intervenciones) el 27/04/2013 18:51:31
Buena noticia, amigos.

Aquí esta la solución imprimiendo sin dejar papel en blanco en cualquier printer matricial.

Les deja un ejemplo que funciona, Favor de leer la nota que deja al final de todo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
SET DEVICE TO PRINT
SET PRINTER TO
 
??? " "
@ 1,0 SAY "         SUPERMERCADO PRUEBA"
@ 2,0 SAY "      Avenida Circ. Norte, Edif. 1"
@ 3,0 SAY "      San Juan, Tel. 809-557-4414"
@ 4,0 SAY "           RNC: 01200126249"
 
@ 5,0 SAY "               FACTURA"
 
@ 6,0 SAY "----------------------------------------"
@ 7,0 SAY "CANT.        PRECIO              VALOR"
@ 8,0 SAY "----------------------------------------"
 
USE c:\supern\dettem            && la tabla que recorro
 
m.total = 0
m.l = 9                    && numero de linea
SCAN
@ m.l,0 SAY dettem.ge
@ m.l,2 SAY dettem.descrip
m.l = m.l + 1
@ m.l,0 SAY transf(dettem.cantidad,"999.99")
@ m.l,10 SAY transf(dettem.venta,"9,999.99")
@ m.l,30 SAY transf(dettem.valor,"99,999.99")
m.total = m.total + dettem.total
 
*  incremento la linea
 
m.l = m.l + 1
 
ENDSCAN
 
*  finaliza el bucle y entro a los totales
 
@ m.l,0 SAY "----------------------------------------"
 
m.l = m.l + 1
@ m.l,0 SAY "TOTAL A COBRAR =>"
@ m.l,28 SAY TRANSFORM(m.total,"9,999,999.99")
 
m.l = m.l + 1
@ m.l,0 SAY " "
 
m.l = m.l + 1
@ m.l,0 SAY " "
 
m.l = m.l + 1
@ m.l,0 SAY " "
 
m.l = m.l + 1
@ m.l,0 SAY " "
 
m.l = m.l + 1
@ m.l,0 SAY " "
 
m.l = m.l + 1
@ m.l,0 SAY " "
 
m.l = m.l + 1
@ m.l,0 SAY " "
 
   SET DEVICE TO SCREEN
   SET PRINTER TO
   RETURN

Nota:
Quiero que alguien me diga por que con esta misma estructura cuando uso ?, ??, ??? no puede detener la impresora. A pesar de que esto funciona pueden ver que si deseo inserta algún campo debo hacer muchos cambios en las finas sin embargo usando ?, ??, ?? me facilita jugar con el reporte.

Un ejemplo de esta es que a este reporte le falta en el encabezado el numero de factura, fecha, ncf, cliente etc. Esto implica reconstruir las filas y columnas ya existentes.

¿Ha alguna forma de que esto que ya no me salta el papel pueda usarlo con ?, ??, ???. ?

Perdonen que insista tanto pero les comenté que esto es lo que me falta del programa y quiero que quede bien.

Si nadie contesta interpretare que no están entrando a leerlo por el tiempo que tiene el tema y tendré que publicarlo como un tema nuevo, por favor digan si se puede o no.

Gracias por todo su apoyo, estamos llegando al final esto.
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

Ayuda con impresion

Publicado por Many (332 intervenciones) el 28/04/2013 06:38:46
Gracias a todos por ayudar

Ya no hay problemas pude hacerlo muy bien con la posible solución que publique.

Sinceramente, gracias.
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

Ayuda con impresion

Publicado por Francisco Cooper (1 intervención) el 22/09/2014 01:34:14
Hola amigo mejor es mandar las informacion a un archivo de texto

set alter to
set alter to \temp\archivo.txt
set alter on
?"esto es una pruab"
?"Esto es una prueba"

luego para imprimir utiliza esto
run type \temp\archivo.txt >lpt1

para que no te muestre la pantalla del cmd
chequete los parametros del comando
bye y espero que te funcione
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