Páginas filhas
  • 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.

 

  • Sem rótulos