Você está na página 1de 5

Conceitos de filial de compartilhamentos de arquivos

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.

Grupo de Empresas: Nível superior que controla o dicionário de dados no Microsiga Protheus. Exemplo: SX1??0.DBF – os pontos de
interrogação serão substituídos pelo código do grupo.
Empresas: Nível que identifica as empresas que fazem parte do grupo, ou seja, agora é possível utilizar mais de uma empresa para o
mesmo dicionário de dados.
Unidades de negócios: Nível que identifica as unidades de negócios das empresas. Desta forma, é possível definir um nível de controle
entre as empresas e filiais.
Filial: Nível que identifica as filiais das unidades de negócios ou das empresas

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:

1. Utilizar as diretivas abaixo para que o programa aceite as alterações de tamanho do campo Filial:

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:

1. FWSizeFilial() -> Retorna o tamanho utilizado para a Filial (Substitui o Tamanho fixo de 2)
2. FWCodFil() -> Retorna o código da Filial posicionada (Substitui a utilização do M0_CODFIL)

1. Todos os novos campos referente a Filial deverão ser inseridos no grupo de campo “033” (Filial).

1. Para a atualização de campos concatenados, no qual, a filial faz parte do conteúdo do campo, deverá ser criada uma função com a sigla
do módulo + “UpdFConj()” que retornará um array com a seguinte estrutura:

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

1. Funções auxiliares para o desenvolvimento e padronização dos programas:

FWSizeFilial - Retorna o tamanho do campo Filial


FWCodFil - Retorna o código da filial
FWModeAccess - Retorna o modo de compartilhamento
FWGrpCompany - Retorna o grupo
FWAllGrpCompany - Retorna os grupos de empresas
FWCompany - Retorna a empresa
FWAllCompany - Retorna as empresas do grupo de empresas
FWUnitBusiness - Retorna a unidade de negócio
FWAllUnitBusiness - Retorna as unidades de negócios para o grupo e empresa
FWFilial - Retorna a filial
FWAllFilial - Retorna as filiais para o grupo de empresas
FWLoadSM0 - Carrega as informações das filiais
FWSM0Layout - Retorna o leiaute
FWXFilial - Retorna a string
FWGrpName - Retorna o nome do grupo de empresas
FWFilialName - Retorna o nome da filial
FWFilRazSocial - Retorna a Razão Social
FWArrFilAtu - Retorna todas informações referente a empresa, unidade de negócio e filial
FWFilialStatus - Retorna o status da filial posicionada
FWCodEmp - Retorna o código da empresa
FWPesqSM0 - Exibe a filiais disponíveis para o grupo de empresa atual
FWUnitName - Retorna o nome da Unidade de Negócios
FWCompanyName - Retorna o nome da empresa
FWFilExist - Verifica se a filial existe
FWEmpName - Nome da empresa
FWFilName - Nome da filial

1. Os programas que utilizam a varredura na tabela SM0 (While), devem utilizar a função FWLoadSM0() que retorna um array com todas
as informações do SIGAMAT.

Exemplo:

// FWLoadSM0Sample.prw

aSM0 := FWLoadSM0()

For nI := 1 To Len(aSM0)

//Tratamentos desejados com as informações do SIGAMAT

Next nI

1. Para retornar informações de uma filial específica, utilize a função FWArrFilAtu().

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.

Você também pode gostar