buenos dias !
encantado ramherfer que el componente haya cumplido las expectativas, gracias por tu reconocimiento.
Todavía espero que habrá que corregir alguna cosa, me extrañaria mucho que estuviera muy bien. (de hecho acabo de ver un error, porque ahora siempre envia a pre-produccion, asi que en unos dias subire otra version)
(abajo pongo lo que hay que corregir, hoy asi rapido pero habrá alguna mejora mas).
ontisoft, la primera demo la puedes descartar, era una prueba temprana.
la segunda demo es la buena. En el programa que envia desde Excel, no olvidéis seleccionar un certificado del almacén valido e indicar vuestros datos en la pestaña Datos Sistema Informático.
Para los que quieran usar el componente sin D7, desde versiones B10 en adelante, pueden hacerlo directamente usando las funciones del servidor. No lo he probado, pero debería funcionar sin mas
Para ello, hay que hacer un uses tal que así:
uses uTiposVerifactu, uVerifactuFuncs;
Aumentar el stack size maximo a: 9048576 Project -> options->linker
Tendremos las siguientes funciones disponibles: Os recomiendo que mireis la llamada a esas funciones desde la unidad de componente para D7 a modo de consulta. en la unidad: uTVerifactu.pas
Código:
function inicio_sesion( var crearSesion:TVeriFactuInicio ):integer; stdcall;
// con sesion:
function anadeFactura(sesion:integer; var factura:TRegistroFacturas):integer; stdcall;
procedure envio(sesion:integer; var resultadoEnvio:TResultadoEnvio); stdcall;
function cierreSesion(sesion:integer; cierre:TCierreSesion):boolean;
function resetSesion(sesion:integer; cierre:TCierreSesion):boolean;
function consultar(sesion:integer; var resultado:TConsultaResultado):boolean;
// sin sesion:
procedure validarNIF(var nifvalidador:TValidadorNif);
// auxiliares
procedure clear_factura(afactura:TRegistroFactura);
procedure clear_sesion(sesion:integer);
// Certificados
procedure GetCertificados(var certificados:TCertificados);
procedure GetAliasCertificado(var certificados:TAliasCert);
function BUSCAR_CERTIFICADO_SERIAL(Nombre_Certificado: String): string;
Correccion para permitir el envio a otra url
Unidad uTVeriFactu
Reemplazar esta funcion, por este codigo:
Código:
//
// crear una sesion
//
function TVerifactu.inicio:boolean;
var
inicioVeriFactu : TVeriFactuInicio;
filemap,filehandle : longint;
begin
checkAutoRun;
serverHandle := FindWindow(nil, pchar(serverName) );
if IsWindow( serverHandle ) then
begin
inicioVeriFactu.simular:=simular;
inicioVeriFactu.emisor:=emisor;
inicioVeriFactu.sistemaInformatico:=sistemaInformatico;
inicioVeriFactu.nombreCertificado:=Certificado;
inicioVeriFactu.passwordCertificado:=passwordCertificado;
inicioVeriFactu.SaveXmlEnvio:=fSave;
inicioVeriFactu.SaveXMLResultado:=fResp;
inicioVeriFactu.incidencia:=false;
inicioVeriFactu.resultadoSesion:=-1;
if fEndPoint<>'' then
inicioVeriFactu.direccion_envio:=fEndPoint
else
inicioVeriFactu.direccion_envio:='https://prewww1.aeat.es/wlpl/TIKE-CONT/ws/SistemaFacturacion/VerifactuSOAP';
filemap:=saveNewFileMappingData(@inicioVeriFactu, sizeof(inicioVeriFactu), filehandle);
SENDMESSAGE( serverHandle, WM_VERIFACTU_INICIO, 0, filemap );
loadFileMappingData(@inicioVeriFactu, sizeof(inicioVeriFactu), filemap);
closeFileMappingData(filehandle);
if inicioVeriFactu.resultadoSesion<>0 then
begin
sesion:=inicioVeriFactu.resultadoSesion;
result:=true;
end
else
begin
result:=false;
end;
end
else
result:=false;
end;