Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-06-2012
hondaalberto hondaalberto is offline
Miembro
 
Registrado: sep 2010
Ubicación: República Dominicana
Posts: 67
Poder: 14
hondaalberto Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 11-06-2012
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por hondaalberto Ver Mensaje
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.
Habría que definir un poco más y mejor "empresa", en el sentido de si se trata de los datos de una empresa o de algo más...

Cita:
Empezado por hondaalberto Ver Mensaje
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.
Las bases de datos no son lo mío (desgraciadamente) pero, no creo que se trate de crear nuevas tablas, sino de añadir nuevos registros en una determinada tabla. Es decir, si suponemos una tabla que contiene los campos "NombreEmpresa", "DireccionEmpresa", no se trata de crear nuevas tablas, sino de añadir un nuevo registro en la tabla o tablas creadas previamente.

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.
Responder Con Cita
  #3  
Antiguo 11-06-2012
MartinS MartinS is offline
Miembro
NULL
 
Registrado: nov 2011
Ubicación: Villa Cacique - Argentina
Posts: 283
Poder: 13
MartinS Va por buen camino
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
Responder Con Cita
  #4  
Antiguo 11-06-2012
hondaalberto hondaalberto is offline
Miembro
 
Registrado: sep 2010
Ubicación: República Dominicana
Posts: 67
Poder: 14
hondaalberto Va por buen camino
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.
Responder Con Cita
  #5  
Antiguo 11-06-2012
hondaalberto hondaalberto is offline
Miembro
 
Registrado: sep 2010
Ubicación: República Dominicana
Posts: 67
Poder: 14
hondaalberto Va por buen camino
Muchas Gracias martin pero no se compartirian ningún dato entre empresas... Serian clientes, proveedores y demas datos independientes una de la otra empresa.
Responder Con Cita
  #6  
Antiguo 11-06-2012
MartinS MartinS is offline
Miembro
NULL
 
Registrado: nov 2011
Ubicación: Villa Cacique - Argentina
Posts: 283
Poder: 13
MartinS Va por buen camino
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
Id   Razon social
1    Pepe's S.A.     
2    Mantelito S.R.L
3    Servicons
4    Motel Vivaracho
...
...

Código:
Tabla Provedores
Id    Nombre                               IdEmpresa
1     El voraz                                   2
2     Juan Perez & Co                        2
3     El mundo de las sabanas            4
4     Rivas Antonio                           1
...
...

Código:
Tabla Facturas
ID     Numero         Fecha             Monto       IdEmpresa
1      1112222       10/06/2012       4500             3
2      2253221       10/06/2012       2500             1
3      5521122       10/06/2012       1200             1
...
...

Despues

Código SQL [-]
Select * From Proveedores where IdEmpresa = Empresa.ID

Etc, Etc.-

Con un combobox como decia DEC al iniciar el programa ya puedes acceder al id de la empresa que trabajaras.-

Saludos
Responder Con Cita
  #7  
Antiguo 11-06-2012
hondaalberto hondaalberto is offline
Miembro
 
Registrado: sep 2010
Ubicación: República Dominicana
Posts: 67
Poder: 14
hondaalberto Va por buen camino
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....
Responder Con Cita
  #8  
Antiguo 11-06-2012
MartinS MartinS is offline
Miembro
NULL
 
Registrado: nov 2011
Ubicación: Villa Cacique - Argentina
Posts: 283
Poder: 13
MartinS Va por buen camino
Cita:
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?
Yo haria eso. No quiere decir que sea la unica alternativa

Cita:
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?
Yo recomendaria siempre usar los TQuery ya que solo el sistema te entrega los datos que necesitas.


Cita:
3.- Para Saber la Empresa activa coloco el dato en una Variable Global o que me recomiendas?
Si, Yo la colocaria en un DataModule ya que generalmente todas las unidades la usan

Cita:
Muchas Gracias por toda la Ayuda y por el tiempo que han invertido en mi....
Hoy por ti, mañana por mi

Pd.: Repito es lo que yo haria. Tal vez alguien recomiende algo mejor.-

Saludos
Responder Con Cita
  #9  
Antiguo 12-06-2012
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
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.
__________________

Responder Con Cita
  #10  
Antiguo 12-06-2012
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
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.
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber.
Responder Con Cita
  #11  
Antiguo 28-09-2012
MiguelC MiguelC is offline
Miembro
 
Registrado: oct 2003
Ubicación: República Dominicana
Posts: 15
Poder: 0
MiguelC Va por buen camino
Wink

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 unión del Código hace la Fuerza" LMCV

Última edición por MiguelC fecha: 28-09-2012 a las 00:31:23.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Auto Borrar Aplicacion / Cambiar Privilegios Aplicacion / Ejecutar como Administrador jogagua Varios 15 27-10-2011 01:38:07
Cómo cerrar otra aplicacion desde mi aplicacion en Delphi 7 Gaby123 API de Windows 5 04-01-2007 22:44:51
Diferencia entre aplicacion Clx y aplicación normal??? JorgeBec Varios 1 27-10-2004 17:30:49
aplicacion multiempresa viki Conexión con bases de datos 3 19-10-2004 23:00:49
Apliación 3 Capas - MultiEmpresa ceocarbajal Providers 3 31-07-2004 02:39:47


La franja horaria es GMT +2. Ahora son las 09:23:32.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi