locked
Como hacer que no se solapen las actividades si es que ya se tiene otra actividad en ese horario RRS feed

  • Pregunta

  • Buenas tarde tengo el siguiente código:

    IF @object_type = '33' AND @transaction_type IN ('A','U')
     BEGIN
      DECLARE @USUARIO AS NVARCHAR(100)
      DECLARE @FECHAINICIO AS date
      DECLARE @HORAINICIO AS Time
      SET @FECHAINICIO =(SELECT Recontact FROM OCLG WHERE ClgCode = @list_of_cols_val_tab_del)
      SET @USUARIO = (SELECT AttendUser FROM OCLG WHERE ClgCode = @list_of_cols_val_tab_del)
      SET @HORAINICIO = (SELECT BeginTime FROM OCLG WHERE ClgCode =@list_of_cols_val_tab_del)
       IF EXISTS (Select COUNT(AttendUser) FROM OCLG WHERE EndTime <= @HORAINICIO AND Recontact=@FECHAINICIO AND AttendUser=@USUARIO HAVING COUNT (AttendUser)>1)
          BEGIN
         SET @error= 1011
         SET @error_message='EL USUARIO YA TIENE UNA ACTIVIDAD PROGRAMADA'

        END
     END

    Lo que quiero hacer es que en el momento que el usuario quiera agregar una activad, valide que hora de inicio de la actividad no caiga dentro del periodo de otra actividad

    De antemano muchas gracias

    miércoles, 15 de noviembre de 2017 21:57

Respuestas

  • si nos pasas un par de insert en la tabla oclg con los datos que realmente tienes  será un placer ayudarte.

    Básicamente no necesitas tanto set como estas haciendo , esos sets impiden que te funcione bien porque si hay mas de un registro se quedan únicamente con uno (no con el primero, aleatoriamente con uno)  así que el asunto hay que resolverlo en un query  teniendo como parámetro @fecha, @horainicio de la nueva actividad .

    Saludos


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    jueves, 16 de noviembre de 2017 7:48
    Moderador

Todas las respuestas

  • si nos pasas un par de insert en la tabla oclg con los datos que realmente tienes  será un placer ayudarte.

    Básicamente no necesitas tanto set como estas haciendo , esos sets impiden que te funcione bien porque si hay mas de un registro se quedan únicamente con uno (no con el primero, aleatoriamente con uno)  así que el asunto hay que resolverlo en un query  teniendo como parámetro @fecha, @horainicio de la nueva actividad .

    Saludos


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    jueves, 16 de noviembre de 2017 7:48
    Moderador
  • Lo que pasa es que ese es un candado para SAP BO que necesito hacer y no puedo acceder a los procedimientos almacenados donde se crean los insert, el set lo ocupo para que tome el valor que esta en la pantalla el momento que se va a crear, y para poder hacer la comparación entre lo que esta en la pantalla y lo que esta en la tabla OCLG, ya logre resolver parte de mi problema, mi código es el siguiente:

    IF @object_type = '33' AND @transaction_type IN ('A','U')
     BEGIN
      DECLARE @USUARIO AS NVARCHAR(100)
      DECLARE @FECHAINICIO AS date
      DECLARE @HORAINICIO AS VARCHAR(8)
      SET @FECHAINICIO =(SELECT Recontact FROM OCLG WHERE ClgCode = @list_of_cols_val_tab_del)
      SET @USUARIO = (SELECT AttendUser FROM OCLG WHERE ClgCode = @list_of_cols_val_tab_del)
      SET @HORAINICIO = (SELECT CONVERT(VARCHAR(8),(BeginTime)) FROM OCLG WHERE ClgCode = @list_of_cols_val_tab_del)
       IF EXISTS (Select COUNT(AttendUser) FROM OCLG where CONVERT(VARCHAR(8),BeginTime)<@HORAINICIO AND Recontact=@FECHAINICIO AND AttendUser=@USUARIO HAVING COUNT (AttendUser)>1) 
          BEGIN
         SET @error= 1011
         SET @error_message='EL USUARIO YA TIENE UNA ACTIVIDAD PROGRAMADA'

        END
     END

    ---------------------------------------------------------------------------------------------------------------

    El problema ahora es que si manda el mensaje de error, siempre y cuando se haga la actividad a las mismas horas que fue creada la anterior, pero ahora si por ejemplo mi primera actividad de de 8 am a 5 pm y pongo la segunda actividad de 1 pm a 2 pm si me permite generar la actividad cuando no debe de permitirla hacer porque es ese lapso esta ocupada la persona haciendo la primera actividad

    De antemano muchas gracias

    jueves, 16 de noviembre de 2017 20:01