Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Como criar sistema multi empresa? Como criar sistema multi empresa?...
JA
Como criar sistema multi empresa?  
Fechado
Como criar sistema multi empresa?

Pacotão Dominando o Adianti Framework 7
O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado! Versão 7.4


Dominando o Adianti 7 Quero me inscrever agora!

Comentários (6)


BJ

Bom dia Jonathas,

Sua pergunta é bem ampla e dá margem para pensar que não tens ideia do caminho a seguir, portanto partirei desse pressuposto:

Basicamente a ideia é poder separar por empresa os objetos das classes não compartilháveis, classes compartilháveis seriam estado e município por exemplo, ou seja todos os objetos podem ser acessados por qualquer empresa, já a classe pedido, pessoa e produto não, cada empresa só acessará seus próprios objetos.

Entendido isso, você precisará criar uma classe empresa, que será associada a todas as classes não compartilháveis, sendo assim, pedido, pessoa, produto e especialmente usuario, bem como todas as demais na mesma situação possuirão a chave estrangeira da classe empresa.

O próximo passo é a codificação do sistema. As primeiras classes que devem ser populadas são empresa, e usuario consecutivamente, até porque usuario precisará do valor do id da empresa para ser postado, uma vez populadas essas classes, o login poderá ser feito e nesse login o valor de empresa_id deverá ser armazenada em sessão e sempre que você for incluir objetos nas classes não compartilháveis o valor de empresa_id deverá ser obtido da sessão, lembrando que nos formulários de listagem, você também deverá filtrar por empresa_id os objetos das classes não compartilháveis.

Bem isso tudo é conceito, quanto a programação em si, você encontrará fartura de material disponível aqui mesmo no site, nos livros, nos vídeos e é só por a cabeça pra trabalhar.

Espero ter ajudado.

Sucesso.
MC

Boa Tarde...

Ampliando a resposta do Beto..

Primeiro você tem que separar o conceito de Multi Empresa do conceito de Multi Cliente, muitas pessoas confundem.

MULTI EMPRESA - Uma empresa que tem a sua Matriz, suas Filiais e muitas das vezes Escritórios Regionais
Neste conceito a explicação do Beto é muito plausível e indo muito mais alem pode-se criar Base de Dados separadas ou não,
tudo vai depender da estrutura que terá que ser montada.

MULTI CLIENTE, este conceito muitas das vezes é confundido com o conceito acima, no entanto este você irá vender o
seu sistema para vários clientes seja eles MULTI EMPRESAS ou NÃO.

Nesta confusão já vi erros grosseiros, onde se cria um sistema Multi Empresa e sai vendendo (Alugando) Filiais aos clientes, olha que
isso é muito mais comum que se imagina, já trabalhei em empresas conceituadas que fazem isso, e a desculpa é sempre a mesma; CUSTO.

No entanto este erro, pode gerar para o cliente e principalmente para você, prejuízos incalculáveis apesar da justiça colocar o seu preço.
Como?

(Fato Verídico) Já vi uma empresa A emitir milhares de boletos de cobrança aos seus clientes e ver o seu SAC dia e noite ter que responder perguntas
do estilo "EU NUNCA COMPREI NADA DE VOCÊS E COMO ME VEM UMA COBRANÇA", sem contar o acumulo no setor jurídico de processos infindáveis.

Qual foi o problema ?.

A empresa A não sabia, mas o seus dados ficavam numa UNICA Base de Dados compartilhada, porque a empresa que "alugou" o sistema
usava um Sistema MULTI EMPRESA de Base de Dados Compartilhado, o login do usuário é quem definia a "EMPRESA" e por algum motivo
isso não funcionou..
Isso fazem 10 anos e até hoje ela reponde na justiça, sem contar o "prejuízo" que foi repassado para a administradora do sistema.

DETALHE - Vi o mesmo problema acontecer a 6 meses atrás numa prefeitura, na geração de Relatórios para a Procuradoria.

O correto será você manter estruturas separadas para cada cliente seja elas dos sistema em si, quanto da Base de Dados, lembrando que legalmente
o seu cliente é 'PROPRIETÁRIO INCONDICIONAL" dos dados inseridos na Base.

Assim você só precisa de uma matriz do sistema, e ainda poderá negociar qualquer mudanças específicas para aquele cliente sem prejuízo aos demais.
Se você esta pensando em custo, primeiro lembre-se em Segurança da Informação e com isso menor Prejuízos, isso você pode vender ao
seu cliente.
Hoje qualquer Host custa em torno de 30 reais com 2 ou mais de Gigabites, isso você pode negociar, colocar em contratos e repassar ao seu cliente
na prática é ótimo uma vez que se tiver aumentos ou ultrapassar o limite o custo é dele.

Outra coisa que deve ser lembrada que numa boa Prática de Ética, você jamais "DIGO JAMAIS MESMO", usar a Base de Dados como moeda de
barganha ou de troca, infelizmente já estive numa reunião onde tal fato aconteceu. Isso não será bom para o seu cliente, mas será "PÉSSIMO" para
você.

Espero ter contribuído.

Abraços

Marco Aurelio













JA

Obrigado, Beto Frota Júnior e Marco AR Campos!

Depois do depoimento de vcs consegui tomar uma decisão.

Muito obrigado!

Att,
Jonathas Alves
WS

Puxa, comprei o studio professional, estou aprendendo, mas se tivesse um exemplo multiempresa, do estilo login -> tela de seleção de empresa seria genial, estou tentando descobrir como fazer isso.
DC

setando multiunit = 1 no application.ini o campo de seleção da unidade passa a aparecer na tela de login com as unidades cadastradas e a escolhida é salva em uma variavel de sessao, dito isso agora é escolher a melhor abordagem, ou filtrar a cada atividade, ou mexer no cerne do framwork, eu iria com a primeira opção
EM

Bom noite.

Um software multiempresas tem N vantagens. Suporte rápido e simples, onde quando ajustar bugs pra um, replica automaticamente para todos. O desenvolvimento realmente precisa de cuidados.

Trabalho a 10 anos com desenvolvimento, e sempre tive a ideia em desenvolver um sistema multiempresas e foi a coisa mais certa que fiz! Hoje me preocupo muito pouco com os projetos, suporte e concerto de bugs rápidos. Isso nos ajuda na sobra de energias da equipe para criação de mais soluções ao projeto. Hoje abandonei todos os sistemas e desenvolvimento de projetos individuais, só vendo 1 tipo de software que é multiempresas. Melhorou tudo 100%, todas as etapas de suporte, negócios, implantação, estresse caíram lindamente. Qualidade de vida subiu. rs

Na parte técnica desenvolvemos uma modelagem de B.D. de solução simples. Tenho uma tabela empresa, que é recursiva, ou seja, se relaciona com ela mesmo, os relacionamentos são as filiais para poder agrupar empresas que tenham mais de 1 filial. Uso o codigo da empresa principal para cadastrar registros gerais que serão listados para todas as empresas, mas tem também registros que são cadastrados vinculado a uma determinada filial, esses são listados apenas para a filial.

No cadastro de usuário, é solicitado a empresa que ele pertence e a filial, se não for definido filial o sistema vai entender que ele tem acesso a todas as filiais, se for definido a filial ele vai ter acesso apenas as informações daquela filial.

No script ao fazer o login criamos uma variavel global(SESSION) $codEmps, onde recebe os codigos das empresas que ele pertence, se não for definido filial ele vai receber o codigo de todas as filiais onde vai ser listados registros de todas as filiais. Se for definido a filial no cadastro, vai receber apenas o codigo da filial onde vai listar apenas registros dessa filial.
O cuidado que deve ter é sempre comparar em todos os SQL's usando essa variável global. Se o projeto for bem gerenciado, não terá problema algum.

Espero ter ajudado.