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)
-   -   Control de flujo (https://www.clubdelphi.com/foros/showthread.php?t=97206)

unomasmas 04-02-2025 07:40:13

Control de flujo
 
Os cuento mi planteamiento por si le veis algún problema

Una vez generada una factura:
  • [A] Si han pasado más de los 60 segundos preceptivos, se intenta enviar. Si surge algún problema de conexión, se añade a la lista de pendientes (si no está ya) y establezco la marca de "Incidencia" para el próximo envío.
  • [b] Si no han pasado los 60 segundos, se añade a la lista de pendientes.
Un proceso se encarga de mirar cada X tiempo (no tengo claro cuánto ha de ser ese X tiempo) si hay facturas pendientes. Aquí distingo también dos circunstancias:
  • [C] Si hay marca de incidencia, no se intenta la remisión (para evitar trabajo inútil). Se intentará la remisión aprovechando el envío de una nueva factura (estaríamos en el punto [A] de nuevo) o, en último caso, al cerrar la sesión.
  • [D] Si no hay marca de incidencia, se intenta la remisión (volvemos al punto [A]).

newtron 04-02-2025 09:40:06

Buenos días compañero.


No lo veo claro. El sistema (a mi forma de ver) es:


- Genero factura y la pongo directamente en la cola de facturas a enviar. Puede que no haya ninguna o puede que haya alguna pendiente de envío por lo que esta se agregaría a ese paquete.
- Se envía el paquete de posibles facturas pendientes, se recoge el tiempo a esperar para el siguiente envío, se vuelve a poner el programa en modo espera y se evalúan los resultados del último envío.

- Las facturas ok se olvidan y luego habrá que manejar manualmente las rechazadas porque casi con toda seguridad necesitarán una factura rectificativa.


Saludos.

Logan05 04-02-2025 10:25:20

Cita:

Empezado por newtron (Mensaje 561695)
Buenos días compañero.


No lo veo claro. El sistema (a mi forma de ver) es:


- Genero factura y la pongo directamente en la cola de facturas a enviar. Puede que no haya ninguna o puede que haya alguna pendiente de envío por lo que esta se agregaría a ese paquete.
- Se envía el paquete de posibles facturas pendientes, se recoge el tiempo a esperar para el siguiente envío, se vuelve a poner el programa en modo espera y se evalúan los resultados del último envío.

- Las facturas ok se olvidan y luego habrá que manejar manualmente las rechazadas porque casi con toda seguridad necesitarán una factura rectificativa.


Saludos.

El planteamiento me parece bien, pero en el momento de hacer el siguiente envío habrá comprobar que las nuevas añadidas a la cola no se hayan pasado de tiempo, porque si es así habría que marcarlas como incidencia aún antes de enviarlas ¿no?

newtron 04-02-2025 11:43:30

Cita:

Empezado por Logan05 (Mensaje 561700)
El planteamiento me parece bien, pero en el momento de hacer el siguiente envío habrá comprobar que las nuevas añadidas a la cola no se hayan pasado de tiempo, porque si es así habría que marcarlas como incidencia aún antes de enviarlas ¿no?


Pues "ahímasdao". De forma normal las nuevas que se vayan añadiendo a la cola entrarán en tiempo y si no lo hacen es porque el servidor en la respuesta anterior haya enviado un tiempo para el siguiente envío superior a los 2 minutos. La verdad es que no sé si en caso de pasar del tiempo por instrucciones del servidor habría que enviarlas como incidencia o no. Buena cuestión para preguntar a soporte de Verifactu.


Saludos.

unomasmas 05-02-2025 08:36:26

Cita:

Empezado por Logan05 (Mensaje 561700)
El planteamiento me parece bien, pero en el momento de hacer el siguiente envío habrá comprobar que las nuevas añadidas a la cola no se hayan pasado de tiempo, porque si es así habría que marcarlas como incidencia aún antes de enviarlas ¿no?

Date cuenta de que cuando se genera una factura esta se envía inmediatamente (vamos, se intenta enviar). Si no hay nada en cola, se envía sóla y no hay problema; si hay más en cola porque todavía no han pasado los 60 segundos desde el último envío, se envía con las demás (dentro del plazo); sólo si las otras que están en cola lo están porque hubo una incidencia, como la incidencia afecta a todo el paquete, esta última añadida se enviará junto con las otras con la marca de incidencia (aunque teóricamente estuviera en plazo)

unomasmas 05-02-2025 08:45:03

Cita:

Empezado por newtron (Mensaje 561695)
Buenos días compañero.


No lo veo claro. El sistema (a mi forma de ver) es:


- Genero factura y la pongo directamente en la cola de facturas a enviar. Puede que no haya ninguna o puede que haya alguna pendiente de envío por lo que esta se agregaría a ese paquete.
- Se envía el paquete de posibles facturas pendientes, se recoge el tiempo a esperar para el siguiente envío, se vuelve a poner el programa en modo espera y se evalúan los resultados del último envío.

- Las facturas ok se olvidan y luego habrá que manejar manualmente las rechazadas porque casi con toda seguridad necesitarán una factura rectificativa.


Saludos.

Gracias newtron.

Creo que la idea es más o menos la misma. Yo decía que genero la factura y la envío pero en realidad lo que hago es ponerla en el paquete para enviar junto con otras posibles (las que puedan estar porque cuando se emitieron no había pasado el tiempo preceptivo de espera). En fin, los envíos se hacen cada X tiempo (por si hubiera alguna en la cola) y también inmediatamente tras la generación (si no ha pasado el tiempo entonces se pone en el paquete de cola). En cualquier caso, con cada envío se procesa todo el paquete.

unomasmas 05-02-2025 08:50:55

Cita:

Empezado por newtron (Mensaje 561703)
Pues "ahímasdao". De forma normal las nuevas que se vayan añadiendo a la cola entrarán en tiempo y si no lo hacen es porque el servidor en la respuesta anterior haya enviado un tiempo para el siguiente envío superior a los 2 minutos. La verdad es que no sé si en caso de pasar del tiempo por instrucciones del servidor habría que enviarlas como incidencia o no. Buena cuestión para preguntar a soporte de Verifactu.


Saludos.

Yo creo que esto es complicar demasiado el asunto. Me parece que la idea de "incidencia" sólo sirve para tomar en consideración la situación de envío fuera de tiempo. Que un paquete vaya marcado con incidencia servirá para tomar nota de las facturas que vayan fuera de tiempo pero no implica que en ese paquete no vayan facturas a tiempo.

De otra forma, el lío se propaga. Tenemos facturas con incidencia que podemos enviar y a la vez hemos generado algunas dentro de tiempo que no deberían ir con incidencia, pero ¿Hemos de comprobar cada una de las generadas para ver si entran en el paquete de incidencia o no? Vale, lo hacemos así y una queda fuera pero como hemos enviado el paquete con incidencia, hemos de esperar otros 60 segundos, por lo que esa que dejamos fuera, que no enviamos porque no cumplía con los requisitos de incidencia, resulta que cuando la vayamos a enviar ya está fuera de plazo y deberíamos marcar incidencia para ella. Me parece mucha, muchísima complicación añadida a lo complicado que resulta ya tener que controlar el flujo...

Logan05 05-02-2025 08:51:05

Cita:

Empezado por unomasmas (Mensaje 561731)
Date cuenta de que cuando se genera una factura esta se envía inmediatamente (vamos, se intenta enviar). Si no hay nada en cola, se envía sóla y no hay problema; si hay más en cola porque todavía no han pasado los 60 segundos desde el último envío, se envía con las demás (dentro del plazo); sólo si las otras que están en cola lo están porque hubo una incidencia, como la incidencia afecta a todo el paquete, esta última añadida se enviará junto con las otras con la marca de incidencia (aunque teóricamente estuviera en plazo)

Como es lógico estoy planteando el tema con paquetes, y yo me refiero a si la factura se pasa de plazo mientras está en la cola. ¿habría que marcarla antes de ser enviada? eso implicaría que hay que revisar si o si el paquete antes de enviarlo, imagina que hay una demora porque (por lo que sea) te dan un plazo de envío de 5 minutos, o 7, o una hora, es una incógnita.

bmfranky 05-02-2025 09:13:24

Tiempo de espera.
 
Hola, lo de incidencia por tiempo de envio, no lo tengais tan en cuenta para las facturas en un mismo registro de envio, al recibir el paquete, ellos desglosan cada factura y saben por el timestamp cual estaba fuera de tiempo, no diran nada por ello, es mas el tiempo de envio es lo unico que esta exento de subsanacion, lo unico que quieren evitar es que la gente se acostumbre a hacer las facturas y enviarlas cuando se les ocurra, por eso ponen un tiempo, pero realmente no lo tienen en cuenta, es mas desde el principio , al enviar debugeando las facturas he tenido varias facturas con el error 2004, y tras diversas consultaas de mi parte y de otros compañeros, nos confirmaron que no necesita subsanacion.
Otra cosa seria que todos los envios de nuestro SIF, fueran marcados con incidencia, supongo que ahi si tendriamos algun problemilla.
Tened en cuenta que al responder el tiempo de espera, la operativa es:
1-> Esperar t Segundos o.
2-> Reunir 1000 registros.
Lo que se alcance primero.


Desde mi punto de vista, crearia una cola de envio automatizada que cada x segundos(o 1000 registros) ,por ejemplo 100", realizara el envio, si hay algun error* , activo el flag de incidencia y continuo agregando registros, la cola deveria intentar el reenvio automaticamente, en el momento que se hayan enviado todos los registros o el primer elemento a enviar este dentro de la franja de 120", se desactiva automaticamente el flag y se continuan enviando los mismos sin incidencia.


*Aqui habria que tener en cuenta que causo el error , para implementar la solucion y notificar la causa de la incidencia a la aeat, no es lo mismo, que el servidor de ellos no responda, que nosotros no tengamos internet, que se fuera la luz en pleno envio, que conteste duplicado...


Aunque yo no tengo previsto implementar la cola, de momento, puesto que en mi caso , si hoy no puedo hacer factura, perfectamente puedo cobrarle al cliente y enviar a fin de mes la misma, sin problemas.

Neftali [Germán.Estévez] 05-02-2025 12:37:58

Cita:

Empezado por unomasmas (Mensaje 561731)
Date cuenta de que cuando se genera una factura esta se envía inmediatamente (vamos, se intenta enviar).

O me estoy perdiendo algo, a esto os va a dar errores.
1) Generáis 2 facturas con una diferencia de tiempo de 20 segundos y el tiempo que está devolviendo la AEAT para esperar entre envíos es de 60 sg. (por defecto)
2) Si intentáis enviar la facturas inmediatamente después de su generación, váis a tener problemas.

¿Es correcto?

ermendalenda 05-02-2025 12:47:38

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 561738)
O me estoy perdiendo algo, a esto os va a dar errores.
1) Generáis 2 facturas con una diferencia de tiempo de 20 segundos y el tiempo que está devolviendo la AEAT para esperar entre envíos es de 60 sg. (por defecto)
2) Si intentáis enviar la facturas inmediatamente después de su generación, váis a tener problemas.

¿Es correcto?

Sí, veo que hay demasiada gente que no entiende el control de flujos y lo interpreta mal
Esto me lleva a la conclusión de que va a ser tal el lío que no temdran mas remedio que abrir la.manoy permitir los envios antes de tiempo entre otras cuesriones. Sii no no van a tener capacidad de absorber esto

bmfranky 05-02-2025 14:27:06

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 561738)
O me estoy perdiendo algo, a esto os va a dar errores.
1) Generáis 2 facturas con una diferencia de tiempo de 20 segundos y el tiempo que está devolviendo la AEAT para esperar entre envíos es de 60 sg. (por defecto)
2) Si intentáis enviar la facturas inmediatamente después de su generación, váis a tener problemas.

¿Es correcto?

Cita:

Empezado por ermendalenda (Mensaje 561739)
Sí, veo que hay demasiada gente que no entiende el control de flujos y lo interpreta mal
Esto me lleva a la conclusión de que va a ser tal el lío que no temdran mas remedio que abrir la.manoy permitir los envios antes de tiempo entre otras cuesriones. Sii no no van a tener capacidad de absorber esto

Hola, os doy y os quito la razon, :rolleyes:
No es lo mismo, facturar las facturas una a una que por "bala" que seas, te da igual esperar 1 minuto, es mas o menos lo que tardas en introducir los datos , previsualiza y demas, que como vosotros gestionar un multi puesto que en 20" te pueden generar 10 facturas o mas, si es una caja que coje los datos de un codigo de barras y los asigna en decimas de segundo, ya me diras, entonces, no es la misma forma de plantear el control de flujo.
En mi caso es el siguiente, enpiezo a facturar realizo una consulta a la aeat para ver que este el servidor activo sino saco un mensaje para realizar una proforma y cuando haya conexion facturar y enviar, relleno lo necesario e intento enviar la factura, si todo OK, inicializo un timer con un flag que me impide enviar nada hasta que pasen los t segundos que devolbio hacienda.
Hasta el momento , incluso con las pruebas moñas tardo unos 45" en selecionar el tipo de factura, introducir algo en la mas sencilla que es un F2, previsualizar y enviar que en mi caso lo he dividido en 2 modulos independientes , y proceder el envio, esperar 15" mas no es problema, "OJO EN MI CASO".
En vuestro caso , si o si, se deve implementar un gestor de envios independiente, que solo recoja las facturas que se le pasen , encadenadas o encadenandolas el, haga los intentos de envio y demas gestiones, sin asistencia del usuario, exceptuando fallos catastroficos, diria yo.


A mi se me ocurre , por ejemplo:


Se inicia el servicio:
1 -> Contadores de tiempo, incidencias etc a 0, false, primer envio true, etc...
2 -> Consulta a la tabla en la que se insertan los registros de facturas, abonos, restificativas ,etc a enviar.(esta consulta se realiza periodicamente cada 1" por ejemplo

->no vacia y primer envio a true, se hace consulta a aeat , asignando fecha y registro del primer envio en cola , se compruban todos los registros, descartan los ya enviados si los
hay , se realizan las diversas comprobaciones para ver si los registros de la bbdd coinvciden con los de la aeat, se envia los restantes con incidencia si timestamp superior a actual
+120".
->no vacia y tiempo de espera =0 o 1000 registros, envio inmediato. se pone el contador = a tiempo devuelto + 50 segundos.
-> tiempo de espera --1;
3 -> se van apilando, desapilando los registros segun sea necesario y se repite sucesivamente el punto 2.


Para apagar el servicio, se intenta primero vaciar la cola pendiente y luego se deja apagar.

Estoy equivocado en mi planteamiento?

ermendalenda 05-02-2025 14:32:37

Cita:

Empezado por bmfranky (Mensaje 561744)
Hola, os doy y os quito la razon, :rolleyes:
No es lo mismo, facturar las facturas una a una que por "bala" que seas, te da igual esperar 1 minuto, es mas o menos lo que tardas en introducir los datos , previsualiza y demas, que como vosotros gestionar un multi puesto que en 20" te pueden generar 10 facturas o mas, si es una caja que coje los datos de un codigo de barras y los asigna en decimas de segundo, ya me diras, entonces, no es la misma forma de plantear el control de flujo.
En mi caso es el siguiente, enpiezo a facturar realizo una consulta a la aeat para ver que este el servidor activo sino saco un mensaje para realizar una proforma y cuando haya conexion facturar y enviar, relleno lo necesario e intento enviar la factura, si todo OK, inicializo un timer con un flag que me impide enviar nada hasta que pasen los t segundos que devolbio hacienda.
Hasta el momento , incluso con las pruebas moñas tardo unos 45" en selecionar el tipo de factura, introducir algo en la mas sencilla que es un F2, previsualizar y enviar que en mi caso lo he dividido en 2 modulos independientes , y proceder el envio, esperar 15" mas no es problema, "OJO EN MI CASO".
En vuestro caso , si o si, se deve implementar un gestor de envios independiente, que solo recoja las facturas que se le pasen , encadenadas o encadenandolas el, haga los intentos de envio y demas gestiones, sin asistencia del usuario, exceptuando fallos catastroficos, diria yo.


A mi se me ocurre , por ejemplo:


Se inicia el servicio:
1 -> Contadores de tiempo, incidencias etc a 0, false, primer envio true, etc...
2 -> Consulta a la tabla en la que se insertan los registros de facturas, abonos, restificativas ,etc a enviar.(esta consulta se realiza periodicamente cada 1" por ejemplo

->no vacia y primer envio a true, se hace consulta a aeat , asignando fecha y registro del primer envio en cola , se compruban todos los registros, descartan los ya enviados si los
hay , se realizan las diversas comprobaciones para ver si los registros de la bbdd coinvciden con los de la aeat, se envia los restantes con incidencia si timestamp superior a actual
+120".
->no vacia y tiempo de espera =0 o 1000 registros, envio inmediato. se pone el contador = a tiempo devuelto + 50 segundos.
-> tiempo de espera --1;
3 -> se van apilando, desapilando los registros segun sea necesario y se repite sucesivamente el punto 2.


Para apagar el servicio, se intenta primero vaciar la cola pendiente y luego se deja apagar.

Estoy equivocado en mi planteamiento?

Hola Bmfranky.
Has tenido en cuenta si te devuelven 3600segundos de espera? Por que he visto que hay gente que np
El problema es que muchos proponen enviar la factura inmediatamente aunque tengan que esperar.

bmfranky 05-02-2025 14:39:50

Cita:

Empezado por ermendalenda (Mensaje 561745)
Hola Bmfranky.
Has tenido en cuenta si te devuelven 3600segundos de espera?

Ya te digo yo , que 3600 segundos no te van a devolver, el tiempo de espera, lo han introducido para que no enviemos cada 20" 1 registro, 1 al minuto, 1 a la hora, no van ni a mirarlo, tiempo al tiempo, con ello, no es logico que ellos mismos generen incidencias de envio por el timestamp.
Ademas si nos devuelven 1 hora , pues o habreis llegado al limite de 1000 registros o se envia como incidencia.
Ya querria yo tener el problema de terminar 12 coches al dia y no poder facturarlos, por el tiempo de envio :D:D:D

ermendalenda 05-02-2025 14:43:26

Cita:

Empezado por bmfranky (Mensaje 561746)
Ya te digo yo , que 3600 segundos no te van a devolver, el tiempo de espera, lo han introducido para que no enviemos cada 20" 1 registro, 1 al minuto, 1 a la hora, no van ni a mirarlo, tiempo al tiempo, con ello, no es logico que ellos mismos generen incidencias de envio por el timestamp.
Ademas si nos devuelven 1 hora , pues o habreis llegado al limite de 1000 registros o se envia como incidencia.
Ya querria yo tener el problema de terminar 12 coches al dia y no poder facturarlos, por el tiempo de envio :D:D:D

Bueno, esa decisión digo yo que será cuestión de los parámetros que ellos tengan. Por que si esransaturados y deciden eso para todos se puede liar gorda si nadie hace caso al control de flujos u todos han optado por tener 1 minuto

bmfranky 05-02-2025 14:45:35

t Segundos de espera.
 
Cita:

Empezado por ermendalenda (Mensaje 561747)
Bueno, esa decisión digo yo que será cuestión de los parámetros que ellos tengan. Por que si esransaturados y deciden eso para todos se puede liar gorda si nadie hace caso al control de flujos u todos han optado por tener 1 minuto

Ojo, @elmendalenda, yo no he dicho 1 minuto yo siempre hago referencia a los t segundos que ellos devuelven, igual en vez de se 60" , son 20", porque ven que tus envios son muy espaciados...

Neftali [Germán.Estévez] 05-02-2025 15:19:42

Cita:

Empezado por bmfranky (Mensaje 561746)
Ya te digo yo , que 3600 segundos no te van a devolver, el tiempo de espera, lo han introducido para que no enviemos cada 20" 1 registro, 1 al minuto, 1 a la hora, no van ni a mirarlo, tiempo al tiempo, con ello, no es logico que ellos mismos generen incidencias de envio por el timestamp.


Yo creo que de normal no van a cambiar los tiempos, pero me da que esta opción está pensada para evirtar sobrecargas en sus servidores.
Estoy pensando en momentos puntuales (final de mes) que la gente genere muchas facturas (o muchas empresas generándolas).

Con esto minimizas las peticiones realizadas a sus servidores.


Si cada 60 sg. tienes 100.000 peticiones, basta con enviar 120 sg. para tener la mitad o 240 sg. para tener un a cuarta parte (con el doble/cuadruple de facturas, eso si, pero no es lo mismo).

ermendalenda 05-02-2025 16:56:48

Bmfranky

Acabo de releer tu mensaje de control de flujos y creo que haces un control de flujos lógico según el requerimiento, pero me ha liado cuando has puesto que estabas en acuerdo y desacuerdo. No entiendo en qué pinto tienes el desacuerdo.
El problema es que hay posta anteriores en que proponen un control de flujos no acorde a los tiempos (t)

bmfranky 05-02-2025 17:02:45

Cita:

Empezado por ermendalenda (Mensaje 561754)
Acabo de releer esto y creo que haces un control de flujos lógico según el requerimiento, pero me ha liado cuando has puesto que estabas en acuerdo y desacuerdo. No entiendo en qué pinto tienes el desacuerdo.
El problema es que hay posta anteriores en que proponen un control de flujos no acorde a los tiempos (t)

No, de acuerdo, estoy de acuerdo en todo, he dicho que os daba y quitaba la razon, es que no me gusta darle la razon a nadie "Es broma".:cool:
A lo que me referia es que indicais que la forma de gestionar las facturas es incorrecto si no se crea un gestor de envios, que tenga en cuenta los tiempos y demas, y "Personalmente" indico que para un SIF monopuesto y con un bajo nivel de facturacion , no es necesario, solo eso, no es que este encontra de lo que indicais , ni me parezca, mal ni nada de eso, si lo ha parecido , me disculpo.^\||/

bmfranky 05-02-2025 17:06:36

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 561750)
Yo creo que de normal no van a cambiar los tiempos, pero me da que esta opción está pensada para evirtar sobrecargas en sus servidores.
Estoy pensando en momentos puntuales (final de mes) que la gente genere muchas facturas (o muchas empresas generándolas).

Con esto minimizas las peticiones realizadas a sus servidores.


Si cada 60 sg. tienes 100.000 peticiones, basta con enviar 120 sg. para tener la mitad o 240 sg. para tener un a cuarta parte (con el doble/cuadruple de facturas, eso si, pero no es lo mismo).

La verdad es que siguiendo el ejemplo que me indicabas, pongamos que simplemente, para algunos en vez de 60" voy indicando caja 100 "*Pedidores" un segundo de diferencia,osea a unos 61, 62, 63 , etc.., la atencion por segundo la desplazo a 1000 por segundo que ahi si lo puedo asimilar, por decir algo, osea los descuadran , no necesariamente acia arriba, igual hacia abajo.


*Lo se no seria asi, pero es para que me se me entienda.


La franja horaria es GMT +2. Ahora son las 07:30:06.

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