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.
 

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

Preguntas similares