Page 1 of 1

TDosPrn y Epson LX350

Posted: Mon Mar 10, 2014 2:11 pm
by horacio
Tengo un cliente que ha cambiado su vieja LX300 por una LX350 que se conecta con un port USB, en la clase TDosPrn al comienzo de la rutina de impresión tengo esta sentencia

Code: Select all | Expand


oPrinter := TDosPrn() : New( 'LPT1' )
 

Como hago para referenciar el nuevo puerto ?. Gracias por su ayuda

Saludos

Re: TDosPrn y Epson LX350

Posted: Mon Mar 10, 2014 2:41 pm
by AngelSalom

Re: TDosPrn y Epson LX350

Posted: Mon Mar 10, 2014 2:48 pm
by karinha

Code: Select all | Expand


#xcommand @ <nRow>, <nCol> SAY <cText> OF <oPrinter> => <oPrinter>:Say(<nRow>, <nCol>, <cText> )

//-------------------------------------------------------------------------//
// Imprime os Cupons Nao Fiscal da Pizzaria/Restaurante
//-------------------------------------------------------------------------//

STATIC 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()        //-> Temporario = a FP_PROV.DBF
       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

FUNCTION ImpSpool( cFileTxt, cPorta, lErase )

    LOCAL CPRINTER

    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. )
 



Re: TDosPrn y Epson LX350

Posted: Mon Mar 10, 2014 8:39 pm
by acuellar
Horacio

Sólo tenés que compartirla y utilizar PRINTFILEROW

Ej:

Code: Select all | Expand


 oPrn:=TDosPrn():New( "C:\LISTADO.TXT" )
 oPrn:Say(1,1,"PRUEBA" )
 oPrn:Say(2,1,CHR(12) )
 oPrn:End()
PrintFileRaw( "\\NOMBREPC\LX350",  "C:\LISTADO.TXT" ) //LX350 Es el nombre de la impresora compartida
 


Saludos,

Adhemar

Re: TDosPrn y Epson LX350

Posted: Tue Mar 11, 2014 2:52 pm
by horacio
Muchísimas gracias por sus respuestas. La semana que viene iré a ver al cliente y probaré las distintas soluciones. Nuevamente muchas gracias

Saludos

Re: TDosPrn y Epson LX350

Posted: Thu Mar 27, 2014 1:43 pm
by horacio
Bueno, lo solucioné con la propuesta que me señaló Adhemar, funcionó perfectamente. Nuevamente muchas gracias a todos por su ayuda.

Saludos