Autor Tema: Ayuda con procedimiento  (Leído 3309 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Jeronimo

  • Gigabyte
  • ****
  • Mensajes: 402
  • Reputación: +33/-2
    • Ver Perfil
Ayuda con procedimiento
« en: Julio 15, 2013, 02:20:43 pm »
Buenas...
Estoy con un sistema de una empresa donde se cobran cuotas por realizar actividades, o cuotas sociales (tipo club).
Cada actividad (son actividades de realización periódica) tiene una cuota que puede vencer en fecha diferente de otra, o incluso las cuotas sociales pueden vencer en otra fecha.
¿Cómo me conviene hacer la gestión de cuotas y vencimientos?
Había pensado tener una tabla "cuotas" con los campos "periodocuota", "socio", "importe" y "fechapago", por ejemplo. Entonces, aquí viene mi duda. ¿Cómo sabe el sistema que la cuota está vencida?
Me explico mejor (creo). Podría hacer una de las siguientes dos cosas:
1) Un procedimiento que al iniciar el sistema verifique todas las cuotas (de todos los socios) que debieran estar pagas a la fecha y no lo están, y las agregue a la tabla mencionada (obviamente, sin completar la fecha de pago).
2) Esperar que cada socio vaya a pagar y ahí, "en el aire", se calcule la deuda y la cantidad de cuotas impagas.
También les quería preguntar si se puede (y en ese caso, si conviene) hacer el procedimiento 1) con procedimientos almacenados directamente en la base de datos.
¿Cómo lo harían ustedes?
Muchas gracias.

Jerónimo

Waldo

  • Gigabyte
  • ****
  • Mensajes: 264
  • Reputación: +22/-0
    • Ver Perfil
Re:Ayuda con procedimiento
« Respuesta #1 en: Julio 15, 2013, 03:17:03 pm »
te contesto sobre si conviene un procedimiento almacenado.
No se que motor de base de datos vas a usar, las ventajas del procedimiento es que en el momento de crearlo, el motor ya validó las sintaxis y en teoria ya armó un plan de ejecucion que va a usar, entonces en teoria es mejor usar un procedimiento por eso, porque ya esta "compliado" en el servidor, y solo tenes que pasar los parametros.
Lo que tenes que tener en cuenta es que despues, una vez que ya la aplicacion ya está en la calle, si haces alguna modificacion en tu procedimiento, en tu base de desarrollo, tambien tenes que actulizar el procedimiento del cliente, no es solo actualizar el "exe"

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Ayuda con procedimiento
« Respuesta #2 en: Julio 17, 2013, 12:15:47 pm »
Buenas...
Estoy con un sistema de una empresa donde se cobran cuotas por realizar actividades, o cuotas sociales (tipo club).
Cada actividad (son actividades de realización periódica) tiene una cuota que puede vencer en fecha diferente de otra, o incluso las cuotas sociales pueden vencer en otra fecha.
¿Cómo me conviene hacer la gestión de cuotas y vencimientos?
Había pensado tener una tabla "cuotas" con los campos "periodocuota", "socio", "importe" y "fechapago", por ejemplo. Entonces, aquí viene mi duda. ¿Cómo sabe el sistema que la cuota está vencida?
Me explico mejor (creo). Podría hacer una de las siguientes dos cosas:
1) Un procedimiento que al iniciar el sistema verifique todas las cuotas (de todos los socios) que debieran estar pagas a la fecha y no lo están, y las agregue a la tabla mencionada (obviamente, sin completar la fecha de pago).
2) Esperar que cada socio vaya a pagar y ahí, "en el aire", se calcule la deuda y la cantidad de cuotas impagas.
También les quería preguntar si se puede (y en ese caso, si conviene) hacer el procedimiento 1) con procedimientos almacenados directamente en la base de datos.
¿Cómo lo harían ustedes?
Muchas gracias.

Jerónimo

Saludos.
Una vez hice un sistema similar, hace unos 10 años y usaba archivos planos, fue interesante, luego cambie a Access. Bueno yendo a tu tema, no sé si mi recomendación será adecuada para orientarte pero creo que el cálculo de lo que se debe ha de realizarse en el momento, "en el aire" como dices, con la salvedad de que no veo la necesidad de agregarla a ningún lado, solo se agrega (o se agregaría) las "transacciones cerradas" (estamos bravos con la invención de términos je). Me explico mejor:

Tienes estos campos: "periodocuota", "socio", "importe" y "fechapago", presumo que "fechapago" es la fecha limite en la que se debe pagar salvo que la tengas en otra tabla, pero supondré que ese campo es la fecha que debe pagar (tu lo acomodas), entonces haré un nuevo campo "fechacancela" que es el campo donde tendré la fecha en que cancelo la cuota. Si el campo es null quiere decir que aun no paga.

Entonces, con esa estructura, si viene un socio a pagar haré "en el aire" el procedimiento para saber si ese socio esta al día o no (la comparación la haces contra la fecha de sistema o de windows), sino paga no haré nada, no almacenaré nada, el día que venga a pagar volveré a ejecutar el procedimiento y sabré cuantos días de retraso tiene, incluso puedo crear una penalidad por días de retraso. Cuando cancela es que recién meto mano a la tabla.

Si viene un gerente y pide un reporte de todos los socios que adeudan, pues tendré otro query que calcule ese dato, o mejor dicho, que cheque en el campo "fechacancela" las fechas null para mostrarle en el reporte, y si soy mas ficho incluso haré en el query un conteo de días de retraso para ordenar en el reporte por ese campo.
Igual esto no lo grabo, solo la ejecuto porque esa información esta sujeta a comparación en caliente. Ahora, puede darse el caso que un socio no pague nunca, entonces seria un socio moroso y tendrán que definir cuantos días han de pasar para considerar un socio como moroso y en ese caso usaras otra tabla.

Espero no haber enredado mas.

Saludos
Me encuentras en YAcosta.com

Jeronimo

  • Gigabyte
  • ****
  • Mensajes: 402
  • Reputación: +33/-2
    • Ver Perfil
Re:Ayuda con procedimiento
« Respuesta #3 en: Julio 18, 2013, 09:57:26 am »
No se que motor de base de datos vas a usar, las ventajas del procedimiento es que en el momento de crearlo, el motor ya validó las sintaxis y en teoria ya armó un plan de ejecucion que va a usar, entonces en teoria es mejor usar un procedimiento por eso, porque ya esta "compliado" en el servidor, y solo tenes que pasar los parametros.
Lo que tenes que tener en cuenta es que despues, una vez que ya la aplicacion ya está en la calle, si haces alguna modificacion en tu procedimiento, en tu base de desarrollo, tambien tenes que actulizar el procedimiento del cliente, no es solo actualizar el "exe"
Excelente. ¡Gracias!

Saludos.
Tienes estos campos: "periodocuota", "socio", "importe" y "fechapago", presumo que "fechapago" es la fecha limite en la que se debe pagar salvo que la tengas en otra tabla, pero supondré que ese campo es la fecha que debe pagar (tu lo acomodas), entonces haré un nuevo campo "fechacancela" que es el campo donde tendré la fecha en que cancelo la cuota. Si el campo es null quiere decir que aun no paga.
...
Si viene un gerente y pide un reporte de todos los socios que adeudan, pues tendré otro query que calcule ese dato, o mejor dicho, que cheque en el campo "fechacancela" las fechas null para mostrarle en el reporte, y si soy mas ficho incluso haré en el query un conteo de días de retraso para ordenar en el reporte por ese campo.
Exactamente eso pensaba hacer. Pero mi duda es cuándo poner los datos del período, el socio, el importe y la fecha de pago (o de vencimiento, en realidad) en la tabla. ¿Debiera hacerlo el sistema al iniciarse, comprobando qué cuotas vencen (de qué socios) ese día y agregando un registro por cada socio en ese momento? ¿o directamente me convendría no agregar nada hasta que un socio pague, en cuyo caso ingresaría todos los campos de la tabla? De esta última manera no tendría ningún valor NULL en fechacancela y el cálculo de la deuda debiera hacerlo contra la última cuota cancelada.
Operativamente no sé qué camino es mejor seguir. Hasta ahora, de las posibles consultas que se me ocurren, todas pueden hacerse en ambos casos. Pero seguramente se me estén pasando cosas importantes a considerar.
¡Muchas gracias!

Jerónimo

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Ayuda con procedimiento
« Respuesta #4 en: Julio 19, 2013, 12:34:49 am »
Hay varias formas de hacer lo mismo.
Si son cuotas conocidas se las clavas todas al inicio del año a todos los afectados.
Si con cuotas que se van dando lo puedes ejecutar en un procedimiento a todos los socios afectados. Digo esto ultimo por esto:
1.- Cuota de mantenimiento de 10.00, se clava al inicio de cada mes a TODOS los socios sin distincion.
Entonces ejecutas un procedimiento donde agregues ese registro a los N socios que tengas.
Otro caso:
2.- Cuota de Pago de Agua. Supongamos que tienes clasificado a los socios y los socios que usan agua son reconocible digamos con un flag, esta cuota se la aplicas solo a ellos en un procedimiento.
Otro caso:
3.- Pago de Multa por inasistencia a reunion: Esta cuota sera seleccionando a aquellos socios que no asistieron, por ser selectiva a de hacerse a mano por cada uno de ellos pero igual en un solo procedimiento.

Ahora, hacer todo esto al iniciarse el sistema es como automatizarlo y eso es un poco peligroso y tendrías que validar muchas cosas: ¿Que pasa si alguien abre otra instancia?¿Que pasa si ese dia no prendieron el sistema? etc etc, de que se puede se puede hacer (incluso lo hice) pero te curas de espantos si designas esa tarea a alguien para que ejecute dicho procedimiento, de tal manera que se traslada la responsabilidad, es acaso un tema de automatizacion?

Las cuotas que deben pagar los socios se las cargas todas ya sea manual o automático pero se las cargas, lo conveniente es que convengan un dia para soltar ese proceso, no lo hagas cuando venga el socio y recien alli se ejecuten procedimientos para ver cuanto cargarle, no eso no. Acumulale la cuenta a cada socio o aportante.

No se si estamos sintonizados. Nos comentas, saludos.
Me encuentras en YAcosta.com