![]() |
Aplicación Multiempresa
Buenos dias Amigos del Foro
En Esta Ocación Necesito saber como puedo crear una Aplicación Multiempresa. La Idea es que desde mi aplicación se puedan crear las empresas y que cuando el usuario seleccione una empresa para trabajar se muestren los datos de esa empresa seleccionada. Lo que me hace falta saber es como hago para crear las tablas cada vez que crean una empresa nueva y como hago para que cuando elijan una empresa en mi aplicación solo se vean los datos de esa empresa. Saludos y Muchas de gracias por anticipado por la ayuda que me puedan brindar. |
Hola,
Cita:
Cita:
Respecto de recuperar los datos de una determinada empresa, estaríamos hablando de realizar una consulta a la base de datos para obtener los datos, en los correspondientes registros, de la empresa que nos intere. Así a bote pronto podrías tener un "DBComboBox" que se rellenase al comenzar la aplicación con el nombre de las empresas. Cuando este "ComboBox" cambie, será el momento de realizar una consulta, que, partiendo del nombre de la empresa (que está ya en el "ComboBox") obtenga el resto de datos de la empresa seleccionada. Y ahora digo que creo que no te he ayudado en nada, como no sea en acaso darte una ligera idea de por dónde creo yo que pueden ir los tiros... es posible que necesites información sobre cómo trabajar con bases de datos, en general, puesto que lo mismo daría que nuestra base de datos guardase datos de empresas o de cualquier otra cosa. De manera que no necesitas información concreta, sino más o menos general. |
Hola Alberto: Como dijo Dec la información esta faltando. Mi humilde opinión ( y solo opinión) habría que saber si las empresas compartirán en algún momento los datos como por ejemplo los clientes.
En todo caso yo haria asi: Tendría la tabla de las empresas y en estas genero un id único para cada una de ellas y asigno ese id a los movimientos que realice el programa por ejemplo en las facturas a traves de un campo adicional para saber de cual es. Ese Id se lo podes asignar a cada tabla (si lo requiere) que maneje tu sistema y de esta forma tendrias todas las empresas y sus respectivos movimientos en una sola base de datos mas la posibilidad de identificar que movimiento pertenece a que empresa.- Nuevamente es lo que ya haría a grandes rasgos, habría que ver cual es el grado de complejidad de realizar lo expuesto y si es posible.- Saludos |
Lo que Necesito hacer es que cuando se cree una empresa nueva desde mi aplicación se cree una base de datos nueva para esta empresa que sera la que se utilice para guardar todos los registros de dicha empresa. Necesito saber como puedo ejecutar algún codigo desde mi aplicación desarrollada en delphi que cree la Base de datos nueva en sql server 2008 y que luego mi aplicacion la reconosca cuando elijan esa empresa.
Con este caso me refiero a cuando se utiliza la aplicación para la empresa A y luego el cliente quiero manejar la empresa B en la Misma Aplicación, sin tener dos instalaciones independientes de la aplicación. |
Muchas Gracias martin pero no se compartirian ningún dato entre empresas... Serian clientes, proveedores y demas datos independientes una de la otra empresa.
|
Bueno mejor aun. Yo sigo con que es mas facil manejar una sola base para las empresas entonces asi cuando se seleccione la que esta "activa" las consultas solo responderan a esa. Por ejemplo
Código:
Tabla empresas Código:
Tabla Provedores Código:
Tabla Facturas Despues
Etc, Etc.- Con un combobox como decia DEC al iniciar el programa ya puedes acceder al id de la empresa que trabajaras.- Saludos |
1.- Ok Gracias Martin, entonces lo mas conveniente es usar una sola Base de datos y en cada tabla asignar un campo con el Id de la empresa activa?
2.- Otra Cosa entonces Martin, en los mantenimientos de clientes y proveedores, etc. en vez de mostrar el contenido de dichas tablas utilizando un componete Ttable debo usar un componente TQuery para filtrar los Datos de acuerdo a empresa activa? 3.- Para Saber la Empresa activa coloco el dato en una Variable Global o que me recomiendas? Muchas Gracias por toda la Ayuda y por el tiempo que han invertido en mi.... |
Cita:
Cita:
Cita:
Cita:
Pd.: Repito es lo que yo haria. Tal vez alguien recomiende algo mejor.- Saludos |
Si me hubieras dicho que utilizas Firebird, te diría que lo mejor es crear una Base de datos por cada empresa, esto además de mantener la información separada, las utilerías de mantenimiento (respaldos, revisiones, etc, etc) se vuelven mucho más sencillas cuando es una base de datos por empresa.
Pero, como mencionas que es SQL Server 2008, la mejor opción es tener una base de datos y manejar cada empresa en un esquema distinto, en otras palabras, un esquema por cada empresa, lo cuál te da la misma funcionalidad de tener un archivo de base de datos por cada empresa. En cualquiera de las dos opciones, tienes que crear la rutina para crear las tablas necesarias cada vez que alguien cree una empresa. Que por cierto, SQL Server tiene las herramientas necesarias para crear el script de creación de todo un esquema completo. Repito, yo prefiero una base de datos o un esquema por cada empresa, porque así me es mucho más sencillo el mantenimiento de la información. Pero si a ti no te importa hacer respaldos de 1, 5, 20, 100 ó más gigas, pues no veo problema en mantener una sola base de datos con todas las empresas. Saludos. |
Yo trabajo con multiempresa, como dice Martin S, sólo tienes que añadir un campo a cada base de datos que es el IDEMPRESA, con este campo ya diferencias de quién es el Proveedor, Cliente, Factura, Pedido, Etc.
Sobre el componente TTable nunca lo he utilizado, es mejor utilizar TQuery, ya que los datos que ves no son filtrados sino los que te ha devuelto el servidor. Un saludo. |
Hola Alberto.
Estoy respondiendo a este hilo un poco tarde, pero lo hago para el caso de que alguien con las mismas inquietudes que tu, encuentre un poco más. Pues bien, creo que el asunto aquí es entender un poco más el concepto de diseñar una base de datos que responderá a una aplicación/sistema concebido para manejar multiempresas (en este escenario ambas cosas deben ir diseñados de la mano) Iría un poco más lejos...que pasaría si a parte de manejar multiempresas, también quieras en el futuro clasificar o filtrar la información por las distintas posibles multisucursales de esas multiempresas...? Bien, pues me identifico con la idea plantead aqui de MartinS, entiendo seria una de la metodología mas factible. Yo diseñaria la base de datos, sus estructuras\tablas principales manejando el concepto de Claves principales(PK) y claves foráneas o secundarias(FK)[fk:dato que hace referencia a una entidad o registro que debe existir en la base de datos] En buen español, un ejemplo: Tabla Maestro de Empresa TblMEmpresa Empresa_codigo (PK) Empresa_nombre Tabla Maestro de Sucursales TblMSucursal Empresa_codigo (FK)(PK) Sucursal_codigo(PK) Sucursal_nombre Tabla Maestro de Cliente TblMEmpleado Empresa_codigo (FK)(PK) Sucursal_codigo(FK) Empleado_codigo (PK) Empleado_nombre TblMEmpresa PK (campo clave o llave de la tabla) FK(Campo secundario, se supone el dato debe existir en otra tabla antes de ser usado, también, puede ser combinado para ser parte del/los campos clave(s) de la tabla) PK Empresa_codigo| Empresa_nombre 001| "Empresa prueba 001" 002| "Empresa prueba 002" TblMSucursal FK-PK| PK Empresa_codigo| Sucursal_codigo| Sucursal_nombre 001| 001| "Sucursal 001 de la Empresa 001" 001| 002| "Sucursal 002 de la Empresa 001" 002| 001| "Sucursal 001 de la Empresa 002" TblMEmpleado FK-PK | FK| PK Empresa_codigo| Sucursal_codigo| Empleado_codigo| Empleado_nombre 001| 001| 1| "Empleado1 Prueba Empr1Suc1" 001| 001| 2| "Empleado2 Prueba Empr1Suc1" 002| 001| 1| "Empleado1 Prueba empr2Suc1" 002| 002| 2| "Empleado2 Prueba Empr2Suc2" Si notas, en este ejemplo, aqui la informacion estaria clasificada y normalizada, lo que restaria seria identificar de todas las tablas que usara el sistema, cuales deben ser por empresas y cuales no. Luego en lo que respecta al codigo de la aplicacion. una idea seria, que en la pantalla de entrada al sistema (Login) al momento de entrar haya entre otras cosas, 2 variables globales que asuman la Empresa y la sucursal del usuario que se esta logeando, luego por medio de consultas o Querys podras configurar o crear tu ambiente de la aplicación, realizando las consultas y Querys pasando como parámetros entre otras cosas la Empresa y la Sucursal logueada en el momento. Ya con otro mecanismo dentro del sistema (un formulario con dos combobox por ejemplo) te podras cambiar de una empresa a otra y de una sucursal a otra, y cada vez que hagas esto te asegura de asignar los códigos de empresa y de sucursal a las 2 variables globales de tu sistemas, lo demas es rutina (Consultas, Querys, Reportes etc) Espero no te haya mareado tanta teoría, espero no haberte creado mas dudas y si mas luz. de todas formas estoy a tus ordenes para aclararte cualquier duda en este sentido. |
La franja horaria es GMT +2. Ahora son las 21:57:39. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi