Code: Select all
/*
USB com TDOSPRN.PRG
Enla cabecera de mi rutina de impresión hice esto:
cPorta := PrnGetPort()
cPrinter := PrinterPortToName( cPorta )
if empty(cPrinter)
cPrinter := PrinterPortToName( "USB002" )
if empty(cPrinter)
cPrinter := PrinterPortToName( "USB001" )
endif
endif
Despues empiezo la impresión, preo creando un archivo:
oPrin := TDosPrn():New("minuta.txt")
oPrin:StartPage()
...
...
Y en el fin de la rutina hago esto:
...
...
oPrin:EndPage()
oPrin:End()
PrintFileRaw( cPrinter, TrueName("MINUTA.TXT"), "Impressão de Vendas" )
*/
// ----------------------------------------------------------------------------
//----- Definicao de comando SAY para TdosPrn ---------------------------------
//
#xcommand @ <nRow>, <nCol> SAY <cText> OF <oPrinter> => <oPrinter>:Say(<nRow>, <nCol>, <cText> )
//-------------------------------------------------------------------------//
// Imprime os Cupons Nao Fiscal da Pizzaria/Restaurante
//-------------------------------------------------------------------------//
FUNCTION IMPRIMIR_CUPOM( nKey, aGetVenda, oLbx, oDlgVendas, DbClientes,;
DbEstoque, DbPedidos )
FIELD QTD_VENDEU, DESCRICAO, VLUNITARIO, TOTITEM, TOTPEDIDO
FIELD MENSAG1, MENSAG2, MENSAG3, MENSAG4, MENSAG5
LOCAL nLinha, nPag, oPrn, Conta, Pula, DbMensag
MEMVAR XNUMPEDIDO, nNumeroTel, cCodClien, cNomeClien, cEndClien, ;
cNomeProduto, nQuantidade, nValorProd, nValorCompra, oSayCxLivre,;
XCGCCLI, nQtdeEstoque, nCodigoProd
MEMVAR nDinheiro, nCheque, nChequePre, nTickets, nCartaoCred,;
nCartaoDebi, nContraVale, nTaxaEntreg, nValorTroco, nSomaSubTot,;
XTROCOCLI, Valor_Pago, nValor_Pago, oSayEmpresa
//-> Nome Fantasia da Empresa - Est em EMPRESA.DBF
PUBLIC XDA, XCAIXA, XCODVEND, XNOMEEMP, XFANTASIA, XIMPQTDECOP, ;
XPULARLINHA
nLinha := 0
nPag := 1
IF XIMPQTDECOP <= 0
XIMPQTDECOP := 1
ENDIF
//-> Mensagens do Rodape
IF NETUSE( "MENSAGEM", .T. )
DATABASE DbMensag
DbMensag:Load()
DbMensag:SetBuffer( .T. )
ENDIF
SELECT ( DbPedidos:cAlias )
DbPedidos:SetOrder( 1 )
GO TOP
// Para Rede de Computadores
// oPrn:New("\\seuterminal\suaimpressora\LPT1")
oPrn:= TDosPrn():New( "CUPOM.TXT" ) // para ir para um arquivo .txt
// oPrn:= TDosPrn():New() // para ir para impressora em definitivo
// oPrn := TDosPrn():New("lpt1") // para ir para impressora em definitivo
// Este Comando, Liga a Impressora. NÆo Tirar Nunca
oPrn:StartPage() // da Start(inicializa) na p gina.
oPrn:lZeraBuffer := .T. // Inibe o Pulo da P gina
//-> Inicia a Impressao - Cabe‡alho do Cupom
//-> Modo Draft
@ nLinha, 00 SAY +CHR(18)+CHR(27)+"2"+CHR(27)+"H" OF oPrn
@ nLinha, 00 SAY SUBST( XNOMEEMP, 1, 23 ) OF oPrn
nLinha := nLinha + 1
@ nLinha, 00 SAY CHR(15)+REPLICATE("-",38) OF oPrn
nLinha := nLinha + 1
//-> Modo Condensado
@ nLinha, 00 SAY CHR(15)+"HORA: " + TIME() + " - " + ;
+ DTOC(XDA) OF oPrn
nLinha := nLinha + 1
@ nLinha, 00 SAY OemToAnsi("PEDIDO N§: " ) + ;
ALLTRIM(STRZERO( XNUMPEDIDO ) ) OF oPrn
nLinha := nLinha + 1
@ nLinha, 00 SAY "FONE..: " + nNumeroTel OF oPrn
nLinha := nLinha + 1
@ nLinha, 00 SAY SUBSTR( cNomeClien, 1, 40 ) OF oPrn
nLinha := nLinha + 1
@ nLinha, 00 SAY SUBSTR( cEndClien, 1, 40 ) OF oPrn
nLinha := nLinha + 1
@ nLinha, 00 SAY REPLICATE("-",38) OF oPrn
nLinha := nLinha + 1
@ nLinha, 00 SAY "Cod Qtde Descricao Unit Valor" OF oPrn
nLinha := nLinha + 1
@ nLinha, 00 SAY REPLICATE("-",38) OF oPrn
nLinha := nLinha + 1
//-> Imprime o Pedido
WHILE !EOF()
SYSREFRESH()
IF EOF()
EXIT
ENDIF
@ nLinha, 00 SAY ( DbPedidos:cAlias )->CODIGO OF oPrn
nLinha := nLinha + 1
@ nLinha, 00 SAY ( ALLTRIM( STR( QTD_VENDEU ) ) ) +[ - ]+ ;
( SUBSTR( DESCRICAO, 01, 17 ) ) OF oPrn
nLinha := nLinha + 1
@ nLinha, 00 SAY ( SUBSTR( DESCRICAO, 18, 35 ) ) + ;
TRANSFORM( VLUNITARIO, "@E 99,999.99" ) + ;
TRANSFORM( TOTITEM, "@E 999,999.99" ) OF oPrn
nLinha := nLinha + 1
DBSKIP()
ENDDO
//-> Total do Pedido
IF EOF() .OR. TOTPEDIDO <= 0
SKIP(-1)
ENDIF
@ nLinha, 00 SAY CHR(15)+REPLICATE("-",38) OF oPrn
nLinha := nLinha + 1
IF nDinheiro > 0
@ nLinha, 00 SAY "EM DINHEIRO: " + ;
TRANSFORM( nDinheiro, "@E 999,999.99" ) OF oPrn
nLinha := nLinha + 1
ENDIF
IF nCheque > 0
@ nLinha, 00 SAY "EM CHEQUE: " + ;
TRANSFORM( nCheque, "@E 999,999.99" ) OF oPrn
nLinha := nLinha + 1
ENDIF
IF nChequePre > 0
@ nLinha, 00 SAY "EM CHEQUE PRE: " + ;
TRANSFORM( nChequePre, "@E 999,999.99" ) OF oPrn
nLinha := nLinha + 1
ENDIF
IF nTickets > 0
@ nLinha, 00 SAY "EM TICKETS: " + ;
TRANSFORM( nTickets, "@E 999,999.99" ) OF oPrn
nLinha := nLinha + 1
ENDIF
IF nCartaoCred > 0
@ nLinha, 00 SAY "EM C. CREDITO: " + ;
TRANSFORM( nCartaoCred, "@E 999,999.99" ) OF oPrn
nLinha := nLinha + 1
ENDIF
IF nCartaoDebi > 0
@ nLinha, 00 SAY "EM C. DEBITO: " + ;
TRANSFORM( nCartaoDebi, "@E 999,999.99" ) OF oPrn
nLinha := nLinha + 1
ENDIF
IF nContraVale > 0
@ nLinha, 00 SAY "EM C. VALE: " + ;
TRANSFORM( nContraVale, "@E 999,999.99" ) OF oPrn
nLinha := nLinha + 1
ENDIF
@ nLinha, 00 SAY CHR(15)+REPLICATE("-",38) OF oPrn
nLinha := nLinha + 1
//-> Fechou o Cupom
@ nLinha, 00 SAY +CHR(18)+CHR(27)+"2"+CHR(27)+"H" + ;
"TOTAL: " + ;
TRANSFORM( TOTPEDIDO, "@E 9,999,999.99" ) OF oPrn
nLinha := nLinha + 1
@ nLinha, 00 SAY CHR(15)+REPLICATE("-",38) OF oPrn
nLinha := nLinha + 1
@ nLinha, 00 SAY CHR(15)+"TROCO: " + ;
TRANSFORM( XTROCOCLI, "@E 999,999.99" ) OF oPrn
nLinha := nLinha + 1
@ nLinha, 00 SAY "CAIXA: " + STRZERO( XCAIXA, 3 ) + [ - ] + ;
"OPERADOR: " + XCODVEND OF oPrn
nLinha := nLinha + 1
@ nLinha, 00 SAY CHR(15)+REPLICATE("-",38) OF oPrn
nLinha := nLinha + 1
SELECT ( DbMensag:cAlias )
GO TOP
WHILE !EOF()
SYSREFRESH()
IF EOF()
EXIT
ENDIF
IF (MENSAG1 ) != SPACE(40)
@ nLinha, 00 SAY MENSAG1 OF oPrn
nLinha := nLinha + 1
ENDIF
IF (MENSAG2 ) != SPACE(40)
@ nLinha, 00 SAY MENSAG2 OF oPrn
nLinha := nLinha + 1
ENDIF
IF (MENSAG3 ) != SPACE(40)
@ nLinha, 00 SAY MENSAG3 OF oPrn
nLinha := nLinha + 1
ENDIF
IF (MENSAG4 ) != SPACE(40)
@ nLinha, 00 SAY MENSAG4 OF oPrn
nLinha := nLinha + 1
ENDIF
IF (MENSAG5 ) != SPACE(40)
@ nLinha, 00 SAY MENSAG5 OF oPrn
nLinha := nLinha + 1
ENDIF
@ nLinha, 00 SAY CHR(15)+REPLICATE("-",38) OF oPrn
nLinha := nLinha + 1
DBSKIP()
ENDDO
//-> Pulos do Cupom
FOR PULA = 1 TO XPULARLINHA
@ nLinha, 00 SAY "." OF oPrn
nLinha := nLinha + 1
NEXT PULA
//-> Modo Draft
@ nLinha, 00 SAY +CHR(18)+CHR(27)+"2"+CHR(27)+"H" OF oPrn
oPrn:EndPage()
oPrn:End()
//--- imprime no spool do windows, liberando o micro para trabalhar.
ImpSpool( "CUPOM.TXT",, .T. ) // esta em DBMANT.PRG impressora USB/matricial
//--- opcionamente pode-se apagar o arquivo passando .t. no 3o. parametro.
DbMensag:Close()
SELECT ( DbPedidos:cAlias )
DbPedidos:SetOrder( 1 )
DbPedidos:Gotop()
RETURN NIL
//----------------------------------------------------------------------------//
// Funcao : ImpSpool( cFileTxt, cPorta, lErase )
// Autor : Ednaldo Rolim (edrol@pop.com.br)
// Descricao : Envia um arquivo TXT criado pela TDosPrn para uma
// porta de Impressora.
//----------------------------------------------------------------------------//
FUNCTION ImpSpool( cFileTxt, cPorta, lErase )
LOCAL CPRINTER
//para capturar antes da impressão
//cPorta := PrnGetPorta()
//WinExec( cPorta )
//depois da impressão
//WinExex( "Net Use Lpt1: \Delete" )
//Ficou mais facil e simples do que criar as portas na Classe TDosPrn
//cPorta := If( cPorta == nil, Alltrim( PrnGetPort() ), cPorta ) ; lErase := If( lErase == nil, .T., lErase );
//cPorta := PrnGetPort()
Default cPorta := Alltrim( PrnGetPort() ), lErase:= .t.
cPrinter := PrinterPortToName( cPorta )
IF EMPTY( cPrinter )
cPrinter := PrinterPortToName( "USB002" )
IF EMPTY(cPrinter)
cPrinter := PrinterPortToName( "USB001" )
ENDIF
ENDIF
IF .NOT. FILE( cFileTxt )
MsgInfo( OemToAnsi( "NÇO ACHEI O ARQUIVO MODO TEXTO PARA IMPRIMIR NA MATRICIAL" ), ;
OemToAnsi( "NÇO ACHEI O ARQUIVO MODO TEXTO PARA IMPRIMIR NA MATRICIAL" ) )
RETURN( .F. )
ENDIF
IF .NOT. EMPTY( cPrinter ) // TEM USB
PrintFileRaw( cPrinter, TrueName( "CUPOM.TXT" ), "Impressão de Vendas" )
ELSEIF LEN( cPorta ) <= 5 .and. Left( Upper(cPorta), 4 ) = "LPT1"
//--- Spool Local - Matricial em LPT1
cPorta:= "PRN"
WAITRUN("COMMAND.COM /C COPY /B " + cFileTxt + " " + cPorta, 0 )
ELSE
//--- Spool Remoto - Matricial em LPT1
WAITRUN("COMMAND.COM /C COPY /B " + cFileTxt + " " + cPorta, 0 )
ENDIF
IF lErase // Vem .T. da tela de vendas
FERASE( cFileTxt )
ENDIF
RETURN( .T. )
Saludos.