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