Muy importante poner la @ delante del fichero a enviar.
Y para la firma para enviar con el convert que puso Paquito hago la conversión del certificado a fichero .pem y la huella si que la hago con un función de habour:
Espero haberte respondido a lo que pedias y que te sirva.
Por supuesto que me sirve.
A ver si pronto puedo retomar el tema, ahora en momentos perdidos leo el foro para que luego no me suene a chino.
*****
Editado:
Por cierto, entiendo que utilizas CURL.EXE de windows?
Yo deberé usarlo en W10 y he visto con "curl.exe --version" que la que tiene es la versión :
curl 8.9.1 (Windows) libcurl/8.9.1 Schannel zlib/1.3 WinIDN
Release-Date: 2024-07-31
*****
Muchas gracias Garbi
Un Saludo
Carlos G.
FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
Antes de que saliera la OM envia un fichero y me daba error de FechaHoraHusoGenRegistro y ahora me da error de Falta informar campo obligatorio.: Cabecera
¿Es porque son los mismos datos?
He estado revisando la estructura del fichero y no parece que hayan cambiado nada.
<?xml version="1.0" encoding="UTF-8"?><env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"><env:Body><env:Fault><faultcode>env:Client</faultcode><faultstring>Codigo[4102].El XML no cumple el esquema. Falta informar campo obligatorio.: Cabecera</faultstring><detail><callstack>El XML no cumple el esquema. Falta informar campo obligatorio.: Cabecera
WSExcepcion [faultcode=null, detailMap=null, version=0, faultstring=null, faultactor=null, faultSubCode=null, reasonText=null, detail=null, nameSpaceUriDetail=null]
at es.aeat.tike.cont.xml.util.UtilesXMLTIKE.existeEtiquetaInicio(UtilesXMLTIKE.java:456)
at es.aeat.tike.cont.ws.xml.comun.ParserXmlCabecera.parsear(ParserXmlCabecera.java:59)
at es.aeat.tike.cont.ws.fe.VistaSF.parseaCabecera(VistaSF.java:65)
at es.aeat.tike.cont.ws.VistaMaestro.inicializaParseaValidaProcesaCabecera(VistaMaestro.java:55)
at es.aeat.tike.cont.ws.fe.VerifactuSOAP.doPost(VerifactuSOAP.java:49)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:706)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:791)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1266)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:754)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:451)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.invokeTarget(WebAppFilterChain.java:197)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:100)
at es.aeat.adws.jdit.imp.ws.WSFilterSrvImpl.doFilter(WSFilterSrvImpl.java:248)
at es.aeat.adws.jdit.api.ws.WSFilter.doFilter(WSFilter.java:24)
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:203)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:93)
at es.aeat.adht.jdit.imp.infra.JDitFilterSrvImpl.filtroIni(JDitFilterSrvImpl.java:288)
at es.aeat.adht.jdit.imp.infra.JDitFilterSrvImpl.doFilter(JDitFilterSrvImpl.java:101)
at es.aeat.adht.jdit.imp.infra.JDitFilterSrvImpl.doFilter(JDitFilterSrvImpl.java:74)
at es.aeat.adht.jdit.api.filter.JDitFilter.doFilter(JDitFilter.java:24)
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:203)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:93)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:1069)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1260)
at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:5096)
at com.ibm.ws.webcontainer.osgi.DynamicVirtualHost$2.handleRequest(DynamicVirtualHost.java:328)
at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:1047)
at com.ibm.ws.webcontainer.osgi.DynamicVirtualHost$2.run(DynamicVirtualHost.java:293)
at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink$TaskWrapper.run(HttpDispatcherLink.java:1260)
at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink.wrapHandlerAndExecute(HttpDispatcherLink.java:476)
at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink.ready(HttpDispatcherLink.java:435)
at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:569)
at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.handleNewRequest(HttpInboundLink.java:503)
at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.processRequest(HttpInboundLink.java:363)
at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.ready(HttpInboundLink.java:330)
at com.ibm.ws.tcpchannel.internal.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:169)
at com.ibm.ws.tcpchannel.internal.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:77)
at com.ibm.ws.tcpchannel.internal.WorkQueueManager.requestComplete(WorkQueueManager.java:516)
at com.ibm.ws.tcpchannel.internal.WorkQueueManager.attemptIO(WorkQueueManager.java:586)
at com.ibm.ws.tcpchannel.internal.WorkQueueManager.workerRun(WorkQueueManager.java:970)
at com.ibm.ws.tcpchannel.internal.WorkQueueManager$Worker.run(WorkQueueManager.java:1059)
at com.ibm.ws.threading.internal.ExecutorServiceImpl$RunnableWrapper.run(ExecutorServiceImpl.java:280)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)
</callstack></detail></env:Fault></env:Body></env:Envelope>
Garbi wrote:Hola a todos,
A ver si alguien puede orientarme.
Antes de que saliera la OM envia un fichero y me daba error de FechaHoraHusoGenRegistro y ahora me da error de Falta informar campo obligatorio.: Cabecera
¿Es porque son los mismos datos?
He estado revisando la estructura del fichero y no parece que hayan cambiado nada.
<?xml version="1.0" encoding="UTF-8"?><env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"><env:Body><env:Fault><faultcode>env:Client</faultcode><faultstring>Codigo[4102].El XML no cumple el esquema. Falta informar campo obligatorio.: Cabecera</faultstring><detail><callstack>El XML no cumple el esquema. Falta informar campo obligatorio.: Cabecera
WSExcepcion [faultcode=null, detailMap=null, version=0, faultstring=null, faultactor=null, faultSubCode=null, reasonText=null, detail=null, nameSpaceUriDetail=null]
at es.aeat.tike.cont.xml.util.UtilesXMLTIKE.existeEtiquetaInicio(UtilesXMLTIKE.java:456)
at es.aeat.tike.cont.ws.xml.comun.ParserXmlCabecera.parsear(ParserXmlCabecera.java:59)
at es.aeat.tike.cont.ws.fe.VistaSF.parseaCabecera(VistaSF.java:65)
at es.aeat.tike.cont.ws.VistaMaestro.inicializaParseaValidaProcesaCabecera(VistaMaestro.java:55)
at es.aeat.tike.cont.ws.fe.VerifactuSOAP.doPost(VerifactuSOAP.java:49)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:706)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:791)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1266)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:754)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:451)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.invokeTarget(WebAppFilterChain.java:197)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:100)
at es.aeat.adws.jdit.imp.ws.WSFilterSrvImpl.doFilter(WSFilterSrvImpl.java:248)
at es.aeat.adws.jdit.api.ws.WSFilter.doFilter(WSFilter.java:24)
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:203)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:93)
at es.aeat.adht.jdit.imp.infra.JDitFilterSrvImpl.filtroIni(JDitFilterSrvImpl.java:288)
at es.aeat.adht.jdit.imp.infra.JDitFilterSrvImpl.doFilter(JDitFilterSrvImpl.java:101)
at es.aeat.adht.jdit.imp.infra.JDitFilterSrvImpl.doFilter(JDitFilterSrvImpl.java:74)
at es.aeat.adht.jdit.api.filter.JDitFilter.doFilter(JDitFilter.java:24)
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:203)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:93)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:1069)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1260)
at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:5096)
at com.ibm.ws.webcontainer.osgi.DynamicVirtualHost$2.handleRequest(DynamicVirtualHost.java:328)
at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:1047)
at com.ibm.ws.webcontainer.osgi.DynamicVirtualHost$2.run(DynamicVirtualHost.java:293)
at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink$TaskWrapper.run(HttpDispatcherLink.java:1260)
at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink.wrapHandlerAndExecute(HttpDispatcherLink.java:476)
at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink.ready(HttpDispatcherLink.java:435)
at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:569)
at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.handleNewRequest(HttpInboundLink.java:503)
at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.processRequest(HttpInboundLink.java:363)
at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.ready(HttpInboundLink.java:330)
at com.ibm.ws.tcpchannel.internal.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:169)
at com.ibm.ws.tcpchannel.internal.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:77)
at com.ibm.ws.tcpchannel.internal.WorkQueueManager.requestComplete(WorkQueueManager.java:516)
at com.ibm.ws.tcpchannel.internal.WorkQueueManager.attemptIO(WorkQueueManager.java:586)
at com.ibm.ws.tcpchannel.internal.WorkQueueManager.workerRun(WorkQueueManager.java:970)
at com.ibm.ws.tcpchannel.internal.WorkQueueManager$Worker.run(WorkQueueManager.java:1059)
at com.ibm.ws.threading.internal.ExecutorServiceImpl$RunnableWrapper.run(ExecutorServiceImpl.java:280)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)
</callstack></detail></env:Fault></env:Body></env:Envelope>
Garbi wrote:Muchas gracias Victor por la información.
Yo he estado revisando los esquemas y siguen estando los mismos o eso me ha parecido,
¿Y cuando estarán disponibles si tiene que entrar en vigor el 1 de julio 2025 y tenemos que codificar?
Ya que me había puesto a ello, ahora tengo que esperar porque aún no están los esquemas definitivos.
Victor, espero a que nos tengas informado, como siempre.
Un saludo
Después de leerme la OM, aconsejo su lectura, no se puede hacer un resumen, porque ella misma es un resumen en sí. Solo hace referencia a los documentos técnicos de cada apartado, que aún están en modo borrador.
Por lo que me mantengo en mi postura. No voy a tocar tecla hasta que estén los documentos técnicos en sus versiones 1.x
Vaya tela.
Los de Hacienda creo que también van un poco de culo.
El documento "Veri-Factu_Descripcion_SWeb.pdf" aunque en la 1ra. página indica Fecha 18/10/2024 Verisón 0.4.1, realmente/parece ser, es la Versión 0.4.2 Fecha 28/10/2024; de hecho hay páginas con estos valores.
Si se tocan los TAG Cabecera, RegistroAlta y RegistroAnulacion, ya se pueden hacer pruebas.
De momento Hacienda en DIFERENTES pruebas ha respondido:
Codigo[4102].El XML no cumple el esquema. Falta informar campo obligatorio.: Cabecera</faultstring>
Adaptando como dice la versión 0.4.2 del 28/10/2024 solucionado
Codigo[4112].El titular del certificado debe ser Obligado Emisión, Colaborador Social, Apoderado o Sucesor.</faultstring>
Pués eso, que el certificado del que envía (en mi caso) debe ser la misma persona que el obligado (en mi caso).
Anda!(pienso en voz alta), deberé enviar con la firma digital de apoderado de la S.L., la suya personal entiendo que no valdrá.
Codigo[4104].Error en la cabecera: el valor del campo NIF del bloque ObligadoEmision no está identificado.. NIF:39999930J. NOMBRE_RAZON:La, S.L.</faultstring> (1)
Parece ser que coteja el NIF (en este caso) con el nombre que le consta a Hacienda, no estoy seguro por que he omitido el 2o. apellido y se lo ha comido.
Estos 3 primeros errores evitan que hacienda entre a tratar lo enviado, rechaza todo el envío y no mira los diferentes registros enviados, lo rechaza y punto.
Incorrecto-1100-Valor o tipo incorrecto del campo.: Huella
Error mío, estaba enviando sin la huella del registro anterior.
Incorrecto-1108-El NIF del IDEmisorFactura debe ser el mismo que el NIF del ObligadoEmision.
El NIF del obligado que uso en la cabecera, debe ser el mismo que el que emite las facturas.
Incorrecto-1110-Error en el bloque de IdEmisorFactura.. El NIF no está identificado en el censo de la AEAT.. NIF:39999930J. NOMBRE_RAZON:La, S.L..
No estoy seguro, creo que hacia referencia a la identificación de la factura anterior (encadenamiento).
AceptadoConErrores-->>2004-El valor del campo FechaHoraHusoGenRegistro debe ser la fecha actual del sistema de la AEAT, admitiéndose un margen de error de: 120 segundos.
Pués eso, que le estaba indicando fecha y hora del mes de octubre (son registros que tenía de pruebas). Pero me ha respondido el CSV !!!!!! Oleeeeee!!!!!
Incorrecto-->>3000-Registro de facturación duplicado.
Bueno, es que estoy probando siempre con el mismo registro.
Y además en esta misma respuesta:
AceptadaConErrores-->>2004-El valor del campo FechaHoraHusoGenRegistro debe ser la fecha actual del sistema de la AEAT, admitiéndose un margen de error de:" (no, no indica valor después de ':')
Bueno por hoy tengo bastante.
Seguimos.
Un Saludo
Carlos G.
FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
Muy importante poner la @ delante del fichero a enviar.
Estoy teniendo algun 'problemilla', en algunos envíos no obtengo respuesta, si lo vuelvo a intentar entonces si.
De buenas a primeras se me ocurre comprobar la existencia de "respuesta.xml", si no existe vuelvo a enviar.
Muchas gracias Garbi.
Un Saludo
Carlos G.
FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
VictorCasajuana wrote:Hola.
Para el registro de alta, vais a crear una tabla específica o utilizaréis la misma tabla que almacena las facturas de venta?
Saludos.
Se hace necesaria, creo yo, una tabla hija de la tabla de facturas.
¿ Por qué ? Porque de una misma factura se puede hacer varios envios: Alta, Alta-subsanación, Anulacion.
Sería esta tabla la que tendría que enviarse en orden de fecha y hora cada NN segundos
Para TBai utilizo esta con la siguiente estructura. En realidad para el SII lo tengo exactamente igual. Algunos de _ sólo son para debug:
VictorCasajuana wrote:Hola.
Para el registro de alta, vais a crear una tabla específica o utilizaréis la misma tabla que almacena las facturas de venta?
Saludos.
Se hace necesaria, creo yo, una tabla hija de la tabla de facturas.
¿ Por qué ? Porque de una misma factura se puede hacer varios envios: Alta, Alta-subsanación, Anulacion.
Sería esta tabla la que tendría que enviarse en orden de fecha y hora cada NN segundos
Para TBai utilizo esta con la siguiente estructura. En realidad para el SII lo tengo exactamente igual. Algunos de _ sólo son para debug:
ok, y en esa tabla, vas a meter todos los datos del registro de alta? me refiero a los que se envían en el xml, porque leyendo la OM, no veo que defina exactamente la estructura de esta tabla.