Tabla de Contenidos

PowerBuilder - Implementaciones - Contexto Multiempresa

SICOF ERP, soporta configuraciones que permiten administrar sucursales (seccionales) por cliente. Esta funcionalidad es denominada Multiempresa y se puede implementar gracias al soporte que brinda la base de datos Oracle 11gR2 y versiones posteriores.

Esta sección describe las actividades que deben ser implementadas por los desarrolladores Backend de la tecnología Powerbuilder para soportar Multiempresa en las funcionalidades que se implementen o mantengan.

Constantes Relacionadas

Para soportar la funcionalidad Multiempresa existen 3 constantes relacionadas las cuales se describen a continuación:

Modelos de Contexto de Empresa SICOF ERP

Existe 2 modelos de empresa soportados en SICOF ERP los cuales estan definidos en el siguiente repositorio SVN

Modelo Uni-Empresa

Este es el modelo tradicional de la mayoría de clientes que utilizan SICOF ERP. Aplica para clientes que sólo tienen una configuración de empresa por base de datos. Algunos de los clientes que soportan esta funcionalidad son:

Para activar este modelo se deben registrar/actualizar las Constantes Relacionadas en el siguiente script 0001b CONSTANTES ENTORNO MULTIEMPRESA INACTIVO.sql con los siguientes estados:

--==============================================================================
-- Fecha: 3:06 p. m. martes, 11 de mayo de 2021 - carlos.torres@ada.co
-- Insert para definir la constante de bloqueo de transacción en entorno multiempresa
--==============================================================================
INSERT INTO SICOF.M_CONSTANTES (DESCRIPCION, APLICA, VALOR, VALOR_ALFA, FECHA_REGISTRO, CODIGO_MEMPRESA)
SELECT  'BLOQUEAR_TRANSACCION', 'N', NULL, 'N', SYSDATE, '9999999999'
FROM    DUAL
WHERE   NOT EXISTS (SELECT 1 FROM SICOF.M_CONSTANTES WHERE TRIM(DESCRIPCION) LIKE '%BLOQUEAR_TRANSACCION%');
--==============================================================================
-- Fecha: 3:06 p. m. martes, 11 de mayo de 2021 - carlos.torres@ada.co
-- Insert para definir la constante de registro de inicia y fin de sesión
--==============================================================================
INSERT INTO SICOF.M_CONSTANTES (DESCRIPCION, APLICA, VALOR, VALOR_ALFA, FECHA_REGISTRO, CODIGO_MEMPRESA)
SELECT  'LOG_REGISTER_SESSION', 'S', NULL, 'S', SYSDATE, '9999999999'
FROM    DUAL
WHERE   NOT EXISTS (SELECT 1 FROM SICOF.M_CONSTANTES WHERE TRIM(DESCRIPCION) LIKE '%LOG_REGISTER_SESSION%');
--==============================================================================
-- Fecha: 3:06 p. m. martes, 11 de mayo de 2021 - carlos.torres@ada.co
-- Insert para definir la constante de seteo de contexto en entorno multiempresa
--==============================================================================
INSERT INTO SICOF.M_CONSTANTES (DESCRIPCION, APLICA, VALOR, VALOR_ALFA, FECHA_REGISTRO, CODIGO_MEMPRESA)
SELECT  'APLICAR_CONTEXTO', 'N', NULL, 'N', SYSDATE, '9999999999'
FROM    DUAL
WHERE   NOT EXISTS (SELECT 1 FROM SICOF.M_CONSTANTES WHERE TRIM(DESCRIPCION) LIKE '%APLICAR_CONTEXTO%');
COMMIT;

Nota

La columna que soporta la empresa se llama CODIGO_MEMPRESA.

Modelo Multi-Empresa

Este modelo permite configurar en una sola instancia de base de datos configuraciones de varias empresas por medio de la columna CODIGO_MEMPRESA la cuál es propagada en todas las tablas especificas de las funcionalidades que contiene SICOF ERP. Algunos de los clientes que soportan esta funcionalidad son:

Para activar este modelo se deben registrar/actualizar las Constantes Relacionadas en el siguiente scripts 0001a CONSTANTES ENTORNO MULTIEMPRESA ACTIVO.sql con los siguientes estados:

--==============================================================================
-- Fecha: 3:06 p. m. martes, 11 de mayo de 2021 - carlos.torres@ada.co
-- Insert para definir la constante de bloqueo de transacción en entorno multiempresa
--==============================================================================
INSERT INTO SICOF.M_CONSTANTES (DESCRIPCION, APLICA, VALOR, VALOR_ALFA, FECHA_REGISTRO, CODIGO_MEMPRESA)
SELECT  'BLOQUEAR_TRANSACCION', 'S', NULL, 'S', SYSDATE, '9999999999'
FROM    DUAL
WHERE   NOT EXISTS (SELECT 1 FROM SICOF.M_CONSTANTES WHERE TRIM(DESCRIPCION) LIKE '%BLOQUEAR_TRANSACCION%');
--==============================================================================
-- Fecha: 3:06 p. m. martes, 11 de mayo de 2021 - carlos.torres@ada.co
-- Insert para definir la constante de registro de inicia y fin de sesión
--==============================================================================
INSERT INTO SICOF.M_CONSTANTES (DESCRIPCION, APLICA, VALOR, VALOR_ALFA, FECHA_REGISTRO, CODIGO_MEMPRESA)
SELECT  'LOG_REGISTER_SESSION', 'S', NULL, 'S', SYSDATE, '9999999999'
FROM    DUAL
WHERE   NOT EXISTS (SELECT 1 FROM SICOF.M_CONSTANTES WHERE TRIM(DESCRIPCION) LIKE '%LOG_REGISTER_SESSION%');
--==============================================================================
-- Fecha: 3:06 p. m. martes, 11 de mayo de 2021 - carlos.torres@ada.co
-- Insert para definir la constante de seteo de contexto en entorno multiempresa
--==============================================================================
INSERT INTO SICOF.M_CONSTANTES (DESCRIPCION, APLICA, VALOR, VALOR_ALFA, FECHA_REGISTRO, CODIGO_MEMPRESA)
SELECT  'APLICAR_CONTEXTO', 'S', NULL, 'S', SYSDATE, '9999999999'
FROM    DUAL
WHERE   NOT EXISTS (SELECT 1 FROM SICOF.M_CONSTANTES WHERE TRIM(DESCRIPCION) LIKE '%APLICAR_CONTEXTO%');
COMMIT;

Notas

Modo de Implementación Multiempresa en las Aplicaciones Powerbuilder

Para implementar el soporte multiempresa en las aplicaciones Powerbuilder debe seguir los siguientes pasos:

Setear contexto de empresa por transacción - Modo separado

Toda sentencia SQL embebida en el código Powerbuilder debe estar precedida por una instrucción de seteo de contexto la cuál se invoca por medio de la clase n_cst_context ubicada en la librería sf00util.pbl de Objetos SICOF de la siguiente manera:

//Ejemplo de Referencia:
n_cst_context iuo_context
iuo_context = CREATE n_cst_context
iuo_context.of_sql_embedded_context(ts_transaccion, gd_cempresa)
SELECT FORMATO
INTO :ls_datawindow
FROM DET_FORMATOS_DOCUMENTO
WHERE CODIGO_DOCUMENTO = 14
AND ACTIVO = 'S' 
Using ts_transaccion;

El modo de implementación anterior puede ser sustituido por un modo centralizado gracias al objeto guo_app instancia de la clase n_cst_app ubicada en la librería sf00util.pbl de Objetos SICOF la cuál está disponible desde el inicio de sesión:

//Ejemplo de Referencia:
guo_app.of_sql_embedded_context(ats_db)
SELECT 	CONCEPTO_CONTABLE, TIPO_CONTABLE
INTO	:ldb_concepto_contable, :ldb_tipo_contable
FROM	PRESUP01.MAE_CUENTAS_POR_COBRAR
WHERE	CODIGO_CPCOBRAR = :adb_cpcobrar
USING	ats_db;

Este modo de seteo de contexto es el utilizado por los productos:

Setear contexto de empresa por transacción - Modo integrado

Toda sentencia SQL embebida en el código Powerbuilder debe incluir la columna CODIGO_MEMPRESA en su definición de la siguiente manera:

//Ejemplo de Referencia:
SELECT MAX(PERIODO)
INTO :ls_periodo_cerrado
FROM COMPRAS01.MAE_CIERRE_KARDEX
WHERE codigo_mempresa IN(TO_CHAR(:gd_cempresa),'9999999999')
AND CERRADO = 'S'
Using ts_transaccion;

Este modo de seteo de contexto es el utilizado por los productos:

Instrucciones que aplican para el Seteo de contexto de empresa por transacción

El seteo aplica para todas las tablas de configuración/almacenamiento específico por empresa. Ejemplos:

Utilizar API Core de Objetos de acceso a Datos

Todos los objetos de acceso a datos deben heredar de las clases core de Objetos SICOF las cuales son:

Estas clases implementan el seteo de contexto automático.

Consideraciones

←Volver atrás