Ver Mensaje Individual
  #3  
Antiguo 08-03-2011
Avatar de Chogo
Chogo Chogo is offline
Miembro
 
Registrado: may 2005
Ubicación: Pto Cortes,Honduras,C.A.
Posts: 148
Reputación: 19
Chogo Va por buen camino
Este es el storeprocedure lo que hace es mostrar sus marcaciones de asistencia el resultado se observa en la imagen en la parte de abajo.

http://www.subirimagenes.com/otros-m...1-6079805.html

Código SQL [-]
CREATE PROCEDURE MARCACIONES_CODEMPELEADO(
  INICIO DATE,
  FINAL DATE,
  CODIGO INTEGER)
RETURNS(
  LINEA VARCHAR(30) CHARACTER SET NONE,
  CODEMPLEADO INTEGER,
  FECHA DATE,
  NUM_DIA SMALLINT,
  DIA VARCHAR(15) CHARACTER SET NONE,
  ENTRADA0 TIMESTAMP,
  SALIDA0 TIMESTAMP,
  ENTRADA1 TIMESTAMP,
  SALIDA1 TIMESTAMP,
  ENTRADA2 TIMESTAMP,
  SALIDA2 TIMESTAMP,
  FALTA VARCHAR(1) CHARACTER SET NONE,
  HORAS_ORD VARCHAR(10) CHARACTER SET NONE,
  HORAS_25 VARCHAR(10) CHARACTER SET NONE,
  HORAS_50 VARCHAR(10) CHARACTER SET NONE,
  HORAS_75 VARCHAR(10) CHARACTER SET NONE,
  HORAS_100 VARCHAR(10) CHARACTER SET NONE,
  MINUTOS_ORD SMALLINT,
  MINUTOS_25 SMALLINT,
  MINUTOS_50 SMALLINT,
  MINUTOS_75 SMALLINT,
  MINUTOS_100 SMALLINT,
  MINUTOS_ORD0 SMALLINT,
  MINUTOS_ORD1 SMALLINT,
  MINUTOS_ORD2 SMALLINT,
  MINUTOS_250 SMALLINT,
  MINUTOS_251 SMALLINT,
  MINUTOS_252 SMALLINT,
  MINUTOS_500 SMALLINT,
  MINUTOS_501 SMALLINT,
  MINUTOS_502 SMALLINT,
  MINUTOS_750 SMALLINT,
  MINUTOS_751 SMALLINT,
  MINUTOS_752 SMALLINT,
  MINUTOS_1000 SMALLINT,
  MINUTOS_1001 SMALLINT,
  MINUTOS_1002 SMALLINT)
AS
DECLARE VARIABLE FILA INTEGER;
DECLARE VARIABLE COLUMNA SMALLINT;
DECLARE VARIABLE XFECHA_HORA TIMESTAMP;
BEGIN

  FOR
                    SELECT
                    MARCACIONES_RELOJ.CODEMPLEADO,
                    LINEA.LINEA
                    FROM
                    MARCACIONES_RELOJ
                      INNER JOIN LINEA ON (MARCACIONES_RELOJ.IDLINEA = LINEA.IDLINEA)
                    WHERE
                    FECHA BETWEEN :INICIO AND :FINAL AND MARCACIONES_RELOJ.CODEMPLEADO = :CODIGO
                    GROUP BY
                    MARCACIONES_RELOJ.CODEMPLEADO,
                    LINEA.LINEA
                    ORDER BY
                    LINEA.LINEA,
                    MARCACIONES_RELOJ.CODEMPLEADO
  
        INTO
            :CODEMPLEADO,
            :LINEA
  DO 
  BEGIN
       /*ESTE CICLO CREA 7 REGISTROS, ES UN REGISTRO DE POR CADA DIA DE LA SEMANA*/
       Fila=1;
       FECHA = INICIO;
       WHILE (Fila<>8) DO
       BEGIN 
               NUM_DIA=FILA;
               COLUMNA=0;
               
               ENTRADA0=NULL;
               SALIDA0=NULL;
               
               ENTRADA1=NULL;
               SALIDA1=NULL;
               
               ENTRADA2=NULL;
               SALIDA2=NULL;
               
               FOR 
                       SELECT 
                          FECHA_HORA 
                       FROM 
                          MARCACIONES_RELOJ 
                       WHERE 
                          MARCACIONES_RELOJ.CODEMPLEADO = :CODEMPLEADO AND  MARCACIONES_RELOJ.FECHA = :FECHA
                       ORDER BY
                             MARCACIONES_RELOJ.FECHA_HORA
                       INTO 
                             :XFECHA_HORA                            
                       
               DO
               BEGIN
                   /* AQUI CONSULTAS LAS MARCACIONES DE UN EMPLEADO EN UNA SOLA FECHA */     
                   
                   
                   IF (COLUMNA = 0) THEN
                   ENTRADA0=XFECHA_HORA;
                        
                   IF (COLUMNA = 1) THEN
                   SALIDA0=XFECHA_HORA;

                   IF (COLUMNA = 2) THEN
                   ENTRADA1=XFECHA_HORA;
                   
                   IF (COLUMNA = 3) THEN
                   SALIDA1=XFECHA_HORA;                   

                   IF (COLUMNA = 4) THEN
                   ENTRADA2=XFECHA_HORA;
                   
                   IF (COLUMNA = 5) THEN
                   SALIDA2=XFECHA_HORA;  
                   
                   
                   COLUMNA = COLUMNA + 1;
               END 
              
              IF (ENTRADA0 IS NULL) THEN FALTA = 'X'; ELSE FALTA='';                  
              IF (NUM_DIA = 1) THEN DIA = 'LUNES';
              IF (NUM_DIA = 2) THEN DIA = 'MARTES';
              IF (NUM_DIA = 3) THEN DIA = 'MIERCOLES';
              IF (NUM_DIA = 4) THEN DIA = 'JUEVES';
              IF (NUM_DIA = 5) THEN DIA = 'VIERNES';
              IF (NUM_DIA = 6) THEN DIA = 'SABADO';
              IF (NUM_DIA = 7) THEN DIA = 'DOMINGO';
              
               
              /* CALCULO DE LAS HORAS ORDINARIAS Y EXTRA*/ 
              SELECT MINUTOS_ORD, MINUTOS_25, MINUTOS_50, MINUTOS_75, MINUTOS_100 FROM HORAS_ORDINARIA_EXTRA(:SALIDA0,:ENTRADA0) INTO MINUTOS_ORD0,MINUTOS_250,MINUTOS_500,MINUTOS_750, MINUTOS_1000;
              SELECT MINUTOS_ORD, MINUTOS_25, MINUTOS_50, MINUTOS_75, MINUTOS_100 FROM HORAS_ORDINARIA_EXTRA(:SALIDA1,:ENTRADA1) INTO MINUTOS_ORD1,MINUTOS_251,MINUTOS_501,MINUTOS_751, MINUTOS_1001;
              SELECT MINUTOS_ORD, MINUTOS_25, MINUTOS_50, MINUTOS_75, MINUTOS_100 FROM HORAS_ORDINARIA_EXTRA(:SALIDA2,:ENTRADA2) INTO MINUTOS_ORD2,MINUTOS_252,MINUTOS_502,MINUTOS_752, MINUTOS_1002;
              
              MINUTOS_ORD = MINUTOS_ORD0 + MINUTOS_ORD1 + MINUTOS_ORD2;
              MINUTOS_25 = MINUTOS_250 + MINUTOS_251 + MINUTOS_252;
              MINUTOS_50 = MINUTOS_500 + MINUTOS_501 + MINUTOS_502;
              MINUTOS_75 = MINUTOS_750 + MINUTOS_751 + MINUTOS_752;
              MINUTOS_100 = MINUTOS_1000 + MINUTOS_1001 + MINUTOS_1001;
              
              SELECT HORAS FROM MINUTOS_A_HORA(:MINUTOS_ORD) INTO HORAS_ORD;
              SELECT HORAS FROM MINUTOS_A_HORA(:MINUTOS_25) INTO HORAS_25;
              SELECT HORAS FROM MINUTOS_A_HORA(:MINUTOS_50) INTO HORAS_50;
              SELECT HORAS FROM MINUTOS_A_HORA(:MINUTOS_75) INTO HORAS_75;
              SELECT HORAS FROM MINUTOS_A_HORA(:MINUTOS_100) INTO HORAS_100;
              
               
              SUSPEND;
              FECHA = INICIO + FILA;
              Fila = Fila + 1;
              
       END       
       /* Procedure body */
  END
END

Última edición por Chogo fecha: 08-03-2011 a las 22:41:38.
Responder Con Cita