Hola Claudio

Aqui te envio la clase que utilizaron hace unos años atrás en la empresa.
Se utilizo el ActiveX de Epson para la TMF

Espero que te sea de utilidad.


Saludos

José Paez

PD: Observandola un poco,  podría estar mejar escrita. ;-)))


*  loImpresora          Referencia del Control ActiveX
*  loDatosCabecera   Objeto con datos de la Cabecera del Ticket
*  loDatosDetalle      Objeto (Colección) con datos del Detalle del Ticket
*  loDatosCFP          Objeto (Colección) con datos de la Forma de Pago

loControladorFiscal = createobject("ControladorFiscal")
loControladorFiscal.Imprimir( loImpresora, loDatosCabecera, loDatosDetalle, 
loDatosCFP )


Define Class ControladorFiscal As Custom
 ************************************************************************
 * Imprimir
 *********
 Function Imprimir() As Boolean
  Parameters;
   oImpresora  As Object,;
   oDatosCabecera As Object,;
   oDatosDetalle As Object,;
   oDatosCFP  As Object

  Try
   *- Especifica el número de puerto a utilizar (Valor por defecto: 1).
   oImpresora.PortNumber = oConfiguracion.PortNumber

   *- Realiza la apertura de un ticket fiscal.
   lOk = oImpresora.OpenTicket("G") && Tipo de almacenamiento de los datos en 
la memoria: G=Completo; C=Normal
   If Not lOk Then
    lOk = .F.
    This.ErrorAlImprimir("OpenTicket")
   Endif

   *- Envia información extra (Usuario)
   If lOk Then
    cExtraDescription = "V.: " + Transform( oApp.IdUsuario )
    If Not oImpresora.SendExtraDescription(cExtraDescription) Then
     lOk = .F.
     This.ErrorAlImprimir("SendExtraDescription")
    Endif
   Endif

   *- Envia información extra (Cuenta del Titular)
   If lOk Then
    cExtraDescription = Left(This.ValidarCaracteres("CTA.: " + 
Upper(Alltrim(oDatosCabecera.Cod_Tit) + " " + 
Alltrim(oDatosCabecera.Nom_Tit))), 30)
    If Not oImpresora.SendExtraDescription(cExtraDescription) Then
     lOk = .F.
     This.ErrorAlImprimir("SendExtraDescription")
    Endif
   Endif

   *- Envia información del item
   If lOk Then
    For Each oDetalle In oDatosDetalle
     cDescription = Left(This.ValidarCaracteres( 
Upper(Alltrim(oDetalle.Articulo_Nombre))), 20)

     Set Decimals To 3
     Set Fixed On
     cQuantity  = Chrtran(Transform( oDetalle.Cantidad  ), ".", "")
     Set Fixed Off

     Set Decimals To 2
     Set Fixed On
     cUnitPrice  = Chrtran(Transform(Round(oDetalle.Precio,2)), ".", "")
     cIVA_Tax  = Chrtran(Transform(Round(oDetalle.Tasa_IVA,2)), ".", "")
     Set Fixed Off

     cQualifier = "M"
     cBundle  = ""
     cPorcentualInternalTaxes= "0"
     cFixesInternalTaxes  = ""

     *- Envía un Item en un ticket fiscal
     If Not oImpresora.SendTicketItem( cDescription, cQuantity, cUnitPrice, 
cIVA_Tax, cQualifier, cBundle, cPorcentualInternalTaxes) Then
      lOk = .F.
      This.ErrorAlImprimir("SendTicketItem")
      Exit
     Endif
    Next
   Endif

   *- Envía el/los pago(s) en un ticket fiscal
   If lOk Then
    cPaymentType = "T"
    For Each oCFP In oDatosCFP

     cPayment= " " + This.ValidarCaracteres(Upper(Alltrim(oCFP.FP_Nombre)))
     Set Decimals To 2
     Set Fixed On
     cAmount = Chrtran(Transform(oCFP.Importe), ".", "")
     Set Fixed Off

     If Not oImpresora.SendTicketPayment( cPayment, cAmount, cPaymentType ) Then
      lOk = .F.
      This.ErrorAlImprimir("SendTicketPayment")
      Exit
     Endif
    Next
   Endif

   *- Realiza el cierre de un ticket fiscal.
   If lOk Then
    If Not oImpresora.CloseTicket() Then
     lOk = .F.
     This.ErrorAlImprimir("CloseTicket")
    Endif
   Endif

   If lOk Then
    oDatosCabecera.Numero = Val(oImpresora.AnswerField_3)
   Endif

  Catch
   Messagebox("Error:" +Chr(13)+ oImpresora.FiscalStatus +Chr(13)+ 
oImpresora.PrinterStatus )
  Endtry

  Return lOk
 Endfunc

 Function ErrorAlImprimir ( cFuncion As String ) As Boolean
  Messagebox("Error: " + cFuncion + Chr(13)+ oImpresora.FiscalStatus + Chr(13) 
+ oImpresora.PrinterStatus, 48, "Aviso" )
 Endfunc

 ************************************************************************
 * Auditoria
 ***********
 Function Auditoria(;
   oImpresora As Object,;
   cTipo  As String,;
   cModo  As String,;
   cFechaDesde As String,;
   cFechaHasta As String ) As Boolean

  Local;
   lOk As Boolean

  Try
   oImpresora.PortNumber = oConfiguracion.PortNumber
   lOk = oImpresora.Audit( cTipo, cModo, cFechaDesde, cFechaHasta )
   If Not lOk
    Messagebox("Error: AUDITORIA " +Chr(13)+ oImpresora.FiscalStatus +Chr(13)+ 
oImpresora.PrinterStatus, 48, "Aviso" )
   Endif
  Catch
   Messagebox("Error: AUDITORIA " +Chr(13)+ oImpresora.FiscalStatus +Chr(13)+ 
oImpresora.PrinterStatus, 48, "Aviso" )
  Endtry
  Return lOk
 Endfunc


 ************************************************************************
 * Cierre_X
 **********
 Function Cierre_X( oImpresora As Object ) As Boolean
  Local;
   lOk As Boolean

  Try
   oImpresora.PortNumber = oConfiguracion.PortNumber
   lOk = oImpresora.CloseJournal('X','P')
   If Not lOk
    Messagebox("Error: CIERRE_X " +Chr(13)+ oImpresora.FiscalStatus +Chr(13)+ 
oImpresora.PrinterStatus, 48, "Aviso" )
   Endif
  Catch
   Messagebox("Error: CIERRE_X " +Chr(13)+ oImpresora.FiscalStatus +Chr(13)+ 
oImpresora.PrinterStatus, 48, "Aviso" )
  Endtry
  Return lOk
 Endfunc

 ************************************************************************
 * Cierre_Z
 **********
 Function Cierre_Z( oImpresora As Object ) As Boolean
  Local;
   lOk As Boolean

  Try
   oImpresora.PortNumber = oConfiguracion.PortNumber
   lOk = oImpresora.CloseJournal('Z','P')
   If Not lOk
    Messagebox("Error: CIERRE_Z " +Chr(13)+ oImpresora.FiscalStatus +Chr(13)+ 
oImpresora.PrinterStatus, 48, "Aviso" )
   Endif
  Catch
   Messagebox("Error: CIERRE_Z " +Chr(13)+ oImpresora.FiscalStatus +Chr(13)+ 
oImpresora.PrinterStatus, 48, "Aviso" )
  Endtry
  Return lOk
 Endfunc

 ************************************************************************
 * ValidarCaracteres
 *******************
 Function ValidarCaracteres()
  Lparameters cTexto
  Local;
   i   As Integer,;
   cNuevoTexto As String

  cNuevoTexto = ""
  For i = 1 To Len( cTexto)
   cCaracter = Substr( cTexto, i, 1 )
   nCodigo  = Asc(cCaracter)
   If Not Between(nCodigo, 0, 128 )
    Do Case
     Case nCodigo = 193
      cCaracter = "A"
     Case nCodigo = 201
      cCaracter = "E"
     Case nCodigo = 205
      cCaracter = "I"
     Case nCodigo = 211
      cCaracter = "O"
     Case nCodigo = 218
      cCaracter = "U"
     Case Inlist( nCodigo, 241, 209 )
      cCaracter = "N"
     Other Case
      cCaracter = " "
    Endcase
   Endif
   cNuevoTexto = cNuevoTexto + cCaracter
  Next
  Return cNuevoTexto
 Endfunc

