Hola Chicos:
nuestro amigo Chogo creó este procedimiento almacenado en Firebird el cual trae consulta por parámetro de un máximo de 15 días pero necesito realizar la suma de horas el cual están en el campo de HORA y no se como implementarlo me da muchos errores alguna idea como implementarlo?
Código SQL
[-]
CREATE PROCEDURE CALCULOMARCACIONES(
INICIO DATE,
FINAL DATE,
CODIGO INTEGER)
RETURNS(
ID_EMPLEADOS INTEGER,
FECHA DATE,
NUM_DIA SMALLINT,
DIA VARCHAR(30) CHARACTER SET NONE COLLATE NONE,
ENTRADA0 TIMESTAMP,
SALIDA0 TIMESTAMP,
ENTRADA1 TIMESTAMP,
SALIDA1 TIMESTAMP,
ENTRADA2 TIMESTAMP,
SALIDA2 TIMESTAMP,
FALTA VARCHAR(1) CHARACTER SET NONE COLLATE NONE,
HORASORDINARIAS DECIMAL(12, 2),
HORASEXTRAS DECIMAL(12, 2))
AS
DECLARE VARIABLE FILA INTEGER;
DECLARE VARIABLE COLUMNA SMALLINT;
DECLARE VARIABLE XFECHAHORA TIMESTAMP;
DECLARE VARIABLE HORASORDEXTRA VARCHAR(20);
DECLARE VARIABLE MINUTOSAHORA VARCHAR(20);
BEGIN
FOR
SELECT
TMARCACIONES.ID_EMPLEADOS
-->LINEA.LINEA
FROM
TMARCACIONES
-->INNER JOIN LINEA ON (MARCACIONES_RELOJ.IDLINEA = LINEA.IDLINEA)
WHERE
TMARCACIONES.FECHA BETWEEN :INICIO AND :FINAL AND TMARCACIONES.ID_EMPLEADOS = :CODIGO
GROUP BY
TMARCACIONES.ID_EMPLEADOS
-->LINEA.LINEA
ORDER BY
-->LINEA.LINEA,
TMARCACIONES.ID_EMPLEADOS
INTO
:ID_EMPLEADOS-->,
DO
BEGIN
Fila=1;
FECHA = INICIO;
WHILE (Fila<>16) DO
BEGIN
NUM_DIA=FILA;
COLUMNA=0;
ENTRADA0=NULL;
SALIDA0=NULL;
ENTRADA1=NULL;
SALIDA1=NULL;
ENTRADA2=NULL;
SALIDA2=NULL;
HORASORDINARIAS=NULL;
HORASEXTRAS=NULL;
FOR
SELECT
M.HORA
FROM
TMARCACIONES M
WHERE
M.ID_EMPLEADOS = :ID_EMPLEADOS AND M.FECHA = :FECHA
ORDER BY
m.HORA
INTO
:XFECHAHORA
DO
BEGIN
IF (COLUMNA = 0) THEN
ENTRADA0=XFECHAHORA;
IF (COLUMNA = 1) THEN
SALIDA0=XFECHAHORA;
IF (COLUMNA = 2) THEN
ENTRADA1=XFECHAHORA;
IF (COLUMNA = 3) THEN
SALIDA1=XFECHAHORA;
IF (COLUMNA = 4) THEN
ENTRADA2=XFECHAHORA;
IF (COLUMNA = 5) THEN
SALIDA2=XFECHAHORA;
IF (COLUMNA = 6) THEN
HORASORDINARIAS=XFECHAHORA;
COLUMNA = COLUMNA + 1;
END
IF (ENTRADA0 IS NULL) THEN FALTA = 'X'; ELSE FALTA='';
SUSPEND;
FECHA = INICIO + FILA;
Fila = Fila + 1;
END
END
END;
Saludos
novato_erick