Hola, yo realizo los sistemas multiempresa de la siguiente manera:
En el programa principal tengo una variable pública ruta.
Ruta=”c:\miaplicacion_v_2_1\datos\empresa1”
No utilizo los entornos de datos de Forms ni Reports.
En su lugar, en el evento Load de los Form abro las tablas:
Open database &ruta\mibbdd
Use &ruta\clientes in 1 alias clientes
Use &ruta\facturas in 2 alias facturas
Use MiVista in 3 alias mivista
Para hacer relaciones entre las tablas, las realizo en el evento Init del Form:
Select clientes
Set order to cliente_id
Select facturas
Set order to cliente_id
Select clientes
Set relation to cliente_id into clientes
Para los Report:
Antes de lanzar el report selecciono la tabla, vista, cursor que sea su origen. Los campos del report solo llevan el nombre del atributo, esto es: clientes.apellido1 sería solo apellido1. El report tomará como origen de datos la tabla abierta actualmente.
En cuanto a la estructura de carpetas:
c.\miaplicacion_v_2_1 &&ruta base de la aplicación versión 2.1
c:\miaplicacion_v_2_1\datos\bbdd &&guardo la base de datos original, de la cual hago duplicados al crear nuevas empresas
c:\miaplicacion_v_2_1\datos\empresa1 && base de datos de la empresa 1
Tengo en la aplicación un menú para tratar empresas (altas, bajas, modificaciones, listados, traspasos, duplicados…Seleccionar nueva empresa).
Cuando selecciono nueva empresa cambio la ruta, y hago un nuevo set patch.
*
Tengo una tabla libre “Empresas” donde guardo los datos de las empresas (nº de empresa, nombre, fecha creación, observaciones).
Tengo otra tabla LastEmpresa con un solo registro donde guardo la última empresa utilizada, en el registro 1, para que cada vez que se abra el programa seleccione automáticamente esta empresa.
*
Indico en todos los Report y en el Form principal el nº/nombre de la empresa.
No se si me olvida algo… espero te sea de ayuda. Saludos. Angel.