Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   SII -Nuevo sistema de la Agencia Tributaria española de envío de datos vía Webservice (https://www.clubdelphi.com/foros/showthread.php?t=91252)

PepCat 29-03-2017 12:53:40

Cita:

Empezado por keys (Mensaje 514874)
Lo primero gracias. El problema de las 13 facturas ya esta solucionado hace tiempo, se solucionó con el uso correcto de las CAPICOM, el problema no lo tengo con los envios, los hago correctamente. El problema es que si en el ordenador hay varios certificados hay que indicar con cual de ellos hacer el envío y como ya he dicho la función que los devuelve por lo visto tambien incluye los eliminados.

Por eso he optado por cargar directamente al fichero y así no hace falta preguntar al usuario que certificado debe escoger.

De todas maneras para ver que certificados del “store” están vigentes, con CAPICOM puedes filtrarlos:


Código Delphi [-]
 for I := 1 to Certs.Count -1 do
  begin
    Cert := IInterface(Certs.Item[i]) as ICertificate;
    if Now <= Cert.ValidToDate  then
    begin
       aList.Add(Cert.SubjectName);
    end;

vboloradito 29-03-2017 13:14:42

Cobros en metálico recibido end_point
 
Hola:

Estoy validando todos los ejemplos de xml de SII usando directamente la web de aeat.

Me funcionan todos excepto los de cobros : (8.1.5. Alta de Cobros en metálico)
uso el end_point : /wlpl/SSII-FACT/ws/fr/SiiFactPAGV1SOAP

y recibo el error.
<faultstring>Codigo[4124].Error La direccion no se corresponde con el fichero de entrada.</faultstring>

aunque en otras ocasiones el error devuelto era:
<faultstring>403.No autorizado</faultstring>

¿alquien tiene un xml correcto con su correspondiente end_point?
gracias

Código:

<soapenv:Envelope>
 <soapenv:Header/>
<soapenv:Body>
<!-- Alta de Cobros en metálico recibido
 -->
<!-- /wlpl/SSII-FACT/ws/fr/SiiFactPAGV1SOAP
 -->
<siiLR:SuministroLRCobrosMetalico>
<sii:Cabecera>
 <sii:IDVersionSii>0.6</sii:IDVersionSii>
<sii:Titular>
 <sii:NombreRazon>Mi_nombrel</sii:NombreRazon>
 <sii:NIF>MI_numero_NIF</sii:NIF>
 </sii:Titular>
 <sii:TipoComunicacion>A0</sii:TipoComunicacion>
 </sii:Cabecera>
<siiLR:RegistroLRCobrosMetalico>
<sii:PeriodoImpositivo>
 <sii:Ejercicio>2017</sii:Ejercicio>
 <sii:Periodo>0A</sii:Periodo>
 </sii:PeriodoImpositivo>
<siiLR:Contraparte>
 <sii:NombreRazon>LA_OTRA_EMPRESA</sii:NombreRazon>
 <sii:NIF>NIF_OTRA_EMPRESA</sii:NIF>
 </siiLR:Contraparte>
 <siiLR:ImporteTotal>6130.56</siiLR:ImporteTotal>
 </siiLR:RegistroLRCobrosMetalico>
 </siiLR:SuministroLRCobrosMetalico>
 </soapenv:Body>
 </soapenv:Envelope>


PepCat 29-03-2017 13:21:07

Cita:

Empezado por vboloradito (Mensaje 514890)
Hola:

Estoy validando todos los ejemplos de xml de SII usando directamente la web de aeat.

Me funcionan todos excepto los de cobros : (8.1.5. Alta de Cobros en metálico)
uso el end_point : /wlpl/SSII-FACT/ws/fr/SiiFactPAGV1SOAP

yo para las pruebas "https://www7.aeat.es/wlpl/SSII-FACT/ws/pm/SiiFactCMV1SOAP" y funciona correctamente.

vboloradito 29-03-2017 13:48:27

Cita:

Empezado por PepCat (Mensaje 514892)
yo para las pruebas "https://www7.aeat.es/wlpl/SSII-FACT/ws/pm/SiiFactCMV1SOAP" y funciona correctamente.

Ok me funciona. pero.....

y para <siiLR:SuministroLRCobrosEmitidas>
8.1.11. alta cobros de fact dada de alta en Libro de Facturas Expedidas.xml
¿que endpoint se usa.?
En que documento se recogen los endpoint, para cada tipo de petición no lo veo en la web.

espinete 29-03-2017 16:31:58

Por si hay alguien utilizando los componentes de SecureBlackBox para gestionar certificados, aquí va mi granito de arena...

Para asignar el certificado al HTTPRIO, necesitamos el SerialNumber del mismo.
Partiendo de que tenemos todos los certificados del sistema en un ComboBox (más abajo pongo cómo rellenarlo):

Código Delphi [-]
var CERTIFICADO : string

    SetLength(CERTIFICADO, WinCertStorage.Certificates[comboCertificate.ItemIndex].CertHandle.pCertInfo.SerialNumber.cbData * 2);

    BinToHex(WinCertStorage.Certificates[comboCertificate.ItemIndex].CertHandle.pCertInfo.SerialNumber.pbData,
             PChar(CERTIFICADO),
             WinCertStorage.Certificates[comboCertificate.ItemIndex].CertHandle.pCertInfo.SerialNumber.cbData);

    HTTPRIO1.HTTPWebNode.ClientCertificate.SerialNum := certificado;

Y aquí cómo rellenar el ComboBox (comboCertificate) con los certificados:

Código Delphi [-]
  for i := 0 to WinCertStorage.Count - 1 do
  begin
    Cert := WinCertStorage.Certificates[i];

    ComboCertificate.Items.Add(Cert.SubjectName.CommonName + ' de ' + Cert.IssuerName.CommonName+' (Hasta: '+formatdatetime('dd/mm/yyyy',Cert.ValidTo)+')');
  end;

keys 29-03-2017 16:36:34

Mira si por este sistema de deja pasar mas de 13 facturas de un tipo.

espinete 29-03-2017 17:01:22

Buenas...

Por lo pronto me devuelve el siguiente error al intentar enviar una factura de pruebas:

Error no.: 1100
Valor o tipo incorrecto del campo: NombreRazon

No sé si se refiere al nombre del Presentador o del Destinatario, pero bueno.

Estoy usando el entorno de pruebas:

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/ws/fe/SiiFactFEV1SOAP';
defSvc = 'siiService';
defPrt = 'SuministroFactEmitidasPruebas';

Tengo certificado digital de persona física (lo utilizo en la AEAT sin problemas). En los datos del Titular pongo mi NIF y mi NOMBRE (APPELIDOS Y NOMBRE), pero siempre me devuelve ese error.

¿Alguna sugerencia?

keys 29-03-2017 17:04:26

Intenta a enviar el fichero directamente por la pagina de hacienda de pruebas.

http://www.agenciatributaria.es/AEAT.internet/SII.html

espinete 29-03-2017 17:09:01

Viendo el contenido del XML, me he dado cuenta de que se trata de la Razón Social de la Contraparte. Voy a pulir un poco esto y cuando haga algún avance comento si puedo enviar más de 13 facturas.

Gracias!

Guinfly 29-03-2017 17:47:55

Selecccionar un Valor de la lista SuministroFactEmitidas.CountryType2
 
Tengo la siguiente duda, a ver si alguien me puede echar un cable.
En mi BD dispongo del código ISO de todos los paises, es decir, de todos los pases cuyo código corresponde con la lista SuministroFactEmitidas.CountryType2.
El problema es que no soy capaz de indicar en el registro FacturaExpedida.Contraparte.IDOtro.CodigoPais el código de pais, me explico.
No puedo indicar lo siguiente V_FACEMI_SII[i].FacturaExpedida.Contraparte.IDOtro.CodigoPais := 'DE'
Para hacerlo correctamente debo indicarlo así V_FACEMI_SII[i].FacturaExpedida.Contraparte.IDOtro.CodigoPais := SuministroFactEmitidas.CountryType2(2).
Pero para esto necesito saber que posición ocupa el pais del cliente en la lista de constantes SuministroFactEmitidas.CountryType2.
Como habéis resuelto este tema?
Existe alguna forma de indicarle SuministroFactEmitidas.CountryType2("La posición que ocupe el pais DE")?

Quedo a la espera de vuestras noticias.
Muchisimas Gracias por adelantado.

espinete 29-03-2017 17:51:52

Cita:

Empezado por keys (Mensaje 514900)
Mira si por este sistema de deja pasar mas de 13 facturas de un tipo.

Nop:

Se requiere un certificado para completar la autenticación de cliente

Qué raro. Cuando selecciono 13 o más facturas, me devuelve ese error. No entiendo qué tendrá que ver una cosa con la otra, pero bueno.

¿Se sabe por qué ocurre esto?

Por cierto...
¿El cliente destinatario de la factura también tiene que estar identificado en la AEAT? ¿Incluso en Entorno de pruebas?
He probado a crear datos de facturas falsos, con destinatarios inventados y me dice que no están identificados (obviamente). ¿Cómo hago las pruebas entonces? ¿Pongo como destinatario mi propio NIF y Razón Social?

PepCat 29-03-2017 18:18:08

Si pruebas con un NIF de una empresa, entonces acepta cualquier nombre en la Razón Social, al menos hasta hoy!

CMB 29-03-2017 20:24:02

Cita:

Empezado por espinete (Mensaje 514908)
Nop:
Por cierto...
¿El cliente destinatario de la factura también tiene que estar identificado en la AEAT? ¿Incluso en Entorno de pruebas?
He probado a crear datos de facturas falsos, con destinatarios inventados y me dice que no están identificados (obviamente). ¿Cómo hago las pruebas entonces? ¿Pongo como destinatario mi propio NIF y Razón Social?

Le puedes poner datos reales y no pasa nada. Lo he consultado a un abogado y me ha dicho que eso no viola la ley de protección de datos. El único que te podría denunciar es la persona física o jurídica que incluyes en el fichero que mandas, pero la AEAT no tiene potestad para hacerlo. E incluso aunque esa persona te pusiera una demanda, enviar sus datos fiscales a Hacienda no es ni falta ni delito. Pronto será obligatorio para todo el mundo.

Imagínate que en una simple comprobación de datos la AEAT te pide copias de todas tus facturas emitidas y/o recibidas. ¿Les vas a decir que la ley no te lo permite?

CMB 29-03-2017 20:30:38

Cita:

Empezado por PepCat (Mensaje 514910)
Si pruebas con un NIF de una empresa, entonces acepta cualquier nombre en la Razón Social, al menos hasta hoy!

Eso parece cierto. En algún sitio dice que el nombre de las personas físicas tiene que ir ordenado por primer apellido, segundo apellido y nombre. Pero ponlo como quieras, que lo acepta igualmente. Lo que no sé es lo que pasará cuando la cosa vaya en serio. Tendrán que tener un poco de flexibilidad, sino recharán miles de envíos y se montará un lío bastante gordo. Imagina que uno pone EMPRESA DE SERVICIOS, S.L. y otros ponen EMPRESA DE SERVICIOS SL, EMPRESA SERVICIOS S.L., u otras variantes. ¿Cómo se controla eso?

espinete 29-03-2017 22:01:17

Bueno, esto parece que marcha bien. He conseguido enviar varias facturas y luego consultar las enviadas, pero tengo algunas dudas...

1) El problema del envío de más de 13 facturas. ¿cual es exactamente la causa del problema? He leído que con CAPICOM no ocurre, pero ¿por qué?

Se pueden enviar varias facturas una a una (varias peticiones) en lugar de con una sola petición o hay algún límite/recomendación? He leído que enviándolas una a una obtenemos incluso un CSV, así que mejor, no?

2) ¿Cual sería el funcionamiento en una aplicación real? Es decir: enviaría las facturas y ya está? Es suficiente para sustituir el 347? Algún tipo de comprobante que se deba imprimir? Ya me imagino a los clientes haciéndome esas preguntas...

Aún no me he metido con las rectificativas, y a probar a enviar facturas exentas de IVA, acogidas a RE, facturas recibidas, etc. pero por lo que veo y leo, no parece haber problema.

Estaría bien que una vez tengamos todo preparado, hacer un post-resumen, similar al que hice hace tiempo con el webservice del envío de facturas electrónicas al face.

En fin, siento haber llegado tarde para colaborar. Si descubro el motivo de las 13 facturas os aviso, ya que me gustaría aprovechar los componentes de SecureBlackBox. No tiene mucho sentido que devuelva ese error. ¿alguien ha comparado el XML del mismo envío usando CAPICOM y el otro método?

Virman 30-03-2017 08:13:00

Error al enviar intracomunitarias
 
Qué raro! En el envío de intracomunitarias me muestra el siguiente error: "Codigo[4124].Error La direccion no se corresponde con el fichero de entrada."
Para intracomunitarias uso la siguiente dirección: https://www7.aeat.es/wlpl/SSII-FACT/...iiFactOIV1SOAP y siempre me ha ido bien.
Alguien más tiene problemas para el envío de intracomunitarias? El resto de tipos me lo hace correctamente.

Edito: Para cobros en metálico me dice lo mismo. En cobros metálico uso la dirección: https://www7.aeat.es/wlpl/SSII-FACT/...iiFactCMV1SOAP

Será que los envíos de tipo anual van a cambiar de dirección de envío?

keys 30-03-2017 09:29:30

Cita:

Empezado por espinete (Mensaje 514930)
Bueno, esto parece que marcha bien. He conseguido enviar varias facturas y luego consultar las enviadas, pero tengo algunas dudas...

1) El problema del envío de más de 13 facturas. ¿cual es exactamente la causa del problema? He leído que con CAPICOM no ocurre, pero ¿por qué?

Se pueden enviar varias facturas una a una (varias peticiones) en lugar de con una sola petición o hay algún límite/recomendación? He leído que enviándolas una a una obtenemos incluso un CSV, así que mejor, no?

2) ¿Cual sería el funcionamiento en una aplicación real? Es decir: enviaría las facturas y ya está? Es suficiente para sustituir el 347? Algún tipo de comprobante que se deba imprimir? Ya me imagino a los clientes haciéndome esas preguntas...

Aún no me he metido con las rectificativas, y a probar a enviar facturas exentas de IVA, acogidas a RE, facturas recibidas, etc. pero por lo que veo y leo, no parece haber problema.

Estaría bien que una vez tengamos todo preparado, hacer un post-resumen, similar al que hice hace tiempo con el webservice del envío de facturas electrónicas al face.

En fin, siento haber llegado tarde para colaborar. Si descubro el motivo de las 13 facturas os aviso, ya que me gustaría aprovechar los componentes de SecureBlackBox. No tiene mucho sentido que devuelva ese error. ¿alguien ha comparado el XML del mismo envío usando CAPICOM y el otro método?

Hola el problema de las 13 facturas no se llego a saber por que. El problema no es de las SecureBlackBox, el problema es del componente HTPTRIO a la hora de hacer el envío. Te pongo la solución que encontramos, que pasa por utilizar los CAPICOM para hacer el envío. En el evento OnBeforePost del HTTPTRIO poner lo siguiente :

Código Delphi [-]
 
  var
     Store : IStore;
     Certs : ICertificates;
     Cert : ICertificate2;
     CertContext : ICertContext;
     PCertContext : PCCERT_CONTEXT;
     V : OleVariant;
 const
     INTERNET_OPTION_CLIENT_CERT_CONTEXT = 84;
 begin

     V := Certificado; //Certificado es el nombre completo del certifficado en una funcion anterior esta puesto como obtenerlo con las CAPICOM pero con SecureBlackBox tambien se puede obtener

     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
             Error
         end;
     end
     else
      begin
         Error no hay certificados
      end;
 end;

2) Respecto a esto cada uno sabrá como hacerlo dependiendo de sus necesidades, nosotros estamos guardando el CSV y el estado del envío de cada factura además del fichero de respuesta, aunque esto último no hace falta. De todas formas el usuario pordra consultar en cualquier momento en la pagina de la AEAT el estado de cada factura o también se puede acceder a ello a través del webservice.

Por otro lado si estas en el SII ya no tienes que hacer el 347. entre otros impuestos.


Cita:

Estaría bien que una vez tengamos todo preparado, hacer un post-resumen, similar al que hice hace tiempo con el webservice del envío de facturas electrónicas al face.
Estoy de acuerdo, pero yo propongo primero a algún moderador separe este foro en por lo menos en tres, uno para Delphi, Otro para VB C# (Otros lenguajes raros :eek:) y otro para normativa. Ya que me pongo en el lugar del que este empezando y se ponga a revisar este foro, es una mezcla de varios lenguajes, propuestas, etcc...

Luego diran que el delphi esta muerto y no creo que exista otro foro sobre este tema más completo.

:rolleyes::rolleyes::rolleyes::rolleyes:

newtron 30-03-2017 09:33:40

Cita:

Empezado por espinete (Mensaje 514930)
Bueno, esto parece que marcha bien. He conseguido enviar varias facturas y luego consultar las enviadas, pero tengo algunas dudas...

1) El problema del envío de más de 13 facturas. ¿cual es exactamente la causa del problema? He leído que con CAPICOM no ocurre, pero ¿por qué?

Efectivamente con CAPICOM no ocurre pero no sabemos por qué así que lo más rápido sería que lo hicieras directamente con CAPICOM.

Cita:

Empezado por espinete (Mensaje 514930)
Se pueden enviar varias facturas una a una (varias peticiones) en lugar de con una sola petición o hay algún límite/recomendación? He leído que enviándolas una a una obtenemos incluso un CSV, así que mejor, no?

Puedes hacerlo pero el proceso se eternizaría. No he comprobado tiempos pero si en hacer el envío efectivo tarda, no sé, un par de segundos o tres, multiplica eso por el número de facturas y el tema se puede hacer largo como maneje tu cliente muchos documentos.

Cita:

Empezado por espinete (Mensaje 514930)
2) ¿Cual sería el funcionamiento en una aplicación real? Es decir: enviaría las facturas y ya está? Es suficiente para sustituir el 347? Algún tipo de comprobante que se deba imprimir? Ya me imagino a los clientes haciéndome esas preguntas...

En principio la idea es que envíes la factura y si te da un "ok" de resultado ahí se acaba la historia. Yo por si acaso me guardo el "id" que te devuelve (Result.csv) pero en principio no hará falta a no ser que te lo reclame la aeat. Por otro lado, las empresas que estén en este sistema efectivamente no tendrán que declarar el 347.

Cita:

Empezado por espinete (Mensaje 514930)
Estaría bien que una vez tengamos todo preparado, hacer un post-resumen, similar al que hice hace tiempo con el webservice del envío de facturas electrónicas al face.

Uis... es verdad me sonaba tu nick y es del hilo ese de las facturas electrónicas. Hace unos días te puse una consulta pero imagino que no la habrás visto porque decías que ibas a poner un resumen de cómo se quedaba el tema pero no lo he visto, ¿está por algún lado? es un tema que me interesa.


Cita:

Empezado por Virman (Mensaje 514933)
Qué raro! En el envío de intracomunitarias me muestra el siguiente error: "Codigo[4124].Error La direccion no se corresponde con el fichero de entrada."
Para intracomunitarias uso la siguiente dirección: https://www7.aeat.es/wlpl/SSII-FACT/...iiFactOIV1SOAP y siempre me ha ido bien.

Cuando da ese error es porque el WSDLLocation no es correcto. En el caso de las facturas intracomunitarias es el mismo que para el resto de facturas dependiendo si son emitidas o recibidas.

En el caso de las facturas emitidas es:
http://www.agenciatributaria.es/stat...tEmitidas.wsdl

y en el de las facturas recibidas:
http://www.agenciatributaria.es/stat...Recibidas.wsdl

También puede ser por el "port" que en el periodo de pruebas es:
SuministroFactRecibidasPruebas para las facturas recibidas y SuministroFactEmitidasPruebas para las emitidas.

Saludos

newtron 30-03-2017 09:48:46

Cita:

Empezado por keys (Mensaje 514934)
Estoy de acuerdo, pero yo propongo primero a algún moderador separe este foro en por lo menos en tres, uno para Delphi, Otro para VB C# (Otros lenguajes raros :eek:) y otro para normativa. Ya que me pongo en el lugar del que este empezando y se ponga a revisar este foro, es una mezcla de varios lenguajes, propuestas, etcc...

Luego diran que el delphi esta muerto y no creo que exista otro foro sobre este tema más completo.

:rolleyes::rolleyes::rolleyes::rolleyes:

Te me has adelantado en las respuestas. :D

Totalmente de acuerdo, esto ya se hace un poco lioso de revisar.

robinsondemantu 30-03-2017 09:55:17

WebService
 
Cita:

Empezado por jcaceres121 (Mensaje 514752)
Hola.
Aunque se que este club es de Delphi, estoy intentando crear una solución en Java para el problema. Tengo alguna experiencia con Java y ninguna con webservices.
He visto tu código .NET, que es quizá lo más parecido a Java que he encontrado por ahí, pero me surgen dudas.
Lamento no haber encontrado ningún foro de Java y por eso me veo obligado a preguntar aquí.
Os comento mi situación.
Tengo ya creado una objeto SuministroLRFacturasEmitidas (supongo que correctamente) que contiene una factura de ejemplo, y también tengo un objeto X509Certificate con un certificado obtenido a partir de un fichero .PFX.
Entiendo que sólo me quedaría invocar a los métodos necesarios para enviar el objeto y recibir la respuesta, pero no se como.
Si alguien pudiera ayudarme, estaría muy agradecido. levo muchas horas con esto y no avanzo.
Gracias

Hola,

No sé si te han respondido. Yo trabajo con .NET, pero supongo que en Java sería igual o parecido, aunque aquí dependerá del IDE que utilices. Tendrás que crearte una referencia Web al WSDL correspondiente (en este caso al de facturas emitidas) de la AEAT.

Por ejemplo en Eclipse:

Adding a Web Reference in Eclipse
To develop Java programs that consume Location Intelligence Module web services in Eclipse, you first create a reference to the web service in your Java project. When the reference is created, the client-side stub code required to use the web service is generated.

Start Eclipse.
On the File menu, select New > Project.
The New Project wizard opens.

In the New Project wizard, select Java > Java Project.
Click Next.

In the Project Name field, enter the name you want to give your project.
Click Finish to close the wizard.

The new project folder appears in the Package Explorer.

In the Package Explorer, right-click on the project folder you created in the previous step. On the pop-up menu, select New > Other.
The New wizard opens.

In the New wizard, select Web Services > Web Service Client.
Click Next.

In the Service Definition field, enter the URL to the web service's WSDL document.
Select Develop Client on the slider bar.

Click Finish to close the wizard.

The stub code for the web service is generated in the project folder.


Esto te generará una clase proxy con los métodos disponibles del servicio Web. En el método de altas de facturas emitidas, le pones tu objeto SuministroLRFacturasEmitidas y recibes la respuesta.


La franja horaria es GMT +2. Ahora son las 12:40:23.

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