Personalizacion de stored para generar usuario gerencial

Hola, estoy personalizando los stored involucrados en la generación de usuarios gerenciales o administrativos para docentes para que la identificación este formada por el legajo en lugar del numero de inscripcion. Los stored son sp_i_geradm, sp_identifdocenag, sp842_legajodocag , me falta alguno mas? Gracias!

Intente personalizar el stored sp_i_geradm pero me da el mensaje “Error de Indice Unico Duplicado”
Asi me quedo, la idea es enviar el dato del legajo en vez del nro de inscripcion…Por favor me podian ayudar si estoy bien orientada o le estoy errando mucho…Gracias!

CREATE PROCEDURE sp_i_geradm ( p_UA LIKE sga_personas.unidad_academica,
p_Apellido LIKE sga_personas.apellido,
p_Nombres LIKE sga_personas.nombres,
p_Nacionalidad LIKE sga_personas.nacionalidad,
p_PaisDocumento LIKE sga_personas.pais_documento,
p_TipoDocumento LIKE sga_personas.tipo_documento,
p_NroDocumento LIKE sga_personas.nro_documento,
p_Sexo LIKE sga_personas.sexo,
p_TipoUsuario LIKE aca_usuarios_ag.tipo_usuario,
p_NroInscripcion LIKE sga_personas.nro_inscripcion
)
RETURNING smallint, varchar(255);
– 0- OK, -1- Error, 1-Observaciones
– mensaje

– Variables de retorno
DEFINE iStatus smallint;
DEFINE vcMsg varchar(255);

– Variables para el manejo de excepciones
DEFINE SQLErr integer;
DEFINE IsamErr integer;
DEFINE ErrorInfo varchar(76);

– var. locales.
DEFINE vc_UA LIKE sga_personas.unidad_academica;
DEFINE vc_NroInscrip LIKE sga_personas.nro_inscripcion;
DEFINE vd_FechaInsc LIKE sga_personas.fecha_inscripcion;
DEFINE vc_Identif LIKE aca_usuarios_ag.identificacion;
DEFINE vc_Rtn CHAR(1);
DEFINE vc_param_sistema like sga_param_sistema.valor;
DEFINE vc_Legajo LIKE aca_usuarios_ag.identificacion;

– blk de excepciones
ON EXCEPTION SET SQLErr, IsamErr, ErrorInfo
LET iStatus = SQLErr;
LET vcMsg = ErrorInfo;
RETURN iStatus, vcMsg;
END EXCEPTION;

BEGIN
LET vc_UA = NULL;
LET vc_NroInscrip = NULL;
LET vd_FechaInsc = TODAY;
LET vc_Otra = NULL;

– recupero la unidad academica actual.
IF p_UA IS NULL THEN
EXECUTE PROCEDURE ua ( USER ) INTO vc_UA;
ELSE
LET vc_UA = p_UA;
END IF;

– consulto la forma de generación del nro_inscripcion
EXECUTE PROCEDURE sp_param_sistema(‘generacion_nro_inscripcion_persona’) into vc_param_sistema;

IF vc_param_sistema = ‘A’ THEN
– armo el numero de inscripcion del usuario gerencial
EXECUTE PROCEDURE sp_nro_insc_geradm(vc_UA, p_TipoUsuario) INTO vc_NroInscrip;
ELSE
IF p_NroInscripcion IS NULL THEN
LET iStatus = -1 ;
LET vcMsg = ‘800202, Nro. Inscripción’ ;
RETURN iStatus, vcMsg;
ELSE
LET vc_NroInscrip = p_NroInscripcion;
END IF;

END IF;

