Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Envío de registros y sus respuestas (https://www.clubdelphi.com/foros/forumdisplay.php?f=66)
-   -   Reenvío de facturas el Entorno de Pruebas SIN especificar Subsanación (https://www.clubdelphi.com/foros/showthread.php?t=97365)

sglorka 28-04-2025 16:43:23

Cita:

Empezado por espinete (Mensaje 564082)
Si, eso está claro. Lo que quiero decir es que aunque no indiques "Subsanación = S", te la aceptan, y no deberían. Deberían requerir indicar "subsanación = S", pero no lo están haciendo.
Obviamente mi intención es enviarla como subsanación, pero haciendo pruebas me pareció raro que las aceptaran sin indicarlo.

Vamos, que siendo tan tiquismiquis con todo lo demás, me parece raro que con esto se lo estén saltando, al menos por ahora.

En realidad, si lo piensas, ellos no pueden saber si la estás enviando continuamente como un alta nueva puesto que te la rechazan en cada envío y para ellos es válida cuando ya es correcta y la informas como alta nueva por quinta vez. Por lo tanto, entiendo que te dejen hacerlo sin rechistar. Pero otra cosa es lo que te comentaba, no sabemos con qué información se quedan para su control y si en un futuro, controlarán esto.
Con los fallos de encadenamiento también actúan igual, te los permiten porque saben que pueden haber huecos debido a rechazos, pero si fuera una casuística recurrente en tu SIF, entiendo que te llamarían a capítulo

VJSoftware 28-04-2025 18:05:05

Mi locura particular. Archivos bath.
 
Voy a volver sobre este tema de las subsanaciones por si algún alma caritativa me lo deja claro, porque la verdad aún no me entero.

Supongamos que envío un XML con un conjunto de 20 facturas y supongamos que la número 10 me devuelve incorrecto, en mi caso concreto, por el tema del NIF. El resto de posibles errores ya los tengo blindados para que el usuario no los pueda cometer antes de enviar la factura. Ahora leyendo lo del webservice para la comprobación del NIF veré a ver qué hago.

Se supone que no se puede modificar la factura para cambiar el NIF o el nombre del cliente (por ejemplo uno con apellidos compuestos que tienen guiones supongamos ALBERTO MARTIN-GARCIA FERNANDEZ).

Así que hacienda la factura 10 no la tiene, mi SIF ya tiene generado un registro de envío de la 10 encadenado con la 9 y también uno para la 11 encadenado con la 10 que me devolvió correcto, a pesar de que la 10 no la cogió.

Si ahora decido volver a enviar la 10 eligiendo como decís eso de (otro no censado), ¿tengo que volver a encadenar ese envío de la subsanación de la 10 con la huella de la 20 que fue la última que se envió? y luego cuando envíe la 21, la tengo que encadenar con el envío de la subsanación de la 10 que sería el último enviado? y si me doy cuenta del error mañana la fecha y hora que hay que poner es la del registro del envío de la subsanación, imagino. No la fecha de la factura. ¿no?

Y por último otro problema que tengo es el siguiente, si genero un XML con 200 facturas, el proceso de creación del XML con los encadenamientos, etc me tarda más de los 240 segundos y por tanto cuando lo mando, los primeros registros del conjunto me los acepta con errores por que dice que ha pasado más tiempo del debido. De momento no pienso hacer nada con eso, pero ¿es legal? Gracias de antemano y perdón por el rollo.

espinete 28-04-2025 18:54:01

Cita:

Empezado por VJSoftware (Mensaje 564085)
Voy a volver sobre este tema de las subsanaciones por si algún alma caritativa me lo deja claro, porque la verdad aún no me entero.

Supongamos que envío un XML con un conjunto de 20 facturas y supongamos que la número 10 me devuelve incorrecto, en mi caso concreto, por el tema del NIF. El resto de posibles errores ya los tengo blindados para que el usuario no los pueda cometer antes de enviar la factura. Ahora leyendo lo del webservice para la comprobación del NIF veré a ver qué hago.

Se supone que no se puede modificar la factura para cambiar el NIF o el nombre del cliente (por ejemplo uno con apellidos compuestos que tienen guiones supongamos ALBERTO MARTIN-GARCIA FERNANDEZ).

Si ahora decido volver a enviar la 10 eligiendo como decís eso de (otro no censado), ¿tengo que volver a encadenar ese envío de la subsanación de la 10 con la huella de la 20 que fue la última que se envió? y luego cuando envíe la 21, la tengo que encadenar con el envío de la subsanación de la 10 que sería el último enviado? y si me doy cuenta del error mañana la fecha y hora que hay que poner es la del registro del envío de la subsanación, imagino. No la fecha de la factura. ¿no?

Y por último otro problema que tengo es el siguiente, si genero un XML con 200 facturas, el proceso de creación del XML con los encadenamientos, etc me tarda más de los 240 segundos y por tanto cuando lo mando, los primeros registros del conjunto me los acepta con errores por que dice que ha pasado más tiempo del debido. De momento no pienso hacer nada con eso, pero ¿es legal? Gracias de antemano y perdón por el rollo.

Piensa que por cada factura puede haber varios "registros de facturación" (XML). Si haces una factura, creas su RF (XML) y lo envías. Si luego tienes que hacer una subsanación, crearás otro RF para la "misma" factura, y lo envías. Este nuevo RF irá encadenado con lo que toque: el último RF generado.

Dicho de otra forma: imagina que no tienes conexión a internet durante un día, pero tu ese día necesitas hacer facturas. Y no solo facturas, sino rectificativas, subsanaciones, etc. Las que quieras (el envío ya lo harás cuando vuelva internet). Pues bien, para que eso sea posible, tu tienes que encadenarlo todo "cronológicamente", a medida que vaya surgiendo lo que tengas que hacer. Olvídate de seguir una numeración correlativa, no tiene que ver con eso. Tu puedes enviar el RF de la factura 1000 después de haber enviado un RF de la Rectificativa 200-R o de un tícket (simplificada) 351-T.

Es difícil que se tarde más de 240 segundos en generar y enviar el XML con 200 facturas, pero si se diera el caso, debes enviar el XML indicando Incidencia = S en la Cabecera.
Esto puedes comprobarlo ANTES de generar la cabecera: compruebas si en el bloque que vas a enviar hay alguna factura que se haya emitido hace más de 240 segundos y, si es así, marcas el envío como Incidencia.

He leído por aquí que algunos marcan todos los envíos como Incidencia aunque no la haya (Hacienda lo acepta), pero no soy partidario de que sea lo correcto.

A mí me respondieron desde VeriFactu que por lo pronto este error y otros similares no los van a tener en cuenta, salvo que sea algo muy recurrente en tu software. Ahí supongo que te dirían algo si lo consideran sospechoso.

VJSoftware 29-04-2025 08:34:21

Cita:

Empezado por espinete (Mensaje 564086)
Piensa que por cada factura puede haber varios "registros de facturación" (XML). Si haces una factura, creas su RF (XML) y lo envías. Si luego tienes que hacer una subsanación, crearás otro RF para la "misma" factura, y lo envías. Este nuevo RF irá encadenado con lo que toque: el último RF generado.

Dicho de otra forma: imagina que no tienes conexión a internet durante un día, pero tu ese día necesitas hacer facturas. Y no solo facturas, sino rectificativas, subsanaciones, etc. Las que quieras (el envío ya lo harás cuando vuelva internet). Pues bien, para que eso sea posible, tu tienes que encadenarlo todo "cronológicamente", a medida que vaya surgiendo lo que tengas que hacer. Olvídate de seguir una numeración correlativa, no tiene que ver con eso. Tu puedes enviar el RF de la factura 1000 después de haber enviado un RF de la Rectificativa 200-R o de un tícket (simplificada) 351-T.

Es difícil que se tarde más de 240 segundos en generar y enviar el XML con 200 facturas, pero si se diera el caso, debes enviar el XML indicando Incidencia = S en la Cabecera.
Esto puedes comprobarlo ANTES de generar la cabecera: compruebas si en el bloque que vas a enviar hay alguna factura que se haya emitido hace más de 240 segundos y, si es así, marcas el envío como Incidencia.

He leído por aquí que algunos marcan todos los envíos como Incidencia aunque no la haya (Hacienda lo acepta), pero no soy partidario de que sea lo correcto.

A mí me respondieron desde VeriFactu que por lo pronto este error y otros similares no los van a tener en cuenta, salvo que sea algo muy recurrente en tu software. Ahí supongo que te dirían algo si lo consideran sospechoso.

Muchas gracias por la respuesta. Me aclaraste las dudas.

bmfranky 29-04-2025 14:25:47

Hola, lo que no has de esperarte tanto para generar el registro a enviar, si realmete te tarda tanto en generar y enviar, no apures, envia cada menos, envez de esperar los 240" envia a los 210 y mientras generas cumples con los 60" o lo que te inmpongan , no has de esperar 240" para enviar.
La cronologia es , envias el primer envio del dia, antes de cumplir 240" del primer registro, poner a 0 el contador e inicializar la cuenta de 60" o lo que te pidan par impedir un n uevo envio, en el momento de generrse un registro que encolas pones a 0 el contador de envios, cuando llegue a 210", seguro que has superado los x segundos que te indican en la respuesta, cierras el xml a enviar y envias, poniendo a 0 el contador de de registros de los 210" si se genera alguno, entre tanto recuperas el tiempo de espera, lo asignas y activas el contador, vas encolando si se generan registros de alta, abono, alta de subsanacion etc... y lo mismo , al llegar a 210" del primer registro encadenado, seguro qe has superado los segundos de espera, envias y vuelves a empezar, es lioso de explicar pero sencillo de implementar.
2 contadores uno de espera minima en principio 60" que se inicializa con el tiempo de la respuesta y tiende a 0 cada segundo y otro de espera maxima que empieza en 0 al encolar el primer registro, ya sea del dia , desde inicio del SIF o desde el anterior envio, y se incrementa hasta llegar a 210" por ejemplo y una subrutina que se encarga cada segundo de decrementar el de 60" si mayor a 0 y de incrementar el de 210 si menor a 210, cuando llegues a 210" envias lo que hay encolado en la tabla que almacenas los registros a enviar y vuelves a empezar.

Jarogo08 29-04-2025 15:51:54

Cita:

Empezado por bmfranky (Mensaje 564111)
Hola, lo que no has de esperarte tanto para generar el registro a enviar, si realmete te tarda tanto en generar y enviar, no apures, envia cada menos, envez de esperar los 240" envia a los 210 y mientras generas cumples con los 60" o lo que te inmpongan , no has de esperar 240" para enviar.
La cronologia es , envias el primer envio del dia, antes de cumplir 240" del primer registro, poner a 0 el contador e inicializar la cuenta de 60" o lo que te pidan par impedir un n uevo envio, en el momento de generrse un registro que encolas pones a 0 el contador de envios, cuando llegue a 210", seguro que has superado los x segundos que te indican en la respuesta, cierras el xml a enviar y envias, poniendo a 0 el contador de de registros de los 210" si se genera alguno, entre tanto recuperas el tiempo de espera, lo asignas y activas el contador, vas encolando si se generan registros de alta, abono, alta de subsanacion etc... y lo mismo , al llegar a 210" del primer registro encadenado, seguro qe has superado los segundos de espera, envias y vuelves a empezar, es lioso de explicar pero sencillo de implementar.
2 contadores uno de espera minima en principio 60" que se inicializa con el tiempo de la respuesta y tiende a 0 cada segundo y otro de espera maxima que empieza en 0 al encolar el primer registro, ya sea del dia , desde inicio del SIF o desde el anterior envio, y se incrementa hasta llegar a 210" por ejemplo y una subrutina que se encarga cada segundo de decrementar el de 60" si mayor a 0 y de incrementar el de 210 si menor a 210, cuando llegues a 210" envias lo que hay encolado en la tabla que almacenas los registros a enviar y vuelves a empezar.


Nosotros lo tenemos de otra manera... es un servicio de windows que salta por defecto cada 60 segundos (controlado con el propio timer del servicio). La mayoría de las veces no habrá nada para enviar y estará saltando cada 60 segundos pero cuando sí encuentre algo entonces para el timer, envía, obtiene la respuesta, coge el valor de "TiempoEsperaEnvio" (que en las pruebas que hago siempre me devuelve 60), y vuelve a poner en marcha el timer asignándole como intervalo el valor de "TiempoEsperaEnvio".

De esta manera enviará o intentará enviar cada 60 segundos. Pero si un día la respuesta del envío dice que tenemos que esperar por ejemplo 200 segundos automáticamente el timer pasará a saltar cada 200 segundos.

No sé si alguien más lo tiene así o si le veis alguna traba!

Saludos

VJSoftware 07-05-2025 13:47:33

Cita:

Empezado por Jarogo08 (Mensaje 564116)
Nosotros lo tenemos de otra manera... es un servicio de windows que salta por defecto cada 60 segundos (controlado con el propio timer del servicio). La mayoría de las veces no habrá nada para enviar y estará saltando cada 60 segundos pero cuando sí encuentre algo entonces para el timer, envía, obtiene la respuesta, coge el valor de "TiempoEsperaEnvio" (que en las pruebas que hago siempre me devuelve 60), y vuelve a poner en marcha el timer asignándole como intervalo el valor de "TiempoEsperaEnvio".

De esta manera enviará o intentará enviar cada 60 segundos. Pero si un día la respuesta del envío dice que tenemos que esperar por ejemplo 200 segundos automáticamente el timer pasará a saltar cada 200 segundos.

No sé si alguien más lo tiene así o si le veis alguna traba!

Saludos

Y ¿sería legal generar los RF a futuro? es decir, imaginemos que son las 10:00:00. Voy encadenando tickets con la fechahorausohorario a las 10:20:00 cuando realmente llegue esa hora, mando todo lo que tenga encadenado. ¿Cómo lo veis a nivel legal?

newtron 07-05-2025 14:01:15

Cita:

Empezado por VJSoftware (Mensaje 564324)
Y ¿sería legal generar los RF a futuro? es decir, imaginemos que son las 10:00:00. Voy encadenando tickets con la fechahorausohorario a las 10:20:00 cuando realmente llegue esa hora, mando todo lo que tenga encadenado. ¿Cómo lo veis a nivel legal?


Nidecoña. De forma normal no puede pasar más de 60s desde que se genera la factura hasta que se envía.

Faneka 07-05-2025 15:50:45

Efectivamente, se tiene que enviar el RF al 'instante' de crearlo. Además si el cliente de turno le da por leer el QR puede decirte, aquí me dice que no esta en el portal, xD.

ermendalenda 07-05-2025 19:51:32

Cita:

Empezado por espinete (Mensaje 564082)
Si, eso está claro. Lo que quiero decir es que aunque no indiques "Subsanación = S", te la aceptan, y no deberían. Deberían requerir indicar "subsanación = S", pero no lo están haciendo.
Obviamente mi intención es enviarla como subsanación, pero haciendo pruebas me pareció raro que las aceptaran sin indicarlo.

Vamos, que siendo tan tiquismiquis con todo lo demás, me parece raro que con esto se lo estén saltando, al menos por ahora.

Perdón error

ermendalenda 07-05-2025 19:54:15

Cita:

Empezado por Jarogo08 (Mensaje 564116)
Nosotros lo tenemos de otra manera... es un servicio de windows que salta por defecto cada 60 segundos (controlado con el propio timer del servicio). La mayoría de las veces no habrá nada para enviar y estará saltando cada 60 segundos pero cuando sí encuentre algo entonces para el timer, envía, obtiene la respuesta, coge el valor de "TiempoEsperaEnvio" (que en las pruebas que hago siempre me devuelve 60), y vuelve a poner en marcha el timer asignándole como intervalo el valor de "TiempoEsperaEnvio".

De esta manera enviará o intentará enviar cada 60 segundos. Pero si un día la respuesta del envío dice que tenemos que esperar por ejemplo 200 segundos automáticamente el timer pasará a saltar cada 200 segundos.

No sé si alguien más lo tiene así o si le veis alguna traba!

Saludos



Hola, lo veo arriesgarl por no decir MAL, a ver, te pongo un escenario:
Envías a las 12:30:05 por que tu timer ha llegado a los 60segundos y había 1 ó 2 registros.inmed8atemente están generando un registro que se graba a las 12:30:07 que no entra en ese lote, pero es que tampoco podría entrar en wl siguiente por que no ha llegado a los 60 segundos de antigüedad, con lo cual cuando lo vayas a enviar tiene 118segundos, con lo cual ese envío tiene que estar finalizado en 2 segundos máximo, es arriesgado.
O sea, todo lo que generes después de el último envio no lo puedes enviar hasta que cumpla cada uno de ellos 60 segundos, lo siento, pero lo tienes mal.
Repasalo
Por ejemplo:
Reduce el timer a 10 segundos y mira cada registro pendiemte si ya ha cumplido los 60 segundos y metelos en el lote de envío.

novatico 08-05-2025 09:33:04

Yo lo tengo como Jarogo08, con una pequeña variación:
- Tras recoger la respuesta del envío realizado y comprobar el tiempo de espera, es entonces donde hago una pausa con ese valor, y tras ello vuelvo a comprobar si ya hay más registros de facturacion pendientes de enviar.

bmfranky 08-05-2025 09:45:34

Cita:

Empezado por newtron (Mensaje 564328)
Nidecoña. De forma normal no puede pasar más de 60s desde que se genera la factura hasta que se envía.

O si, como mínimo 61" :cool: de tiempo entre generar y enviar, teniendo en cuenta que si solo enviamos de 1 en 1 registro "Deberíamos" esperar los t" , segundos que nos indican en la respuesta del envío antes del siguiente, aunque que a efectos prácticos, realmente tienes razón y no sera 60, segundos porque mientras generas el ticket algunos segundos tardas... , incluso un cajero avanzado no tarda 1" en finalizar y cobrar un ticket (Digo ticket porque es lo mas rápido de gestionar que se me ocurre, un ticket de supermercado.), aunque un supermercado de mas de 1 caja , imagino que tendrán la generación de tickets de caja centralizada, y el servidor sera el encargado de encolar los registros y enviarlos y demás y no la caja...

Neftali [Germán.Estévez] 08-05-2025 09:53:41

Cita:

Empezado por Jarogo08 (Mensaje 564116)
Nosotros lo tenemos de otra manera...
* es un servicio de windows que salta por defecto cada 60 segundos (controlado con el propio timer del servicio).
* La mayoría de las veces no habrá nada para enviar y estará saltando cada 60 segundos pero cuando sí encuentre algo entonces para el timer, envía, obtiene la respuesta, coge el valor de "TiempoEsperaEnvio" (que en las pruebas que hago siempre me devuelve 60),
* y vuelve a poner en marcha el timer asignándole como intervalo el valor de "TiempoEsperaEnvio".

De esta manera enviará o intentará enviar cada 60 segundos. Pero si un día la respuesta del envío dice que tenemos que esperar por ejemplo 200 segundos automáticamente el timer pasará a saltar cada 200 segundos.

Nosotros lo tenemos igual.

Cita:

Empezado por ermendalenda (Mensaje 564343)
Hola, lo veo arriesgarl por no decir MAL, a ver, te pongo un escenario:

1) Envías a las 12:30:05 por que tu timer ha llegado a los 60segundos y había 1 ó 2 registros.
2) inmed8atemente están generando un registro que se graba a las 12:30:07 que no entra en ese lote, pero es que tampoco podría entrar en wl siguiente por que no ha llegado a los 60 segundos de antigüedad, con lo cual cuando lo vayas a enviar tiene 118segundos, con lo cual ese envío tiene que estar finalizado en 2 segundos máximo, es arriesgado.

Creo que en este caso el error de concepto está aquí:
"pero es que tampoco podría entrar en wl siguiente por que no ha llegado a los 60 segundos de antigüedad"

Un registro NO DEBE enviarse con más de 240 sg. de antigüedad, de otra forma hay que marcarlo con INCIDENCIA, pero lo que es incorrecto es que no se pueda enviar con menos de 60 sg. de antigüedad.
Tú puedes geberar un Registro de Facturación y enviarlo 2 sg. después, no hay problema, siempre y cuando el último envío haya sido hace 60 sg.

Es decir, el escenario que dice [Jarogo08], que tenemos nosotros y que es correcto sería por ejemplo este:

Código:

12:00:00 Se prepara envío (como es vacio, no se envía NADA);  60 sg. de espera
12:01:00 Se prepara envío (como es vacio, no se envía NADA);  60 sg. de espera
12:01:10 Generamos factura 1
12:01:45 Generamos factura 2
12:02:00 Se prepara envío (2 facturas);  60 sg. de espera
12:03:00 Se prepara envío (como es vacio, no se envía NADA);  60 sg. de espera
12:03:10 Generamos factura 3
12:03:20 Generamos factura 4
12:03:30 Generamos factura 5
12:03:40 Generamos factura 6
12:03:50 Generamos factura 7
12:04:00 Se prepara envío (5 facturas); AEAT contesta con 120 sg. de espera
12:06:00 Se prepara envío (como es vacio, no se envía NADA); 120 sg. de espera
12:08:00 Se prepara envío (como es vacio, no se envía NADA);  120 sg. de espera
12:09:50 Generamos factura 8
12:10:00 Se prepara envío (1 factura); AEAT contesta con 60 sg. de espera
12:11:00 Se prepara envío (como es vacio, no se envía NADA);  60 sg. de espera
...

NOTA ACLARATORIA: No lo había puesto para simplificar. Cuando aparece "se genera envío (vacío)" realmente el sistema no envía. Detecta que no hay nada y lo que hace es esperar hasta el siguiente. (no conecta con la AEAT)

rci 08-05-2025 09:54:04

Cita:

Empezado por ermendalenda (Mensaje 564343)
Hola, lo veo arriesgarl por no decir MAL, a ver, te pongo un escenario:
Envías a las 12:30:05 por que tu timer ha llegado a los 60segundos y había 1 ó 2 registros.inmed8atemente están generando un registro que se graba a las 12:30:07 que no entra en ese lote, pero es que tampoco podría entrar en wl siguiente por que no ha llegado a los 60 segundos de antigüedad, con lo cual cuando lo vayas a enviar tiene 118segundos, con lo cual ese envío tiene que estar finalizado en 2 segundos máximo, es arriesgado.
O sea, todo lo que generes después de el último envio no lo puedes enviar hasta que cumpla cada uno de ellos 60 segundos, lo siento, pero lo tienes mal.
Repasalo
Por ejemplo:
Reduce el timer a 10 segundos y mira cada registro pendiemte si ya ha cumplido los 60 segundos y metelos en el lote de envío.

el tiempo máximo ya no son 120 segundos, son 240 ahora mismo. yo creo que tienes tiempo de hacerlo como dice Jarogo08.

