Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-05-2017
Avatar de keys
keys keys is offline
Miembro
 
Registrado: sep 2003
Ubicación: Bilbao
Posts: 1.037
Poder: 22
keys Va por buen camino
Cita:
Empezado por vboloradito Ver Mensaje
4.7. ¿Es obligatorio suministrar la información de la cuota deducible?
Sí. En el caso de que aplique prorrata deberá consignar la cuota deducible en función del porcentaje de deducción provisional.

¿esto no aplica solo a las empresas acogidas a prorrata?
Segun como lo interpretes. Detras del Si hay un punto. Es decir yo entiendo que hay que ponerla siempre, y en el caso de las empresas con prorrata hay que poner la cuota deducible en funcion del porcentaje provisional.

Última edición por keys fecha: 30-05-2017 a las 12:05:32.
Responder Con Cita
  #2  
Antiguo 30-05-2017
CMB CMB is offline
Miembro
 
Registrado: ene 2017
Posts: 349
Poder: 8
CMB Va por buen camino
Cita:
Empezado por keys Ver Mensaje
Segun como lo interpretes. Detras del Si hay un punto. Es decir yo entiendo que hay que ponerla siempre, y en el caso de las empresas con prorrata hay que poner la cuota deducible en funcion del porcentaje provisional.
Ahora mismo he enviado una factura recibida normal y corriente, pero SIN incluir la cuota deducible, y me contestan

Codigo[4102].El XML no cumple el esquema. Falta informar campo obligatorio.: CuotaDeducible
Responder Con Cita
  #3  
Antiguo 30-05-2017
joefrommalaka joefrommalaka is offline
Miembro
NULL
 
Registrado: mar 2017
Posts: 10
Poder: 0
joefrommalaka Va por buen camino
Problema al enviar más de 20 facturas a la vez

Buenas tardes,

Estoy con un problema que no consigo encontrar la solución, a ver si alguien pudiese echarme una mano.
Cuando envío más de 20 facturas emitidas (me pasa lo mismo con las recibidas) recibo el siguiente error:

Se requiere un certificado para completar la autenticación de cliente - URL:https://www7.aeat.es/wlpl/SSII-FACT/...iiFactFEV1SOAP - SOAPAction:""

Si esas mismas facturas las envío en dos veces, me las envía sin problema.


Para realizar el envío, genero el xml con delphi 7 y realizo el envío mediante una dll que he creado con Delphi XE7.


El código mediante el cual hago el envío es el siguiente:


Código:
type
  TComunicacionSW = class(TObject)
    private
      FArchivoEnvio: String;
      FArchivoRespuesta: String;
      FHTTPRIO: THTTPRIO;
      procedure HTTPRIOBeforeExecute(const MethodName: string; SOAPRequest: TStream);
      procedure HTTPRIOAfterExecute(const MethodName: string; SOAPResponse: TStream);
    public
      Constructor Create;
      Destructor Destroy;
  end;


procedure TComunicacionSW.HTTPRIOBeforeExecute(const MethodName: string; SOAPRequest: TStream);
var
  v_fileStream: TFileStream;
begin
  SOAPRequest.Size := 0;
  v_fileStream := TFileStream.Create(FArchivoEnvio, fmOpenRead);
  SOAPRequest.Position := 0;
  SOAPRequest.CopyFrom(v_fileStream, v_fileStream.Size);
  v_fileStream.Free;
  SOAPRequest.Position := 0;
end;

procedure TComunicacionSW.HTTPRIOAfterExecute(const MethodName: string; SOAPResponse: TStream);
var
  v_fileStream: TFileStream;
begin
  if FileExists(FArchivoRespuesta) then
    DeleteFile(FArchivoRespuesta);
  v_fileStream := TFileStream.Create(FArchivoRespuesta, fmCreate);
  SOAPResponse.Position := 0;
  v_fileStream.CopyFrom(SOAPResponse, SOAPResponse.size);
  v_fileStream.Free;
  SOAPResponse.Position := 0;
end;

function ObtenerNumeroSerieCertificado(p_nombreCertificado: String): string;
var
  hStore: HCERTSTORE;
  PrevContext, CurContext: PCERT_CONTEXT;
  cbSize: DWORD;
  v_nombre: String;
begin
  Result := '';
  hStore := CertOpenSystemStore(0, PChar('MY'));
  if hStore <> nil then
  begin
    PrevContext := nil;
    CurContext := CertEnumCertificatesInStore(hStore, PrevContext);
    while CurContext <> nil do begin
      v_nombre := '';
      cbSize := CertGetNameString(CurContext, CERT_NAME_SIMPLE_DISPLAY_TYPE, 0, nil, nil, 0);
      if cbSize > 0 then
      begin
        SetLength(v_nombre, cbSize-1);
        CertGetNameString(CurContext, CERT_NAME_SIMPLE_DISPLAY_TYPE, 0, nil, PChar(v_nombre), cbSize);
        if SameText(p_nombreCertificado, v_nombre) then
        begin
          result := GetCertSerialNumber(@CurContext^.pCertInfo^.SerialNumber);
          break;
        end;
      end;
      PrevContext := CurContext;
      CurContext  := CertEnumCertificatesInStore(hStore, PrevContext);
    end;
  end;
end;

function EnviarFacturasEmitidas(p_nombreCertificado, p_archivoEnvio, p_archivoRespuesta: ShortString): PChar;stdcall;export;
var
  v_suministroLRFacturasEmitidas: SuministroFactEmitidas.SuministroLRFacturasEmitidas;
  v_respuestaLRFacturasEmitidas: SuministroFactEmitidas.RespuestaLRFacturasEmitidas;
  v_siiSOAP: SuministroFactEmitidas.siiSOAP;
  v_serialNum: String;
  v_error: string;
  v_comunicacionSW: TComunicacionSW;
begin
  v_error := '';

  v_serialNum := ObtenerNumeroSerieCertificado(p_nombreCertificado);
  
  v_comunicacionSW := TComunicacionSW.Create;
  v_suministroLRFacturasEmitidas := SuministroFactEmitidas.SuministroLRFacturasEmitidas.Create;
  v_respuestaLRFacturasEmitidas := SuministroFactEmitidas.RespuestaLRFacturasEmitidas.Create;
  try
    try
      v_comunicacionSW.FArchivoEnvio := p_archivoEnvio;
      v_comunicacionSW.FArchivoRespuesta := p_archivoRespuesta;
      v_comunicacionSW.FHTTPRIO.HTTPWebNode.ClientCertificate.SerialNum := v_serialNum;

      //Se realiza la llamada sin datos y en el evento HTTPRIOBeforeExecute se establece el xml con los datos generados anteriormente
      v_siiSOAP := SuministroFactEmitidas.GetsiiSOAP(true,'',v_comunicacionSW.FHTTPRIO);
      v_respuestaLRFacturasEmitidas := v_siiSOAP.SuministroLRFacturasEmitidas(v_suministroLRFacturasEmitidas);
    except
      on e:Exception do
        v_error := 'Error DLL: Error en la comunicación con el servicio web.' + e.Message;
    end;
  finally
    v_suministroLRFacturasEmitidas.Free;
    v_respuestaLRFacturasEmitidas.Free;
  end;

  result := StringToPChar(v_error);
end;


El archivo SuministroFactEmitidas lo he generado automáticamente con WSDL Importer de delphi y le he modificado lo siguiente (defURL realmente no lo utilizo):

const
defWSDL = 'https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroFactEmitidas.wsdl';
defURL = 'https://www7.aeat.es/wlpl/SSII-FACT/wlpl/SSII-FACT/ws/fe/SiiFactFEV1SOAP';
defSvc = 'siiService';
defPrt = 'SuministroFactEmitidasPruebas';


¿Se le ocurre a alguien que es lo que estoy haciendo mal?

Un saludo
Responder Con Cita
  #4  
Antiguo 30-05-2017
joefrommalaka joefrommalaka is offline
Miembro
NULL
 
Registrado: mar 2017
Posts: 10
Poder: 0
joefrommalaka Va por buen camino
Por cierto si envío el archivo xml mediante la web https://www7.aeat.es/static_files/co...teWSAEAT2.html se envía correctamente.
Responder Con Cita
  #5  
Antiguo 31-05-2017
Avatar de keys
keys keys is offline
Miembro
 
Registrado: sep 2003
Ubicación: Bilbao
Posts: 1.037
Poder: 22
keys Va por buen camino
Cita:
Empezado por joefrommalaka Ver Mensaje
Por cierto si envío el archivo xml mediante la web https://www7.aeat.es/static_files/co...teWSAEAT2.html se envía correctamente.
Hola. Este problema ya esta resuelto en enlaces anteriores, es la forma de asignar el certificado. Se soluciono con las capicom. Yo he llegado a enviar un bloque de 10000 facturas para ver si funcionaba y todo correcto.

