SGME - Manual de la API de la Base de Datos

Descripción de los stored procedures y demás formas de acceder a la base de datos para realizar las funciones del sistema.

Andrés Moschini

Historial de revisiones
Revisión Entrega009.012007-11-03
Creación del documento.
Revisión Entrega009.022007-11-04
Última revisión entrega.
Revisión Entrega012.012007-11-26
Documento pasa a ser general para todo el desarrollo del sistema.
Revisión Entrega012.022007-11-30
Agregados comandos relacionados con obtención de estados y de informes, sucesos y operaciones existentes.
Revisión Entrega012.032007-12-03
Última revisión.
Revisión Entrega013.012008-01-08
Agregados comandos de edición de encabezados de los informes y sucesos y de eliminación de operaciones, sucesos e informes.

Introducción

En un intento de separar claramente las capas de la aplicación, se describe la interfase de la base de datos como una API, de esta manera, se oculta la organización interna de los datos y la forma en que estos se procesan y generan.

Las capas superiores solo deberían acceder a los datos a través de esta interfase.

Documentos relacionados: En el documento General-Acceso_Base_de_Datos.pdf se describe como acceder a la base de datos y ejecutar los comandos descriptos en este documento.


Control de acceso

El control de acceso al servidor de la base de datos lo realiza el propio servidor Firebird™. Para verificar los perfiles del usuario logueado en el servidor pueden ejecutarse una serie de comandos que en caso de no corresponder el perfil generan una excepción.

Verificar si el usuario pertenece al perfil ROL_ADMINCLAVES
PROCEDURE SPS_VRF_ADMINCLAVES

En caso de que el usuario conectado no pertenezca al perfil ROL_ADMINCLAVES genera una excepción.

Verificar si el usuario pertenece al perfil ROL_CONFIGURADOR
PROCEDURE SPS_VRF_ROL_CONFIGURADOR

En caso de que el usuario conectado no pertenezca al perfil ROL_CONFIGURADOR genera una excepción.

Verificar que el usuario pertenezca al perfil ROL_USUARIO
PROCEDURE SPS_VRF_ROL_USUARIO

En caso de que el usuario conectado no pertenezca al perfil ROL_USUARIO genera una excepción.


Operaciones del Configurador

Crear una plantilla de artículos
EXECUTE PROCEDURE SPP_NEW_ARTICULO (
        NBP_ARTICULO D_NOMBRE, 
        UBICABLE D_BOOLEANO, 
        CONTENIBLE D_BOOLEANO, 
        CONTINENTE D_BOOLEANO) 
    RETURNING_VALUES (IDP_ARTICULO D_ID)
Crear una plantilla de atributo
EXECUTE PROCEDURE SPP_NEW_ATRIBUTO(
        NB_ATRIBUTO D_NOMBRE,
        TIPO D_TIPO_ATRIB,
        DEFECTO D_VALOR_ATRIB) 
    RETURNING_VALUES (IDATRIBUTO D_ID)
Asociar un atributo a una plantilla de artículos
EXECUTE PROCEDURE SPP_NEW_ATRIB_ART (
        NB_ATRIBUTO D_NOMBRE, 
        NBP_ARTICULO D_NOMBRE, 
        DEFECTO D_VALOR_ATRIB)
Crear una parte para una plantilla de artículos
EXECUTE PROCEDURE SPP_NEW_PARTE (
        NB_PARTE D_NOMBRE, 
        MULTIPLE D_BOOLEANO, 
        NBP_CONTINENTE D_NOMBRE, 
        NBP_CONTENIBLE D_NOMBRE) 
    RETURNING_VALUES (ID_PARTE D_ID)
Eliminar una plantilla de artículos
EXECUTE PROCEDURE SPP_DEL_ARTICULO (NBP_ARTICULO D_DESCRIPCION)
Eliminar una plantilla de atributo
EXECUTE PROCEDURE SPP_DEL_ATRIBUTO (NB_ATRIBUTO D_NOMBRE)
Eliminar un atributo de una plantilla de artículos
EXECUTE PROCEDURE SPP_DEL_ATRIB_ART (
        NB_ATRIBUTO D_NOMBRE, 
        NBP_ARTICULO D_NOMBRE)
