Foros del Web » Bases de Datos » SQL Server »

Procedimiento "Hora de entrada / Hora de salida

Estas en el tema de Procedimiento "Hora de entrada / Hora de salida en el foro de SQL Server en Foros del Web. Este es mi primera vez en este foro espero y me puedan ayudar se los agradecería mucho. estoy haciendo un sistema para la administración de ...
  #1 (permalink)  
Antiguo 01/12/2010, 00:40
 
Fecha de Ingreso: diciembre-2010
Ubicación: victoria
Mensajes: 24
Antigüedad: 3 años, 7 meses
Puntos: 0
Procedimiento "Hora de entrada / Hora de salida

Este es mi primera vez en este foro espero y me puedan ayudar se los agradecería mucho.

estoy haciendo un sistema para la administración de kinders y guarderías, los módulos son 3


>Control de Personal ( listo )
>Control de Alumnos ( listo )
>Control de Asistencia ( en proceso )

En este ultimo quiero implementar un TextBox que lea el ID, mediante un lector de código de barras ( el lector ya lo tengo )

pero mi problema es al querer guardar los datos en la base de datos, no se como hacer el procedimiento almacenado.

tengo una tabla con tres campos ( no se si sea la mejor forma u,u ) :

-----------------
Puntualidad
-----------------
>ID
>hora_entrada
>hora_salida

Mi gran duda es esta: ( recreare el escenario )

Llega un empleado con su tarjeta, la checa en el lector de codigo de barras
ala Hora de salida la vuelve a checar...

al dia siguente que ??? :S

la verdad estoy muy confundido, no imagino la forma de como hacer eso u,u
se me cerro el mundo, necesito un poco de refresh.


-------------------------------------------------------------
Software: Visual studio 2010, SQL Server 2008
-------------------------------------------------------------
  #2 (permalink)  
Antiguo 01/12/2010, 06:33
 
Fecha de Ingreso: julio-2010
Mensajes: 90
Antigüedad: 4 años
Puntos: 0
Respuesta: Procedimiento "Hora de entrada / Hora de salida

En lo personal, aunque nose si sea lo mas optimo.

Dejaria un campo como Autoincrementable.
asi, no tendrias datos iguales y no te reclamaria por las PK.
Las horas y salidas, podrias dejarla como DATETIME.
y las controlas con converts para sacar las fechas y horas especificas si quieres.
EJ.

HEntrada = '01-12-2010 12:00:00'

Select convert(varchar(10),HEntrada,108) para la Hora...
Select convert(varchar(10),HEntrada,103) para las fechas...

Cita:
CAMPO_AUTOINCREMENTABLE ID HEntrada HSalida
1 1234 '01-12-2010 12:00:00' '01-19-2010 12:00:00'
2 1234 '02-12-2010 12:10:00' ------------------------------
3 1234 '03-12-2010 12:05:00' ------------------------------
Separa las columnas... para que puedas visualisar mejor el ejemplo
  #3 (permalink)  
Antiguo 01/12/2010, 08:32
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 1.924
Antigüedad: 7 años, 6 meses
Puntos: 409
Respuesta: Procedimiento "Hora de entrada / Hora de salida

Buenos días bacek_89:

El proceso para tomar asistencia puede ser muy sencillo o muy complicado, todo depende de tu lógica de negocio. Estás considerando que un empleado sólo checa una vez su entrada y una vez su salida, pero ¿qué pasa si por alguna cuestión el empleado tiene que entrar y salir varias veces durante la jornada laboral?

En mi lugar de trabajo suele suceder que tenemos que salir a reuniones con los clientes, por lo que es común que una persona registre varias entradas y salidas al día. Tienes que revisar muy bien cuales son las políticas para poder modela tu BD.

Saludos
Leo.
  #4 (permalink)  
Antiguo 01/12/2010, 11:46
 
Fecha de Ingreso: diciembre-2010
Ubicación: victoria
Mensajes: 24
Antigüedad: 3 años, 7 meses
Puntos: 0
Respuesta: Procedimiento "Hora de entrada / Hora de salida

De escho si habia pensado en ese punto de que un trabajador puede entrar y salir varias veces en el dia.

pero no entiendo comose podria hacer la verdad
  #5 (permalink)  
Antiguo 01/12/2010, 11:53
 
Fecha de Ingreso: julio-2010
Mensajes: 90
Antigüedad: 4 años
Puntos: 0
Respuesta: Procedimiento "Hora de entrada / Hora de salida

Ocupa un campo autoincrementable y problema solucionado...

Nosotros lo hacemos asi...
Aproposito, como manejas los campos de Hora?... los manejas con fecha incluida o solo hora?
  #6 (permalink)  
Antiguo 01/12/2010, 12:47
 
Fecha de Ingreso: diciembre-2010
Ubicación: victoria
Mensajes: 24
Antigüedad: 3 años, 7 meses
Puntos: 0
Respuesta: Procedimiento "Hora de entrada / Hora de salida

Con fecha incluida, por si algun dia me piden el reporte de algun dia en particular
poder mostrarles a que hora llego cada trabajador ...

y no creo que el tema haya quedado solucionado. no entendí nada =/ de lo del campo autoicrementable. si se lo que es. pero no se como lo aplicarías tu.

me puedes explicar a que te refieres ???
  #7 (permalink)  
Antiguo 01/12/2010, 13:00
 
Fecha de Ingreso: julio-2010
Mensajes: 90
Antigüedad: 4 años
Puntos: 0
Respuesta: Procedimiento "Hora de entrada / Hora de salida

Cita:
create table Asistencia
(cod_asistencia int identity (1,1),
Cod_personal varchar(20),
Hora_Ingreso Datetime,
Hora_salida Datetime)
La tabla quedaria algo asi.

El campo cod_asistencia es identity(1,1) eso indica que parte del 1 y cadavez que tu ingreses un registro nuevo, aumentara en 1.
  #8 (permalink)  
Antiguo 03/12/2010, 01:50
Avatar de Joch_pa  
Fecha de Ingreso: octubre-2009
Ubicación: Pachuca De Soto, Hidalgo, Mexico, Mexico
Mensajes: 120
Antigüedad: 4 años, 9 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 02:02
  #9 (permalink)  
Antiguo 04/12/2010, 15:24
 
Fecha de Ingreso: diciembre-2010
Ubicación: victoria
Mensajes: 24
Antigüedad: 3 años, 7 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

Etiquetas: entrada, procedimiento, salida
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:29.
SEO by vBSEO 3.3.2