crear nueva operación guarani 2.7

Hola:
Necesitamos crear dos operaciones nueva. Una es un listado de inscripciones a cursadas de un alumno (parámetro: legajo) y la otra es inscripciones de exámenes que el alumno realizó a lo largo de su carrera.
Hemos creado el datawindows que permite visualizar las inscripciones con un parámetro (legajo). En power builder funciona.
Pero cuando se lo agregamos a la ventana w_reporte y agregamos un datawindows para capturar el parámetro (dp_alumno_act). No funciona.
Es algo similar a la operación cur00106 pero con todas las cursadas.

Los parámetros de la operación para inscribir a cursada “821cur00” :

[/size]821cur00,1,w_reporte, uo_dw_filtros,dp_alumno_act,uo_dw, dr_insc_cur_alumno, dl_insc_cur_alumn

Que está faltando?
Gracias

Alberto, el reporte como decis es similar a la operación cur00106- Inscripciones a Cursadas de un Alumno, con la unica diferencia que queres mostrar todas las incripciones que ha tenido a lo largo de la cursada de la carrera y no solo las inscripiciones a comisiones en períodos lectivos vigentes.
Deberias generar la datawindow en base a la que existe en cur00016 y sacarle la condición relacionada con comisiones vigentes.
En este caso la datawindow del reporte tiene como fuente de datos un stored procedure.

Todos los parametros de la datawindow del filtro de busqueda se pasaran a la datawindow del reporte, con lo cual todos los campos y en ese mismo orden deberan estar como argmentos de retrieve de la datawindow usada en el reporte, ya que estas usando el objeto uo_dw_filtros. Entonces todos los campos de la dw dp_alumno_act se pasaran como argumentos de retrieve a la datawindow dr_insc_cur_alumno. Fijate que eso este bien.

HOLA Alejandro:
Podés entrar al TeamViewer y darme una mano con este tema?
496750869
1674

Para sacarle la condición del select y mostrar todas las inscripciones realizadas hasta la fecha, debo encontrar el stored procedure, ya que me decís que el datawindows dr_insc_cursadas_un?alumnopero no se como se llama ni donde está, ni como lo puedo ver en el power builder.
Disculpá mi ignoracia pero no he tenido entrenamiento en power builder y solo sé hacer lo elemental que he venido descubriendo. No hay bibliografia específica sobre el tema y su relación con el guarani.
Se que estamos en una versión vieja (2.7) pero no se puede hacer avances sin antes no terminar de implemetar todas las personalizaciones que necesitamos para que funcione a pleno. El aplicativo está en producción, pero van surgiendo la necesidad de algunas personalizaciones.
Saludos

Buscas la datawindows y la seleccionas para editar.
Luego vas a la solapa Column Specification y alli boton derecho del mouse vas a Stored Procedure, este se habilita solo si la fuente de datos es un stored procedure. Ahi veras cual es el procedure que en este caso es el sp_insccuralu

Si esta solapa no esta visible, la podes seleccionar desde el menu: View > Column Specifications

Adjunto imagen con el ejemplo.

Lo que podes hacer es lo siguiente:

  1. En base al procedure sp_insccuralu crear otro procedure sacando la condicion que esta demas para que recuepre todas las inscripciones a cursadas del alumno.

  2. Editar esta datawindow, cambiarle el nombre del stored procedure por el que creaste en el punto 1 y guardar la datawindow con otro nombre.

  3. Hacer lo mismo con la datawindow dl_insc_cursadas_un_alumno

  4. Crear la operacion en base a esta operacion de Guarani 2, cambiando el codigo de la operacion, el nombre y el nombre de las dos datawindows del reporte que se registran en la tabla acc_parametros.
    Este catalogo de la operación nueva guardalo en alguna seccion donde tengas registro de las operaciones personalizadas.


editar_datawindow_cambiar_fuente_de_datos.JPG

editar_datawindow_cambiar_fuente_de_datos.JPG_thumb.png

Gracias Alejandro.
Voy a probar.

El stored procedure sp_insccuralu es el siguiente y no encuentro donde decirle que muestre todas las inscripciones del alumno. Hay un sp_inscCursadas con
C mayuscula…

CREATE PROCEDURE “dba”.sp_insccuralu( pUA LIKE sga_alumnos.unidad_academica, pCarrera LIKE sga_alumnos.carrera, pLegajo LIKE sga_alumnos.legajo )
RETURNING varchar(5), varchar(10), varchar(30), varchar(30), varchar(5), varchar(255), varchar(15), varchar(5), integer, varchar(15), varchar(5), varchar(255), varchar(20), date, integer, varchar(20), varchar(20), varchar(15), varchar(10),integer, varchar(5), varchar(255);

– Descripcion del RETURN:
– varchar(5), – vc_UA
– varchar(10), – vc_NroInscripcion
– varchar(30), – vc_PersonaNombres
– varchar(30), – vc_PersonaApellido
– varchar(5), – vc_Carrera
– varchar(255), – vc_CarreraNombre
– varchar(15), – vc_Legajo
– varchar(5), – plan
– integer, – comision
– varchar(15), – comision nombre
– varchar(5), – vc_Materia
– varchar(255), – vc_MateriaNombre
– varchar(20), – calidad Insc
– date, – fecha Insc
– integer, – ano academico
– varchar(20), – periodo lectivo
– varchar(20), – estado
– varchar(15), – catedra nombre
– varchar(10); – Turno de la Comisión
– varchar(5) – sede
– varchar(255) – nombre sede

DEFINE vc_UA LIKE sga_personas.unidad_academica;
DEFINE vc_NroInscripcion LIKE sga_personas.nro_inscripcion;
DEFINE vc_PersonaNombres LIKE sga_personas.nombres;
DEFINE vc_PersonaApellido LIKE sga_personas.apellido;
DEFINE vc_Carrera LIKE sga_carreras.carrera;
DEFINE vc_CarreraNombre LIKE sga_carreras.nombre;
DEFINE vc_Legajo LIKE sga_alumnos.legajo;
DEFINE vc_Materia LIKE sga_materias.materia;
DEFINE vc_MateriaNombre LIKE sga_materias.nombre;
DEFINE vi_Comision LIKE sga_comisiones.comision;
DEFINE vc_Plan LIKE sga_alumnos.plan;
DEFINE vc_Calidad VARCHAR(20); --LIKE sga_insc_cursadas.calidad_insc;
DEFINE vd_Fecha LIKE sga_insc_cursadas.fecha_inscripcion;
DEFINE vc_PeriodoLectivo LIKE sga_comisiones.periodo_lectivo;
DEFINE vi_AnioAcademico LIKE sga_comisiones.anio_academico;
DEFINE vc_NroTransaccion LIKE sga_insc_cursadas.nro_transaccion;
DEFINE vc_Estado VARCHAR(20); --LIKE sga_insc_cursadas.estado;
DEFINE vc_ComisionNombre LIKE sga_comisiones.nombre;
DEFINE vc_CatedraNombre LIKE sga_comisiones.catedra;
DEFINE vc_MateriaNomRed LIKE sga_materias.nombre_reducido;
DEFINE vc_AlumnoNombre VARCHAR(100);
DEFINE vc_Interfaz LIKE par_interfaces.nombre;
DEFINE vc_Turno LIKE sga_comisiones.turno;
DEFINE vc_creditos LIKE sga_atrib_mat_plan.credito;
DEFINE vc_sede LIKE sga_sedes.sede;
DEFINE vc_nomsede LIKE sga_sedes.nombre;

BEGIN

– inicializaciones.
LET vc_UA = NULL;
LET vc_NroInscripcion = NULL;
LET vc_PersonaNombres = NULL;
LET vc_PersonaApellido = NULL;
LET vc_Carrera = NULL;
LET vc_CarreraNombre = NULL;
LET vc_Legajo = NULL;
LET vc_Materia = NULL;
LET vc_MateriaNombre = NULL;
LET vi_Comision = NULL;
LET vc_Plan = NULL;
LET vc_Calidad = NULL;
LET vd_Fecha = NULL;
LET vc_PeriodoLectivo = NULL;
LET vi_AnioAcademico = NULL;
LET vc_NroTransaccion = NULL;
LET vc_Estado = NULL;
LET vc_ComisionNombre = NULL;
LET vc_CatedraNombre = NULL;
LET vc_MateriaNomRed = NULL;
LET vc_Interfaz = NULL;
LET vc_Turno = NULL;

– datos de la persona.
SELECT nro_inscripcion
INTO vc_NroInscripcion
FROM sga_alumnos
WHERE unidad_academica = pUA
AND carrera = pCarrera
AND legajo = pLegajo ;

SELECT nombres, apellido
INTO vc_PersonaNombres, vc_PersonaApellido
FROM sga_personas
WHERE unidad_academica = pUA
AND nro_inscripcion = vc_NroInscripcion ;

– busco las materias en las que se inscribió.
FOREACH EXECUTE PROCEDURE sp_inscCursadas ( pUA, vc_NroInscripcion, ‘T’)
INTO vc_UA, vc_Carrera, vc_Legajo, vi_Comision, vc_Plan, vc_Materia, vc_Calidad, vd_Fecha, vc_PeriodoLectivo, vi_AnioAcademico, vc_NroTransaccion, vc_Estado, vc_ComisionNombre, vc_CatedraNombre, vc_CarreraNombre, vc_MateriaNombre, vc_AlumnoNombre, vc_Interfaz, vc_Turno,vc_creditos, vc_MateriaNomRed, vc_Sede, vc_NomSede

IF (vc_Carrera = pCarrera) AND (vc_Legajo = pLegajo) THEN

  -- averiguo el nombre completo de la materia.
  SELECT sga_atrib_mat_plan.nombre_materia
    INTO vc_MateriaNombre
    FROM sga_planes,  sga_atrib_mat_plan
   WHERE sga_planes.unidad_academica = vc_UA
     AND sga_planes.carrera = vc_Carrera
     AND sga_planes.plan = vc_Plan 
     AND sga_atrib_mat_plan.unidad_academica = sga_planes.unidad_academica
     AND sga_atrib_mat_plan.carrera = sga_planes.carrera
     AND sga_atrib_mat_plan.plan     = sga_planes.plan
     AND sga_atrib_mat_plan.version = sga_planes.version_actual
     AND sga_atrib_mat_plan.materia = vc_Materia;


   SELECT sga_comisiones.sede, sga_sedes.nombre
        INTO vc_sede, vc_nomsede
      FROM sga_comisiones, sga_sedes
   WHERE sga_comisiones.comision = vi_Comision
   AND sga_comisiones.sede = sga_sedes.sede;
  
  -- devuelvo las filas del reporte.
  RETURN vc_UA, vc_NroInscripcion, vc_PersonaNombres, vc_PersonaApellido, vc_Carrera, vc_CarreraNombre, vc_Legajo, vc_Plan, vi_Comision, vc_ComisionNombre, vc_Materia, vc_MateriaNombre, vc_Calidad, vd_Fecha, vi_AnioAcademico, vc_PeriodoLectivo, vc_Estado, vc_CatedraNombre, vc_Turno,vc_creditos, vc_sede, vc_nomsede WITH RESUME;

END IF;
END FOREACH;

END;
END PROCEDURE;“”

Si, el que tiene la consulta que recupera las inscripciones es el procedure sp_inscCursadas, con lo cual deberias crearte uno nuevo a partir de este y crearte otro nuevo a partir del sp_insccuralu que llame al anterior.

el sp_inscCursadas, está incluido en el sp_insccuralu?
porque no encuentro un create “dba”.sp_inscCursada
Si es así no entiendo que hay que cambiar para que tome todas las insc a cursadas del alumno.

´´´´´´´´´´´´´´´´´´´´´´´´´´´´

– busco las materias en las que se inscribió.

[/size]FOREACH EXECUTE PROCEDURE sp_inscCursadas ( pUA, vc_NroInscripcion, ‘T’) INTO vc_UA, vc_Carrera, vc_Legajo, vi_Comision, vc_Plan, vc_Materia, vc_Calidad, vd_Fecha, vc_PeriodoLectivo, vi_AnioAcademico, vc_NroTransaccion, vc_Estado, vc_ComisionNombre, vc_CatedraNombre, vc_CarreraNombre, vc_MateriaNombre, vc_AlumnoNombre, vc_Interfaz, vc_Turno,vc_creditos, vc_MateriaNomRed, vc_Sede, vc_NomSede[size=78%]

IF (vc_Carrera = pCarrera) AND (vc_Legajo = pLegajo) THEN

  -- averiguo el nombre completo de la materia.
  SELECT sga_atrib_mat_plan.nombre_materia
    INTO vc_MateriaNombre
    FROM sga_planes,  sga_atrib_mat_plan
   WHERE sga_planes.unidad_academica = vc_UA
     AND sga_planes.carrera = vc_Carrera
     AND sga_planes.plan = vc_Plan 
     AND sga_atrib_mat_plan.unidad_academica = sga_planes.unidad_academica
     AND sga_atrib_mat_plan.carrera = sga_planes.carrera
     AND sga_atrib_mat_plan.plan     = sga_planes.plan
     AND sga_atrib_mat_plan.version = sga_planes.version_actual
     AND sga_atrib_mat_plan.materia = vc_Materia;


   SELECT sga_comisiones.sede, sga_sedes.nombre
        INTO vc_sede, vc_nomsede
      FROM sga_comisiones, sga_sedes
   WHERE sga_comisiones.comision = vi_Comision
   AND sga_comisiones.sede = sga_sedes.sede;
  
  -- devuelvo las filas del reporte.
  RETURN vc_UA, vc_NroInscripcion, vc_PersonaNombres, vc_PersonaApellido, vc_Carrera, vc_CarreraNombre, vc_Legajo, vc_Plan, vi_Comision, vc_ComisionNombre, vc_Materia, vc_MateriaNombre, vc_Calidad, vd_Fecha, vi_AnioAcademico, vc_PeriodoLectivo, vc_Estado, vc_CatedraNombre, vc_Turno,vc_creditos, vc_sede, vc_nomsede WITH RESUME;

END IF;
END FOREACH;

´´´´´´´´´´´´´´´´´´´´´´´´´´´´

En el procedure sp_inscCursadas tenes la condicion siguiente que es la que debes sacar:
AND TODAY <= sga_periodos_lect.fecha_fin
Esta condicion es la que hace que solo recupere inscripciones de períodos lectivos que aun no finalizaron.

IMPORTANTE: Recordá crear otro procedure a partir de este, porque este procedure se utiliza en otros lados y se necesita que solo recupere inscripciones de períodos lectivos vigentes.

A partir de version 2.8.0:
El procedure sp_inscCursadas fue modificadon en version 2.8.0, casualmente agregandose un parámetro mas para poder recuperar las inscripciones de períodos lectivos vigentes o todas las inscripciones del alumno, con lo cual cuando migres podras usar este procedure.

CREATE PROCEDURE sp_inscCursadas(
pUnidadAcademica LIKE sga_personas.unidad_academica,
pNroInscripcion LIKE sga_personas.nro_inscripcion,
pEstado char(1) DEFAULT ‘T’,
pActualesHistorico char(1) DEFAULT ‘A’
)

Recupera las Inscripciones a Cursadas en cualquier periodo activo de una persona ordenadas por carrera
pEstado = T - Todos los Estados / P - Pendiente / A - Aceptado (Incluye los Exceptuados)
pActualesHistorico = A - Inscripciones de periodos lectivos actuales o futuros / T - Todas las inscripciones (actuales e historicas)

Gracias Alejandro!

En el archivo sql del dbexport.out no encuentro la definición del sp_inscCursadas.

En create procedure “dba”,sp_fichaaluinsccur esta convocado con un foreach execute procedure el sp_inscCursadas (para recuperar cursadas vigentes).

Tambièn esta convocado en Create procedure “dba”.sp_insccuralu con un foreach execute procedure sp_inscCursadas (para recuperar las materias inscripto vigentes)

Parto de la base que el sp está definido en alguna parte para poder ser ejecutado y que debe ser el lugar en donde esta la clausula where.
Pero no lo encuentro.

En cuanto a la clausula where "TODAY <=sga_periodos_lect.fecga_fin aparece en
“dba”.sp_insccursadas .
y en “dba”.sp_insccurs_recha.
ambas funciones con el objeto de recuperar inscripciones a cursadas vigentes
Está asignado en algún lado de la aplicación la definición de sp_inscCursada?
No encuentro este sp para poder sacarle la clausula today y cambiarle el nombre al sp_inscCursadas

Alberto, al bajar la version 2.7.0, no bajaste el catálogo de la base de datos?
si lo bajaste deberias encontrar el procedure en \base_de_datos\Sql\Stored Procedures
Tambien lo podes obtener de la siguiente manera de la base:

  1. Corriendo esta consulta:

select data from sysprocbody where procid in (select procid from sysprocedures where lower(procname) = 'sp_insccursadas') and datakey = 'T';

  1. Desde linea de comandos ejecutando el comando dbschema
dbschema -f sp_inscCusadas -d nombre_base  sp_inscCursadas.sql

El procedure sp_fichaaluinsccur es el que se usa en el reporte de inscripciones a cursadas que se encuentra en la Ficha del Alumno.
Vos habias mencionado otro reporte, el de la operación cur00106- Inscripciones a Cursadas de un Alumno

El sp_inscCursadas no existe en la base de datos (corrí schema y tambien un select)
Si, por supuesto sp_insccursadas.
Puede ser que pase todo a lowcase y estemos hablando del mismo sp?
que si tiene la clausula where today.

Me refiero siempre a una nueva operaciòn para que muestre todas las insc a cursadas de un alumno. No a la operacion Ficha_Alumno

Si es el mismo procedure…

ok.
Gracias.
Nos vemos en Mendoza