Enddefine

*!*  Function OpenTicket(Optional StorageDataType As String) As Boolean
*!*   Realiza la apertura de un ticket fiscal.
*!*   Recibe:
*!*   · Tipo de almacenamiento de los datos en la memoria: G=Completo; C=Normal

*!*  Function SendExtraDescription(Text As String) As Boolean
*!*   Envía una línea de descripción extra dentro de un ticket fiscal.
*!*   Recibe:
*!*   · Texto a enviar.

*!*  Function SendTicketItem(Description As String, Quantity As String, 
UnitPrice As String , IVA_Tax As String, Qualifier As String, Bundle As String 
, PorcentualInternalTaxes As String,
*!*    Optional FixesInternalTaxes As String) As Boolean
*!*   Envía un Item en un ticket fiscal
*!*   Recibe:
*!*   · Descripción del artículo.
*!*   · Cantidad.
*!*   · Precio unitario.
*!*   · Tasa de IVA.
*!*   · Calificador de item: M,m,R,r
*!*   · Cantidad de cultos
*!*   · Impuestos internos porcentuales
*!*   · Impuestos Internos Fijos (opcional)

*!*  Function SendTicketPayment(Text As String, Amount As String, PaymentType 
As String) As Boolean
*!*   Envía un pago en un ticket fiscal
*!*   Recibe:
*!*   · Texto descriptivo del pago.
*!*   · Monto a pagar.
*!*   · Descripción del pago: T=Pago; t=Reversión del pago; D=Descuento; 
R=Recargo.

*!*  Function CloseTicket() As Boolean
*!*   Realiza el cierre de un ticket fiscal.





  ----- Original Message ----- 
  From: claudio lopez 
  To: GUFA List Member 
  Sent: Tuesday, November 13, 2007 6:34 PM
  Subject: [GUFA] (No Subject)


  Estimada Lista : Tengo que enviar una factura que genero con un sistema de 
facturacion hecho en Fox a una Tickeadora marca EPSON : La verdad es que no 
tengo ni la menor idea de como hacerlo. En mi pueblo no tengo colegas para 
preguntar nada. Agradecería me orienten para ver como hicieron Uds. para lograr 
dominar ese aparatito infernal que son los controladores fiscales.
  Atte. Claudio Abel Lopez             [EMAIL PROTECTED] 

------------------------------------------------------------------------------



------------------------------------------------------------------------------

  Los referentes más importantes en compra/venta de autos se juntaron:
  Demotores y Yahoo!. Ahora comprar o vender tu auto es más fácil. 
  Visitá http://ar.autos.yahoo.com/

Responder a