FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Checar estatus de impresora en tDosPrin
Posts: 196
Joined: Fri May 15, 2009 01:25 AM
Checar estatus de impresora en tDosPrin
Posted: Wed Jul 29, 2009 09: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

Juan Arroyo
México
FWH 7.12 VERCE 5.3 xHarbour 1.1.0
juan_arroyo_t@hotmail.com
Posts: 1054
Joined: Sun Oct 09, 2005 10:41 PM
Re: Checar estatus de impresora en tDosPrin
Posted: Thu Jul 30, 2009 02: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

Posts: 196
Joined: Fri May 15, 2009 01:25 AM
Re: Checar estatus de impresora en tDosPrin
Posted: Sun Aug 02, 2009 05: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
Posts: 196
Joined: Fri May 15, 2009 01:25 AM
Re: Checar estatus de impresora en tDosPrin
Posted: Sun Aug 02, 2009 05: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
Posts: 1054
Joined: Sun Oct 09, 2005 10:41 PM
Re: Checar estatus de impresora en tDosPrin
Posted: Mon Aug 03, 2009 03: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
Posts: 196
Joined: Fri May 15, 2009 01:25 AM
Re: Checar estatus de impresora en tDosPrin
Posted: Sun Nov 01, 2009 08: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

Continue the discussion