Herramientas de usuario

Herramientas del sitio


ada:howto:sicoferp:pb:implements:setupmulti-company

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:

  • BLOQUEAR_TRANSACCION: Esta constante permite bloquear la transacción en el entorno Multiempresa para asegurar que los datos modificados persisten en la empresa de la sesión iniciada. Aplica cuando se utiliza el API de contexto.
  • APLICAR_CONTEXTO: Esta constante adiciona al contexto local de sesión el código de la empresa cuando se utiliza el API de contexto.
  • LOG_REGISTER_SESSION: Esta constante utilitaria se utiliza para registrar el Inicio y Fin de Sesión (Normal) en SICOF ERP. Se relaciona en el modelo multiempresa porque permite guardar la empresa de la sesión iniciada. Esta API es implementada automáticamente en los procesos de Login y Logout del sistema.

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:

  • ADA
  • LaPoint
  • VIVA
  • Valor+
  • AMVA
  • Metroparques
  • CAR
  • Unillanos

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:

  • FOSEMED
  • FINEB

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

  • Las tablas específicas son aquellas que soportan funcionalidades por cada empresa configurada. Ejemplo: Asientos Contables.
  • Las tablas generales son aquellas que comparten la información por todas las empresas configuradas. Ejemplo: Constantes.

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:

  • Contabilidad
  • Presupuesto
  • Tesorería
  • Nómina
  • Talento (Pendiente por implementar)

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:

  • Compras

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

  • SELECT
  • INSERT
  • UPDATE
  • DELETE
  • DECLARE

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

  • Asientos Contables
  • Cuentas por Cobrar
  • Comprobantes de Egreso
  • Comprobantes de Ingreso
  • Kardex
  • Empleados

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:

  • uo_datastore
  • uo_datawindow
  • uo_datawindow_dddw
  • uo_datawindow_free
  • uo_datawindow_lista

Estas clases implementan el seteo de contexto automático.

Consideraciones

  • REQUERIDO: Toda sentencia embebida SQL debe implementar seteo de contexto para las tablas especificas.
  • REQUERIDO: Todo objeto de acceso a datos debe heredar del API Core de Acceso a Datos de Objetos SICOF.
  • RECOMENDADO: En cualquier mantenimiento de código se debe hacer revisión del soporte multiempresa.
  • No es necesario implementar seteo de contexto en las tablas generales.

←Volver atrás

ada/howto/sicoferp/pb/implements/setupmulti-company.txt · Última modificación: 2021/05/19 13:40 por 192.168.177.29