PROBLEMA IMPRESIÓN
Posted: Thu Jun 08, 2006 1:16 pm
Hola,
estoy realizando una aplicación en la que tengo que imprimir vía bluetooth (cuento con una HP Ipaq con Windows movile 5.0 y una impresora con un adaptador bluetooth), la forma de imprimir es igual que la que aparece en el ejemplo bluetooth.prg.
Mi aplicación cuenta con un botón imprimir que llama a la siguiente función:
FUNCTION WIMPALB()
Local cTexto:=""
Local cCabeza:=""
Local nTotal:=0
Local hOut
USE (cRutaFic+"\PARAPK") NEW
GO TOP
cPuerto:="COM"+str(PARAPK->PSALIDA,1)+":"
CLOSE PARAPK
//EL PUERTO ES EL COM8:
hOut := CreateFile( rtrim(cPuerto),;
GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL )
DO WHILE hOut < 0 .AND. nVeces <= 30
hOut := CreateFile( rtrim(cPuerto),; // Cambiamos el n£mero dependiendo del puerto de la pocket
GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL )
nVeces++
ENDDO
IF hOut < 0
MsgInfo(OemToAnsi("Ha sido imposible abrir el puerto para imprimir, por favor comprueba que est activado el bluetooth ") + ;
OemToAnsi("y que en par metros est n configurados los puertos de salida y entrada"),;
OemToAnsi("ATENCIàN"))
ELSE
cCabeza:= cTabu + substr(rtrim(PARA->NOMC) + " - " + rtrim(PARA->CIF),1,nCaracter) + chr(10) + chr(13)
GHC->(DBGOTOP())
GHC->(DBSEEK(GCV->NUM))
DO WHILE GHC->NALC=GCV->NUM .AND. .NOT. GHC->(EOF())
cTexto:=cTexto + SPACE(2) + transform(GHC->UNID,"@EZ 9,999.9") + " " + substr(GHC->TEXTO,1,20) + " " + transform(GHC->PREC,"@EZ 9,999.999") + ;
" " + transform(GHC->DTO,"@EZ 999") + " " + transform(GHC->TOTAL,"@EZ 999,999.999") + chr(10) + chr(13)
GHC->(DBSKIP(1))
ENDDO
SendText( hOut, cCabeza )
SendText( hOut, cTexto )
MsgInfo("ENVIADO A IMPRIMIR",OemToAnsi("ATENCIàN"))
CloseHandle( hOut )
ENDIF
RETURN NIL
STATIC FUNCTION SendText( hOut, cText )
local n
for n = 1 to Len( cText )
WriteByte( hOut, Asc( SubStr( cText, n, 1 ) ) )
next
RETURN NIL
**************************************************************************************************************************
El problema que tengo es que a pesar de que me abre bien el puerto (siempre me devuelve hOut > -1), hay veces en las que me imprime y otras veces no (enviando a imprimir siempre los mismos datos).
Es decir yo puedo pulsar una o dos veces el botón de imprimir y no imprimirme y pulsarlo una tercera vez e imprimir entonces, y a veces funciona bien a la primera.
Sobre todo me pasa cuando apago la pocket y la vuelvo a encender entonces la primera vez que mando imprimir no me suele funcionar, sin embargo a la segunda o tercera vez que lo intento si que funciona.
¿ Se les ocurre a que puede ser debido o como puedo solucionarlo ?
Muchas gracias
estoy realizando una aplicación en la que tengo que imprimir vía bluetooth (cuento con una HP Ipaq con Windows movile 5.0 y una impresora con un adaptador bluetooth), la forma de imprimir es igual que la que aparece en el ejemplo bluetooth.prg.
Mi aplicación cuenta con un botón imprimir que llama a la siguiente función:
FUNCTION WIMPALB()
Local cTexto:=""
Local cCabeza:=""
Local nTotal:=0
Local hOut
USE (cRutaFic+"\PARAPK") NEW
GO TOP
cPuerto:="COM"+str(PARAPK->PSALIDA,1)+":"
CLOSE PARAPK
//EL PUERTO ES EL COM8:
hOut := CreateFile( rtrim(cPuerto),;
GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL )
DO WHILE hOut < 0 .AND. nVeces <= 30
hOut := CreateFile( rtrim(cPuerto),; // Cambiamos el n£mero dependiendo del puerto de la pocket
GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL )
nVeces++
ENDDO
IF hOut < 0
MsgInfo(OemToAnsi("Ha sido imposible abrir el puerto para imprimir, por favor comprueba que est activado el bluetooth ") + ;
OemToAnsi("y que en par metros est n configurados los puertos de salida y entrada"),;
OemToAnsi("ATENCIàN"))
ELSE
cCabeza:= cTabu + substr(rtrim(PARA->NOMC) + " - " + rtrim(PARA->CIF),1,nCaracter) + chr(10) + chr(13)
GHC->(DBGOTOP())
GHC->(DBSEEK(GCV->NUM))
DO WHILE GHC->NALC=GCV->NUM .AND. .NOT. GHC->(EOF())
cTexto:=cTexto + SPACE(2) + transform(GHC->UNID,"@EZ 9,999.9") + " " + substr(GHC->TEXTO,1,20) + " " + transform(GHC->PREC,"@EZ 9,999.999") + ;
" " + transform(GHC->DTO,"@EZ 999") + " " + transform(GHC->TOTAL,"@EZ 999,999.999") + chr(10) + chr(13)
GHC->(DBSKIP(1))
ENDDO
SendText( hOut, cCabeza )
SendText( hOut, cTexto )
MsgInfo("ENVIADO A IMPRIMIR",OemToAnsi("ATENCIàN"))
CloseHandle( hOut )
ENDIF
RETURN NIL
STATIC FUNCTION SendText( hOut, cText )
local n
for n = 1 to Len( cText )
WriteByte( hOut, Asc( SubStr( cText, n, 1 ) ) )
next
RETURN NIL
**************************************************************************************************************************
El problema que tengo es que a pesar de que me abre bien el puerto (siempre me devuelve hOut > -1), hay veces en las que me imprime y otras veces no (enviando a imprimir siempre los mismos datos).
Es decir yo puedo pulsar una o dos veces el botón de imprimir y no imprimirme y pulsarlo una tercera vez e imprimir entonces, y a veces funciona bien a la primera.
Sobre todo me pasa cuando apago la pocket y la vuelvo a encender entonces la primera vez que mando imprimir no me suele funcionar, sin embargo a la segunda o tercera vez que lo intento si que funciona.
¿ Se les ocurre a que puede ser debido o como puedo solucionarlo ?
Muchas gracias