Eliminar una parte de una plantilla de artículos
EXECUTE PROCEDURE SPP_DEL_PARTE (
        NB_PARTE D_NOMBRE, 
        NBP_CONTINENTE D_NOMBRE)
Modificar el valor por defecto de una plantilla de atributo
EXECUTE PROCEDURE SPP_EDT_ATRIBUTO (
        NB_ATRIBUTO_ACTUAL D_NOMBRE, 
        NB_ATRIBUTO_NUEVO D_NOMBRE, 
        DEFECTONUEVO D_VALOR_ATRIB)
Modificar el valor por defecto de un atributo de una plantilla de artículos
EXECUTE PROCEDURE SPP_EDT_ATRIB_ART (
        NB_ATRIBUTO D_NOMBRE, 
        NBP_ARTICULO D_NOMBRE, 
        DEFECTO D_VALOR_ATRIB)
Renombrar una plantilla de artículos
EXECUTE PROCEDURE SPP_REN_ARTICULO (
        NBP_ARTICULO_ACTUAL D_NOMBRE, 
        NBP_ARTICULO_NUEVO D_NOMBRE)
Renombrar una parte de una plantilla de artículos
EXECUTE PROCEDURE SPP_REN_PARTE (
        NB_PARTE D_NOMBRE, 
        NBP_CONTINENTE D_NOMBRE, 
        NB_PARTE_NUEVO D_NOMBRE)
Listar las plantillas de artículos
SELECT
        IDP_ARTICULO D_ID, 
        NBP_ARTICULO D_NOMBRE, 
        UBICABLE D_BOOLEANO, 
        CONTENIBLE D_BOOLEANO, 
        CONTINENTE D_BOOLEANO
    FROM SPP_LST_ARTICULOS (
        FESPECIFICACION D_NOMBRE, 
        FUBICABLE D_BOOLEANO, 
        FCONTENIBLE D_BOOLEANO, 
        FCONTINENTE D_BOOLEANO)
Listar las plantillas de atributos
SELECT
        ID_ATRIBUTO D_ID, 
        NB_ATRIBUTO D_NOMBRE, 
        TIPO D_TIPO_ATRIB, 
        DEFECTO D_VALOR_ATRIB
    FROM SPP_LST_ATRIBUTOS (
        FATRIBUTOPOS D_NOMBRE, 
        FTIPO D_TIPO_ATRIB)
Listar los atributos de una plantilla de artículos
SELECT
        NBP_ARTICULO D_NOMBRE, 
        NB_ATRIBUTO D_NOMBRE, 
        TIPO D_TIPO_ATRIB, 
        DEFECTO D_VALOR_ATRIB
    FROM SPP_LST_ATRIB_ART (ESPECIFICACION D_NOMBRE) 
Listar las partes de una plantilla de artículos
SELECT
        NB_PARTE D_NOMBRE, 
        MULTIPLE D_BOOLEANO, 
        NBP_CONTINENTE D_NOMBRE, 
        NBP_CONTENIBLE D_NOMBRE
    FROM SPP_LST_PARTES (NCONTINENTE D_NOMBRE)

Operaciones del usuario

Cargar informes y sucesos

Cargar un nuevo informe
EXECUTE PROCEDURE SPO_NEW_INFORME (
        FECHA_RECEPCION D_FECHA,
        DESCRIPCION D_DESCRIPCION)
    RETURNING_VALUES (
        ID_INFORME D_ID)

La carga de un informe consiste en ejecutar SPO_NEW_INFORME y luego cargar los sucesos correspondientes.

Cargar un suceso de un informe
EXECUTE PROCEDURE SPO_NEW_SUCESO (
        ID_INFORME D_ID,
        FECHA_SUCESO D_FECHA,
        DESCRIPCION D_DESCRIPCION)
    RETURNING_VALUES (
        ID_SUCESO D_ID)

La carga de un suceso consiste en ejecutar SPO_NEW_SUCESO y luego cargar las operaciones correspondientes.


Carga de operaciones

Cargar operación de creación de artículos
EXECUTE PROCEDURE SPC_NEW_ARTICULOS (
        ID_SUCESO D_ID,
        ID_OPERACION D_ID, -- siempre ID_OPERACION = 0
        NBP_ARTICULO D_NOMBRE,
        CANTIDAD D_ID, -- CANTIDAD = 1
        ID D_ID)
    RETURNING_VALUES (
        ID_ARTICULO D_ID,
        ID_OPERACION_O D_ID)

O bien:

SELECT 
    ID_ARTICULO D_ID,
    ID_OPERACION_O D_ID
FROM SPC_NEW_ARTICULOS (
    ID_SUCESO D_ID,
    ID_OPERACION D_ID, -- siempre ID_OPERACION = 0
    NBP_ARTICULO D_NOMBRE,
    CANTIDAD D_ID, -- CANTIDAD > 1
    ID D_ID)
	    

Si se crea un único artículo, puede ejecutarse el stored procedure mediante EXECUTE PROCEDURE y devolverá el ID del artículo creado. Si se crea mas de un artículo al ejecutarse mediante SELECT se obtiene el listado de IDs de los artículos creados.

Cargar operación de cambio de atributo de artículos
EXECUTE PROCEDURE SPC_EDT_ATRIB_ART (
        ID_SUCESO D_ID,
        ID_OPERACION D_ID, -- En primera ejecución ID_OPERACION = 0
        ID_ARTICULO D_ID,
        NB_ATRIBUTO D_NOMBRE,
        VALOR_ANTERIOR D_VALOR_ATRIB,
        VALOR_NUEVO D_VALOR_ATRIB)
    RETURNING_VALUES (
        ID_OPERACION_O D_ID)

En caso de cambiar el atributo de mas de un artículo en una misma operación, se deberá ejecutar SPC_EDT_ATRIB_ART iterativamente para cada artículo. En la primer ejecución, deberá asignarse valor 0 a ID_OPERACION de manera que genere una nueva operación; para las demás ejecuciones se obtendrá el valor de ID_OPERACION del resultado ID_OPERACION_O.

Cargar operación de agregar componente
EXECUTE PROCEDURE SPC_ADD_PARTE_ART (
        ID_SUCESO D_ID,
        ID_OPERACION D_ID,
        ID_CONTIENTE D_ID,
        NB_PARTE D_NOMBRE,
        ID_CONTENIBLE D_ID)
    RETURNING_VALUES (
        ID_OPERACION_O D_ID)

En caso de agregar mas de un artículo contenible en la misma operación, se deberá ejecutarSPC_ADD_PARTE_ART iterativamente para cada contenible. En la primer ejecución, deberá asignarse valor 0 a ID_OPERACION de manera que genere una nueva operación; para las demás ejecuciones se obtendrá el valor de ID_OPERACION del resultado ID_OPERACION_O.

Cargar operación de quitar componente
EXECUTE PROCEDURE SPC_REM_PARTES_ART_1 (
        ID_SUCESO D_ID,
        ID_OPERACION D_ID,
        ID_CONTENIBLE D_ID)
    RETURNING_VALUES (
        ID_OPERACION_O D_ID,
        ID_CONTINENTE D_ID,
	ID_PARTE D_ID)

O bien:

SELECT
    ID_OPERACION_O D_ID,
    ID_CONTENIBLE D_ID
FROM SPC_REM_PARTES_ART_2 (
    ID_SUCESO D_ID,
    ID_OPERACION D_ID,
    ID_CONTINENTE D_ID,
    NB_PARTE D_NOMBRE)
	    

Existen dos formas de expresar que se desea quitar componentes: indicando el o los artículo contenibles o bien indicando el artículo continente y la parte.

En el caso de que se indiquen los artículos contenibles, debe ejecutarse SPC_REM_PARTES_ART_1 iterativamente para cada contenible a quitar. En la primer ejecución, deberá asignarse valor 0 a ID_OPERACION; para las demás ejecuciones se deberá asignar el resultado de ID_OPERACION_O a ID_OPERACION.

En el caso de que se indique el artículo continente y la parte a liberar, debe ejecutarse SPC_REM_PARTES_ART_2 mediante un SELECT de manera que devuelva la lista de contenibles liberados.


Listados y consultas

Listar los informes
SELECT 
        ID_INFORME,
        FECHA_RECEPCION,
        DESCRIPCION
    FROM
        SPO_LST_INFORMES
	    

Devuelve el listado de informes activos en el sistema.

Listar los sucesos de un informe
SELECT
        ID_INFORME,
        ID_SUCESO,
        FECHA_SUCESO,
        DESCRIPCION
    FROM 
        SPO_LST_SUCESOS(ID_INFORME)

Devuelve el listado de sucesos de un informe.

Listar las operaciones de un suceso
SELECT
        ID_SUCESO,
        ID_OPERACION,
        TIPO
    FROM 
       SPO_LST_OPERACIONES(ID_SUCESO)

Devuelve el listado de operaciones del suceso indicado.

Listar los cambios producidos por una operación de Agregar Componentes
SELECT
        ID_CONTINENTE,
        NB_PARTE,
        ID_CONTENIBLE
    FROM 
        SPC_LST_OPAGREGARCOMPONENTES(ID_OPERACION)

Devuelve el detalle de la operación.

Listar los cambios producidos por una operación de Ingresar Artículos
SELECT
        NBP_ARTICULO,
        CANTIDAD,
        ID_ARTICULO
    FROM 
        SPC_LST_OPINGRESARARTICULOS(ID_OPERACION)

Devuelve el detalle de la operación.

Listar los cambios producidos por una operación de Quitar Componentes
SELECT
        ID_CONTENIBLE
    FROM 
        SPC_LST_OPQUITARCOMPONENTES(ID_OPERACION)

Devuelve el detalle de la operación.


Obtener estados

Listar sucesos clave
SELECT
        FECHA_CLAVE 
    FROM 
        SPE_LST_FECHAS_CLAVE(FECHA)

Devuelve el listado de fechas en que ocurrieron sucesos que influyen directamente en el estado de la fecha indicada.

Listar existencia de artículos
SELECT
        ID_ARTICULO,
        FECHA_CREACION,
        NBP_ARTICULO
    FROM
        SPE_LST_EXISTENCIA(FECHA)

Devuelve el listado de artículos existentes en la fecha indicada y su fecha de creación.

Listar artículos contenidos
SELECT
        FECHA_SUCESO,
        ID_CONTINENTE,
        NB_PARTE,
        ID_CONTENIBLE
    FROM
        SPE_LST_CONTENIDOS(FECHA)

Devuelve el listado de artículos contenidos por otros, en la fecha indicada, y desde cuando lo están.

Listar estado de atributos de artículos
SELECT
        FECHA_SUCESO,
        ID_ARTICULO,
        NB_ATRIBUTO,
        VALOR
    FROM
        SPE_LST_VALORES_ATRIB_ART(FECHA)

Devuelve el listado de los atributos de cada artículo en existencia con su valor en el momento indicado, y desde cuando tiene dicho valor.


Editar encabezados de informes y sucesos

Editar encabezado de informe
EXECUTE PROCEDURE SPO_EDT_INFORME (
        ID_INFORME D_ID,
        FECHA_RECEPCION D_FECHA,
        DESCRIPCION D_DESCRIPCION)

La edición de un informe consiste en ejecutar SPO_EDT_INFORME para editar el encabezado (además de aplicar o deshacer los sucesos que lo componen.

Editar encabezado de suceso
EXECUTE PROCEDURE SPO_EDT_SUCESO (
        ID_SUCESO D_ID,
        FECHA_RECEPCION D_FECHA,
        DESCRIPCION D_DESCRIPCION)

La edición de un suceso consiste en ejecutar SPO_EDT_SUCESO para editar el encabezado (además de aplicar o deshacer las operaciones que lo componen.


Eliminar físicamente informes, sucesos y operaciones

Estas acciones solo deberían utilizarse al deshacer informes, sucesos u operaciones durante la creación iterativa ya que al eliminar físicamente se pierde el registro de la existencia de dichos elementos.

Eliminar informe
EXECUTE PROCEDURE SPO_DEL_INFORME(ID_INFORME D_ID)

Para eliminar un informe, este no debe tener sucesos asociados.

Eliminar informe
EXECUTE PROCEDURE SPO_DEL_SUCESO(ID_SUCESO D_ID)

Para eliminar un suceso, este no debe tener operaciones asociadas.

Eliminar operación
EXECUTE PROCEDURE SPO_DEL_OPERACION(ID_OPERACION D_ID)

Para eliminar una operación, no debe interferir con operaciones creadas posteriormente.