Te pongo el codigo pero revisa los post anteriores. En el evento OnbeforePost del objeto HttpTrio tienes que poner lo siguiente

Código Delphi [-]
  procedure TFSIIConsultar.SoapeadorHTTPWebNode1BeforePost(
  const HTTPReqResp: THTTPReqResp; Data: Pointer);
var
     Store : IStore;
     Certs : ICertificates;
     Cert : ICertificate2;
     CertContext : ICertContext;
     PCertContext : PCCERT_CONTEXT;
     V : OleVariant;
  
 const
     INTERNET_OPTION_CLIENT_CERT_CONTEXT = 84;
 begin

     V := Certificado;

     Store := CoStore.Create;
     Store.Open(CAPICOM_CURRENT_USER_STORE, 'MY',CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED );
     Certs := Store.Certificates.Find(CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME,V,False );

     if Certs.Count > 0 then
     begin

         Cert:=IInterface(Certs.Item[1]) as ICertificate2;

         CertContext:=Cert as ICertContext;
         CertContext.Get_CertContext(Integer(PCertContext));


        

         if InternetSetOption(Data,INTERNET_OPTION_CLIENT_CERT_CONTEXT,PCertContext,Sizeof(CERT_CONTEXT)) = False then
          begin
             showmessage('ERROR');
          end;
     end
     else
      begin
        showmessage('ERROR');
      end;
 end;
Responder Con Cita
  #6  
Antiguo 31-05-2017
joefrommalaka joefrommalaka is offline
Miembro
NULL
 
Registrado: mar 2017
Posts: 10
Poder: 0
joefrommalaka Va por buen camino
Cita:
Empezado por keys Ver Mensaje
Hola. Este problema ya esta resuelto en enlaces anteriores, es la forma de asignar el certificado. Se soluciono con las capicom. Yo he llegado a enviar un bloque de 10000 facturas para ver si funcionaba y todo correcto.
Muchas gracias keys, probaré con las capicom a ver que tal. Aunque me resulta curioso que si funcione el certificado cuando envío 15 facturas y no funcione cuando envío 25.
Responder Con Cita
  #7  
Antiguo 31-05-2017
Avatar de keys
keys keys is offline
Miembro
 
Registrado: sep 2003
Ubicación: Bilbao
Posts: 1.037
Poder: 22
keys Va por buen camino
Cita:
Empezado por joefrommalaka Ver Mensaje
Muchas gracias keys, probaré con las capicom a ver que tal. Aunque me resulta curioso que si funcione el certificado cuando envío 15 facturas y no funcione cuando envío 25.
Eso nos pasaba a todos, creo recordar que el problema era a partir de 13 facturas.
Responder Con Cita
  #8  
Antiguo 30-05-2017
Avatar de mrobles
mrobles mrobles is offline
Miembro
NULL
 
Registrado: may 2017
Posts: 115
Poder: 8
mrobles Va por buen camino
Cita:
Empezado por joefrommalaka Ver Mensaje
Buenas tardes,

Estoy con un problema que no consigo encontrar la solución, a ver si alguien pudiese echarme una mano.
Cuando envío más de 20 facturas emitidas (me pasa lo mismo con las recibidas) recibo el siguiente error:

Se requiere un certificado para completar la autenticación de cliente - URL:https://www7.aeat.es/wlpl/SSII-FACT/...iiFactFEV1SOAP - SOAPAction:""

Si esas mismas facturas las envío en dos veces, me las envía sin problema.


Para realizar el envío, genero el xml con delphi 7 y realizo el envío mediante una dll que he creado con Delphi XE7.


El código mediante el cual hago el envío es el siguiente:


Código:
type
  TComunicacionSW = class(TObject)
    private
      FArchivoEnvio: String;
      FArchivoRespuesta: String;
      FHTTPRIO: THTTPRIO;
      procedure HTTPRIOBeforeExecute(const MethodName: string; SOAPRequest: TStream);
      procedure HTTPRIOAfterExecute(const MethodName: string; SOAPResponse: TStream);
    public
      Constructor Create;
      Destructor Destroy;
  end;


procedure TComunicacionSW.HTTPRIOBeforeExecute(const MethodName: string; SOAPRequest: TStream);
var
  v_fileStream: TFileStream;
begin
  SOAPRequest.Size := 0;
  v_fileStream := TFileStream.Create(FArchivoEnvio, fmOpenRead);
  SOAPRequest.Position := 0;
  SOAPRequest.CopyFrom(v_fileStream, v_fileStream.Size);
  v_fileStream.Free;
  SOAPRequest.Position := 0;
