FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Creando Objetos desde un OCX
Posts: 74
Joined: Mon Jun 10, 2013 01:21 PM
Creando Objetos desde un OCX
Posted: Tue Jun 06, 2017 02:53 PM
Estimados,
Trabajando con un OCX me encuentro con la siguiente consulta, como definir una variable en base a una estructura definida dentro de un OCX. Debajo env铆o un ejemplo en .NET de como se realiza la creaci贸n de las variables "cierre" y "zeta" por ejemplo que se crean con la estructura que corresponde a "HasarArgentina.RespuestaCerrarJornadaFiscal" y "HasarArgentina.CerrarJornadaFiscalZ" donde "HasarArgentina" es el objeto creado del OCX.
Al final deber铆a contar con un objeto y poder acceder a la propiedad "zeta.Numero"


EJEMPLO .NET

Public Class FormIFH2G
Dim hasar As HasarArgentina.ImpresoraFiscalRG3561 = New HasarArgentina.ImpresoraFiscalRG3561

Private Sub ButtonRepZeta_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonRepZeta.Click
Dim cierre As HasarArgentina.RespuestaCerrarJornadaFiscal
Dim zeta As HasarArgentina.CerrarJornadaFiscalZ

Try
Debug.Print("=======================================================")
Debug.Print("A imprimir: INFORME DIARIO DE CIERRE 'Z' (C贸d.: 80) ...")
Debug.Print("=======================================================")
cierre = hasar.CerrarJornadaFiscal(HasarArgentina.TipoReporte.ReporteZ)
zeta = cierre.Z
Debug.Print("Cierre 'Z' N潞 =[" & zeta.Numero & "]")
Catch
Debug.Print("C贸digo: " & Err.Number & vbCrLf & "Mensaje: " & Err.Description)
Debug.Print("")
End Try
End Sub
End Class


EJEMPLO FIVEWIN

oFiscal:= CreateObject("HasarArgentina.ImpresoraFiscalRG3561")
oFiscal:Conectar("127.0.0.1")
oFiscal:CerrarJornadaFiscal(90)

////////////////////////////////////////////////////////////////////////
Como se hace la misma referencia al ocx en fivewin a la que utiliza en .NET ???
"cierre = hasar.CerrarJornadaFiscal(90)
zeta = cierre.Z "
////////////////////////////////////////////////////////////////////////

DEFINICIONES DE LAS ESTRUCTURAS DENTRO DEL OCX

Metodo:

RespuestaCerrarJornadaFiscal CerrarJornadaFiscal([in] TipoReporte Reporte);

Estrucutra:

typedef [uuid(EA15B88B-A2DE-452B-98A2-AD3DE4BD202F), version(1.0)]
struct tagRespuestaCerrarJornadaFiscal {
[helpstring("Reporte")
]
TipoReporte Reporte;
[helpstring("X")
]
CerrarJornadaFiscalX X;
[helpstring("Z")
]
CerrarJornadaFiscalZ Z;
} RespuestaCerrarJornadaFiscal;

typedef [uuid(DBD1FE45-97A6-441E-86B0-94396E279CE8), version(1.0)]
struct tagCerrarJornadaFiscalZ {
[helpstring("Numero")
]
long Numero;
[helpstring("Fecha")
]
DATE Fecha;
[helpstring("DF_Total")
]
double DF_Total;
[helpstring("DF_TotalGravado")
]
double DF_TotalGravado;
[helpstring("DF_TotalNoGravado")
]
double DF_TotalNoGravado;
[helpstring("DF_TotalExento")
]
double DF_TotalExento;
[helpstring("DF_TotalIVA")
]
double DF_TotalIVA;
[helpstring("DF_TotalTributos")
]
double DF_TotalTributos;
[helpstring("DF_CantidadEmitidos")
]
long DF_CantidadEmitidos;
[helpstring("DF_CantidadCancelados")
]
long DF_CantidadCancelados;
[helpstring("NC_Total")
]
double NC_Total;
[helpstring("NC_TotalGravado")
]
double NC_TotalGravado;
[helpstring("NC_TotalNoGravado")
]
double NC_TotalNoGravado;
[helpstring("NC_TotalExento")
]
double NC_TotalExento;
[helpstring("NC_TotalIVA")
]
double NC_TotalIVA;
[helpstring("NC_TotalTributos")
]
double NC_TotalTributos;
[helpstring("NC_CantidadEmitidos")
]
long NC_CantidadEmitidos;
[helpstring("NC_CantidadCancelados")
]
long NC_CantidadCancelados;
[helpstring("DNFH_Total")
]
double DNFH_Total;
[helpstring("DNFH_CantidadEmitidos")
]
long DNFH_CantidadEmitidos;
} CerrarJornadaFiscalZ;
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Creando Objetos desde un OCX
Posted: Tue Jun 06, 2017 08:34 PM

