O compartilhamento de arquivos é baseado no conceito de filiais. Cada empresa cadastrada pode ter n filiais onde os dados inseridos por cada filial - como cadastro de produtos, cliente, etc. - podem ou não ser compartilhados com as demais filiais. Este recurso somente é possível devido à existência do campo “XX_FILIAL” (“XX” representa o nome do arquivo) em todos os arquivos do sistema.
O modo de operação de cada arquivo - compartilhado ou exclusivo - está definido no arquivo SX2 do dicionário de dados.
Caso o modo de acesso seja compartilhado, quando um novo registro for inserido, o campo XX_FILIAL receberá o valor “ “ (dois caracteres em branco) e o seu conteúdo será visível por qualquer usuário de qualquer filial.
Caso o modo seja exclusivo, quando um novo registro for inserido, o campo receberá o código - alfanumérico - da filial ( no exemplo abaixo, “01” ou “02” ) e será visível apenas para os usuários da filial que inseriu o mesmo.
Exemplo:
O arquivo XX está com o modo de acesso definido como exclusivo no SX2, portanto seus registros serão visíveis somente para a filial que os inseriu. Vide exemplo abaixo:
XX_FILIAL | XX_CODIGO | XX_DESCRI |
01 | 30 | CHAVE DE FENDA |
01 | 22 | CHAVE PHILLIPS |
02 | 21 | FURADEIRA BOSCH |
02 | 12 | FURADEIRA BLACK & DECKER |
01 | 31 | DREMEL |
01 | 90 | SERRA TICO-TICO |
02 | 48 | PRUMO |
02 | 13 | SERROTE |
Os usuários da Filial 01 terão acesso somente aos dados cujo registro possua o conteúdo “01” no campo XX_FILIAL. Já os usuários da Filial 02, acessarão os dados dos registros com o valor “02” no campo XX_FILIAL.
Na Gestão de Empresas, existem algumas particularidades, que se deve se atentar no desenvolvimento. Para um melhor entendimento sobre a funcionalidade Gestão de Empresas, segue uma breve explicação dos níveis que estarão disponíveis na Linha de Produtos Microsiga Protheus.
Criando estes níveis, podemos utilizar diversas empresas, unidades de negócios e filiais compartilhando informações entre si.
O único nível obrigatório para a Linha de Produtos Microsiga Protheus é a filial de no mínimo dois dígitos podendo chegar a doze dígitos, os demais níveis deverão ser utilizados de acordo com a necessidade de cada cliente.
A partir deste momento, iremos explicar o relacionamento entre os níveis:
No cadastro de Grupo de Empresas, o administrador do Sistema deverá definir o leiaute utilizado para preenchimento da empresa, unidade de negócios e filial, que não deverá ultrapassar doze caracteres.
Exemplo: EEUUFFFF
No exemplo acima, definimos que as informações gravadas nos campos filiais serão identificadas da seguinte maneira:
EE – Dois dígitos para a empresa
UU – Dois dígitos para a unidade de negócios
FFFF – Quatro dígitos para a filial
Algumas regras que devem ser seguidas pelos desenvolvedores:
FWGETTAMFILIAL-> Retorna o tamanho utilizado para a Filial (Substitui o Tamanho fixo de 2)
Exemplo:
// FWGETTAMFILIALSample.prw
AAdd(aStr, {"XU_FILIAL", "C", FWGETTAMFILIAL, 0})
Neste caso, todos os lugares que estiverem utilizando o tamanho 2 fixo deverão ser alterados para que se torne flexível a mudança do tamanho.
FWGETCODFILIAL -> Retorna o código da Filial posicionada (Substitui a utilização do M0_CODFIL)
A partir do momento que for definido que o tamanho do campo FILIAL pode ser aumentado, o tamanho físico do campo M0_CODFIL será 12, desta maneira, para utilizar o conteúdo correto a variável FWGETCODFILIAL deverá ser utilizada no lugar do campo M0_CODFIL.
Exemplo:
// FWGETCODFILIALSample.prw
FWGETCODFILIAL = "1234"
Filial com tamanho 4 e sem os caracteres especiais - CERTO
Para tratamento em dicionários de dados, não é possível a utilização das strings informadas, pois, esta é substituída somente em tempo de compilação. Desta forma, em caso de dicionário de dados deve utilizar as seguintes funções:
aArray[n,1]=Alias
aArray[n,2]=Campo
aArray[n,3]=Tamanho original do campo (Deve ser informado o tamanho padrão e não deve ser considerado o aumento ou diminuição do campo filial)
aArray[n,4]=Indica a posição em que inicia a gravação do campo filial (Opcional. No caso de não existir este nível, o campo será apenas aumentado.)
aArray[n,5]=Bloco de códigos com a função de atualização dos dados a ser executada quando a posição 4 for igual a 0 (zero).
Este bloco de códigos recebera como parâmetro as seguintes informações:
cAlias,cField,nRealSize,nFilIni,nOldSize,nNewSize.
Exemplo de preenchimento:
// ConcatenatedBranchUpdateSample.prw
{ |cAlias,cField,nRealSize,nFilIni,nOldSize,nNewSize|FunUpdRA( cAlias,cField,nRealSize,nFilIni,nOldSize,nNewSize ) }
Function GPEUpdFConj()
Local aFields := {}
Aadd(aFields, { "SRA", "RA_P1FILP2", 14, 7 } ) // Exemplo: "PARTE101PARTE2"
Aadd(aFields, { "SRA", "RA_FILUSR", 8, 1 } ) // Exemplo: "01PARTE2"
Aadd(aFields, { "SRA", "RA_123456", 8, 0, { cAlias, cField, nRealSize, nFilIni, nOldSize, nNewSize| FunUpdRA(cAlias, cField,n RealSize, nFilIni, nOldSize, nNewSize) }} )
Return aFieds
Function FunUpdRA(cAlias, cField, nRealSize, nFilIni, nOldSize, nNewSize)
// Tratamentos necessários e atualização do conteúdo no banco de dados
Return
Exemplo:
// FWLoadSM0Sample.prw
aSM0 := FWLoadSM0()
For nI := 1 To Len(aSM0)
//Tratamentos desejados com as informações do SIGAMAT
Next nI
Exemplo:
// FWArrFilAtuSample.prw
aFil := FWArrFilAtu(cEmpAnt, cFilAnt)
aFil := FWArrFilAtu("04", "E01U01F03")
7. O ambiente de Gestão de Pessoal já utilizava o conceito de multi empresas, sendo assim, para utilizar a empresa deve-se verificar se existe a empresa configurada para o grupo e caso não esteja configurada pegar o conteúdo do próprio grupo para manter o legado.
Exemplo:
// FWLoadSM0LegacySample.prw
aSM0 := FWLoadSM0()
For nI := 1 To Len(aSM0)
If !Empty(aSM0[nI,SM0_EMPRESA])
cEmp := aSM0[nI,SM0_EMPRESA]
Else
cEmp := aSM0[nI,SM0_GRPEMP]
EndIf
// Utiliza a variável cEmp
Next nI
Estas regras devem ser utilizadas no sistema e customizações. Desta forma, é muito importante revisar as customizações dos clientes antes de começar a utilizar a Gestão de Empresas.
Concluindo, a Gestão de Empresas, presente na Linha de Produtos Microsiga Protheus, permite compartilhar as definições do “Modelo de dados” entre as empresas configuradas no sistema, além de introduzir o conceito de Unidade de Negócio.