Nosotros lo hacemos de forma muy similar, el servicio tiene una tarea que salta siempre cada 60 segundos. en ese momento comprueba el valor t que contestó el último envío y la fecha del último envío. Si ya ha pasado el tiempo o si hay mas de 1000 registros, envía. sino vuelve a esperar 60 segundos y vuelve a comprobar.

Los 60 segundos de espera de nuestra tarea podría ser otro valor, por ejemplo 30... también habíamos probado con 1 segundo pero en ese caso consumía muchos recursos y no hace falta. mientras se despierte una vez cada minuto creo que ya está bien

Neftali [Germán.Estévez] 08-05-2025 09:57:01

Creo que os estáis liando con el tema de tiempos.
Lo que tiene que esperar 60 segundos son los envíos, no un registro de facturación para ser enviado.
Un Registro de Facturación puede enviarse 1 sg. después de haberse generado (siempre que en los últimos 60 sg. no hayas hecho un envío).

rci 08-05-2025 10:00:06

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 564359)
Creo que os estáis liando con el tema de tiempos.
Lo que tiene que esperar 60 segundos son los envíos, no un registro de facturación para ser enviado.
Un Registro de Facturación puede enviarse 1 sg. después de haberse generado (siempre que en los últimos 60 sg. no hayas hecho un envío).

Exactamente

bmfranky 08-05-2025 10:04:13

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 564356)
Nosotros lo tenemos igual.

Código:

12:00:00 se genera Primer* envío (vacio); AEAT contesta con 60 sg. de espera <<<<------ A partir de este, no seria mas eficiente para los recursos del sistema, comprobar si no hay cola y
                                                                                                                no enviar nada, simplemente quedar a la espera del siguiente envió  predefinido de la anterior respuesta?
 12:01:00 Si cola vacía, se espera 60 sg.

12:01:10 Generamos factura 1
 12:01:45 Generamos factura 2
