Multi-empresa...duvidas
Fala pessoarr!!...galera...estou com algumas duvidas sobre sistema multi-empresa, por favor, se alguem puder me ajudar ficarei muito grato. Tipo, estou utilizando Firebird Super Server como Banco, e minhas duvidas sao:
1º - Qual a melhor solucao para sistemas multi-empresas, deixar pronto vários gdb nomeando-os emp_001.gdb..emp_002.gdb e assim por diante?
2º - Deixar um campo por exemplo...(Cod_Emp)...em cada tabela mas usar somente um gdb...assim todas as informacoes de todas as empresas serao gravadas em uma so tabela...mas nao vai ficar muito pesado?...e alem de tudo, os valores correntes dos campos ´codigo´ nao estarao corretos para cada empresa, pois uma tabela Funcionario por exemplo...comeca com um valor corrente do 1, 2, 3...para a empresa 001, e na empresa 002 ja comecara no 4...:/...?
3º - Se eu criar e deixar pronto varios gdb...ou seja...um para cada empresa...como eu faco para pegar informacoes de uma outra empresa quando conectado a um gdb de uma outra empresa, tem algum select no Firebird que une um gdb a outro gdb?
4º - E quando eu quiser copiar os valores de uma tabela e passar para outra...por exemplo: uma tabela do plano de contas da contabilidade, quero usar o mesmo plano para a empresa tal...tem como fazer isso?
Bom, sao basicamente estas as minhas duvidas...se alguem puder me ajudar..ficarei muito agradecido...
Até mais pessoal...valew!!!
1º - Qual a melhor solucao para sistemas multi-empresas, deixar pronto vários gdb nomeando-os emp_001.gdb..emp_002.gdb e assim por diante?
2º - Deixar um campo por exemplo...(Cod_Emp)...em cada tabela mas usar somente um gdb...assim todas as informacoes de todas as empresas serao gravadas em uma so tabela...mas nao vai ficar muito pesado?...e alem de tudo, os valores correntes dos campos ´codigo´ nao estarao corretos para cada empresa, pois uma tabela Funcionario por exemplo...comeca com um valor corrente do 1, 2, 3...para a empresa 001, e na empresa 002 ja comecara no 4...:/...?
3º - Se eu criar e deixar pronto varios gdb...ou seja...um para cada empresa...como eu faco para pegar informacoes de uma outra empresa quando conectado a um gdb de uma outra empresa, tem algum select no Firebird que une um gdb a outro gdb?
4º - E quando eu quiser copiar os valores de uma tabela e passar para outra...por exemplo: uma tabela do plano de contas da contabilidade, quero usar o mesmo plano para a empresa tal...tem como fazer isso?
Bom, sao basicamente estas as minhas duvidas...se alguem puder me ajudar..ficarei muito agradecido...
Até mais pessoal...valew!!!
Tchelllo
Curtidas 0
Respostas
Fsflorencio
29/11/2004
Se o seu propósito é fazer um relatório consolidando as informações, sugiro deixar tudo no mesmo gdb. Não conheço nenhum comando sql que unifique as informações de dois gdbs. Acredito que não deve ficar pesado, se vc usar os índices direitinho não deve haver problema.
No caso do Plano de Contas, você não precisaria colocar o código da empresa na chave primária, podendo assim usar os mesmos registros do plano de contas por todas as empresas cadastrando ele uma vez só.
No caso do Plano de Contas, você não precisaria colocar o código da empresa na chave primária, podendo assim usar os mesmos registros do plano de contas por todas as empresas cadastrando ele uma vez só.
GOSTEI 0
Tchelllo
29/11/2004
Nao, a principio nao penso em fazer estes tipos de relatorios, o que esta pegando é o fato que o cliente quer que os campos do tipo codigo sejam numerados sequencialmente para cada empresa, por exemplo...a tabela funcionario da empresa 001, ele quer que o primeiro cadastrado comece com o codigo nº 01....e para a empresa 002...o primeiro funcionario cadastrado comece com o codigo 01 tambem, para ele, essa sequencia é importante. Neste caso nao posso manter tudo em um gdb apenas. Só para conferir, a melhor maneira de se fazer isto é deixando pronto uns 200 gdbs +-, o que eu ja acho muito, para o cliente cadastrar suas empresas ou vc tem uma maneira melhor de se fazer?
GOSTEI 0
Fsflorencio
29/11/2004
Não vejo inconveniente em deixar no mesmo gdb.
Quando for gerar o próximo código, a empresa deve ser filtrada para não haver dois códigos iguais na mesma empresa.
ex: select max(cod_funcionario) from funcionarios where cod_empresa = 1;
Mesmo usando generators para tal, para cada empresa que vc inserir vc pode criar dinamicamente um generator para ela e excluindo a empresa, exclui o generator. Ex gen_funcionarios1, gen_funcionarios2.
Se for o caso, vc deverá ter uma tabela com o nome das tabelas para que os generators seram criados a partir dela.
Ex.
Empresa1: gen_clientes1, gen_funcionarios1, gen_produtos1;
Empresa2: gen_clientes2, gen_funcionarios2 ...
Quando for gerar o próximo código, a empresa deve ser filtrada para não haver dois códigos iguais na mesma empresa.
ex: select max(cod_funcionario) from funcionarios where cod_empresa = 1;
Mesmo usando generators para tal, para cada empresa que vc inserir vc pode criar dinamicamente um generator para ela e excluindo a empresa, exclui o generator. Ex gen_funcionarios1, gen_funcionarios2.
Se for o caso, vc deverá ter uma tabela com o nome das tabelas para que os generators seram criados a partir dela.
Ex.
Empresa1: gen_clientes1, gen_funcionarios1, gen_produtos1;
Empresa2: gen_clientes2, gen_funcionarios2 ...
GOSTEI 0
Tchelllo
29/11/2004
entendi...mas o valor corrente do campo codigo nao ira crescer corretamente para cada empresa, veja a seguinte extrutura deste pequeno exemplo:
Table: Funcionario
Cod_Func int primary key,
Nome varchar(80),
Salario Decimal(10,2),
Cod_Emp int
Digamos que eu tenho 3 funcionarios inseridos nela:
01, Joao, 1000.00, 01
02, Carlos, 500.00,01
03, Manoel, 800.00, 01
repare que estes estao inseridos na empresa 01. Bom, agora o usuario quer inserir mais funcionarios na empresa 02
04, Juca, 250.00,02
05, Kiko, 10.00,02
...
O cliente quer que o campo Cod_Func comece no codigo 01 para cada empresa que ele registre, mas, se eu manter os registros em apenas uma tabela isso nao da pois a primary key nao deixa, a nao ser que eu crie uma outra table Funcionario, mas dai o gdb ira ficar com muitas tabelas.
Deste jeito nao me resta outra alternativa nao é?
Table: Funcionario
Cod_Func int primary key,
Nome varchar(80),
Salario Decimal(10,2),
Cod_Emp int
Digamos que eu tenho 3 funcionarios inseridos nela:
01, Joao, 1000.00, 01
02, Carlos, 500.00,01
03, Manoel, 800.00, 01
repare que estes estao inseridos na empresa 01. Bom, agora o usuario quer inserir mais funcionarios na empresa 02
04, Juca, 250.00,02
05, Kiko, 10.00,02
...
O cliente quer que o campo Cod_Func comece no codigo 01 para cada empresa que ele registre, mas, se eu manter os registros em apenas uma tabela isso nao da pois a primary key nao deixa, a nao ser que eu crie uma outra table Funcionario, mas dai o gdb ira ficar com muitas tabelas.
Deste jeito nao me resta outra alternativa nao é?
GOSTEI 0
Martins
29/11/2004
Nobre colega, segue minha sugestão para vc, ressaltando q ainda não testei, mas q deve funcionar....
Vc poderia escrever uma rotina para pegar o último registro da empresa q vc ativar para trabalhar e jogar em uma variavel (inteira), sendo assim, vc poderá alterar o generator para o próximo código... mantendo a ordem...
um exemplo....
[b:4eea15f10c]set generator ´nome_do_generator´ to 10;[/b:4eea15f10c]
O Genarator assume o valor 10...
Apenas uma sugestão....
Vc poderia escrever uma rotina para pegar o último registro da empresa q vc ativar para trabalhar e jogar em uma variavel (inteira), sendo assim, vc poderá alterar o generator para o próximo código... mantendo a ordem...
um exemplo....
[b:4eea15f10c]set generator ´nome_do_generator´ to 10;[/b:4eea15f10c]
O Genarator assume o valor 10...
Apenas uma sugestão....
GOSTEI 0
Ant.carlos/sp
29/11/2004
Table: Funcionario
Cod_Func int ,
Nome varchar(80),
Salario Decimal(10,2),
Cod_Emp int
GERE A PK dessa forma: (CODEMP,CODFUNC)
Digamos que eu tenho 3 funcionarios inseridos nela:
|CODEMP|CODFUNC|NOME|SALARIO|
01,01, Joao, 1000.00
01,02, Carlos, 500.00
01,03, Manoel, 800.00
repare que estes estao inseridos na empresa 01. Bom, agora o usuario quer inserir mais funcionarios na empresa 02
02,02,zzzzz,200.00
02,03,xxxx,300.00
02,04, Juca, 250.00
02,05, Kiko, 100.00
Ao incluir faça o Filtro p/ empresa é pege o ultimo no +1
Isto funiona, mas se vc usar em rede...
T+
ANT.CARLOS/SP
Cod_Func int ,
Nome varchar(80),
Salario Decimal(10,2),
Cod_Emp int
GERE A PK dessa forma: (CODEMP,CODFUNC)
Digamos que eu tenho 3 funcionarios inseridos nela:
|CODEMP|CODFUNC|NOME|SALARIO|
01,01, Joao, 1000.00
01,02, Carlos, 500.00
01,03, Manoel, 800.00
repare que estes estao inseridos na empresa 01. Bom, agora o usuario quer inserir mais funcionarios na empresa 02
02,02,zzzzz,200.00
02,03,xxxx,300.00
02,04, Juca, 250.00
02,05, Kiko, 100.00
Ao incluir faça o Filtro p/ empresa é pege o ultimo no +1
Isto funiona, mas se vc usar em rede...
T+
ANT.CARLOS/SP
GOSTEI 0
Fsflorencio
29/11/2004
Caro tchelllo, para resolver este problema da sequência vc precisa criar um generator para cada tabela x empresa.
Ex 1:
Inserí uma empresa e seu código é ´1´.
As tabelas são as seguintes CLIENTES, FUNCIONARIOS
CREATE GENERATOR GEN_CLIENTES1;
CREATE GENERATOR GEN_FUNCIONARIOS1;
Automaticamente serão criados generators. GEN_CLIENTES1, GEN_FUNCIONARIOS1.
Ex 2: Inserí outra empresa e o código é ´2´
Crie os generators GEN_CLIENTES2, GEN_FUNCIONARIOS2.
CREATE GENERATOR GEN_CLIENTES2;
CREATE GENERATOR GEN_FUNCIONARIOS2;
Ex3: Excluí a empresa 1.
Drop generator GEN_CLIENTES1;
Drop generator GEN_FUNCIONARIOS1;
É tudo feito de forma dinâmica.
Inclusive vc deve rever como está fazendo pra pegar o próximo código, pois desta forma o generator a ser utilizado deve ser o generator com o código da empresa em uso.
Ex 1:
Inserí uma empresa e seu código é ´1´.
As tabelas são as seguintes CLIENTES, FUNCIONARIOS
CREATE GENERATOR GEN_CLIENTES1;
CREATE GENERATOR GEN_FUNCIONARIOS1;
Automaticamente serão criados generators. GEN_CLIENTES1, GEN_FUNCIONARIOS1.
Ex 2: Inserí outra empresa e o código é ´2´
Crie os generators GEN_CLIENTES2, GEN_FUNCIONARIOS2.
CREATE GENERATOR GEN_CLIENTES2;
CREATE GENERATOR GEN_FUNCIONARIOS2;
Ex3: Excluí a empresa 1.
Drop generator GEN_CLIENTES1;
Drop generator GEN_FUNCIONARIOS1;
É tudo feito de forma dinâmica.
Inclusive vc deve rever como está fazendo pra pegar o próximo código, pois desta forma o generator a ser utilizado deve ser o generator com o código da empresa em uso.
GOSTEI 0