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.
Para soportar la funcionalidad Multiempresa existen 3 constantes relacionadas las cuales se describen a continuación:
Existe 2 modelos de empresa soportados en SICOF ERP los cuales estan definidos en el siguiente repositorio SVN
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;
La columna que soporta la empresa se llama CODIGO_MEMPRESA.
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;
Para implementar el soporte multiempresa en las aplicaciones Powerbuilder debe seguir los siguientes pasos:
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:
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:
El seteo aplica para todas las tablas de configuración/almacenamiento específico por empresa. Ejemplos:
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.