Creando Objetos desde un OCX

Creando Objetos desde un OCX

Postby mterraz » Tue Jun 06, 2017 2: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;
mterraz
 
Posts: 54
Joined: Mon Jun 10, 2013 1:21 pm

Re: Creando Objetos desde un OCX

Postby Antonio Linares » Tue Jun 06, 2017 8: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
User avatar
Antonio Linares
Site Admin
 
Posts: 42203
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Creando Objetos desde un OCX

Postby mterraz » Tue Jun 06, 2017 8: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
mterraz
 
Posts: 54
Joined: Mon Jun 10, 2013 1:21 pm

Re: Creando Objetos desde un OCX

Postby Antonio Linares » Tue Jun 06, 2017 8: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
User avatar
Antonio Linares
Site Admin
 
Posts: 42203
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Creando Objetos desde un OCX

Postby mterraz » Tue Jun 06, 2017 9: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.
mterraz
 
Posts: 54
Joined: Mon Jun 10, 2013 1:21 pm

Re: Creando Objetos desde un OCX

Postby cmsoft » Wed Jun 07, 2017 1:51 pm

Code: Select all  Expand view  RUN
*************************
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.
User avatar
cmsoft
 
Posts: 1293
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Creando Objetos desde un OCX

Postby mterraz » Wed Jun 07, 2017 2: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
mterraz
 
Posts: 54
Joined: Mon Jun 10, 2013 1:21 pm

Re: Creando Objetos desde un OCX

Postby Antonio Linares » Wed Jun 07, 2017 2:46 pm

Prueba eso mismo pero con 80 en vez de 90
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42203
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Creando Objetos desde un OCX

Postby mterraz » Wed Jun 07, 2017 2: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,
mterraz
 
Posts: 54
Joined: Mon Jun 10, 2013 1:21 pm

Re: Creando Objetos desde un OCX

Postby mterraz » Fri Jun 09, 2017 3: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
mterraz
 
Posts: 54
Joined: Mon Jun 10, 2013 1:21 pm

Re: Creando Objetos desde un OCX

Postby mterraz » 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
mterraz
 
Posts: 54
Joined: Mon Jun 10, 2013 1:21 pm

Re: Creando Objetos desde un OCX

Postby Antonio Linares » Mon Jun 12, 2017 3: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
User avatar
Antonio Linares
Site Admin
 
Posts: 42203
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Creando Objetos desde un OCX

Postby Ariel » Tue Jun 13, 2017 10:59 am

Mariano,
me pasarias tu correo para contactarte x privado o tu skype (mejor) ?. Gracias.
Saludos.
Ariel
 
Posts: 377
Joined: Wed Nov 29, 2006 1:51 pm
Location: Rosario - Argentina

Re: Creando Objetos desde un OCX

Postby mterraz » Wed Jun 14, 2017 1:21 pm

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

Saludos Mariano
mterraz
 
Posts: 54
Joined: Mon Jun 10, 2013 1:21 pm

Re: Creando Objetos desde un OCX

Postby mterraz » Fri Jun 16, 2017 8: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
Last edited by mterraz on Sat Jun 17, 2017 11:54 am, edited 1 time in total.
mterraz
 
Posts: 54
Joined: Mon Jun 10, 2013 1:21 pm

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 131 guests