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.035
Poder: 22
keys Va por buen camino
Cita:
Empezado por Galahad Ver Mensaje
Estoy totalmente de acuerdo, lo que no entiendo es como dice un compañero en un post un poc más arriba , es como la aeat no devuelve esas facturas como erróneas, en el registro enviamos la base imponible y el total factura, se supone que podría comprobar que la cuota deducible no es correcta,¿ no ?
Por lo menos deberían comprobar que la cuota deducible no sea mayor que la suma de las cuotas. Pero hay una serie de campos que no se validan y me imagino que en un futuro lo irán haciendo, como puede ser el total de la factura.
Responder Con Cita
  #2  
Antiguo 30-05-2017
vboloradito vboloradito is offline
Miembro
NULL
 
Registrado: mar 2017
Posts: 107
Poder: 8
vboloradito Va por buen camino
Cita:
Empezado por keys Ver Mensaje
Por lo menos deberían comprobar que la cuota deducible no sea mayor que la suma de las cuotas. Pero hay una serie de campos que no se validan y me imagino que en un futuro lo irán haciendo, como puede ser el total de la factura.

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?
Responder Con Cita
  #3  
Antiguo 30-05-2017
Avatar de keys
keys keys is offline
Miembro
 
Registrado: sep 2003
Ubicación: Bilbao
Posts: 1.035
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
  #4  
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
  #5  
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
  #6  
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
  #7  
Antiguo 31-05-2017
Avatar de keys
keys keys is offline
Miembro
 
Registrado: sep 2003
Ubicación: Bilbao
Posts: 1.035
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
  #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
PASPAS PASPAS is offline
Miembro
 
Registrado: feb 2017
Posts: 115
Poder: 8
PASPAS Va por buen camino
Direcciones WDSL producción

Pregunta a la AEAT:
Tengo 2 cuestiones técnicas:
1.- Nos pueden suministrar las direcciones de los endpoint en producción para
que sean incorporadas en nuestro software antes de la puesta en marcha para que
no sea todo a última hora. Tienen pensado publicarlo pronto aunque no se pueda
utilizar hasta el 1 de Julio.
2.-Cuando exista un cambio de versión. Entre versión anterior y la que se
publique existirá un tiempo para poder utilizar la anterior hasta que cada
desarrollador de software adecue su programa para la nueva versión. Me refiero
si entre versión y versión existirá un plazo por ejemplo de 30 días para
cambiarlo o será de hoy para mañana.

-------------------
Respuesta de la AEAT:

1. Todavía no están disponibles.
2. Hay un periodo de adaptación entre versiones.

-------------------

Saludos a todos.
Responder Con Cita
  #11  
Antiguo 30-05-2017
PASPAS PASPAS is offline
Miembro
 
Registrado: feb 2017
Posts: 115
Poder: 8
PASPAS Va por buen camino
Aumento días plazo

Pregunta AEAT
En el supuesto caso: suele pasar en ocasiones una empresa envía en el último día de plazo la factura emitida o recibida.
Resulta en entonces que se me da el caso de:
1.- No existe conexión a internet en la empresa actualmente, debido causas tales como. Corte de suministro, corte por mantenimiento, etc… Qué debe hacer la empresa en estos casos.
2.- No está disponible la página de la AEAT. Mostrando el error de "Error 403", "Error de conexión SSL", "No se puede mostrar la página" o "Conexión segura fallida”
3.- El error se debe a que la página de un faultcode de tipo env:SERVER. Causado por el servidor de la AEAT. Por ejemplo: Código[102].Conexión a Oracle no disponible.
4.- Error debido a que esta en tramite la renovación del certificado y no deja la posibilidad de cambiar el actual ya que aún no se posee.
5.- Existe una Factura enviada pero con errores y no los pueden corregir por desconocimiento. Esta 100% obligado la empresa a corregir dichos errores.
Nos pueden indicar si estos casos van a generar una multa posterior. ¿Cómo se va a actuar en cada caso?
Necesitamos aclararlo ya que los clientes nos hacen muchas preguntas.
Necesito saber también en caso de multa cual sería su cuantía.
--------------------------------
Respuesta AEAT
Buenos días.

El artículo 7.3 de la Orden HFP/417/2017, de 12 de mayo señala lo siguiente en relación con los supuestos en que por imposibilidades técnicas no se haya remitido la información en los plazos previstos reglamentariamente:
3. En aquellos supuestos en que por razones de carácter técnico no fuera posible efectuar el suministro por Internet en el plazo establecido reglamentariamente para cada registro de facturación, o cuando este suministro no pudiera completarse porque no fuera posible realizar la consulta de los registros de facturación previamente suministrados, dicho suministro podrá efectuarse durante los cuatro días naturales siguientes al de finalización de dicho plazo.
Por su parte, el régimen de infracciones y sanciones previsto se encuentra regulado en el artículo 200 de la Ley 58/2003, de 17 de diciembre, General Tributaria.

En cualquier caso, de conformidad con lo establecido en el artículo 87 de la Ley 58/2003, de 17 de diciembre, General Tributaria (Boletín Oficial del Estado del día 18), esta contestación tiene el carácter de mera información de los criterios administrativos existentes para la aplicación de la normativa tributaria. Si desea plantear una consulta tributaria escrita respecto al régimen, clasificación o calificación tributaria que le corresponda, debe dirigirse, según lo establecido en los artículos 88 y 89 de la Ley General Tributaria, a la DGT como órgano competente para la elaboración de contestaciones vinculantes.
----------------


Saludos a todos
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 4170 Hace 2 Semanas 17:29:05
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 23:44:59.


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