end;

procedure TComunicacionSW.HTTPRIOAfterExecute(const MethodName: string; SOAPResponse: TStream);
var
  v_fileStream: TFileStream;
begin
  if FileExists(FArchivoRespuesta) then
    DeleteFile(FArchivoRespuesta);
  v_fileStream := TFileStream.Create(FArchivoRespuesta, fmCreate);
  SOAPResponse.Position := 0;
  v_fileStream.CopyFrom(SOAPResponse, SOAPResponse.size);
  v_fileStream.Free;
  SOAPResponse.Position := 0;
end;

function ObtenerNumeroSerieCertificado(p_nombreCertificado: String): string;
var
  hStore: HCERTSTORE;
  PrevContext, CurContext: PCERT_CONTEXT;
  cbSize: DWORD;
  v_nombre: String;
begin
  Result := '';
  hStore := CertOpenSystemStore(0, PChar('MY'));
  if hStore <> nil then
  begin
    PrevContext := nil;
    CurContext := CertEnumCertificatesInStore(hStore, PrevContext);
    while CurContext <> nil do begin
      v_nombre := '';
      cbSize := CertGetNameString(CurContext, CERT_NAME_SIMPLE_DISPLAY_TYPE, 0, nil, nil, 0);
      if cbSize > 0 then
      begin
        SetLength(v_nombre, cbSize-1);
        CertGetNameString(CurContext, CERT_NAME_SIMPLE_DISPLAY_TYPE, 0, nil, PChar(v_nombre), cbSize);
        if SameText(p_nombreCertificado, v_nombre) then
        begin
          result := GetCertSerialNumber(@CurContext^.pCertInfo^.SerialNumber);
          break;
        end;
      end;
      PrevContext := CurContext;
      CurContext  := CertEnumCertificatesInStore(hStore, PrevContext);
    end;
  end;
end;

function EnviarFacturasEmitidas(p_nombreCertificado, p_archivoEnvio, p_archivoRespuesta: ShortString): PChar;stdcall;export;
var
  v_suministroLRFacturasEmitidas: SuministroFactEmitidas.SuministroLRFacturasEmitidas;
  v_respuestaLRFacturasEmitidas: SuministroFactEmitidas.RespuestaLRFacturasEmitidas;
  v_siiSOAP: SuministroFactEmitidas.siiSOAP;
  v_serialNum: String;
  v_error: string;
  v_comunicacionSW: TComunicacionSW;
begin
  v_error := '';

  v_serialNum := ObtenerNumeroSerieCertificado(p_nombreCertificado);
  
  v_comunicacionSW := TComunicacionSW.Create;
  v_suministroLRFacturasEmitidas := SuministroFactEmitidas.SuministroLRFacturasEmitidas.Create;
  v_respuestaLRFacturasEmitidas := SuministroFactEmitidas.RespuestaLRFacturasEmitidas.Create;
  try
    try
      v_comunicacionSW.FArchivoEnvio := p_archivoEnvio;
      v_comunicacionSW.FArchivoRespuesta := p_archivoRespuesta;
      v_comunicacionSW.FHTTPRIO.HTTPWebNode.ClientCertificate.SerialNum := v_serialNum;

      //Se realiza la llamada sin datos y en el evento HTTPRIOBeforeExecute se establece el xml con los datos generados anteriormente
      v_siiSOAP := SuministroFactEmitidas.GetsiiSOAP(true,'',v_comunicacionSW.FHTTPRIO);
      v_respuestaLRFacturasEmitidas := v_siiSOAP.SuministroLRFacturasEmitidas(v_suministroLRFacturasEmitidas);
    except
      on e:Exception do
        v_error := 'Error DLL: Error en la comunicación con el servicio web.' + e.Message;
    end;
  finally
    v_suministroLRFacturasEmitidas.Free;
    v_respuestaLRFacturasEmitidas.Free;
  end;

  result := StringToPChar(v_error);
end;


El archivo SuministroFactEmitidas lo he generado automáticamente con WSDL Importer de delphi y le he modificado lo siguiente (defURL realmente no lo utilizo):

const
defWSDL = 'https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroFactEmitidas.wsdl';
defURL = 'https://www7.aeat.es/wlpl/SSII-FACT/wlpl/SSII-FACT/ws/fe/SiiFactFEV1SOAP';
defSvc = 'siiService';
defPrt = 'SuministroFactEmitidasPruebas';