Prueba as铆:

oFiscal:= CreateObject("HasarArgentina.ImpresoraFiscalRG3561")
oFiscal:Conectar("127.0.0.1")
cierre = oFiscal:CerrarJornadaFiscal(90)
zeta = cierre:Z

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 74
Joined: Mon Jun 10, 2013 01:21 PM
Re: Creando Objetos desde un OCX
Posted: Tue Jun 06, 2017 08:52 PM

Estimado Antonio,
Realice la prueba que me enviaste y me dice Error description: Error BASE/1004 No exported method: Z

FUNCTION Conectar()

Local cierre
Local zeta
Local oFiscal

oFiscal:= CreateObject("HasarArgentina.ImpresoraFiscalRG3561")
oFiscal:Conectar("127.0.0.1", )
cierre = oFiscal:CerrarJornadaFiscal(90)
zeta = cierre:Z      // aqui el error

RETU .T.

Application

Path and name: C:\WINFAR64\WINFAR64.exe (32 bits)
Size: 3,971,072 bytes
Compiler version: Harbour 3.2.0dev (r1601050904)
FiveWin Version: FWH 16.02
Windows version: 6.2, Build 9200

Time from start: 0 hours 0 mins 3 secs
Error occurred at: 06/06/17, 17:47:02
Error description: Error BASE/1004 No exported method: Z
Args:
[ 1] = U

Stack Calls

Called from: => Z( 0 )
Called from: .\winpfisc.prg => CONECTAR( 109 )

Variables in use

Procedure Type Value
==========================
Z
Param 1: O Class: ERROR
CONECTAR

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Creando Objetos desde un OCX
Posted: Tue Jun 06, 2017 08:57 PM

En esta l铆nea de tu anterior mensaje:

cierre = hasar.CerrarJornadaFiscal(90)

hasar se corresponde al objeto oFiscal ?

Como se crea ese objeto hasar ?

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 74
Joined: Mon Jun 10, 2013 01:21 PM
Re: Creando Objetos desde un OCX
Posted: Tue Jun 06, 2017 09:08 PM

Estimado Antonio,
Debajo esta la funci贸n conectar que estoy utilizando para las pruebas. El objeto creado es oFiscal que se crea en base al OCX que provee la compania HASAR cuyo ID es "HasarArgentina.ImpresoraFiscalRG3561".

Tu comentario con respecto a esta linea :
cierre = hasar.CerrarJornadaFiscal(90) // ESE ES EL EJEMPLO EN .NET
HASAR es definido como,

Dim hasar As HasarArgentina.ImpresoraFiscalRG3561 = New HasarArgentina.ImpresoraFiscalRG3561

EN FIVEWIN UTILIZO
oFiscal:= CreateObject("HasarArgentina.ImpresoraFiscalRG3561")
cierre = oFiscal:CerrarJornadaFiscal(90)
zeta = cierre:Z // aqui el error

Error description: Error BASE/1004 No exported method: Z


FUNCTION Conectar()

Local cierre
local zeta
local ofiscal

oFiscal:= CreateObject("HasarArgentina.ImpresoraFiscalRG3561")
oFiscal:Conectar("127.0.0.1", )
cierre = oFiscal:CerrarJornadaFiscal(90)
zeta = cierre:Z // aqui el error

RETU .T.

Posts: 1344
Joined: Wed Nov 16, 2005 09:14 PM
Re: Creando Objetos desde un OCX
Posted: Wed Jun 07, 2017 01:51 PM
Code (fw): Select all Collapse
*************************
FUNCTION Conectar()

Local cierre 
local zeta
local ofiscal

oFiscal:= CreateObject("HasarArgentina.ImpresoraFiscalRG3561")
oFiscal:Conectar("127.0.0.1", )
cierre = oFiscal:CerrarJornadaFiscal(90)
zeta = cierre:NUMERO // Numero de Z emitida

RETU .T.
Posts: 74
Joined: Mon Jun 10, 2013 01:21 PM
Re: Creando Objetos desde un OCX
Posted: Wed Jun 07, 2017 02:24 PM

Muchas gracias por su aporte, realice la prueba pero sin exito como podras ver debajo, el reporte Z lo imprime bien en el impresor pero sigo sin poder obtener la respuesta del comando, ERROR No exported method: NUMERO.

FUNCTION Conectar()

Local cierre
local zeta
local ofiscal

oFiscal:= CreateObject("HasarArgentina.ImpresoraFiscalRG3561")
oFiscal:Conectar("192.168.0.253")
cierre = oFiscal:CerrarJornadaFiscal(90)
? valtype(cierre) //// ME DEVUELVE U - UNDEFINED CREO DEBERiA SER O - Objeto?
zeta = cierre:NUMERO // Numero de Z emitida

RETU .T.

Me sigue dando el mismo error>:

Error description: Error BASE/1004 No exported method: NUMERO
Args:
[ 1] = U

Variables in use

Procedure Type Value
==========================
NUMERO
Param 1: O Class: ERROR

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Creando Objetos desde un OCX
Posted: Wed Jun 07, 2017 02:46 PM

Prueba eso mismo pero con 80 en vez de 90

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 74
Joined: Mon Jun 10, 2013 01:21 PM
Re: Creando Objetos desde un OCX
Posted: Wed Jun 07, 2017 02:56 PM
Prueba eso mismo pero con 80 en vez de 90

Antonio, el 90 esta bien, es reporte Z

Metodo:
RespuestaCerrarJornadaFiscal CerrarJornadaFiscal([in] TipoReporte Reporte);


Estructura TipoReporte :

typedef [uuid(4446DBDB-4E6C-45D3-9285-7B35871EEE8B), version(1.0)]
enum {
ReporteX = 88,
ReporteZ = 90
} TipoReporte;

Gracias Mariano
Gracias,
Posts: 74
Joined: Mon Jun 10, 2013 01:21 PM
Re: Creando Objetos desde un OCX
Posted: Fri Jun 09, 2017 03:56 PM
Estimado Antonio,
Ya he solucionado varios inconvenientes con el OCX, me podr铆as ayudar a resolver el tema de las estructuras, en mi c贸digo defino la siguiente estructura oEstilo:

oEstilo := TStruct():New()
oEstilo:AddMember('BorradoTexto',BOOL,2)
oEstilo:AddMember('DobleAncho' ,BOOL,2)
oEstilo:AddMember('Centrado' ,BOOL,2)
oEstilo:AddMember('Negrita' ,BOOL,2)
oEstilo:dobleancho:=.T.

Pero cuando quiero ejecutar este comando:
oFiscal:ImprimirTextoFiscal( oEstilo, cTextoFiscal, 48 )

Me dice error de parametro:

Time from start: 0 hours 0 mins 13 secs
Error occurred at: 09/06/17, 12:43:40
Error description: (DOS Error -2147352571) WINOLE/1007 Argument error: IMPRIMIRTEXTOFISCAL
Args:
[ 1] = O TSTRUCT
[ 2] = C Cobertura: (60.00%)
[ 3] = N 48

Variables in use
================
Procedure Type Value
==========================
TOLEAUTO:IMPRIMIRTEXTOFISCAL
Param 1: O Class: ERROR
ENVIAR
Param 1: O Class: TSTRUCT
Param 2: C "Cobertura: (60.00%)"
Param 3: N 48
Local 1: U
Local 2: U

La definicion del metodo es:

void ImprimirTextoFiscal(
[in, out] AtributosDeTexto* Atributos,
[in] BSTR Texto,
[in, optional, defaultvalue(48)] ModosDeDisplay ModoDisplay);


Desde ya muchas gracias,
Atte. Mariano
Posts: 74
Joined: Mon Jun 10, 2013 01:21 PM
Re: Creando Objetos desde un OCX
Posted: Mon Jun 12, 2017 12:37 PM
Estimados,
Todav铆a no he logrado hacer funcionar las respuestas del OCX. Me podrian ayudar con algun ejemplo como se accede a los componentes de un OCX, ya sean sus m茅todos, sus constantes y sus estructuras.

EJ: oFiscal es el objeto creado : oFiscal:= CreateObject("HasarArgentina.ImpresoraFiscalRG3561")

Para acceder a un metodo del OCX se utiliza : oFiscal:EjecutarMetodo()
Para acceder a una constante dentro del OCX: ? oFiscal:Constante

La pregunta es como se accede a los datos de un typedef struct que esta definido en el OCX?
Y de ser posible, si alguno lo hizo, como hago para crear una variable con la misma estructura creando una instancia del OCX?.
En Visual Basic se hace asi :
Dim estilo As oFiscal.AtributosDeTexto
Como se hace eso mismo en Fivewin?


Ejemplo de estructura:

typedef [uuid(2AA953E3-0281-4E13-9BF4-6A25FA7F9E33), version(1.0)]
struct tagAtributosDeTexto {
[helpstring("BorradoTexto")
]
VARIANT_BOOL BorradoTexto;
[helpstring("DobleAncho")
]
VARIANT_BOOL DobleAncho;
[helpstring("Centrado")
]
VARIANT_BOOL Centrado;
[helpstring("Negrita")
]
VARIANT_BOOL Negrita;
} AtributosDeTexto;


Gracias por su ayuda,
Saludos Mariano
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Creando Objetos desde un OCX
Posted: Mon Jun 12, 2017 03:44 PM

Mariano,

Busca la palabra ENDSTRUCT en FWH\source\classes y encontraras muchos ejemplos de uso de estructuras desde PRGs

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 389
Joined: Wed Nov 29, 2006 01:51 PM
Re: Creando Objetos desde un OCX
Posted: Tue Jun 13, 2017 10:59 AM

Mariano,
me pasarias tu correo para contactarte x privado o tu skype (mejor) ?. Gracias.
Saludos.

Posts: 74
Joined: Mon Jun 10, 2013 01:21 PM
Re: Creando Objetos desde un OCX
Posted: Wed Jun 14, 2017 01:21 PM

Hola Ariel,
Te dejo mi correo privado para que me contactes mterraz@hotmail.com

Saludos Mariano

Posts: 74
Joined: Mon Jun 10, 2013 01:21 PM
Re: Creando Objetos desde un OCX
Posted: Fri Jun 16, 2017 08:40 PM

Estimados,
Tengo la siguiente consulta, cual es la forma correcta de crear el objeto OCX?
Las dos formas parecen funcionar, en ninguna de las dos formas consigo obtener las respuestas generadas por los comandos.

1 - oFiscal:= CreateObject("HasarArgentina.ImpresoraFiscalRG3561")

 oFiscal:Conectar("127.0.0.1")
 oFiscal:AbrirDocumento(82)

2 - oFiscal:= TActiveX():New( oWnd, "HasarArgentina.ImpresoraFiscalRG3561" )

 oFiscal:DO("Conectar","127.0.0.1")
 oFiscal:DO("AbrirDocumento",82)

Como obtener el numero de comprobante abierto?

Ambas formas conectan, cual es la forma correcta de crear el objeto OCX ActiveX ?.

Como hacer esto mismo en FIVEWIN? ejemplo en VIsual Basic:

Dim hasar As HasarArgentina.ImpresoraFiscalRG3561 = New HasarArgentina.ImpresoraFiscalRG3561
Dim respabrir As HasarArgentina.RespuestaAbrirDocumento

respabrir = hasar.AbrirDocumento(HasarArgentina.TiposComprobante.Tique)
Debug.Print("Tique N潞 =[" & respabrir.NumeroComprobante & "]")


INFORMACION SOPORTE EMPRESA HASAR - Proveedor del OCX


Buenos d铆as. Luego de analizar tu c贸digo, y buscar informaci贸n sobre el lenguaje, confirmamos nuestra sospecha.
La respuesta vuelve en un tipo de estructura que se genera con la OCX. Harbour, no logra mapear esa estructura, y por lo tanto, la misma viene vacia.
La herramienta de comunicaci贸n OCX de Hasar, es un objeto ActiveX desarrollado bajo tecnolog铆a COM, respetando los est谩ndares de Windows.
Se puede registrar y usar sin inconvenientes en Windows 32 / 64 bits. La 煤nica limitaci贸n la puede imponer el entorno de desarrollo visual -de existir alguna- que se emplee.
En este caso, aparentemente, el lenguaje no es compatible con la herramienta. Te recomiendo que lo consultes con la mesa de ayuda de tu entorno.


Desde ya muchas gracias,
Saludos Mariano