Checar estatus de impresora en tDosPrin

Checar estatus de impresora en tDosPrin

Postby juan_arroyo_t » Wed Jul 29, 2009 9:22 pm

Hola a todos

Es el primer tema en que participo

Estoy utilizando la clase TdosPrn (la baje de TdosPrev.zip) y quisiera obtener el código para que me muestre un mensaje de que la impresora no esta lista y asi poder tomar las medidas pertinentes, enseguida pongo parte del codigo de mi aplicación :

FUNCTION PrintFac(lModal, oDlg)

LOCAL nLin, nLinMax
LOCAL oPrn, cTitulo
LOCAL nSub, nDescto1, nDescto2, nImporte, nSub2, nIva, nTotal
LOCAL cMone, TotLet
LOCAL i, des, NumLineas
LOCAL Contador1 := 0
LOCAL Contador2 := CuentaLin()
STATIC nFac2
STATIC FacUti
nFac2 := cFacNum
Facuti := 0
nLin := 3
nSub := nDescto1 := 0

cTitulo := "**** IMPRESION DE FACTURA " + ;
"[" + LTRIM(STR(cFacNum,6)) + "] ****"

IF cMoneda = "P"
cMone := " Pesos "
ELSE
cMone := " Dólares "
ENDIF

dftmp->(DBGOTOP())

oPrn:= TDosPrn():New()
IF ! oPrn:lCancel
begin sequence

oPrn:StartPage()
oPrn:Command("27","64")
oPrn:Command( oPrn:cCompress )
While Empty( oPrn:hDC )
MsgStop( "Impresora no esta lista!","Alto" )
enddo
EncFac(oPrn, nLin)
nLin := 21
do while dftmp->(!Eof())

oPrn:Say( nLin, 001, dftmp->partida )
oPrn:Say( nLin, 008, dftmp->modelo )
oPrn:Say( nLin, 028, dftmp->desc1 )
oPrn:Say( nLin, 076, ;
TRANSFORM(dftmp->cantidad,"99,999.99") + " " + ;
dftmp->unidad )
oPrn:Say( nLin, 089, ;
TRANSFORM(dftmp->pre_uni,"99,999,999.99"))
IF (dftmp->descu1) > 0
oPrn:Say( nLin, 105, ;
TRANSFORM(dftmp->descu1,"99.99"))
ENDIF
nImporte := dftmp->cantidad * dftmp->pre_uni
oPrn:Say( nLin, 123, ;
TRANSFORM(nImporte,"999,999,999.99"))
nSub := nSub + nImporte
nDescto1 := nDescto1 + nImporte * dftmp->descu1 / 100
nLin := nLin + 1
Contador1 := Contador1 + 1
IF Contador1 > 26 .AND. Contador2 > 27
FacUti := FacUti + 1
AgregaFac(nFac2,FacUti,oPrn)
oPrn:EndPage()
contador1 := 1
nLin := 4
nFac2 := nFac2 + 1
EncFac(oPrn, nLin)
nLin := 21
oPrn:Say( nLin, 010, "Continua de la factura " + ;
STRZERO(nFac2-1,6) + " ..." )

nLin := nLin + 2
contador1 := contador1 + 2
ENDIF


FOR I := 2 TO 5
DES := "DESC"+STR((I),1)
IF LEN(TRIM(&(DES))) = 0
LOOP
ENDIF
oPrn:Say( nLin, 028, dftmp->&(DES) )
nLin := nLin + 1
Contador1 := Contador1 + 1
IF Contador1 > 26 .AND. Contador2 > 27
FacUti := FacUti + 1
AgregaFac(nFac2,FacUti,oPrn)
oPrn:EndPage()
contador1 := 1
nLin := 4
nFac2 := nFac2 + 1
EncFac(oPrn, nLin)
nLin := 21
oPrn:Say( nLin, 010, "Continua de la factura " + ;
STRZERO(nFac2-1,6) + " ..." )

nLin := nLin + 2
contador1 := contador1 + 2
ENDIF

NEXT

IF LEN(TRIM(dftmp->descadi)) > 0
NUMLINEAS := MLCOUNT(dftmp->DESCADI,45)
FOR I := 1 TO NUMLINEAS
IF LEN(TRIM(MEMOLINE(dftmp->descadi,45,I))) = 0
LOOP
ENDIF
oPrn:Say( nLin,028,MEMOLINE(dftmp->DESCADI,45,I))
nLin := nLin + 1
contador1 := contador1 + 1
IF Contador1 > 26 .AND. Contador2 > 27
FacUti := FacUti + 1
AgregaFac(nFac2,FacUti,oPrn)
oPrn:EndPage()
contador1 := 1
nLin := 4
nFac2 := nFac2 + 1
EncFac(oPrn, nLin)
nLin := 21
oPrn:Say( nLin, 010, "Continua de la factura " + ;
STRZERO(nFac2-1,6) + " ..." )
ENDIF
NEXT
ENDIF
IF Contador2 < 14
nLin := nLin + 1
ENDIF

dftmp->(dbskip())

enddo

nDescto2 := nSub * nPece /100
nSub2 := nSub-nDescto1-nDescto2
nIva := nSub2 * nTasaIva / 100
nTotal := nSub2 + nIva
TotLet := NumPal(nTotal, cMoneda)
oPrn:Say(050,001,Padc(TotLet,130," "))
nLin := 51
IF cMoneda = "D"
oPrn:Say(nLin,107,Padc(cMone,29,"-"))
ENDIF
oPrn:Say( ++nLin,107,"Subtotal :")
oPrn:Say( nLin,122,TRANSFORM(nSub, "999,999,999.99"))
oPrn:Say( ++nLin,107,"Descto. 1 :")
oPrn:Say( nLin,122,TRANSFORM(nDescto1,"999,999,999.99"))
oPrn:Say( ++nLin,107,"Descto. 2 :")
oPrn:Say( nLin,122,TRANSFORM(nDescto2,"999,999,999.99"))
oPrn:Say( ++nLin,107,"Subtotal :")
oPrn:Say( nLin,122,TRANSFORM(nSub2, "999,999,999.99"))
oPrn:Say( ++nLin,107,"I. v. a. :")
oPrn:Say( nLin,122,TRANSFORM(nIva, "999,999,999.99"))
oPrn:Say( ++nLin,107,"T o t a l :")
oPrn:Say( nLin,122,TRANSFORM(nTotal, "999,999,999.99"))

oPrn:EndPage() // salta pagina
oPrn:End()

end sequence

//--- Passar a Dialog como ultimo parametro.
//
if oPrn:lPreview
TxtPreview( oPrn:cDevice, cTitulo, lModal,,, oPrn, oDlg, , oPrn:lModoGraf )
endif

ENDIF
RETURN NIL

-----------------------------------------------------------------------------------------------------

Esta parte del código que aparece más arriba, la tomé de uno de los temas del foro, no sé si sea correcta o la estoy colocando en el lugar equivocado :
While Empty( oPrn:hDC )
MsgStop( "Impresora no esta lista!","Alto" )
enddo

Otra de las cosas en que me estoy atorando es que cuando mi factura ocupa más de una hoja, al hacer el oPrn:EndPage(),
la impresora empieza a imprimir de forma incorrecta, por ejemplo la primera línea de impresión que va en el extremo superior derecho, la pone del lado izquierdo y unas lineas antes de donde debe ir.

Estoy usando fwh 7.12 uso ina impresora de matriz fx-880

Les agradecería mucho su ayuda

desde México

Juan
User avatar
juan_arroyo_t
 
Posts: 196
Joined: Fri May 15, 2009 1:25 am
Location: Cuautitlán, Mexico

Re: Checar estatus de impresora en tDosPrin

Postby Willi Quintana » Thu Jul 30, 2009 2:31 am

Hola,
Te sugiero que antes de mandar a imprimir la factura, calcules cuantas lineas o items se imprimiran por cada documento, si este excede de la capacidad de la factura, el remanente ya no lo imprimes, lo preparas para otra factura...
En XP aun no se puede chequear el estado del puerto LPTx,,,

Salu2
User avatar
Willi Quintana
 
Posts: 1002
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú

Re: Checar estatus de impresora en tDosPrin

Postby juan_arroyo_t » Sun Aug 02, 2009 5:23 pm

Gracias por tu respuesta Willi

Lo de el status del puerto Lptx, Ok

En cuanto a lo de la impresión de mi factura ya hice pruebas, yo le indico cuando rebasa determinado número de línea y lo hace correctamentem me imprime la siguiente a traves de la instrucción oPrn:EndPage(), los datos que muestra en la siguiente son correctos sólo que no empieza a imprimir en la ´linea correcta, además de que la primera línea la imprime (fecha de factura) del lado izquierdo cuando debe de ir del lado derecho.

Probé con otra impresora y el resultado fué el mismo, no sé cual sea el problema

Juan
Juan Arroyo
México
FWH 7.12 VERCE 5.3 xHarbour 1.1.0
juan_arroyo_t@hotmail.com
User avatar
juan_arroyo_t
 
Posts: 196
Joined: Fri May 15, 2009 1:25 am
Location: Cuautitlán, Mexico

Re: Checar estatus de impresora en tDosPrin

Postby juan_arroyo_t » Sun Aug 02, 2009 5:30 pm

Willi

Se me pasaba comentarte esto :

Inicio mi variable nLin con valor de 3, y cuando despues del oPrn:EndPage() la reiniciaba con 4, esto ya lo corregí a 3
Juan Arroyo
México
FWH 7.12 VERCE 5.3 xHarbour 1.1.0
juan_arroyo_t@hotmail.com
User avatar
juan_arroyo_t
 
Posts: 196
Joined: Fri May 15, 2009 1:25 am
Location: Cuautitlán, Mexico

Re: Checar estatus de impresora en tDosPrin

Postby Willi Quintana » Mon Aug 03, 2009 3:24 am

Hola,
Que bueno que ya solucionaste las impresiones, pero algo me quedo en duda:
Lo de el status del puerto Lptx, Ok

Como soluciones el tema de que la LPT1 este en linea?? y si caso podria funcionar para LPT2 o LPT3 ?

Salu
User avatar
Willi Quintana
 
Posts: 1002
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú

Re: Checar estatus de impresora en tDosPrin

Postby juan_arroyo_t » Sun Nov 01, 2009 8:28 pm

Willi

Discúlpame que hasta ahora conteste, no lo habia adevertido, cuando comente Lo de el status del puerto Lptx, Ok
me refería al esto que me enviaste y que así lo entendí

En XP aun no se puede chequear el estado del puerto LPTx,,,

Gracias
Juan Arroyo
México
FWH 7.12 VERCE 5.3 xHarbour 1.1.0
juan_arroyo_t@hotmail.com
User avatar
juan_arroyo_t
 
Posts: 196
Joined: Fri May 15, 2009 1:25 am
Location: Cuautitlán, Mexico


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Maurizio and 43 guests