PDA

Ver la Versión Completa : ¿Somos los parias de la programación?


adebonis
19-04-2005, 22:47:56
Hola.

Os expongo el caso, para mí incomprensible.

La Agencia Tributaria española tiene un ActiveX en un archivo .dll para realizar factura electrónicas (firmar digitalmente una factura) y al instalarlo Delphi me devuelve el mensaje de "Interfaz no compatible", en las Faqs de la Agencia Tributaria ya informa de este mensaje e indica que el ActiveX debe instalarse por REFERENCIA. Yo, la verdad, no sé cómo se instala por referencia en Delphi.

El caso es que envío un correo a la Agencia Tributaria pidiendo información y me contestan literalmente.

"Desconocemos Delphi, y el programador del ActiveX también, de todas formas el ActiveX debe funcionar por Referencia."

He quedado atónito. Desconocen Delphi!!!!, y tal como responden me quedaré sin poder utilizar el control ActiveX, y el caso es que lo necesito incorporar en mi aplicación, si no, adiós dinero.

Bueno. Si alguien es capaz de ayudarme, aunque sea pagando, se lo agradeceré.

Un saludo a todos.
Adolfo de Bonis Mora

mamcx
20-04-2005, 00:07:49
Delphi no es el lenguaje mas conocido... eso es cierto. Pero lo de parias me parece exagerado. Por otro lado, yo desconozco a Ruby, TCL, Python y practicamente todo lo que me huela a C ;)

Si miras en https://sourceforge.net/softwaremap/trove_list.php?form_cat=160 veras que hasta hoy, hay inscritos 1761 proyectos. Teniendo en cuenta que son proyectos open source y se supone que PHP, C++, Java sobre plataforma Linux deberia ser casi lo unico, es un numero impresionante, y esta MUY por encima de Visual Basic.NET y Visual FoxPro y otros y sourceforge es *nix a la lata (Obviamente hay que tener en cuenta que en todo sourceforge hay varios proyectos muertos y que esto no es una estadistica de certeza absoluta, pero una buena indicacion)

Lo de instalarce por referencia? Prueba:

- Registra la dll con RegSvr32 que se encuentra en Windows\System32
- Dale un IMport de activeX. Si asi no funciona:
- Dale un import Type Library. Debe funcionar asi.

De todas maneras todo control activex se puede crear usando CreateOleObject (en tiempo de ejecucion) pero asi no tienes soporte a programacion tipada, mejor dicho, toca programar como si fuera un lenguaje de script.

Neftali [Germán.Estévez]
20-04-2005, 10:33:10
... y al instalarlo Delphi me devuelve el mensaje de "Interfaz no compatible", en las Faqs de la Agencia Tributaria ya informa de este mensaje e indica que el ActiveX debe instalarse por REFERENCIA. Yo, la verdad, no sé cómo se instala por referencia en Delphi.
Antes de nada debes registrar el componente con la siguiente línea de comandos:
regsvr32 AEATFACT.dll

Otra cosa, ¿No te deja instalarlo? o ¿No te deja colocar en un Form? Si es el segundo como me imagino, intenta crear el componnente por código sin arrastrarlo en diseño.

adebonis
20-04-2005, 22:56:04
Hola.

Ok. Ya tenía registrada la dll.

Tienes razón. Me deja instalar el ActiveX pero no me deja colorcarlo en un Form.

El Caso es que incorporo el archivo tlb creado en mi aplicación y me es imposible acceder a sus métodos. Utilizo el siguiente código

procedure FacturaDigital;
var
MiFactura: Variant;
begin
MiFactura := CreateOleObject('TAeatFactCtl'); // Aquí me da el error
try
MiFactura.Firma('archivofactura, Nif, Facturadestino);
finally
MiFactura.Unassigned;
end;
end;

De aquí no paso. No sé mas. Si me das alguna idea lo agradeceré.

Gracias.
Adolfo Bonis Mora

roman
20-04-2005, 23:05:39
Seguramente 'TAeatFactCtl' no es el nombre correcto del control. En la documentación o el servicio técnico debieran informarte cuál es el nombre correcto. Si no, posiblemente una búsqueda en el registro de Windows por el término AeatFactCtl te lleve al nombre adecuado.

Y por cierto, nada de parias. Que haya personas que consideren otros lenguajes como mejores que Delphi o incluso que consideren que Delphi es malo, es normal, todos tienen un punto de vista distinto. Pero si el programador del control ActiveX afirma que desconoce Delphi, entonces es simplemente que se trata de un soberbio, incapaz además, de dar el soporte requerido.

// Saludos

Neftali [Germán.Estévez]
21-04-2005, 09:53:04
De aquí no paso. No sé mas. Si me das alguna idea lo agradeceré.

Tal vez "meo fuera de tiesto", pero en el fichero TLB debes tener una declaración de la clase similar a ésta:


TAeatFactCtl = class(TOleControl)
private
FIntf: IAeatFactCtl;
function GetControlInterface: IAeatFactCtl;
protected
procedure CreateControl;
procedure InitControlData; override;
public
function FIRMA(const rutaOrigen: WideString; const certificado: WideString;
const rutaDestino: WideString): WideString;
function VERIFICA(const rutaOrigen: WideString; const rutaDestino: WideString): WideString;
property ControlInterface: IAeatFactCtl read GetControlInterface;
property DefaultInterface: IAeatFactCtl read GetControlInterface;
published
end;


¿Has probado a utilizarla de la forma estándard? TOLeControl (de la que deriva) posee el método create:


constructor Create(AOwner: TComponent); override;


¿Has probado?


var
Fact:TAeatFactCtl ;
begin
Fact := TAeatFactCtl.Create(Self);
try
Fact.FIRMA(....
Fact.VERIFICA(...
finally
Fact.Free;
end;
...

adebonis
21-04-2005, 23:12:16
Hola.

Si, ya he hecho lo que indicas, pero al ejecutar el programa y en el momento en que se ejecuta el método create muestra el mensaje "Interfaz no compatible" y adiós.

Lo de parias todavía creo que lo somos. Una cosa es que un programador no sepa qué es Delphi, pero otra cosa es que la Agencia Tributaria española no tenga en cuenta otro lenguaje de programación que no sea Visual basic, y encima me digan nue !!No lo conocen!!. Otra cosa sería que lo conocen pero que no han puesto ejemplos de utilización o que no tienen ganas de hacerlo.

En definitiva, sigo sin conseguir utilizar el componente.

Gracias.
Adolfo Bonis Mora

adebonis
25-04-2005, 17:56:27
Hola.

Por fin he dado con el tema.

El código sería tal como este:

Factura := CreateOleObject('AeatFact.AeatFactCtl');
try
Salida := Factura.FIRMA(Inicio, Nif, Final);
finally
Factura := Unassigned;
end;


Gracias a todos.
Adolfo Bonis Mora
Barcelona

Neftali [Germán.Estévez]
25-04-2005, 18:12:05
...
Factura := CreateOleObject('AeatFact.AeatFactCtl');
...
Una pregunta. ¿Cómo llegaste a ésta línea?
En concreto de dónde sale ésto (simple curiosidad): 'AeatFact.AeatFactCtl'

adebonis
25-04-2005, 20:03:42
Hola.

Bueno, me metí otra vez en las Faqs de la Agencia Tributaria y ví una en la que daba un ejemplo de utilización del componente en Visual basic en la que utilizaba la misma función "CreateOleObject" con el parámtero "AeatFact.AeatFactCtl". Así que lo probé y funcionó.

Un saludo
Adolfo Bonis Mora
Barcelona