– Controlo que el documento del usuario a crear no exista en sga_personas.
IF (SELECT COUNT(*)
FROM sga_personas
WHERE pais_documento = p_PaisDocumento
AND tipo_documento = p_TipoDocumento
AND nro_documento = p_NroDocumento ) > 0 THEN

  -- Recupero el Nro. de Inscripcion para utilizarlo en el usuario gerencial
          
   SELECT nro_inscripcion
    INTO vc_NroInscrip
    FROM sga_personas
   WHERE tipo_documento = p_TipoDocumento
     AND nro_documento = p_NroDocumento;

------------------------ESTO ESTA MODIFICADO DEL ORIGINAL-----------------------------------
IF p_TipoUsuario =‘DOC’
THEN
SELECT legajo
INTO vc_Legajo
FROM sga_docentes
WHERE nro_inscripcion = Vc_NroInscrip;
ELSE SELECT legajo
INTO vc_Legajo
FROM sga_alumnos
WHERE nro_inscripcion = Vc_NroInscrip;

END IF;

  -- Ingreso el registro en personas.
  INSERT INTO sga_personas ( unidad_academica, nro_inscripcion, fecha_inscripcion, apellido, nombres, pais_documento, tipo_documento, nro_documento, sexo, nacionalidad)
       VALUES ( vc_UA, vc_NroInscrip, vd_FechaInsc, p_Apellido, p_Nombres, p_PaisDocumento, p_TipoDocumento, p_NroDocumento, p_Sexo, p_nacionalidad ) ;
  
  -- Verifico si la persona tiene algun Dato Censal cargado.
  EXECUTE PROCEDURE sp_dato_cen_valido ( vc_UA, vc_Nroinscrip ) INTO vc_Rtn;
  
  IF vc_Rtn = "I" THEN
     EXECUTE PROCEDURE sp_crea_datocensal ( vc_UA, vc_Nroinscrip ) ;
  END IF;

END IF;

----------------------------ESTO ESTA MODIFICADO DEL ORIGINAL--------------------------------------

– Traigo una identificacion para el usuario de AG del usuario gerencial
EXECUTE PROCEDURE sp_identGerAdmAg ( vc_UA, vc_Legajo, p_TipoUsuario ) INTO vc_Identif;


– Ingreso del usuario de AutoGestion.
EXECUTE PROCEDURE sp_CrearUsuarioAG( vc_UA, vc_NroInscrip, vc_Identif, p_TipoUsuario) INTO iStatus, vcMsg;
IF iStatus < 0 THEN
RETURN iStatus, vcMsg;
END IF;

– Finalizo correctamente.
LET iStatus = 0 ;
LET vcMsg = ‘OK’ ;
RETURN iStatus, vcMsg;

END;
END PROCEDURE

Lorena:

En que versión del Guaraní estabas? No creo que valga la pena personalizar eso, ya que a partir de la versión 2.7 la identificación de los usuarios es única por persona, es decir que si la persona es profesor y gerencial, y aparte fue alumno, tendrá una única identificación y clave para entrar, y luego de entrar selecciona si quiere trabajar como alumno, como profesor o como usuario gerencial.

En pocas palabras, esa personalización que antes podía tener sentido, a partir que migres a la versión 2.7 o superiores la perderás. Por otro lado, te recomiendo migrar a las últimas versiones (en este momento la 2.7) en cuanto puedas.

Saludos

Gustavo

Lorena, que la identificacion sea el nro de legajo solo aplica a alumnos y en todo caso a docentes, pero no a usuarios administrativos.

En versiones anteriores a 2.7.0 cada usuario, en el caso de alumnos tienen una identificación diferente por cada carrera, con lo cual podrias llegar a tener problemas en estos casos:

  • Exiten alumnos en mas de una carrera y el nro de legajo es el mismo.
  • Si existe el mismo número de legajo de alumno que un número de legajo de docente

Para version 2.7.0 en adelante, existe un único nro de identificación por usuario del sistema, podrias llegar a tener problemas en el caso:

  • Si existe el mismo número de legajo de alumno que un número de legajo de docente

Por estas causas te puede estar dando el error de indice duplicado.