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

0 Members and 1 Guest are viewing this topic.

Offline llAudioslavell

  • Sv Member
  • ***
  • Posts: 126
Re: Problema con Generar Mora desde SQL Server
« Reply #15 on: February 08, 2012, 04:48:02 pm »
Todavía no me queda 100% clara tu necesidad...
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'


Hermano ...  es un campo obligatorio, segun la secretaria de  mi instituto, yo tambien pense en omitir algunos campos y agregarle otros... pero de las entrevistas que hize, tengo entendido que esos campos van si o si.... bueno entonces.... ya que si se puede hacerlo en un Update... lo voy a Intentar todo por ahora en SQL... el viernes ya lo estare probando desde .NET , ahora ya todo lo veo mas claro..... Gracias ^^  :thumbsup:

Offline llAudioslavell

  • Sv Member
  • ***
  • Posts: 126
Re: Problema con Generar Mora desde SQL Server
« Reply #16 on: February 10, 2012, 12:20:13 am »
Se me complico mas de lo pensado  :yao_ming: .. no tengo ni la menor idea de como seleccionar esos 2 campos para obtener los dias de mora y para despues multiplicarlo =/ .... pense que solo era usando "SELECT" pero ya veo que no .. estuve probando y nada... aqui les muestro denuevo mi procedimiento almacenado:

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,'AQUI EL CAMPO DE LA FECHA A PAGAR LA CUOTA','AQUI EL CAMPO DE LA FECHA EN QUE FUE PAGADO LA CUOTA') * 1), 0,'CP-02')

si solo supiera como hacerlo para 1 campo... lo demas seria sencillo ya que seria caso igual :cry: ....
salu2

 

Offline edu_guerr

  • Sv Member
  • ***
  • Posts: 463
Re: Problema con Generar Mora desde SQL Server
« Reply #17 on: February 10, 2012, 08:51:29 am »
Se me complico mas de lo pensado  :yao_ming: .. no tengo ni la menor idea de como seleccionar esos 2 campos para obtener los dias de mora y para despues multiplicarlo =/ .... pense que solo era usando "SELECT" pero ya veo que no .. estuve probando y nada... aqui les muestro denuevo mi procedimiento almacenado:

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,'AQUI EL CAMPO DE LA FECHA A PAGAR LA CUOTA','AQUI EL CAMPO DE LA FECHA EN QUE FUE PAGADO LA CUOTA') * 1), 0,'CP-02')


Tenes esto:
Code: [Select]
(DATEDIFF(DAY,'AQUI EL CAMPO DE LA FECHA A PAGAR LA CUOTA','AQUI EL CAMPO DE LA FECHA EN QUE FUE PAGADO LA CUOTA') * 1),

Si probas asi.. anidando "select" dentro del insert?
Code: [Select]
(DATEDIFF((SELECT F_PAGO FROM MENSUALIDAD WHERE cod_estudiante=1),
(SELECT fecha_pago FROM CUOTA WHERE MES=(SELECT MONTH(NOW()))))*1)

El insert quedaria asi
Code: [Select]
INSERT INTO MORA(ID_MORA,NRO_BOLETA,MONTO,MORA_INICIAL,MORA_TOTAL,RESTA,ID_CONCEPTO)
VALUES('07',    0,        0.00,  1.00,
(DATEDIFF((SELECT F_PAGO FROM MENSUALIDAD WHERE cod_estudiante=1),
(SELECT fecha_pago FROM CUOTA WHERE MES=(SELECT MONTH(NOW()))))*1)
 ,       0,        'CP-02')

Tomando en cuenta que campo mes en entero [enero=1...diciembre=12]
Code: [Select]
SELECT fecha_pago FROM CUOTA WHERE MES=(SELECT MONTH(NOW()))))*1
---------
Esto esta en MySQL , pero talvez te da una idea de lo que queres hacer.
« Last Edit: February 10, 2012, 08:56:34 am by edu_guerr »

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 #18 on: February 10, 2012, 09:54:03 am »
hey, pregunto, ¿tenes alguna tabla con las fechas en que debe de pagar, para ir evaluando si ya pago cada cuota de esas?

o sea, al crear un registro de estudiante, le creas un listado de todas las cuotas que debe de pagar? me refiero a un listado en una tabla de tu base de datos, algo así:

estudiante, fecha de pago, valor de pago
juan          , 05/ene/2012  ,  20.00
juan          , 05/feb/2012  ,  20.00
juan          , 05/mar/2012  ,  20.00
juan          , 05/etc etc etc/2012  ,  20.00


pregunto, porque de las tablas que pusiste al inicio, no me ubico si existe algo así.... porque también te pregunto la parte de tu db, cómo esta distribuida la información?....  a lo que quiero llegar es a que me expliques en lenguaje humano, como deberías saber si alguien tiene mora. algo así:

"mira si existe en esta tabla XYZ con esta fecha, tiene mora, si no existe en la tabla XYZ no tiene mora"
"mira si existe en la tabla ZYX con estos valores tiene mora, sino no"

algo así podes explicarme
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 #19 on: February 10, 2012, 01:50:44 pm »

Tenes esto:
Code: [Select]
(DATEDIFF(DAY,'AQUI EL CAMPO DE LA FECHA A PAGAR LA CUOTA','AQUI EL CAMPO DE LA FECHA EN QUE FUE PAGADO LA CUOTA') * 1),

Si probas asi.. anidando "select" dentro del insert?
Code: [Select]
(DATEDIFF((SELECT F_PAGO FROM MENSUALIDAD WHERE cod_estudiante=1),
(SELECT fecha_pago FROM CUOTA WHERE MES=(SELECT MONTH(NOW()))))*1)

El insert quedaria asi
Code: [Select]
INSERT INTO MORA(ID_MORA,NRO_BOLETA,MONTO,MORA_INICIAL,MORA_TOTAL,RESTA,ID_CONCEPTO)
VALUES('07',    0,        0.00,  1.00,
(DATEDIFF((SELECT F_PAGO FROM MENSUALIDAD WHERE cod_estudiante=1),
(SELECT fecha_pago FROM CUOTA WHERE MES=(SELECT MONTH(NOW()))))*1)
 ,       0,        'CP-02')

Tomando en cuenta que campo mes en entero [enero=1...diciembre=12]
Code: [Select]
SELECT fecha_pago FROM CUOTA WHERE MES=(SELECT MONTH(NOW()))))*1
---------
Esto esta en MySQL , pero talvez te da una idea de lo que queres hacer.



Yo probe con los Select pero nada.... o es que algo estea haciendo mal  :embarassed: ... 

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,(SELECT F_PAGO FROM PAGOS WHERE ID_CONCEPTO= 'CP-02'),( SELECT F_PAGO FROM PAGOS_REGISTRADOS WHERE ID_PAGO='P02' ))) * 1, 0,'CP-02')

El SQL me muestra este error:

Mens 1046, Nivel 15, Estado 1, Procedimiento SP_GENERAR_MORA, Línea 4
No se permiten subconsultas en este contexto. Sólo se admiten expresiones escalares.
Mens 102, Nivel 15, Estado 1, Procedimiento SP_GENERAR_MORA, Línea 4
Sintaxis incorrecta cerca de ')'.

Quiere decir que no puedo hacer consultas en un INSERT ?  o en donde esta mi erro   :tick: .....
Auxilio D: !!!!!

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 #20 on: February 10, 2012, 01:54:36 pm »
Quiere decir que no puedo hacer consultas en un INSERT ?  o en donde esta mi erro   :tick: .....
Auxilio D: !!!!!

si se pueden hacer select para un insert, pero yo no los hago así.... yo los declaro algo así

insert into mi tablita
select campo1, campo2, campo3, etc
from mi tablita_dos
where condicion=valor

lo difícil lo hago rápido, con lo imposible, casi siempre me tardo un poquito

Offline Francisco™

  • The Communiter-
  • *
  • Posts: 1373
  • Bitch you make me hurl...
Re: Problema con Generar Mora desde SQL Server
« Reply #21 on: February 10, 2012, 04:54:15 pm »
si se pueden hacer select para un insert, pero yo no los hago así.... yo los declaro algo así

insert into mi tablita
select campo1, campo2, campo3, etc
from mi tablita_dos
where condicion=valor

si, esa es una forma de hacerlo pero en el caso de lo que él quiere hacer no se podría así nada más, por lo que la forma que le dijo edu_gerr es válida, aunque otra alternativa seria que calcule la mora total y la guarde en una variable y que esa ocupe en el insert

bueno, debido a que no quise hacer el trabajo de recrear un escenario igual al tuyo, utilice una tabla que tengo de pruebas en SQL08R2 y ejecute un insert similar al que queres ejecutar dentro de SP_GENERAR_MORA

la única diferencia es que los select que ejecute son hacia la misma tabla, pero considero que no debería de dar problemas si se hacen hacia otras tablas:
Code: [Select]
insert into MiExamenOG04013 (periodo,numdoc,codbod,codsal,depnum,codvta,codban,fecent,totaldoc,fecing,coduser)
values('2012-02-10', 'poiuytrewq', 'yy', 'F', 'mnbv', 't', 'tg', '2012-01-02',
(datediff(day,(select fecent from MiExamenOG04013 where codbod = 'zz'),(select fecing from MiExamenOG04013 where  codbod = 'zz'))) * 10,
'2012-02-28', 'gfdsalkj')

captura de pantalla:


update:
deberías darle una buena revisada al código debido a ese error de sintaxis que tenes, ya que estoy viendo que los nombres de los campos de la tabla Mora que pusiste en el primer post son diferentes a los que estas usando en el insert , o compartí los scripts que tenes para ayudarte a revisarlos porque así a simple vista y sin los demás elementos esta difícil...

« Last Edit: February 10, 2012, 05:03:43 pm by Francisco™ »

Offline llAudioslavell

  • Sv Member
  • ***
  • Posts: 126
Re: Problema con Generar Mora desde SQL Server
« Reply #22 on: February 11, 2012, 02:19:12 am »
si, esa es una forma de hacerlo pero en el caso de lo que él quiere hacer no se podría así nada más, por lo que la forma que le dijo edu_gerr es válida, aunque otra alternativa seria que calcule la mora total y la guarde en una variable y que esa ocupe en el insert

bueno, debido a que no quise hacer el trabajo de recrear un escenario igual al tuyo, utilice una tabla que tengo de pruebas en SQL08R2 y ejecute un insert similar al que queres ejecutar dentro de SP_GENERAR_MORA

la única diferencia es que los select que ejecute son hacia la misma tabla, pero considero que no debería de dar problemas si se hacen hacia otras tablas:
Code: [Select]
insert into MiExamenOG04013 (periodo,numdoc,codbod,codsal,depnum,codvta,codban,fecent,totaldoc,fecing,coduser)
values('2012-02-10', 'poiuytrewq', 'yy', 'F', 'mnbv', 't', 'tg', '2012-01-02',
(datediff(day,(select fecent from MiExamenOG04013 where codbod = 'zz'),(select fecing from MiExamenOG04013 where  codbod = 'zz'))) * 10,
'2012-02-28', 'gfdsalkj')

captura de pantalla:


update:
deberías darle una buena revisada al código debido a ese error de sintaxis que tenes, ya que estoy viendo que los nombres de los campos de la tabla Mora que pusiste en el primer post son diferentes a los que estas usando en el insert , o compartí los scripts que tenes para ayudarte a revisarlos porque así a simple vista y sin los demás elementos esta difícil...

Lo que pasa es que estube cambiando de nombre a los campos y a las tablas xD ..
bueno este problema lo he resuelto de esta manera

CREATE PROCEDURE SP_GENERAR_MORA
AS
DECLARE @F_PAGO1 AS datetime
DECLARE @F_PAGO2 AS datetime
DECLARE @MORA_INI AS INT
SELECT @MORA_INI = MORA_INICIAL FROM MORA WHERE ID_MORA = '01'
SELECT @F_PAGO1 = F_VENCIMIENTO_PAGO FROM PAGOS WHERE ID_CONCEPTO= 'CP-02'
SELECT @F_PAGO2 = F_PAGO FROM PAGOS_REGISTRADOS WHERE ID_PAGO='P02'
INSERT INTO MORA(ID_MORA,NRO_BOLETA,MONTO,MORA_INICIAL,MORA_TOTAL,RESTA,ID_CONCEPTO,ID_ESTUDIANTE)
VALUES('06',0,0.00,1.00,DATEDIFF(DAY,@F_PAGO1,@F_PAGO2) * @MORA_INI, 0,'CP-02','046565')

Hay algunas cosas que devo modificar ........ Gracias hermanos  :thumbsup:   estoy mejorando, por que esto lo veia fuera de mis limites xD... seguire  posteandoles mis proximas dudas, si es que ya no las puedo resolver..... no crean que al primero problema que tengo, sin pensarlo lo posteo...... bueno aveces si  :yao_ming: xD na broma... gracias  :)