12:02:00 se genera envío (2 facturas); AEAT contesta con 60 sg. de espera
12:03:00  Si cola vacía, se espera 60"
12:03:10 Generamos factura 3
12:03:20 Generamos factura 4
12:03:30 Generamos factura 5
12:03:40 Generamos factura 6
12:03:50 Generamos factura 7
12:04:00 se genera envío (5 facturas); AEAT contesta con 120 sg. de espera
12:06:00 se genera envío (vacio); AEAT contesta con 120 sg. de espera
12:08:00 se genera envío (vacio); AEAT contesta con 120 sg. de espera
12:09:50 Generamos factura 8
12:10:00 se genera envío (1 factura); AEAT contesta con 60 sg. de espera
12:11:00 se genera envío (vacio); AEAT contesta con 60 sg. de espera
...


Creo que seria mas eficiente para los recursos, comprobar si hay algo que enviar, si no lo hay volver a esperar el tiempo inicial de 60", no ir enviando consultas a la aeat, cada minuto por que si, no creéis?



*El primer envío es el de puesta en marcha del servicio.

rci 08-05-2025 10:13:02

Cita:

Empezado por bmfranky (Mensaje 564361)
Creo que seria mas eficiente para los recursos, comprobar si hay algo que enviar, si no lo hay volver a esperar el tiempo inicial de 60", no ir enviando consultas a la aeat, cada minuto por que si, no creéis?

Si, yo tampoco entiendo a que te refiere exactamente neftali con
Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 564356)
se genera envío (vacio); AEAT contesta con 60 sg. de espera

Si no hay registros pendientes de envío ya no se envía nada y AEAT no contesta no?

Jarogo08 08-05-2025 10:45:41

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 564359)
Creo que os estáis liando con el tema de tiempos.
Lo que tiene que esperar 60 segundos son los envíos, no un registro de facturación para ser enviado.
Un Registro de Facturación puede enviarse 1 sg. después de haberse generado (siempre que en los últimos 60 sg. no hayas hecho un envío).


Exactamente + 2

Jarogo08 08-05-2025 10:49:53

Cita:

Empezado por rci (Mensaje 564363)
Si, yo tampoco entiendo a que te refiere exactamente neftali con "se genera envío (vacio); AEAT contesta con 60 sg. de espera"

Si no hay registros pendientes de envío ya no se envía nada y AEAT no contesta no?


A mí también me descolocó esa frase, jeje. Si no hay registros pendientes yo no envío nada, espero a que vuelva a saltar el timer (cuya frecuencia es la que marcó el último envío, que puede ser del día anterior por ejemplo)

Neftali [Germán.Estévez] 08-05-2025 11:23:30

Cita:

Empezado por bmfranky (Mensaje 564361)
Creo que seria mas eficiente para los recursos, comprobar si hay algo que enviar, si no lo hay volver a esperar el tiempo inicial de 60", no ir enviando consultas a la aeat, cada minuto por que si, no creéis?
*El primer envío es el de puesta en marcha del servicio.

No lo había puesto para simplificar.
Cuando aparece "se genera envío (vacío)" realmente el sistema no envía. El sistema ve que no hay nada que enviar y no conecta.
He añadido la nota en el mensaje anterior.

Neftali [Germán.Estévez] 08-05-2025 11:26:37

Cita:

Empezado por rci (Mensaje 564363)
Si, yo tampoco entiendo a que te refiere exactamente neftali con
Si no hay registros pendientes de envío ya no se envía nada y AEAT no contesta no?

Si es correcto.
Lo he puesto así para mantener la uniformidad.

Cuando dice que hace "se genera envío (vacio);" significa que no hace envío.
Voy a editar el mensaje anterior.

Neftali [Germán.Estévez] 08-05-2025 11:35:51

Reescrito quedaría así (a ver si se entiende mejor...)

Código:

Inicio sistema (no habrá nada)
...
12:00:00 Se prepara envío (como es vacio, no se envía NADA);  60 sg. de espera
12:01:00 Se prepara envío (como es vacio, no se envía NADA);  60 sg. de espera
12:01:10 Generamos factura 1
12:01:45 Generamos factura 2
12:02:00 Se prepara envío (2 facturas en el envío);  60 sg. de espera
12:03:00 Se prepara envío (como es vacio, no se envía NADA);  60 sg. de espera
12:03:10 Generamos factura 3
12:03:20 Generamos factura 4
12:03:30 Generamos factura 5
12:03:40 Generamos factura 6
12:03:50 Generamos factura 7
12:04:00 Se prepara envío (5 facturas en el envío); AEAT contesta con 120 sg. de espera
12:06:00 Se prepara envío (como es vacio, no se envía NADA); 120 sg. de espera
12:08:00 Se prepara envío (como es vacio, no se envía NADA);  120 sg. de espera
12:09:50 Generamos factura 8
12:10:00 Se prepara envío (1 factura en el envío); AEAT contesta con 60 sg. de espera
12:11:00 Se prepara envío (como es vacio, no se envía NADA);  60 sg. de espera
...


Jarogo08 08-05-2025 11:47:59

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 564375)
Reescrito quedaría así (a ver si se entiende mejor...)

Código:

Inicio sistema (no habrá nada)
...
12:00:00 Se prepara envío (como es vacio, no se envía NADA);  60 sg. de espera
12:01:00 Se prepara envío (como es vacio, no se envía NADA);  60 sg. de espera
12:01:10 Generamos factura 1
12:01:45 Generamos factura 2
12:02:00 Se prepara envío (2 facturas en el envío);  60 sg. de espera
12:03:00 Se prepara envío (como es vacio, no se envía NADA);  60 sg. de espera
12:03:10 Generamos factura 3
12:03:20 Generamos factura 4
12:03:30 Generamos factura 5
12:03:40 Generamos factura 6
12:03:50 Generamos factura 7
12:04:00 Se prepara envío (5 facturas en el envío); AEAT contesta con 120 sg. de espera
12:06:00 Se prepara envío (como es vacio, no se envía NADA); 120 sg. de espera
12:08:00 Se prepara envío (como es vacio, no se envía NADA);  120 sg. de espera
12:09:50 Generamos factura 8
12:10:00 Se prepara envío (1 factura en el envío); AEAT contesta con 60 sg. de espera
12:11:00 Se prepara envío (como es vacio, no se envía NADA);  60 sg. de espera
...



Nosotros lo tenemos tal cual, no cambia ni una coma :)

Lo único que añadiría es que cuando salta el proceso, si hay algo para enviar, paramos el timer y lo volvemos a poner en marcha cuando termina. Esto, dependiendo de cuanto tarde en enviar, puede provocar algunos "desajustes". Pongo un ejemplo:

12:00:00 Se prepara envío: como es vacío, no se envía NADA. 60 sg. de espera
12:01:00 Se prepara envío. Aparecieron 5 facturas. Preparo todo, conecto, envío, cojo la respuesta y la proceso. En la respuesta me dicen que el próximo en 60 segundos. Pero imaginemos que esto todo lleva 5 segundos. Por tanto pongo el timer nuevamente en marcha a las 12:01:05
12:02:05 Se prepara envío: como es vacío, no se envía NADA. 60 sg. de espera

Si os fijáis, del primer al segundo envío pasaron 60 segundos, pero del segundo al tercero pasaron 65. Entiendo que si hay poquitas facturas los 5 segundos que puse son exagerados pero si a lo mejor se está haciendo un proceso de facturación masivo y aparecen 90-100 facturas en ese minuto pues el proceso de envío puede llevar tranquilamente 5-10 segundos. O si internet va lento en ese momento, o si el web service tarda algo más de lo normal en responder..

Con esta manera de operar realmente no envío cada 60 segundos, sino que hay unas pequeñas variaciones. Pero bueno, como tenemos el margen de los 240 segundos por ahora no me estoy preocupando por ello.

rci 08-05-2025 11:59:43

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 564375)
Reescrito quedaría así (a ver si se entiende mejor...)

Código:

Inicio sistema (no habrá nada)
...
12:00:00 Se prepara envío (como es vacio, no se envía NADA);  60 sg. de espera
12:01:00 Se prepara envío (como es vacio, no se envía NADA);  60 sg. de espera
12:01:10 Generamos factura 1
12:01:45 Generamos factura 2
12:02:00 Se prepara envío (2 facturas en el envío);  60 sg. de espera
12:03:00 Se prepara envío (como es vacio, no se envía NADA);  60 sg. de espera
12:03:10 Generamos factura 3
12:03:20 Generamos factura 4
12:03:30 Generamos factura 5
12:03:40 Generamos factura 6
12:03:50 Generamos factura 7
12:04:00 Se prepara envío (5 facturas en el envío); AEAT contesta con 120 sg. de espera
12:06:00 Se prepara envío (como es vacio, no se envía NADA); 120 sg. de espera
12:08:00 Se prepara envío (como es vacio, no se envía NADA);  120 sg. de espera
12:09:50 Generamos factura 8
12:10:00 Se prepara envío (1 factura en el envío); AEAT contesta con 60 sg. de espera
12:11:00 Se prepara envío (como es vacio, no se envía NADA);  60 sg. de espera
...


De esta forma se entiende mucho mejor.

Me parece correcto el sistema.

En nuestro caso la tarea despierta siempre cada 60, pero a la práctica los envíos se harían en el mismo momento que este ejemplo de Germán, porque al despertar la tarea busca el valor de tiempo de espera indicado en la última comunicación (TiempoEsperaEnvio) y también la fecha y hora de ese último envío (TimestampPresentacion).
Luego suma el TiempoEsperaEnvio al TimestampPresentacion y compara con la hora actual (del ROA). si ya ha pasado el tiempo, envía, sinó termina la tarea hasta la siguiente iteración, hay un sleep de 60s.

Lo hemos hecho de esta forma, y no haciendo que la tarea espere un tiempo variable para despertar, porque la misma tarea al despertar envía (en procesos separados) registros de facturación de varios OT y he aceptado la posibilidad (supongo que remota o casi inexistente) de que para cada envío (a un OT) la AEAT conteste tiempos de espera distintos, y claro si fuera el caso, siempre esperaria solo el TiempoEsperaEnvio del último envío (del último OT). Imagino que nunca pasará pero por si a caso, tenemos una tabla donde se registra para cada OT el TiempoEsperaEnvio y el TimestampPresentacion del último envío y el servicio lo consulta antes de enviar.

Encontráis algún problema en nuestro planteamiento? a parte de ser un poco mas de trabajo para el desarrollador y alguna conexión a base de datos mas

Muchas Gracias

VJSoftware 09-05-2025 08:41:19

Buenos días. La verdad es que me ha quedado todo claro. Gracias a los intervinientes. Ahora saco otro tema (aunque está relacionado con esto de los envíos) para ver si me echáis una manita.

Supongamos que hago un envío de 10 RF y no tengo internet. Mi servicio de envío se da cuenta del error y marca los 10 RF para volver a enviarlos como un alta con incidencias.

A todo esto, siguen llegando nuevos RF para enviar.

¿Vosotros cómo procedéis?

1.- Seguís haciendo nuevos intentos de envío, que incluyen los 10 primeros RF más todos los nuevos que hayan entrado, marcando el XML como incidencia sucesivamente hasta que entre.

2.- Seguís intentando enviar solamente los primeros 10 RF (como incidencia hasta que entre) y luego enviáis ya el resto de los quedan (también como incidencia por la cuestión de los 240 segundos).

Y otra cuestión, ¿en qué ocasiones vais a avisar al usuario de que algo está pasando? o estáis diseñando un programa que no necesite supervisión y sea capaz de resolver todas las incidencias él solito... Para el caso de TPV's, que la mayoría de las veces hacen facturas simplificadas sin necesidad de cliente ni NIF (que pueden provocar más errores), pocas son las incidencias que se pueden dar salvo cuando hagan una factura (con su cliente y su NIF) que será recapitulativa sí o sí (al menos en mi SIF) y en ese caso, si hay algún problema, insisto, ¿cómo vais a avisar al usuario de la caja de que ha hecho una factura con un NIF erróneo que debe ser subsanada?. Suponiendo que el ordenador que tiene instalado el programa que envía los RF no está a su alcance (tienda con 3 TPV's con un servidor en un despacho).

Jarogo08 09-05-2025 08:53:58

Cita:

Empezado por VJSoftware (Mensaje 564425)
Buenos días. La verdad es que me ha quedado todo claro. Gracias a los intervinientes. Ahora saco otro tema (aunque está relacionado con esto de los envíos) para ver si me echáis una manita.

Supongamos que hago un envío de 10 RF y no tengo internet. Mi servicio de envío se da cuenta del error y marca los 10 RF para volver a enviarlos como un alta con incidencias.

A todo esto, siguen llegando nuevos RF para enviar.

¿Vosotros cómo procedéis?

1.- Seguís haciendo nuevos intentos de envío, que incluyen los 10 primeros RF más todos los nuevos que hayan entrado, marcando el XML como incidencia sucesivamente hasta que entre.

2.- Seguís intentando enviar solamente los primeros 10 RF (como incidencia hasta que entre) y luego enviáis ya el resto de los quedan (también como incidencia por la cuestión de los 240 segundos).

Y otra cuestión, ¿en qué ocasiones vais a avisar al usuario de que algo está pasando? o estáis diseñando un programa que no necesite supervisión y sea capaz de resolver todas las incidencias él solito... Para el caso de TPV's, que la mayoría de las veces hacen facturas simplificadas sin necesidad de cliente ni NIF (que pueden provocar más errores), pocas son las incidencias que se pueden dar salvo cuando hagan una factura (con su cliente y su NIF) que será recapitulativa sí o sí (al menos en mi SIF) y en ese caso, si hay algún problema, insisto, ¿cómo vais a avisar al usuario de la caja de que ha hecho una factura con un NIF erróneo que debe ser subsanada?. Suponiendo que el ordenador que tiene instalado el programa que envía los RF no está a su alcance (tienda con 3 TPV's con un servidor en un despacho).


En nuestro caso, si yo quiero enviar 10 registros y no tengo internet no le actualizo nada, siguen en la tabla de envíos como estaban (pendientes).
Si vuelvo a tener internet por ejemplo 3 horas después, ahí se enviarán esos 10 que siguen pendientes más los X nuevos que aparecieron en esas 3 horas. Eso sí, a la hora de hacer el envío detecto los que tienen más de 240 segundos de los que no y hago 2 envíos. Uno con la cabecera con Incidencia a "S" y otro normal. De esa manera, el envío marcado como incidencia puede llevar 30 registros (los 10 que ya tenía más los 20 que aparecerieron en esas 3 horas - 240 segundos) y el envío marcado como normal puede llevar 5 registros (los que aparecerieron en los últimos 240 segundos de esas 3 horas).


Y en cuento a avisar, no hacemos nada especial. En la pantalla de facturas y tickets, cuando ves la lista, estará el campo con los valores "Correcto"-"Incorrecto"-"Aceptado con errores" y pintado en verde-rojo-amarillo (estilo semáforo). Así, al entrar en la pantalla, verás de manera muy fácil el resultado y todo lo que no sea verde tendrán que ir a él y ver que le pasó

Neftali [Germán.Estévez] 09-05-2025 09:41:06

Cita:

Empezado por VJSoftware (Mensaje 564425)
Supongamos que hago un envío de 10 RF y no tengo internet. Mi servicio de envío se da cuenta del error y marca los 10 RF para volver a enviarlos como un alta con incidencias.

A todo esto, siguen llegando nuevos RF para enviar.
¿Vosotros cómo procedéis?

1.- Seguís haciendo nuevos intentos de envío, que incluyen los 10 primeros RF más todos los nuevos que hayan entrado, marcando el XML como incidencia sucesivamente hasta que entre.
2.- Seguís intentando enviar solamente los primeros 10 RF (como incidencia hasta que entre) y luego enviáis ya el resto de los quedan (también como incidencia por la cuestión de los 240 segundos).

Nosotros separamos en el primer envío los que están con incidencia, que podrían ser:
* Los que fallaron en el primer envío que no había internet
* Y los que se han ido generando posteriormente y tienen antigüedad de más de 240 sg.

Y luego un segundo envío con los que en ese momento están "correctos".

Faneka 09-05-2025 09:44:47

Nosotros tambien, primero se envian los que tuvieron incidencia y luego los nuevos RF creados.

rci 09-05-2025 11:31:14

Cita:

Empezado por Jarogo08 (Mensaje 564427)
En nuestro caso, si yo quiero enviar 10 registros y no tengo internet no le actualizo nada, siguen en la tabla de envíos como estaban (pendientes).
Si vuelvo a tener internet por ejemplo 3 horas después, ahí se enviarán esos 10 que siguen pendientes más los X nuevos que aparecieron en esas 3 horas. Eso sí, a la hora de hacer el envío detecto los que tienen más de 240 segundos de los que no y hago 2 envíos. Uno con la cabecera con Incidencia a "S" y otro normal. De esa manera, el envío marcado como incidencia puede llevar 30 registros (los 10 que ya tenía más los 20 que aparecerieron en esas 3 horas - 240 segundos) y el envío marcado como normal puede llevar 5 registros (los que aparecerieron en los últimos 240 segundos de esas 3 horas).

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 564432)
Nosotros separamos en el primer envío los que están con incidencia, que podrían ser:
* Los que fallaron en el primer envío que no había internet
* Y los que se han ido generando posteriormente y tienen antigüedad de más de 240 sg.

Y luego un segundo envío con los que en ese momento están "correctos".

Cita:

Empezado por Faneka (Mensaje 564433)
Nosotros tambien, primero se envian los que tuvieron incidencia y luego los nuevos RF creados.

Anda y porque lo separáis en dos envíos? Hay alguna parte de la ley que lo diga?

en nuestro caso, todos los registros pendientes se ponen en el mismo paquete, marcando incidencia porque algunos de los registros están "fuera de plazo" y se envían todos juntos.

A parte, si separáis en dos envíos para no marcar los dos como incidencia, el siguiente envío será como mínimo 60 segundos mas tarde y podría ser que en ese momento ya también estuviera "fuera de plazo" y tuvierais que marcar también incidencia. No le veo motivo suficiente para separarlo en dos.

Gracias

ermendalenda 09-05-2025 11:37:00

En la cabecera del envío es donde se marca si es invidenca y debes enviar todo lo que tengas, los que habías marcados y los que están en hora.
Si lo haces de otra forma ten en cuenta que:
1.Los envíos deben hacerse en orden cronológico de generación .
2. Si mandas un lote solo con las incidencias tienes que volver a esperar el minuto con lo cual, probablemente cuando vayas a mandar el siguiente lote vuelva a estar fuera de hora, y además detectará que tendrás registros generados antes del envío de las incidencias que tendrás que haber mandado, ya que tienes que enviar todos los que cumplan el requisito de haber pasado el tiempo[t].
En resumen todo lo que tengas después del tiempo[t] lo tienes que enviar sí o sí e el mismo lote como incidencia

Jarogo08 09-05-2025 11:49:12

Cita:

Empezado por rci (Mensaje 564436)
Anda y porque lo separáis en dos envíos? Hay alguna parte de la ley que lo diga?

en nuestro caso, todos los registros pendientes se ponen en el mismo paquete, marcando incidencia porque algunos de los registros están "fuera de plazo" y se envían todos juntos.

A parte, si separáis en dos envíos para no marcar los dos como incidencia, el siguiente envío será como mínimo 60 segundos mas tarde y podría ser que en ese momento ya también estuviera "fuera de plazo" y tuvierais que marcar también incidencia. No le veo motivo suficiente para separarlo en dos.

Gracias


Porque un envío va marcado como incidencia (con sus registros) y el otro no (con sus registros). Pero me acabo de dar cuenta que no estoy esperando los 60 segundos entre los dos envíos: salta el servicio, reviso los registros pendientes que hay, y si hay X "antiguos" e Y "nuevos" genero y mando los 2 envíos (sin separarlos los 60 segundos, van uno a continuación del otro).
Entiendo que esto es algo especial y no debería darse muy a menudo, pero igual le tengo que echar un vistazo. Igualmente, los 2 envíos entran sin problema

rci 09-05-2025 11:51:16

Cita:

Empezado por ermendalenda (Mensaje 564437)
En la cabecera del envío es donde se marca si es invidenca y debes enviar todo lo que tengas, los que habías marcados y los que están en hora.
Si lo haces de otra forma ten en cuenta que:
1.Los envíos deben hacerse en orden cronológico de generación .
2. Si mandas un lote solo con las incidencias tienes que volver a esperar el minuto con lo cual, probablemente cuando vayas a mandar el siguiente lote vuelva a estar fuera de hora, y además detectará que tendrás registros generados antes del envío de las incidencias que tendrás que haber mandado, ya que tienes que enviar todos los que cumplan el requisito de haber pasado el tiempo[t].
En resumen todo lo que tengas después del tiempo[t] lo tienes que enviar sí o sí e el mismo lote como incidencia

Así es como lo hacemos nosotros, por eso me extraña los tres compañeros que han comentado que separan en dos envíos.
No se si está bien o mal pero no veo el motivo.

espinete 09-05-2025 11:52:30

Nosotros marcamos la cabecera con Incidencia si en el bloque que se va a enviar hay al menos un RF fuera de tiempo. Aunque el resto no lo estén.

¿Por qué?

Porque puedo :D

En realidad es por lo que si no, pasa lo que pone ermendalenda en el post anterior. Además de que se me complicaba demasiado el algoritmo en un software multi-tenant en la nube.

espinete 09-05-2025 11:55:45

Cita:

Empezado por rci (Mensaje 564440)
Así es como lo hacemos nosotros, por eso me extraña los tres compañeros que han comentado que separan en dos envíos.
No se si está bien o mal pero no veo el motivo.

El motivo probablemente es por la duda de si es correcto o no enviar RF en un bloque con incidencia si realmente esos RF concretos no tienen incidencia pero otros sí. Yo también tuve esa duda hace unas semanas, pero decidí enviar un solo bloque y no dos.

Entiendo que como la Incidencia va en la cabecera, significa que hace referencia al BLOQUE, no a un RF concreto, por lo que ya es cosa de ellos analizar el bloque. Simplemente les estás diciendo que "en este bloque hay alguna incidencia", no que todo el bloque la tenga.
Así lo entiendo yo. Otra cosa es que Hacienda ahora se reúna un viernes por la noche en un bar y decidan cambiar las cosas 3 días antes del 1 de Enero :rolleyes:

Jarogo08 09-05-2025 11:58:18

Cita:

Empezado por espinete (Mensaje 564441)
Nosotros marcamos la cabecera con Incidencia si en el bloque que se va a enviar hay al menos un RF fuera de tiempo. Aunque el resto no lo estén.

Cita:

Empezado por espinete (Mensaje 564442)
El motivo probablemente es por la duda de si es correcto o no enviar RF en un bloque con incidencia si realmente esos RF concretos no tienen incidencia pero otros sí. Yo también tuve esa duda hace unas semanas, pero decidí enviar un solo bloque y no dos.


¿alguien hizo la consulta? ¿quien se anima? :rolleyes:

rci 09-05-2025 12:11:27

Cita:

Empezado por Jarogo08 (Mensaje 564443)
¿alguien hizo la consulta? ¿quien se anima? :rolleyes:

A mi me suena algunos posts en otros hilos que ya se hablaba de esto y creo recordar que no había problema para enviar la marca incidencia en la cabecera aunque algún registro de facturación del bloque estuviera dentro de tiempo y por lo tanto a ese RF no le hiciera falta la marca incidencia...

VJSoftware 09-05-2025 14:24:58

Vale. Pues lo voy a hacer de la manera que decís, marcando todo el bloque como incidencia. Entiendo que si nos tiramos dos días sin internet, por la razón que sea, puede ser que se nos junten más de 1000 registros y entonces habrá que hacer dos bloques y marcarlos ambos como incidencia.

Resuelto. Muchas gracias.

No habéis abundado en lo de informar al usuario, suponemos entonces que alguien de la empresa podrá mirar los RF y ver el estado de su envío y tomar las decisiones que sean (subsanarlos, anularlos o simplemente volver a enviarlos). Madre del amor hermoso, esto va ser una auténtica locura con la cantidad de usuarios que tengo que no tienen ni idea de nada....Creo que el precio de los contratos de mantenimiento se va a multiplicar por 3. De verdad, con 60 tacos que tengo, tener que meterme ahora en esto...en fin.

Jarogo08 09-05-2025 14:33:55

Yo lancé la consulta, a ver si me confirman que en un envío marcado como incidencias pueden ir registros que no son incidencias. Cuando me respondan lo pongo aquí


La franja horaria es GMT +2. Ahora son las 10:49:37.

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