¿Se le ocurre a alguien que es lo que estoy haciendo mal?

Un saludo
Ahora mismo andan un poco pasando de la comprobación de certificados, pero creo que a partir de 10 si que falla si no es un certificado valido (o mal insertado).
Yo ando en PHP y logro mandar bloques de 100 sin problema alguno
Responder Con Cita
  #9  
Antiguo 30-05-2017
joefrommalaka joefrommalaka is offline
Miembro
NULL
 
Registrado: mar 2017
Posts: 10
Poder: 0
joefrommalaka Va por buen camino
Cita:
Empezado por mrobles Ver Mensaje
Ahora mismo andan un poco pasando de la comprobación de certificados, pero creo que a partir de 10 si que falla si no es un certificado valido (o mal insertado).
Yo ando en PHP y logro mandar bloques de 100 sin problema alguno
Muchas gracias por tú rápida respuesta. Para realizar el envío estoy utilizando un certificado válido, es el que ha estado utilizando mi cliente hasta ahora para todas sus operaciones con AEAT. Y la cosa es que enviando el archivo manualmente (desde la url https://www7.aeat.es/static_files/co...teWSAEAT2.html) si que se envía, pero utilizando el servicio wsdl no lo consigo.
Responder Con Cita
  #10  
Antiguo 30-05-2017
javipes javipes is offline
Miembro
 
Registrado: jul 2007
Posts: 14
Poder: 0
javipes Va por buen camino
buff! tengo un lío tremendo... si he conseguido generar el suministro de facturas emitidas, siguiendo lo que he visto en el hilo,
¿como puedo ver el contenido del xml ANTES de llamar a GetsiiSOAP(true,'',HTTPRIO1).SuministroLRFacturasEmitidas(ASumLRFacturasEmitidas); ?

seguro que es muy sencillo
Responder Con Cita
  #11  
Antiguo 30-05-2017
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.475
Poder: 21
newtron Va camino a la fama
Cita:
Empezado por javipes Ver Mensaje
buff! tengo un lío tremendo... si he conseguido generar el suministro de facturas emitidas, siguiendo lo que he visto en el hilo,
¿como puedo ver el contenido del xml ANTES de llamar a GetsiiSOAP(true,'',HTTPRIO1).SuministroLRFacturasEmitidas(ASumLRFacturasEmitidas); ?

seguro que es muy sencillo
Aunque esto está engordando demasiado y se hace complicado, revisa el hilo (de principio en adelante) y verás que esa pregunta ya está contestada aunque ahora mismo no recuerdo exactamente cómo era.

Saludos
__________________
Be water my friend.
Responder Con Cita
  #12  
Antiguo 30-05-2017
brincola brincola is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 28
Poder: 0
brincola Va por buen camino
Cita:
Empezado por javipes Ver Mensaje
buff! tengo un lío tremendo... si he conseguido generar el suministro de facturas emitidas, siguiendo lo que he visto en el hilo,
¿como puedo ver el contenido del xml ANTES de llamar a GetsiiSOAP(true,'',HTTPRIO1).SuministroLRFacturasEmitidas(ASumLRFacturasEmitidas); ?

seguro que es muy sencillo
Quítate 1300 (o sea, mira la entrada 53). Allí habla de introducir este evento:

procedure TForm1.HTTPRIO1BeforeExecute(const MethodName: string; SOAPRequest: TStream);
var
ss:TFileStream;
begin
SOAPRequest.Size:=0;
ss:=TFileStream.Create('C:\1.xml', fmOpenRead);
SOAPRequest.Position := 0;
SOAPRequest.CopyFrom( ss, ss.Size);
ss.Free;
SOAPRequest.Position := 0;
end;

No lo he probado aún, pero tiene sentido.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
TICKET BAI (TicketBAI); Nuevo sistema de la Agencia Tributaria del Pais Vasco keys Internet 4175 Hace 4 Días 16:17:35
AEAT envio de datos vía Webservice problemas con WSDL CelsoO Internet 11 09-10-2019 20:03:41
webService Soap de la Administración Digital Española notific@ apicito Internet 3 31-01-2017 11:25:28
Error en Webservice funcion envio de sms webmasterplc Delphi para la web 5 25-07-2013 20:10:29
Problemas con envío de XML a un WebService davidvamo Internet 1 13-02-2007 15:49:20


La franja horaria es GMT +2. Ahora son las 10:29:50.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi