Forzar aparicion de registros en informe agrupado (2ª parte)

29/04/2010 - 08:21 por P3dro | Informe spam
On 26 mar, 15:43, "Ju@nK" <con...@hotmail.com> wrote:

¿Quieres asignarlos a algún trabajador en concreto?

En la 3ª es donde tienes que usar el nz

ej.:
SELECT cDiasDelPeriodo.Fecha, nz(cIncentivosPorPeriodo.IdTrabajador,0) as
IdTrabajadores, cIncentivosPorPeriodo.*
FROM cIncentivosPorPeriodo RIGHT JOIN cDiasDelPeriodo ON
cIncentivosPorPeriodo.FechaParte = cDiasDelPeriodo.Fecha;

**
Salu2/Regards
Ju@nK [MVP Access] 2006/09
[DCE2003 ***] + VSTO [DCE2005 **]http://juank.mvps.orghttp://www.juank.es
Correos personales o preguntas particulares en mi grupohttp://groups.google.es/group/...w.juank.tk
¿Que es un MVP?, entérate enhttp://mvp.support.microsoft.com
**
"P3dro" <ppo...@terra.es> escribió en el mensajenews:acc7a98b-85bb-4ddf-b67c-2ae092f5229f@q23g2000yqd.googlegroups.com...
Voy a poner todos los SQL para que se vean los pasos:

1ª Consulta para sacar "todos los días de un período"
SELECT tNumeroDias.NumDia+CDate([FechaInicial])-1 AS Fecha,
[FechaInicial] AS Expr1, [FechaFinal] AS Expr2
FROM tNumeroDias
WHERE ((([tNumeroDias.NumDia]
+CDate([FechaInicial])-1)<Íate([FechaFinal])));

2ª Consulta los trabajos sin ningún filtro ni restricción
SELECT tPartes.FechaParte, tPartes.NumObra, tClientes.NomCliente,
tIncentivos.Superficie, tIncentivos.Espesor, tIncentivos.IdTrabajador,
tTrabajadores.ApellidosNombre, tIncentivos.ImporteOficial,
tIncentivos.ImporteAyte, tIncentivos.HorasAyte
FROM ((tClientes INNER JOIN (tPartes INNER JOIN tObras ON
tPartes.NumObra = tObras.NumObra) ON tClientes.IdCliente > tObras.IdCliente) INNER JOIN tIncentivos ON tPartes.IdParte > tIncentivos.IdParte) INNER JOIN tTrabajadores ON
tIncentivos.IdTrabajador = tTrabajadores.IdTrabajador
GROUP BY tPartes.FechaParte, tPartes.NumObra, tClientes.NomCliente,
tIncentivos.Superficie, tIncentivos.Espesor, tIncentivos.IdTrabajador,
tTrabajadores.ApellidosNombre, tIncentivos.ImporteOficial,
tIncentivos.ImporteAyte, tIncentivos.HorasAyte;

3ª Consulta uniendo las 2 anteriores, sacar los trabajos (de la 2ª
consulta) sólo del período seleccionado (1ª consulta):
SELECT cDiasDelPeriodo.Fecha, cIncentivosPorPeriodo.*
FROM cIncentivosPorPeriodo RIGHT JOIN cDiasDelPeriodo ON
cIncentivosPorPeriodo.FechaParte = cDiasDelPeriodo.Fecha;

Esta tercera consulta presenta los datos correctamente, pero en los
días donde no hay trabajos, sólo aparece la fecha del campo
cDiasDelPeriodo.Fecha ("forzada" en la 1ª consulta) sin datos de
trabajo.
Elinformedebe presentar todos los días de la primera consulta,
agrupados por trabajador, y en los días donde haya trabajos, presentar
esos datos, en los que no hay, sólo debe sacar la fecha, pero debe
sacarla.

No sé si el problema es por el hecho de que la fecha "forzada" no
tiene asignado ningún IdTrabajador y al agruparlo en elinformesalen
aparte.

Espero que me digáis algo. Gracias y un saludo.

Preguntas similare

Leer las respuestas

#1 P3dro
29/04/2010 - 08:24 | Informe spam
Disculpad el retraso en responder pero entre el cierre trimestral y el
cierre de 2009 he estado más liado que la pata de un romano :-(

He probado las dos opciones que me habéis apuntado, tanto Juank como
Patxi y ninguna de las 2 hacen lo que necesito.


Con el Nz sí me rellena el campo IdTrabajador que esta vacío con 0
pero luego a la hora de hacer el informe y que salga agrupado y
totalizado por cada trabajador, me saca una página para el trabajador
"0" o "vacío" según cómo haga la consulta.


En mi caso me salen 3 trabajadores: 1 con el Id 48, otro con el 69 y
otro " " o 0, para los 2 primeros con el detalle de los trabajos
realizados durante el período seleccionado menos los fines de semana y
para el vacío o 0 sólo con los fines de semana...


En definitiva, sigo igual y ahora ya, aparte de estar desesperado me
estan apretando porque corre prisa.


Se me había ocurrido si poniendo el origen del informe con código no
se podría hacer algo, pero tampoco se me ocurre.


Agradecería enormemente vuestra ayuda.


Un saludo


Pedro
Respuesta Responder a este mensaje
#2 Ju
29/04/2010 - 16:00 | Informe spam
no veo la duda, todo está marcado con >

**
Salu2/Regards
[MVP Access] 2006/10
[DCE2003 ***] + VSTO [DCE2005 **]
http://juank.mvps.org http://www.juank.es
Correos personales o preguntas particulares en mi grupo
http://groups.google.es/group/juank?hl=es
www.juank.tk
¿Que es un MVP?, entérate en http://mvp.support.microsoft.com
**
"P3dro" escribió en el mensaje
news:
On 26 mar, 15:43, "" wrote:
¿Quieres asignarlos a algún trabajador en concreto?

En la 3ª es donde tienes que usar el nz

ej.:
SELECT cDiasDelPeriodo.Fecha, nz(cIncentivosPorPeriodo.IdTrabajador,0) as
IdTrabajadores, cIncentivosPorPeriodo.*
FROM cIncentivosPorPeriodo RIGHT JOIN cDiasDelPeriodo ON
cIncentivosPorPeriodo.FechaParte = cDiasDelPeriodo.Fecha;

**
Salu2/Regards
[MVP Access] 2006/09
[DCE2003 ***] + VSTO [DCE2005 **]http://juank.mvps.orghttp://www.juank.es
Correos personales o preguntas particulares en mi
grupohttp://groups.google.es/group/...w.juank.tk
¿Que es un MVP?, entérate enhttp://mvp.support.microsoft.com
**
"P3dro" escribió en el
mensajenews:
Voy a poner todos los SQL para que se vean los pasos:

1ª Consulta para sacar "todos los días de un período"
SELECT tNumeroDias.NumDia+CDate([FechaInicial])-1 AS Fecha,
[FechaInicial] AS Expr1, [FechaFinal] AS Expr2
FROM tNumeroDias
WHERE ((([tNumeroDias.NumDia]
+CDate([FechaInicial])-1)<Íate([FechaFinal])));

2ª Consulta los trabajos sin ningún filtro ni restricción
SELECT tPartes.FechaParte, tPartes.NumObra, tClientes.NomCliente,
tIncentivos.Superficie, tIncentivos.Espesor, tIncentivos.IdTrabajador,
tTrabajadores.ApellidosNombre, tIncentivos.ImporteOficial,
tIncentivos.ImporteAyte, tIncentivos.HorasAyte
FROM ((tClientes INNER JOIN (tPartes INNER JOIN tObras ON
tPartes.NumObra = tObras.NumObra) ON tClientes.IdCliente > tObras.IdCliente) INNER JOIN tIncentivos ON tPartes.IdParte > tIncentivos.IdParte) INNER JOIN tTrabajadores ON
tIncentivos.IdTrabajador = tTrabajadores.IdTrabajador
GROUP BY tPartes.FechaParte, tPartes.NumObra, tClientes.NomCliente,
tIncentivos.Superficie, tIncentivos.Espesor, tIncentivos.IdTrabajador,
tTrabajadores.ApellidosNombre, tIncentivos.ImporteOficial,
tIncentivos.ImporteAyte, tIncentivos.HorasAyte;

3ª Consulta uniendo las 2 anteriores, sacar los trabajos (de la 2ª
consulta) sólo del período seleccionado (1ª consulta):
SELECT cDiasDelPeriodo.Fecha, cIncentivosPorPeriodo.*
FROM cIncentivosPorPeriodo RIGHT JOIN cDiasDelPeriodo ON
cIncentivosPorPeriodo.FechaParte = cDiasDelPeriodo.Fecha;

Esta tercera consulta presenta los datos correctamente, pero en los
días donde no hay trabajos, sólo aparece la fecha del campo
cDiasDelPeriodo.Fecha ("forzada" en la 1ª consulta) sin datos de
trabajo.
Elinformedebe presentar todos los días de la primera consulta,
agrupados por trabajador, y en los días donde haya trabajos, presentar
esos datos, en los que no hay, sólo debe sacar la fecha, pero debe
sacarla.

No sé si el problema es por el hecho de que la fecha "forzada" no
tiene asignado ningún IdTrabajador y al agruparlo en elinformesalen
aparte.

Espero que me digáis algo. Gracias y un saludo.
Respuesta Responder a este mensaje
#3 P3dro
29/04/2010 - 16:58 | Informe spam
Perdona , no sé si la he liado al abrir un hilo para subir el
anterior :-(((


Me pusiste que hiciera esto:

¿Quieres asignarlos a algún trabajador en concreto?

En la 3ª es donde tienes que usar el nz


ej.:
SELECT cDiasDelPeriodo.Fecha, nz(cIncentivosPorPeriodo.IdTrabajador,0) as
IdTrabajadores, cIncentivosPorPeriodo.*
FROM cIncentivosPorPeriodo RIGHT JOIN cDiasDelPeriodo ON
cIncentivosPorPeriodo.FechaParte = cDiasDelPeriodo.Fecha;



Lo he probado y me sigue haciendo lo mismo, asignando 0 a los días que
no se han trabajado pero no sacándolos en el informe agrupados con
cada trabajador.



On 29 abr, 16:00, "" wrote:
no veo la duda, todo está marcado con >

**
Salu2/Regards
[MVP Access] 2006/10
[DCE2003 ***] + VSTO [DCE2005 **]http://juank.mvps.orghttp://www.juank.es
Correos personales o preguntas particulares en mi grupohttp://groups.google.es/group/...w.juank.tk
¿Que es un MVP?, entérate enhttp://mvp.support.microsoft.com
Respuesta Responder a este mensaje
#4 Ju
04/05/2010 - 16:15 | Informe spam
El 0 debes asignarlo al código de trabajador por el que agrupas, para que te
agrupe por dicho campo, si tienes mas campos de la tabla trabajadores,
tendrás que asignarles valores con el nz, p.ej. para el nombre del
trabajador

... nz([nTrabajador],"Sin Trabajador") ...

**
Salu2/Regards
[MVP Access] 2006/10
[DCE2003 ***] + VSTO [DCE2005 **]
http://juank.mvps.org http://www.juank.es
Correos personales o preguntas particulares en mi grupo
http://groups.google.es/group/juank?hl=es
www.juank.tk
¿Que es un MVP?, entérate en http://mvp.support.microsoft.com
**
"P3dro" escribió en el mensaje
news:
Perdona , no sé si la he liado al abrir un hilo para subir el
anterior :-(((


Me pusiste que hiciera esto:

¿Quieres asignarlos a algún trabajador en concreto?

En la 3ª es donde tienes que usar el nz


ej.:
SELECT cDiasDelPeriodo.Fecha, nz(cIncentivosPorPeriodo.IdTrabajador,0) as
IdTrabajadores, cIncentivosPorPeriodo.*
FROM cIncentivosPorPeriodo RIGHT JOIN cDiasDelPeriodo ON
cIncentivosPorPeriodo.FechaParte = cDiasDelPeriodo.Fecha;



Lo he probado y me sigue haciendo lo mismo, asignando 0 a los días que
no se han trabajado pero no sacándolos en el informe agrupados con
cada trabajador.



On 29 abr, 16:00, "" wrote:
no veo la duda, todo está marcado con >

**
Salu2/Regards
[MVP Access] 2006/10
[DCE2003 ***] + VSTO [DCE2005 **]http://juank.mvps.orghttp://www.juank.es
Correos personales o preguntas particulares en mi
grupohttp://groups.google.es/group/...w.juank.tk
¿Que es un MVP?, entérate enhttp://mvp.support.microsoft.com
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida