Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-11-2004
Avatar de jzginez
jzginez jzginez is offline
Miembro
 
Registrado: sep 2003
Ubicación: Puebla, México
Posts: 247
Poder: 21
jzginez Va por buen camino
Resultados duplicados en procedimientos

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
 /* Estilo para el día*/
  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
   /* Operaciones del estilo */
   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
    /* Quien hizo la operación*/
    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
     /*Lectura por horas*/
     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
__________________
Espero poder seguir exprimiéndote el cerebro 8)
Jorge Zamora Ginez
Puebla, Pue. México
Responder Con Cita
  #2  
Antiguo 06-11-2004
celades celades is offline
No confirmado
 
Registrado: may 2003
Ubicación: Torroella de Montgrí (Girona)
Posts: 42
Poder: 0
celades Va por buen camino
Hola

no se si te he entendido bien pero creo que solo debes poner un suspend en el nivel mas interno los otros hacen repetir los resultados
Código SQL [-]
suspend;
    End
    /*suspend;*/
   end
 /*  SUSPEND;*/
  END
END

Saludos
Responder Con Cita
  #3  
Antiguo 09-11-2004
Avatar de jzginez
jzginez jzginez is offline
Miembro
 
Registrado: sep 2003
Ubicación: Puebla, México
Posts: 247
Poder: 21
jzginez Va por buen camino
gracias, lo probare
__________________
Espero poder seguir exprimiéndote el cerebro 8)
Jorge Zamora Ginez
Puebla, Pue. México
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 23:43:45.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi