yo hago lo siguiente, en windows panel de control impresoras comparto
la impresora usb,
en el programa
envio la impresion a un archivo de texto (c:\tmp\toprint.txt)
ye ejecuto un achivo bat (toprint.bat)
en un archivo bat
net use lpt1 \\maquina\impresora
type c:\tmp\toprint.txt>lpt1
net use lpt1 /delete
*******************************genero archivo a texto
thisform.kfile="c:\tmp\xftp.TXT"
ERASE c:\tmp\xftp.txt
thisform.lp(CHR(27)+CHR(15),.t.)
thisform.lp("Reporte de Consumos en Bar")
thisform.lp(REPLICATE("-",39))
thisform.lp(PADR("Producto ",25)+" "+"CANT "+" "+"B/V")
thisform.lp(REPLICATE("-",39))
knoesta=.t.
DO WHILE .t.
IF EOF()
EXIT
ENDIF
IF estado="A"
IF knoesta
thisform.lp(REPLICATE("-",39))
thisform.lp("")
thisform.lp("")
thisform.lp("Anulados")
thisform.lp(REPLICATE("-",39))
thisform.lp(PADR("Producto ",25)+" "+"CANT "+" "+"B/V")
thisform.lp(REPLICATE("-",39))
knoesta=.f.
ENDIF
ENDIF
thisform.lp(LEFT(dscr,25)+" "+STR(cant,5,0)+" "+esbote)
SKIP
ENDDO
thisform.lp(REPLICATE("-",39))
thisform.lp("impr"+DTOC(DATE())+"/"+TIME())
FOR I=1 TO 10
thisform.lp("")
ENDFOR
loShell = CREATEOBJECT("Shell.Application")
loShell.ShellExecute("xprint.bat")
loShell = .NULL.
****************************procedimiento LP
LPARAMETERS kchad,knuevo
IF knuevo
STRTOFILE(kchad+CHR(10),thisform.kfile)
ELSE
STRTOFILE(kchad+CHR(10),thisform.kfile,.t.)
ENDIF
********************************contenido del archivo xprint.bat
net use lpt1 \\servidor\impretks &&esta impresora es cion puerto
usb pero esta compartida en
TYPE c:\tmp\xftp.txt>lpt1
net use lpt1 /delete
exit
**************************