Ver Mensaje Individual
  #9 (permalink)  
Antiguo 04/12/2010, 16:24
bacek_89
 
Fecha de Ingreso: diciembre-2010
Ubicación: victoria
Mensajes: 24
Antigüedad: 13 años, 11 meses
Puntos: 0
Respuesta: Procedimiento "Hora de entrada / Hora de salida

Cita:
Iniciado por Joch_pa Ver Mensaje
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
Gracias que buena solucion =O se ve que sabes mucho, espero un dia sercano poder pensar asi. ya que voy comenzando en este mundo

GRACIAS