Los Foros de ASPTutor.com
Home | Perfil | Registrarse | Temas Activos | Miembros | Buscar | FAQ
Usuario:
Password:
 Todos los Foros
 ASP
 semana completa
 Foro Bloqueado  Tema Bloqueado


Autor Temas
geminina
Starting Member


33 Posts
Mensajes - 07 Mar 2008 :  12:47:00  Ver Perfil  Enviar Email
Holaaaa

Les cuento...resulta que estoy haciendo una funcion que debe consultar si el trabajador xxxxx trabajo la semana completa (de lunes a sabado) para asi darle 1hr extra, o sea un bono, bueno mi problema es que claro hago la consulta...según el mes y año que eliga la persona que desea ver el informe..pero el problemilla es que tomo los dias lunes,martes, mi, ju, vi, sab que pueden ser de distintas semanas dentro de ese mismo mes...e igual la funcion lo toma valido pork cumple todos los dias pero son de distinta semanaaaa grrr....kmo puedo acotar eso??? o sea que tome los días de una misma semana? a todo esto tengo un campo que guarda los dias, de 1 a 6, es de Lun a Sab respectivamente....

me ayudan????

Thanks

DonGato
Moderator

España
263 Posts
Posted - 07 Mar 2008 :  18:46:06  Ver perfil  Enviar e-mail  Visit DonGato's Homepage
yo lo que haría y sé que eso puede ser rehacer toda la aplicación es, sencillamente, guardar la fecha trabaja completa, es decir, 11/03/08, 12/03/08, etc

Inicio Pagina

geminina
Starting Member


33 Posts
Posted - 07 Mar 2008 :  20:00:23  Ver perfil  Enviar e-mail
pero si así la tengo guardada...pero como consulto si los dias pertenecen a la misma semana?

Inicio Pagina

DonGato
Moderator

España
263 Posts
Posted - 07 Mar 2008 :  21:04:18  Ver perfil  Enviar e-mail  Visit DonGato's Homepage
Lo primero será que identifiques cual es el lunes, weekday(fecha), en el rango de fechas que haya introducido el usuario.
Si encuentra un lunes haz un bucle para que busque los siguientes dias en tu tabla hasta el sabado.
Si no me explico bien dímelo y te pongo un pequeño boceto.

Inicio Pagina

geminina
Starting Member


33 Posts
Posted - 10 Mar 2008 :  02:42:31  Ver perfil  Enviar e-mail
hola...la verdad teóricamente te entiendo...pero me serviría de gran ayuda ver un ejemplo.... estoy cerrada con lo que he hecho...ya que tomo un lunes y luego tomo los dias hasta el sabado..pero no respeta si es de la misma semana o no....

te lo agrdeceria montones :)

Edited by - geminina on 10 Mar 2008 02:45:21

Edited by - geminina on 10 Mar 2008 02:52:34Inicio Pagina

buho_nero
Moderator

España
1316 Posts
Posted - 10 Mar 2008 :  08:59:37  Ver perfil  Enviar e-mail
Haz una consulta para hallar los lunes, TODOS los lunes.
En el bucle en la que los recorres lanza otra consulta sobre todos los dias entre la fecha del lunes y siete dias mas, así tendrás los dias de la semana en los que han trabajado.
En bastante pesado para tu base de datos, quizá se pueda acotar un poco mas si conociese el diseño de las tablas.

Inicio Pagina

DonGato
Moderator

España
263 Posts
Posted - 10 Mar 2008 :  13:40:36  Ver perfil  Enviar e-mail  Visit DonGato's Homepage
eso mismo buho, es lo que había pensado.
geminina, sólo tienes que lanzar un bucle que busque los lunes, cuando lo encuentre, que arranque otro bucle y busque que se trabaja la semana completa.

Inicio Pagina

geminina
Starting Member


33 Posts
Posted - 10 Mar 2008 :  13:52:24  Ver perfil  Enviar e-mail
ya..ahi les cuento como me va..de echo hago un bucle que toma el lunes...y luego consulto por los dias..pero me toma cualquier martes por ejemplo...no el que le sigue a ese lunes....:(

bueno jugaré con las fechas y les cuento

tau

Inicio Pagina

geminina
Starting Member


33 Posts
Posted - 10 Mar 2008 :  16:24:12  Ver perfil  Enviar e-mail
Yo denuevo...miren se me ocurrio otra idea...tomar la fecha de un lunes y la de un sabado...si la resta de estas es igual a 5 pertenecen a la misma semana...y habria k consultar si existen los otros dias entre estas dos fechas...la verdad no tengo idea si ésto servirá....ya que mi código no dice ni pío....pucha estoy blokeada :(...pk no me dan una manito...es lo ultimo que me falta para sacar el informe final...grrrr

aki les va mi codigo inerte....éste el el ciclo central, al cual llego luego de sacar el informes por mes...parece k DonGato me ayudo con éste....una vez dentro de ese mes..debo ver el asunto de la semana.

While Not rs_t.EOF
set rs= createobject("ADODB.Recordset")
sql="select rut_asig, tipo_dia, tipo_turno, fecha_asig from dbo.asignacion where rut_asig="&rut&" and fecha_asig >='"&desdefecha&"' and fecha_asig < '"&afecha&"'"
rs.open sql, MM_turnos_bd_STRING
semana = 0
While Not rs.EOF
If rs("tipo_dia") = 1 then 'Consulta por el día Lunes
lun = rs("tipo_dia")
set rs_lun = createobject("ADODB.Recordset")
sql = "select tipo_dia, fecha_asig from dbo.asignacion where tipo_dia="&lun&""
rs_lun.open sql, MM_turnos_bd_STRING
fecha_lun = rs_lun("fecha_asig")

If rs("tipo_dia") = 6 then 'consulta por los dias sábados
sab = rs("tipo_dia")
set rs_sab = createobject("ADODB.Recordset")
sql = "select tipo_dia, fecha_asig from dbo.asignacion where tipo_dia="&sab&""
rs_sab.open sql, MM_turnos_bd_STRING
fecha_sab = rs_sab("fecha_asig")

If DateDiff("d", fecha_sab, fecha_lun) = 5 then ' consulta si está dentro de la semana
If rs("tipo_dia") = 2 or rs("tipo_dia") = 3 or rs("tipo_dia") = 4 or rs("tipo_dia") = 5 then
semana = semana + 1
End If
End If
rs_sab.movenext
End If
rs_lun.movenext
End If
rs.movenext
Wend
rs.close
set rs=nothing
rs_t.movenext
Wend
Response.write(" "&semana&" "&"<br>")
rs_t.close
set rs_t=nothing

Inicio Pagina

geminina
Starting Member


33 Posts
Posted - 10 Mar 2008 :  20:53:17  Ver perfil  Enviar e-mail
Ya hice otra cosa

Fui trabajando con los dias de cada fecha..bueno me toma la semana..pero a la vez tambien toma el valor de la semana formada por dias mayores no consecutivos...es decir..mi semana puede ser 3-4-5-6-7-8 (lu-ma-mi-ju-vi-sa) y lo toma ok, que es lo yo kiero...pero tambien toma la semana cuando es (3-4-5-13-14-15)cosa k no kiero....para el mes de marzo por ejemplo...buuuu

asi lo hice


While Not rs_t.EOF
set rs= createobject("ADODB.Recordset")
sql="select rut_asig, tipo_dia, tipo_turno, fecha_asig from dbo.asignacion where tipo_dia = '1' and rut_asig="&rut&" and fecha_asig >='"&desdefecha&"' and fecha_asig < '"&afecha&"'"
rs.open sql, MM_turnos_bd_STRING
dia = 0
semana = 0
While Not rs.EOF
fecha = rs("fecha_asig")
dia_lun = day(fecha)
set rs_d= createobject("ADODB.Recordset")
sql="select rut_asig, tipo_dia, tipo_turno, fecha_asig from dbo.asignacion where tipo_dia <> '1' and rut_asig="&rut&" and fecha_asig >='"&desdefecha&"' and fecha_asig < '"&afecha&"'"
rs_d.open sql, MM_turnos_bd_STRING
While not rs_d.eof
If rs_d("tipo_dia") = 2 then
fecha_ma = rs_d("fecha_asig")
dia_ma = day(fecha_ma)
End if
If rs_d("tipo_dia") = 3 then
fecha_mi = rs_d("fecha_asig")
dia_mi = day(fecha_mi)
End if
if rs_d("tipo_dia") = 4 then
fecha_ju = rs_d("fecha_asig")
dia_ju = day(fecha_ju)
End If
if rs_d("tipo_dia") = 5 then
fecha_vi = rs_d("fecha_asig")
dia_vi = day(fecha_vi)
End If
if rs_d("tipo_dia") = 6 then
fecha_sab = rs_d("fecha_asig")
dia_sab = day(fecha_sab)
End If
rs_d.movenext

If dia_ma > dia_lun and dia_mi > dia_ma and dia_ju > dia_mi and dia_vi > dia_ju and dia_sab > dia_vi then
dia= dia+ 1
End If
Wend
rs.movenext
Wend
rs_t.movenext
Wend
If dia = 5 then
semana = semana + 1
Response.write(" "&semana&" "&"<br>")


Inicio Pagina

DonGato
Moderator

España
263 Posts
Posted - 11 Mar 2008 :  00:26:03  Ver perfil  Enviar e-mail  Visit DonGato's Homepage
a ver, y no habria sido mas sencillo lo siguiente.
Buscas el lunes, una vez encontrado, por ejemplo 10/03/08, pues le sumas 1 y ya es el martes, 11/03/08, ahora buscas esa fecha en tu tabla, si existe le sumas 1 12/03/08 y buscas esta nueva fecha...... hasta el final


Inicio Pagina

buho_nero
Moderator

España
1316 Posts
Posted - 11 Mar 2008 :  09:11:07  Ver perfil  Enviar e-mail
Paso a paso:

Haces una consulta a la BBDD para obtener todos los lunes entre dos fechas, y sólo los lunes:

SELECT fecha_asig FROM dbo.asignacion WHERE tipo_dia=1 ...

Lo que necesitas saber es la fecha de cada lunes.
Calculas la fecha del sábado que corresponde a ese lunes sumándole seis dias:

fecha_sabado = fecha_lunes+6

Y realizas otra consulta, esta vez para obtener los datos que necesitas, y filtrando los registros por esas dos fechas, la del lunes y la del sábado correspondiente.
Este método resuelve los cambios de mes y de años, los festivos (ya que no vas a tener registros en los festivos), y alguna que otra cosilla.

El problema es que vas a tener dos consultas abiertas en todo momento, a no ser que que las descargues en arrays, cosa que recomiendo, sobre todo si gestores BBDD flojitos, como access.

Inicio Pagina

geminina
Starting Member


33 Posts
Posted - 12 Mar 2008 :  13:57:03  Ver perfil  Enviar e-mail
Pucha..todavia estoy con ésto....

Por ahora he hecho esto lo sgte...

'-----Busco todos lo lunes

set rs= createobject("ADODB.Recordset")
sql="select fecha_asig, rut_asig, tipo_dia from dbo.asignacion where rut_asig="&rut&" and tipo_dia = '1' and fecha_asig >='"&desdefecha&"' and fecha_asig < '"&afecha&"'"
rs.open sql, MM_turnos_bd_STRING


While Not rs.EOF

fecha_lu = rs("fecha_asig")
fecha_in = fecha_lu
fecha_sig = fecha_lu + 1 '------Guardo la fecha del lunes e incremento en 1 para ver si existe un martes


set rs2= createobject("ADODB.Recordset")
sql="select fecha_asig, rut_asig, tipo_dia from dbo.asignacion where rut_asig="&rut&" and tipo_dia = '2' and fecha_asig >='"&desdefecha&"' and fecha_asig < '"&afecha&"'"
rs2.open sql, MM_turnos_bd_STRING
If fecha_sig = rs2("fecha_asig") then
fecha_sig = fecha_sig + 1
dia = dia + 1
End If '---pregunto si existe la fecha del martes...si existe aumento la fecha para buscar el miecoles y empiezo el contador de dias

' ---Analogo para el miercoles

set rs3= createobject("ADODB.Recordset")
sql="select fecha_asig, rut_asig, tipo_dia from dbo.asignacion where rut_asig="&rut&" and tipo_dia = '3' and fecha_asig >='"&desdefecha&"' and fecha_asig < '"&afecha&"'"
rs3.open sql, MM_turnos_bd_STRING
If fecha_sig = rs3("fecha_asig") then
fecha_sig = fecha_sig + 1
dia = dia + 1
End If

'---Analogo hasta tipo_dia = '6' o sea hasta el sabado

rs.movenext
Wend
rs.close
set rs=nothing
'--------el problema está aqui...o sea si es 5 bien, la primera semana completa existe....pero que pasa si exist una segunda semana completa??? el contador pasa de largo...o sea si agrego 3 dias mas mas tendria k dia = 8 y no toma que trabajo una semana...sino que es cero...claro pk en el if dia= 5 ...en realidad..como hago la consulta para que me incremente 1 semana cada 5 dias respetando las fechas correlativas...claro

if dia = 5 then
semana = semana + 1
Response.write(" "&semana&" "&"<br>")
Response.write(" "&dia&" "&"<br>")
end if


Porfa....estoy complicada con esto :(


Inicio Pagina

buho_nero
Moderator

España
1316 Posts
Posted - 12 Mar 2008 :  18:12:36  Ver perfil  Enviar e-mail
set rs= createobject("ADODB.Recordset")
sql="select fecha_asig, rut_asig, tipo_dia from dbo.asignacion where rut_asig="&rut&" and tipo_dia = '1' and fecha_asig >='"&desdefecha&"' and fecha_asig < '"&afecha&"'"
rs.open sql, MM_turnos_bd_STRING

While Not rs.EOF

fecha_lu = rs("fecha_asig")
fecha_sa = fecha_lu + 6

sql2="select count(*) as cuenta from dbo.asignacion where rut_asig="&rut&" and fecha_asig >='"&fecha_lu&"' and fecha_asig < '"&fecha_sa&"'"
rs2.open sql2, MM_turnos_bd_STRING

if not rs2.EOF
cuenta = rs2("cuenta")
end if

rs.movenext
Wend
rs.close
set rs=nothing


Siendo "cuenta" el número de días que el tipo en cuestión ha trabajado (¿laburado?) en esa semana.
No me tengas en cuenta los errores de sintáxis, hace una vida que no programo en visual basic

Edited by - buho_nero on 12 Mar 2008 18:13:56Inicio Pagina

geminina
Starting Member


33 Posts
Posted - 13 Mar 2008 :  12:21:13  Ver perfil  Enviar e-mail
Gracias Buho_nero...resulto y muy bien!!! :) asi k de esta funcion sacare otros calculos tambien..como semanas trabajas al mes...te pasaste!!

Saludos

Inicio Pagina

   
 Foro Bloqueado  Tema Bloqueado
Ir a:
Los Foros de ASPTutor.com Los Foros de ASPTutor.com
Ir al principio de la Página

 Imprimir Tema
 

Descargas de manuales¦ Ejemplos de código ¦ Artículos mas visitados ¦ Envía tu articulo ¦ Foros ¦
  Libro de visitas ¦Crea un enlace con ASPTutor 
 

    © 2001-Hasta hoy  Pedro Rufo Martín  contactar