hola a todos, tengo un istema para el conrol de la producciòn en una empresa manufacturera, en el cual quieren que le anexe un reporte por horas, el sistema lo tengo con firebird 1.5 y delphi 7.
Cree una consulta para saber que prenda se esta produciendo el en determinado dia:
Código SQL
[-]
SELECT MAX( TLECTURAS.FECHA ) MAX_OF_FECHA, TCORTES.ID_ESTILO
FROM TCORTES
INNER JOIN TFOLIOS ON (TCORTES.CORTE = TFOLIOS.ID_CORTE)
INNER JOIN TLECTURAS ON (TFOLIOS.ID = TLECTURAS.ID_FOLIO)
WHERE ((tlecturas.fecha = :FECHA_ENTRADA))
GROUP BY TCORTES.ID_ESTILO
con lo cual obtengo la clave de la prenda p/e: 15/10/2004, 44K107A
En otra consult obtengo que operaciones se tienen que hacer para producir dicha prenda:
Código SQL
[-]
SELECT TOPERESTILO.ORDEN, TOPERACIONES.ID, TOPERACIONES.DESCRIPCION
FROM TOPERESTILO
INNER JOIN TOPERACIONES ON (TOPERESTILO.ID_OPER = TOPERACIONES.ID)
WHERE ((toperestilo.id_estilo = :ID_ESTILO))
con esto obtengo p/e:
1, CRCO, Cerrar costado
2, COCU, coser cullo
3, COPU, coser puño
etc.
tengo otra consulta para saber que trabajadores realizaron cada una de las operaciones y una mas que me indica cuantas operaciones realizo el trabajador cada hora.
CRCO, juan
CRCO, luis
CRCO, pedro
CRCO, ana
COCU, paty
COCU, rosio
COCU, Alicia
Etc.
estas consultas funcionan bien y sin ningun problema.
el problema es que quiero crear un procedimiento que contenga estas consultas para crear mas facil el reporte; el cuerpo de mi procedimiento quedo asì:
Código SQL
[-]
BEGIN
FOR SELECT MAX( TLECTURAS.FECHA ) MAX_OF_FECHA, TCORTES.ID_ESTILO
FROM TCORTES
INNER JOIN TFOLIOS ON (TCORTES.CORTE = TFOLIOS.ID_CORTE)
INNER JOIN TLECTURAS ON (TFOLIOS.ID = TLECTURAS.ID_FOLIO)
WHERE ((tlecturas.fecha = :FECHA_ENTRADA))
GROUP BY TCORTES.ID_ESTILO
INTO :Fecha, :ID_ESTILO
DO
BEGIN
For SELECT TOPERESTILO.ORDEN, TOPERACIONES.ID, TOPERACIONES.DESCRIPCION
FROM TOPERESTILO
INNER JOIN TOPERACIONES ON (TOPERESTILO.ID_OPER = TOPERACIONES.ID)
WHERE ((toperestilo.id_estilo = :ID_ESTILO))
Into :ORDEN, :ID_OPERACION, :OPERACION
Do
begin
For SELECT MAX( TLECTURAS.ID_PERSONAL ) MAX_OF_ID_PERSONAL, TPERSONAL.NOMAPE
FROM TCORTES
INNER JOIN TFOLIOS ON (TCORTES.CORTE = TFOLIOS.ID_CORTE)
INNER JOIN TLECTURAS ON (TFOLIOS.ID = TLECTURAS.ID_FOLIO)
INNER JOIN TPERSONAL ON (TLECTURAS.ID_PERSONAL = TPERSONAL.ID)
WHERE ((TCORTES.ID_ESTILO = :ID_ESTILO) and (TLECTURAS.ID_OPER = :ID_OPERACION))
GROUP BY TPERSONAL.NOMAPE
ORDER BY 1
into :ID_PEROSNAL, :NOMBRE
do
begin
SELECT SUM( TFOLIOS.CANTIDAD ) SUM_OF_CANTIDAD
FROM TFOLIOS
INNER JOIN TLECTURAS ON (TFOLIOS.ID = TLECTURAS.ID_FOLIO)
INNER JOIN TCORTES ON (TFOLIOS.ID_CORTE = TCORTES.CORTE)
WHERE ((tcortes.id_estilo = :ID_ESTILO) and (tlecturas.fecha = :FECHA_ENTRADA) and (tlecturas.id_personal = :ID_PEROSNAL))
GROUP BY TLECTURAS.ID_PERSONAL, TLECTURAS.FECHA, TLECTURAS.HORA
HAVING ((tlecturas.hora <= '08:59:59'))
into :OCHO;
if (OCHO is null) then OCHO= 0;
SELECT SUM( TFOLIOS.CANTIDAD ) SUM_OF_CANTIDAD
FROM TFOLIOS
INNER JOIN TLECTURAS ON (TFOLIOS.ID = TLECTURAS.ID_FOLIO)
INNER JOIN TCORTES ON (TFOLIOS.ID_CORTE = TCORTES.CORTE)
WHERE ((tcortes.id_estilo = :ID_ESTILO) and (tlecturas.fecha = :FECHA_ENTRADA) and (tlecturas.id_personal = :ID_PEROSNAL))
GROUP BY TLECTURAS.ID_PERSONAL, TLECTURAS.FECHA, TLECTURAS.HORA
HAVING ((tlecturas.hora between '09:00:00' and '09:59:59'))
into :NUEVE;
if (Nueve is null) then nueve = 0;
SELECT SUM( TFOLIOS.CANTIDAD ) SUM_OF_CANTIDAD
FROM TFOLIOS
INNER JOIN TLECTURAS ON (TFOLIOS.ID = TLECTURAS.ID_FOLIO)
INNER JOIN TCORTES ON (TFOLIOS.ID_CORTE = TCORTES.CORTE)
WHERE ((tcortes.id_estilo = :ID_ESTILO) and (tlecturas.fecha = :FECHA_ENTRADA) and (tlecturas.id_personal = :ID_PEROSNAL))
GROUP BY TLECTURAS.ID_PERSONAL, TLECTURAS.FECHA, TLECTURAS.HORA
HAVING ((tlecturas.hora between '10:00:00' and '10:59:59'))
into IEZ;
if (Diez is null) then Diez = 0;
SELECT SUM( TFOLIOS.CANTIDAD ) SUM_OF_CANTIDAD
FROM TFOLIOS
INNER JOIN TLECTURAS ON (TFOLIOS.ID = TLECTURAS.ID_FOLIO)
INNER JOIN TCORTES ON (TFOLIOS.ID_CORTE = TCORTES.CORTE)
WHERE ((tcortes.id_estilo = :ID_ESTILO) and (tlecturas.fecha = :FECHA_ENTRADA) and (tlecturas.id_personal = :ID_PEROSNAL))
GROUP BY TLECTURAS.ID_PERSONAL, TLECTURAS.FECHA, TLECTURAS.HORA
HAVING ((tlecturas.hora between '11:00:00' and '11:59:59'))
into :ONCE;
if (Once is null) then Once = 0;
SELECT SUM( TFOLIOS.CANTIDAD ) SUM_OF_CANTIDAD
FROM TFOLIOS
INNER JOIN TLECTURAS ON (TFOLIOS.ID = TLECTURAS.ID_FOLIO)
INNER JOIN TCORTES ON (TFOLIOS.ID_CORTE = TCORTES.CORTE)
WHERE ((tcortes.id_estilo = :ID_ESTILO) and (tlecturas.fecha = :FECHA_ENTRADA) and (tlecturas.id_personal = :ID_PEROSNAL))
GROUP BY TLECTURAS.ID_PERSONAL, TLECTURAS.FECHA, TLECTURAS.HORA
HAVING ((tlecturas.hora between '12:00:00' and '12:59:59'))
into OCE;
if (Doce is null) then Doce = 0;
SELECT SUM( TFOLIOS.CANTIDAD ) SUM_OF_CANTIDAD
FROM TFOLIOS
INNER JOIN TLECTURAS ON (TFOLIOS.ID = TLECTURAS.ID_FOLIO)
INNER JOIN TCORTES ON (TFOLIOS.ID_CORTE = TCORTES.CORTE)
WHERE ((tcortes.id_estilo = :ID_ESTILO) and (tlecturas.fecha = :FECHA_ENTRADA) and (tlecturas.id_personal = :ID_PEROSNAL))
GROUP BY TLECTURAS.ID_PERSONAL, TLECTURAS.FECHA, TLECTURAS.HORA
HAVING ((tlecturas.hora between '13:00:00' and '13:59:59'))
into :TRECE;
if (Trece is null) then Trece = 0;
SELECT SUM( TFOLIOS.CANTIDAD ) SUM_OF_CANTIDAD
FROM TFOLIOS
INNER JOIN TLECTURAS ON (TFOLIOS.ID = TLECTURAS.ID_FOLIO)
INNER JOIN TCORTES ON (TFOLIOS.ID_CORTE = TCORTES.CORTE)
WHERE ((tcortes.id_estilo = :ID_ESTILO) and (tlecturas.fecha = :FECHA_ENTRADA) and (tlecturas.id_personal = :ID_PEROSNAL))
GROUP BY TLECTURAS.ID_PERSONAL, TLECTURAS.FECHA, TLECTURAS.HORA
HAVING ((tlecturas.hora between '14:00:00' and '14:59:59'))
into :CATORCE;
if (Catorce is null) then Catorce = 0;
SELECT SUM( TFOLIOS.CANTIDAD ) SUM_OF_CANTIDAD
FROM TFOLIOS
INNER JOIN TLECTURAS ON (TFOLIOS.ID = TLECTURAS.ID_FOLIO)
INNER JOIN TCORTES ON (TFOLIOS.ID_CORTE = TCORTES.CORTE)
WHERE ((tcortes.id_estilo = :ID_ESTILO) and (tlecturas.fecha = :FECHA_ENTRADA) and (tlecturas.id_personal = :ID_PEROSNAL))
GROUP BY TLECTURAS.ID_PERSONAL, TLECTURAS.FECHA, TLECTURAS.HORA
HAVING ((tlecturas.hora between '15:00:00' and '15:59:59'))
into :QUINCE;
if (Quince is null) then Quince = 0;
SELECT SUM( TFOLIOS.CANTIDAD ) SUM_OF_CANTIDAD
FROM TFOLIOS
INNER JOIN TLECTURAS ON (TFOLIOS.ID = TLECTURAS.ID_FOLIO)
INNER JOIN TCORTES ON (TFOLIOS.ID_CORTE = TCORTES.CORTE)
WHERE ((tcortes.id_estilo = :ID_ESTILO) and (tlecturas.fecha = :FECHA_ENTRADA) and (tlecturas.id_personal = :ID_PEROSNAL))
GROUP BY TLECTURAS.ID_PERSONAL, TLECTURAS.FECHA, TLECTURAS.HORA
HAVING ((tlecturas.hora between '16:00:00' and '16:59:59'))
into IECISEIS;
if (Dieciseis is null) then Dieciseis = 0;
SELECT SUM( TFOLIOS.CANTIDAD ) SUM_OF_CANTIDAD
FROM TFOLIOS
INNER JOIN TLECTURAS ON (TFOLIOS.ID = TLECTURAS.ID_FOLIO)
INNER JOIN TCORTES ON (TFOLIOS.ID_CORTE = TCORTES.CORTE)
WHERE ((tcortes.id_estilo = :ID_ESTILO) and (tlecturas.fecha = :FECHA_ENTRADA) and (tlecturas.id_personal = :ID_PEROSNAL))
GROUP BY TLECTURAS.ID_PERSONAL, TLECTURAS.FECHA, TLECTURAS.HORA
HAVING ((tlecturas.hora between '17:00:00' and '17:59:59'))
into IECISIETE;
if (Diecisiete is null) then Diecisiete = 0;
SELECT SUM( TFOLIOS.CANTIDAD ) SUM_OF_CANTIDAD
FROM TFOLIOS
INNER JOIN TLECTURAS ON (TFOLIOS.ID = TLECTURAS.ID_FOLIO)
INNER JOIN TCORTES ON (TFOLIOS.ID_CORTE = TCORTES.CORTE)
WHERE ((tcortes.id_estilo = :ID_ESTILO) and (tlecturas.fecha = :FECHA_ENTRADA) and (tlecturas.id_personal = :ID_PEROSNAL))
GROUP BY TLECTURAS.ID_PERSONAL, TLECTURAS.FECHA, TLECTURAS.HORA
HAVING ((tlecturas.hora between '18:00:00' and '18:59:59'))
into IECIOCHO;
if (Dieciocho is null) then Dieciocho = 0;
SELECT SUM( TFOLIOS.CANTIDAD ) SUM_OF_CANTIDAD
FROM TFOLIOS
INNER JOIN TLECTURAS ON (TFOLIOS.ID = TLECTURAS.ID_FOLIO)
INNER JOIN TCORTES ON (TFOLIOS.ID_CORTE = TCORTES.CORTE)
WHERE ((tcortes.id_estilo = :ID_ESTILO) and (tlecturas.fecha = :FECHA_ENTRADA) and (tlecturas.id_personal = :ID_PEROSNAL))
GROUP BY TLECTURAS.ID_PERSONAL, TLECTURAS.FECHA, TLECTURAS.HORA
HAVING ((tlecturas.hora between '19:00:00' and '19:59:59'))
into IECINUEVE;
if (Diecinueve is null) then Diecinueve = 0;
SELECT SUM( TFOLIOS.CANTIDAD ) SUM_OF_CANTIDAD
FROM TFOLIOS
INNER JOIN TLECTURAS ON (TFOLIOS.ID = TLECTURAS.ID_FOLIO)
INNER JOIN TCORTES ON (TFOLIOS.ID_CORTE = TCORTES.CORTE)
WHERE ((tcortes.id_estilo = :ID_ESTILO) and (tlecturas.fecha = :FECHA_ENTRADA) and (tlecturas.id_personal = :ID_PEROSNAL))
GROUP BY TLECTURAS.ID_PERSONAL, TLECTURAS.FECHA, TLECTURAS.HORA
HAVING ((tlecturas.hora >= '20:00:00'))
into :VEINTE;
if (Veinte is null) then Veinte = 0;
suspend;
End
suspend;
end
SUSPEND;
END
END
El problma que tengo es que desde la uniòn de las dos primeras cosultas el ùltimo registro me lo repite es decir tengo
1, CRCO, Cerrar costado
2, COCU, Coser cullo
3, COPU, Ccoser puño
3, COPU, Coser puño
Y conforme voy agregando consultas obtngo lo mismo en el ùltimo registro de cada conulta:
15/10/2004, 44K107A, 1, CRCO, juan
15/10/2004, 44K107A, 1, CRCO, luis
15/10/2004, 44K107A, 1, CRCO, pedro
15/10/2004, 44K107A, 1, CRCO, ana
15/10/2004, 44K107A, 1, CRCO, ana
15/10/2004, 44K107A, 2, COCU, paty
15/10/2004, 44K107A, 2, COCU, rosio
15/10/2004, 44K107A, 2, COCU, Alicia
15/10/2004, 44K107A, 2, COCU, Alicia
Alguien tiene una idea de donde esta mi error.
Gracias