04/12/2010, 16:24
|
| | 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 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 originalDROP TABLE dbo.Puntualidad CREATE TABLE dbo.Puntualidad ( cod_asistencia NUMERIC(9) PRIMARY KEY IDENTITY NOT FOR replication, ID NUMERIC(9), hora_entrada Datetime NULL, hora_salida Datetime NULL ) GO ALTER PROCEDURE dbo.ChecadorTrabajador @id NUMERIC(9)=0 -- identificador del trabajador (leido por codigo de barras) AS --variable de control para saber si existe registro DECLARE @AI NUMERIC(9) --variable para indicar que operacion de realizo DECLARE @resultado VARCHAR(20) --verificar si existe algun registro --del mismo dia, no puede trabajar mas de 24 horas --(modificar aqui segun reglas del negocio) SET @AI = isnull((SELECT top 1 cod_asistencia FROM dbo.Puntualidad WHERE ID = @id AND hora_salida IS NULL AND datediff(d,hora_entrada,getdate())<1 ),0) IF @AI=0 --si no existe algun registro BEGIN INSERT INTO dbo.Puntualidad (ID,hora_entrada,hora_salida) VALUES (@id,getdate(),NULL) SET @resultado = 'Entrada' END ELSE BEGIN --el trabajador sale UPDATE dbo.Puntualidad SET hora_salida = getdate() WHERE cod_asistencia=@AI SET @resultado = 'Salida' END IF @@error<>0 BEGIN SET @resultado = 'Error' END SELECT @resultado GO EXEC dbo.ChecadorTrabajador 1 SELECT * FROM dbo.Puntualidad EXEC dbo.ChecadorTrabajador 2 SELECT * FROM dbo.Puntualidad EXEC dbo.ChecadorTrabajador 3 SELECT * FROM dbo.Puntualidad EXEC dbo.ChecadorTrabajador 2 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 |