Ver Mensaje Individual
  #8 (permalink)  
Antiguo 03/12/2010, 02:50
Avatar de Joch_pa
Joch_pa
 
Fecha de Ingreso: octubre-2009
Ubicación: Pachuca De Soto, Hidalgo, Mexico, Mexico
Mensajes: 122
Antigüedad: 15 años, 2 meses
Puntos: 7
Respuesta: Procedimiento "Hora de entrada / Hora de salida

pues bueno ya que tienes tu tabla (con el autoincrementable) tu procedimiento deberia ser:

Trabajador checa tarjeta
1.- buscar si existe un registro con hora de entrada pero sin hora de salida
a)afirmativo entonces trabajador sale, actualizar ese registro en el campo salida
b)Negativo, el trabajador entra, se inserta un registro nuevo con el campo entrada
y con el campo salida en Null
2.- Decirle al trabajador si checo salida o entrada.

El procedure seria algo asi:

Código SQL:
Ver original
  1. DROP TABLE dbo.Puntualidad
  2. CREATE TABLE dbo.Puntualidad
  3. (
  4.     cod_asistencia NUMERIC(9) PRIMARY KEY IDENTITY NOT FOR replication,
  5.     ID NUMERIC(9),
  6.     hora_entrada Datetime NULL,
  7.     hora_salida  Datetime NULL
  8. )
  9. GO
  10.  
  11. ALTER PROCEDURE dbo.ChecadorTrabajador
  12.     @id NUMERIC(9)=0  -- identificador del trabajador (leido por codigo de barras)
  13.    
  14. AS
  15.  
  16.     --variable de control para saber si existe registro
  17.     DECLARE @AI NUMERIC(9)
  18.     --variable para indicar que operacion de realizo
  19.     DECLARE @resultado VARCHAR(20)
  20.     --verificar si existe algun registro
  21.     --del mismo dia, no puede trabajar mas de 24 horas
  22.     --(modificar aqui segun reglas del negocio)
  23.     SET @AI = isnull((SELECT top 1 cod_asistencia FROM dbo.Puntualidad
  24.         WHERE ID = @id AND hora_salida IS NULL
  25.         AND datediff(d,hora_entrada,getdate())<1
  26.         ),0)
  27.    
  28.     IF @AI=0
  29.     --si no existe algun registro
  30.     BEGIN
  31.         INSERT INTO dbo.Puntualidad (ID,hora_entrada,hora_salida)
  32.         VALUES (@id,getdate(),NULL)
  33.         SET @resultado = 'Entrada'
  34.     END
  35.     ELSE
  36.     BEGIN
  37.         --el trabajador sale
  38.         UPDATE dbo.Puntualidad
  39.         SET
  40.             hora_salida = getdate()
  41.         WHERE cod_asistencia=@AI
  42.         SET @resultado = 'Salida'
  43.  
  44.     END
  45.     IF @@error<>0
  46.     BEGIN
  47.         SET @resultado = 'Error'
  48.     END
  49.     SELECT @resultado
  50. GO
  51.  
  52. EXEC dbo.ChecadorTrabajador 1
  53. SELECT * FROM dbo.Puntualidad
  54. EXEC dbo.ChecadorTrabajador 2
  55. SELECT * FROM dbo.Puntualidad
  56. EXEC dbo.ChecadorTrabajador 3
  57. SELECT * FROM dbo.Puntualidad
  58. EXEC dbo.ChecadorTrabajador 2
  59. SELECT * FROM dbo.Puntualidad

Última edición por Joch_pa; 03/12/2010 a las 03:02