Author Topic: Problema con Generar Mora desde SQL Server  (Read 16567 times)

0 Members and 1 Guest are viewing this topic.

Offline llAudioslavell

  • Sv Member
  • ***
  • Posts: 126
Problema con Generar Mora desde SQL Server
« on: February 02, 2012, 01:38:49 pm »
Hola a todos ^^ .. ! talves el titulo no sea muy claro, no savia como nombrarlo ....
Bueno  estoy en  un lio !.. . no manejo demasiado SQL .. solo se crear vistas,procedimienmtos almacenados y entre otras cosas mas...... pero con lo que me he topado, la verdad, no tengo ni idea de como hacerlo.... si fuera VisualBasic.NET ya lo estuviera haciendo pero como les repito, no manejo a buen nivel SQL...

Lo que estoy desarrollando es un Sistema de Matriculas, y me he quedado en el registro de pagos de mensualidades,:

Tengo 4 Tablas:

Mensualidad, Cuota, Estudiante, Mora.:

Estudiante
-Cod_Estudiante (PK) --> Codigo del estudiante.
-.....
-.....

Cuota
-Cod_Cuota. (PK)
-Fecha_Pago.              --> Aqui va la Fecha en que deve pagar el estudiante
-Fecha_Vencimiento.   -->Hasta aqui queda el plazo para que el estudiante pague su Cuota o Mensualidad
-Mes.                           --> Es el mes.


Mensualidad
-Cod_Mensualidad(PK)
-Nro_Boleta_Mensualidad
-F/Pago.                          --> Aqui se registra la Fecha en que el estudiante realizo el Pago de su Cuota.
-Monto.                           --> El Monto pagado
-Cod_Estudiante (FK)     --> El codigo del estudiante
-Cod_Cuota (FK)            --> Que Cuota ha pagado ejemplo: 1ra cuota o 2da cuota o 3ra cuota...

Mora
-Cod_Mora(PK)
-Nro_Boleta_Mora.         --> Nro boleta del pago de la Mora
-Monto.                           --> El monto pagado.
-Mora_Inicial.                  --> En mi pais la mora comienza desde 1 nuevo sol. desde el 1er dia.
-Mora.                             --> La Cantidad de mora que va adeudando el Estudiante.
-Resta.                            --> La resta que le queda de mora al estudiante si es que ha realizado algun pago.
-Cod_Mensualidad. (FK)  --> La Cuota se genera por una Mensualidad no pagada,aqui va el cod de la mensualidad.


Les explico... en mi Pais, Peru, si el estudiante no realiza el pago en uno de los dias que tiene plazo para pagar (Fecha_pago - Fecha_Vencimiento), entonces se genera una Mora( En ta tabla Mora campo: "Mora"), la mora empieza desde 1 nuevo sol (Mora_Inicial) y esta se genera hasta que el estudiante no realiza el pago correspondiente, si el estudiante por ejemplo paga 2 dias despues de la Fecha_Vencimiento, entonces de echo que la mora sera de 2 nuevos soles, se le entrega su Boleta de pago de mensualidad...  y la mora lo paga aparte, por tanto se le entrega una Boleta aparte por la mora pagada...

Esto se que es mas complejo, estuve pensando en como hacerlo pero la verdad no domino SQL... no me atrevo a preguntarle a  mi "profesor de SQL", se que el nisiquiera tiene idea de como resolver esto....

Espero sus apoyos una ves mas y si algo no esta claro me avisan para poder !!!

Offline g00mba

  • The Communiter-
  • *
  • Posts: 14587
  • SOMOS LEGION
    • ALABADO SEA MONESVOL
Re: Problema con Generar Mora desde SQL Server
« Reply #1 on: February 02, 2012, 01:45:41 pm »
necesitas hacerlo con un trigger DML. necesitas especificar en tu programa que al llegar a la fecha de corte ejecute un query de update que dispare el trigger para que sume la mora.

Offline Non Servium

  • Sv Member
  • ***
  • Posts: 426
  • Ilix Punx :)
Re: Problema con Generar Mora desde SQL Server
« Reply #2 on: February 02, 2012, 02:05:28 pm »
Por qué "profesor de SQL" no puede resolverlo??

También podes ejecutar un procedimiento almacenado que genere el pago y en caso que DATEDIFF(DAY, FechaPago, FechaVencimiento) < 0 (quiere decir que se pagó después de vencido) agregar una mora de 1 multiplicado por DATEDIFF(DAY, FechaVencimiento, FechaPago) (dias vencidos)
♫ Condenados a perder la libertad! Por no acatar las leyes que les asignaron. ♪ ♫
Decididos, decididos a emprender! Un camino largo y duro por no ser esclavos ♫


Watch

Offline llAudioslavell

  • Sv Member
  • ***
  • Posts: 126
Re: Problema con Generar Mora desde SQL Server
« Reply #3 on: February 02, 2012, 03:15:34 pm »
Por qué "profesor de SQL" no puede resolverlo??

También podes ejecutar un procedimiento almacenado que genere el pago y en caso que DATEDIFF(DAY, FechaPago, FechaVencimiento) < 0 (quiere decir que se pagó después de vencido) agregar una mora de 1 multiplicado por DATEDIFF(DAY, FechaVencimiento, FechaPago) (dias vencidos)


Digo lo que creo y lo que pienso en cara de todos .. y se lo he dicho a el mismo.... lo que pasa es que es un pesimo profesor ..... Dicta curso de SQL y creo que solo save hacer algunos select e insert ..... dicta curso de UML pero solo conceptos, osea solo lee..... bueno ese no es el caso.... tratare de avanzar algo .. les aviso  los resultados !!!! quien quiera seguir aportando les agradecere mucho ^^ !!!   gracias por sus aportes ^^ !!!

Offline llAudioslavell

  • Sv Member
  • ***
  • Posts: 126
Re: Problema con Generar Mora desde SQL Server
« Reply #4 on: February 04, 2012, 03:20:53 am »
Hola a todos, he seguido analizando las relaciones de mis tablas y estoy por realizar algunos cambios.. bueno por la estructura de mi BD ya yo mismo lo estoy avanzando... pero lo que hasta ahora no entiendo y le siguo dando vueltas... es como are que el Campo "Mora_total", de la tabla Mora, se actualize cada dia para que se genere la mora ... o sea si ayer un estudiante estuvo adeudando 1 nuevo sol de mora.... hoy  pues de echo que tiene que ser 2 nuevos soles... pero no tengo ni la menor idea de como hacer esto =/ ... !! Imploro Auxilio =/  !!
Muchas gracias ^^"
salu2

Offline tekun

  • -^- Elite Silver -^-
  • The Communiter-
  • *
  • Posts: 3221
  • Han convertido mi casa en cueva de mercaderes!!!!
    • www.tekun.es
Re: Problema con Generar Mora desde SQL Server
« Reply #5 on: February 04, 2012, 08:22:52 am »
tienes entonces la necesidad de crear la figura de "inicio de día" o la del "cierre del día". para que ahí introduzcas el query del update.


O, lo puedes ejecutar antes de que se "revise los que tienen mora", o sea, obviamente un usuario ingresa a una opción de tu sistema, para ver quienes tienen mora, a pues, ahí puedes hacerlo, antes de presentar los resultados, que "recalcule" la información, con la más actualizada...(que  sería la mejor opción)...


pd: con lo del profesor, no me extraña que no sepa nada.... porque tu problema no es de "programador" es de "usuario final".... si entendiera la lógica del funcionamiento del sistema, te habría dicho mi segundo párrafo.
lo difícil lo hago rápido, con lo imposible, casi siempre me tardo un poquito

Offline llAudioslavell

  • Sv Member
  • ***
  • Posts: 126
Re: Problema con Generar Mora desde SQL Server
« Reply #6 on: February 05, 2012, 03:38:03 am »
tienes entonces la necesidad de crear la figura de "inicio de día" o la del "cierre del día". para que ahí introduzcas el query del update.


O, lo puedes ejecutar antes de que se "revise los que tienen mora", o sea, obviamente un usuario ingresa a una opción de tu sistema, para ver quienes tienen mora, a pues, ahí puedes hacerlo, antes de presentar los resultados, que "recalcule" la información, con la más actualizada...(que  sería la mejor opción)...


pd: con lo del profesor, no me extraña que no sepa nada.... porque tu problema no es de "programador" es de "usuario final".... si entendiera la lógica del funcionamiento del sistema, te habría dicho mi segundo párrafo.

La verdad la 1ra opcion no la entendi ... pero la 2da si se me quedo mucho mas claro.... tendre que ver la manera de como hacerlo, gracias por esa grandiosa idea :D !! sii tengo dudas que no las pueda resolver, se los posteo :D !! Gracias por el apoyo hermanos !!  :rofl:

y con lo que mi profesor.. para ser mas claro, no sabe ni Programar ni Analizar..... Es mas, puedo decir que es el 1er Lamer en mi vida que he conocido en persona.... Dice saver programar en Java C++ C# VB.NET ActionScript PHP MySQL SQL. ... se cree saver todo... hasta segun el save tecnicas de Hackers xD !! .. weno ya esto no va al caso .... Gracias por sus apoyos ^^ !! seguire Analizando  :D

Offline buscador2k

  • Sv Full Member
  • *
  • Posts: 541
  • .
Re: Problema con Generar Mora desde SQL Server
« Reply #7 on: February 05, 2012, 11:48:46 am »
.... Gracias por sus apoyos ^^ !! seguire Analizando  :D

Cuando termines de probar y si alguna de las sugerencias te ayudo a resolver tu problema, deberias dejarles un "thank you" al o a los comunos que te ayudaron.

Offline edu_guerr

  • Sv Member
  • ***
  • Posts: 463
Re: Problema con Generar Mora desde SQL Server
« Reply #8 on: February 05, 2012, 02:15:41 pm »
Hola a todos, he seguido analizando las relaciones de mis tablas y estoy por realizar algunos cambios.. bueno por la estructura de mi BD ya yo mismo lo estoy avanzando... pero lo que hasta ahora no entiendo y le siguo dando vueltas... es como are que el Campo "Mora_total", de la tabla Mora, se actualize cada dia para que se genere la mora ... o sea si ayer un estudiante estuvo adeudando 1 nuevo sol de mora.... hoy  pues de echo que tiene que ser 2 nuevos soles... pero no tengo ni la menor idea de como hacer esto =/ ... !! Imploro Auxilio =/  !!
Muchas gracias ^^"
salu2

Una idea nada mas..... en este ejemplo tomando en cuenta que fecha pago estudiante es igual a fecha vencimiento,
la fecha de vencimiento es el 03-feb-12 , el estudiante pago el 05-feb-12 , dias de vencimiento=2

Nota
Esto procedimiento seria  para cuando el estudiante que ya pago y queres ver los dias de mora, pero para el que no
ha pagado tendrias que obtener diferencia entre fecha de vencimiento y y fecha actual, algo asi
SELECT DATEDIFF(DATE(NOW()),'2012-02-04') AS 'DIAS EN MORA' obtendras algo asi..
DIAS EN MORA
============
1
============
Esta en MySQL
Code: [Select]
DELIMITER $$

USE `svc`$$

DROP PROCEDURE IF EXISTS `mora`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `Mora`(IN nombre VARCHAR(50))
SELECT estudiante.nombre,mensualidad.nro_boleta_mensualidad,mensualidad.f_pago AS 'F.que pago estudiante',cuota.fecha_pago AS 'F.debe pagar estudiante',
mensualidad.monto,cuota.fecha_vencimiento,DATEDIFF(mensualidad.f_pago,cuota.fecha_vencimiento) AS 'DIAS EN MORA'
FROM estudiante,mensualidad,cuota WHERE estudiante.cod_estudiante=mensualidad.cod_estudiante AND
cuota.cod_cuota=mensualidad.cod_cuota  AND estudiante.nombre=nombre$$

DELIMITER ;

llamarlo en MySQL, para el estudiante 'Pedro'
Code: [Select]
CALL Mora('PEDRO')

Resultado
Code: [Select]
nombre |nro_boleta_mensualidad |                        F.que pago estudiante|F.debe pagar estudiante|monto |fecha_vencimiento|DIAS EN MORA|
PEDRO         2                                          2012-02-05                      2012-02-03    50         2012-02-03               2

El procedimiento lo podrias llamar desde un boton por ejemplo  'Dias en mora' para que te lo calcule haste ese dia.


Ojala te sirva en algo.
« Last Edit: February 05, 2012, 03:45:17 pm by edu_guerr »

Offline llAudioslavell

  • Sv Member
  • ***
  • Posts: 126
Re: Problema con Generar Mora desde SQL Server
« Reply #9 on: February 06, 2012, 01:37:37 pm »
Cuando termines de probar y si alguna de las sugerencias te ayudo a resolver tu problema, deberias dejarles un "thank you" al o a los comunos que te ayudaron.


:D disculpa es que aveces se me olvida xD.. soy nuevo en este foro .. y me siento muy agradecido con ustedes .... en otros foros solo me he topado con gente que cree saver mucho .. Gracias !! ^^

Offline llAudioslavell

  • Sv Member
  • ***
  • Posts: 126
Re: Problema con Generar Mora desde SQL Server
« Reply #10 on: February 06, 2012, 01:39:26 pm »
Una idea nada mas..... en este ejemplo tomando en cuenta que fecha pago estudiante es igual a fecha vencimiento,
la fecha de vencimiento es el 03-feb-12 , el estudiante pago el 05-feb-12 , dias de vencimiento=2

Nota
Esto procedimiento seria  para cuando el estudiante que ya pago y queres ver los dias de mora, pero para el que no
ha pagado tendrias que obtener diferencia entre fecha de vencimiento y y fecha actual, algo asi
SELECT DATEDIFF(DATE(NOW()),'2012-02-04') AS 'DIAS EN MORA' obtendras algo asi..
DIAS EN MORA
============
1
============
Esta en MySQL
Code: [Select]
DELIMITER $$

USE `svc`$$

DROP PROCEDURE IF EXISTS `mora`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `Mora`(IN nombre VARCHAR(50))
SELECT estudiante.nombre,mensualidad.nro_boleta_mensualidad,mensualidad.f_pago AS 'F.que pago estudiante',cuota.fecha_pago AS 'F.debe pagar estudiante',
mensualidad.monto,cuota.fecha_vencimiento,DATEDIFF(mensualidad.f_pago,cuota.fecha_vencimiento) AS 'DIAS EN MORA'
FROM estudiante,mensualidad,cuota WHERE estudiante.cod_estudiante=mensualidad.cod_estudiante AND
cuota.cod_cuota=mensualidad.cod_cuota  AND estudiante.nombre=nombre$$

DELIMITER ;

llamarlo en MySQL, para el estudiante 'Pedro'
Code: [Select]
CALL Mora('PEDRO')

Resultado
Code: [Select]
nombre |nro_boleta_mensualidad |                        F.que pago estudiante|F.debe pagar estudiante|monto |fecha_vencimiento|DIAS EN MORA|
PEDRO         2                                          2012-02-05                      2012-02-03    50         2012-02-03               2

El procedimiento lo podrias llamar desde un boton por ejemplo  'Dias en mora' para que te lo calcule haste ese dia.


Ojala te sirva en algo.

Estuve pensando de la misma manera que tu ... dandome ejemplos de estudiantes que pagan despues de la fecha vencida..... pero por ahora no puedo probrar nada ya que tengo otras labores que me retrazan mucho =/ !!! Gracias hermano .... Hoy en la madrugada quemare neuronaz ^^ !! Gracias por todo !

Offline edu_guerr

  • Sv Member
  • ***
  • Posts: 463
Re: Problema con Generar Mora desde SQL Server
« Reply #11 on: February 06, 2012, 03:58:22 pm »
:D disculpa es que aveces se me olvida xD.. soy nuevo en este foro .. y me siento muy agradecido con ustedes .... en otros foros solo me he topado con gente que cree saver mucho .. Gracias !! ^^
Hey deberias de invitar a gente de tu pais al foro, asi se hace mas internacional la SVC .
« Last Edit: February 06, 2012, 04:07:57 pm by edu_guerr »

Offline llAudioslavell

  • Sv Member
  • ***
  • Posts: 126
Re: Problema con Generar Mora desde SQL Server
« Reply #12 on: February 06, 2012, 07:27:39 pm »
Una idea nada mas..... en este ejemplo tomando en cuenta que fecha pago estudiante es igual a fecha vencimiento,
la fecha de vencimiento es el 03-feb-12 , el estudiante pago el 05-feb-12 , dias de vencimiento=2

Nota
Esto procedimiento seria  para cuando el estudiante que ya pago y queres ver los dias de mora, pero para el que no
ha pagado tendrias que obtener diferencia entre fecha de vencimiento y y fecha actual, algo asi
SELECT DATEDIFF(DATE(NOW()),'2012-02-04') AS 'DIAS EN MORA' obtendras algo asi..
DIAS EN MORA
============
1
============
Esta en MySQL
Code: [Select]
DELIMITER $$

USE `svc`$$

DROP PROCEDURE IF EXISTS `mora`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `Mora`(IN nombre VARCHAR(50))
SELECT estudiante.nombre,mensualidad.nro_boleta_mensualidad,mensualidad.f_pago AS 'F.que pago estudiante',cuota.fecha_pago AS 'F.debe pagar estudiante',
mensualidad.monto,cuota.fecha_vencimiento,DATEDIFF(mensualidad.f_pago,cuota.fecha_vencimiento) AS 'DIAS EN MORA'
FROM estudiante,mensualidad,cuota WHERE estudiante.cod_estudiante=mensualidad.cod_estudiante AND
cuota.cod_cuota=mensualidad.cod_cuota  AND estudiante.nombre=nombre$$

DELIMITER ;

llamarlo en MySQL, para el estudiante 'Pedro'
Code: [Select]
CALL Mora('PEDRO')

Resultado
Code: [Select]
nombre |nro_boleta_mensualidad |                        F.que pago estudiante|F.debe pagar estudiante|monto |fecha_vencimiento|DIAS EN MORA|
PEDRO         2                                          2012-02-05                      2012-02-03    50         2012-02-03               2

El procedimiento lo podrias llamar desde un boton por ejemplo  'Dias en mora' para que te lo calcule haste ese dia.


Ojala te sirva en algo.

Lo estoy trabajando en SQL. ..  tratare de interpretarlo asi ^^ !! aunque tengo que admitir que en SQL soy pesimo  :cry:  ....  lo analizare ^^ !!

Offline llAudioslavell

  • Sv Member
  • ***
  • Posts: 126
Re: Problema con Generar Mora desde SQL Server
« Reply #13 on: February 08, 2012, 02:01:39 pm »
Hola hermanos ^^ dejando los problemas a un lado... continuo con este problema =/ ..   siguiendo sus concejos intente haciendo esto....
CREATE PROCEDURE SP_GENERAR_MORA
AS
INSERT INTO MORA(ID_MORA,NRO_BOLETA,MONTO,MORA_INICIAL,MORA_TOTAL,RESTA,ID_CONCEPTO)
VALUES('02',0,0.00,1.00,(DATEDIFF(DAY,'01/03/2012','10/03/2012') * 1), 0,'CP-02')

Id_Mora l Nro_Boleta l Monto l Mora_Inicial l Mora_Total l Resta l id_Concepto
     01         00000      0.00        1.00              9.00         0.00      CP-02

Esto es solo un ejemplo, claro que en ves de esas fechas tendria que seleccionar el Campo Fecha_Vencimiento_Pago de la Tabla Cuotas y el campo Fecha_pago de la Tabla Mensualidad, para restarlos y en vez de ese    "1"    tendria que ir el campo Mora_Inicial de la tabla Mora  para multiplicarlo con la diferencia de las fechas y porfin obtener la mora generada, y cuando el estudiante desee realizar el pago de la Mora... pues seria solo un Update a la tabla Mora ?? creen que estaria bien ?
Supongamos que ya yo estoy realizando el pago, se ejecuta el Update que todavia no lo he creado, pero solo lo estoy imaginando:

Id_Mora l Nro_Boleta l Monto l Mora_Inicial l Mora_Total l Resta l id_Concepto
     01         15478      5.00        1.00              9.00         4.00      CP-02

quedaria asi .... en el campo Resta solo restaria el campo Monto con el campo Mora_Total.....

Esta bien todo esto ?? o es que estoy imaginando mucho xD !!... se puede hacer todo esto en un update ??  nomas no se burlen, repito que no domino mucho SQL hermanos ....
salu2 !

Offline Non Servium

  • Sv Member
  • ***
  • Posts: 426
  • Ilix Punx :)
Re: Problema con Generar Mora desde SQL Server
« Reply #14 on: February 08, 2012, 04:11:07 pm »
Todavía no me queda 100% clara tu necesidad...

Id_Mora l Nro_Boleta l Monto l Mora_Inicial l Mora_Total l Resta l id_Concepto
     01         00000      0.00        1.00              9.00         0.00      CP-02
Este valor en negrita no debería ser 9 tambien?

Para mi que no haría falta el campo Resta. Y Monto sería mejor con el nombre "MontoPendiente" o algo similar. Usar un procedimiento que tiene un INSERT es preferible hacerlo desde tu sistema

Y si se puede hacer con un UPDATE:
DECLARE @Pago MONEY = 4--Lo que se está pagando
UPDATE Mora
SET Monto = Monto - @Pago --Si queres meter el campo "Resta" dejalo al menos pre calculado en SQL para que se ponga 4 automaticamente
WHERE Id_Mora = '01'
♫ Condenados a perder la libertad! Por no acatar las leyes que les asignaron. ♪ ♫
Decididos, decididos a emprender! Un camino largo y duro por no ser esclavos ♫


Watch