Olá pessoal…
Recentemente ajudando um amigo no Skype, criei uma função que percorre todas as filiais/empresas do Protheus e cria tabelas em todas elas conforme o dicionário.
Essa função, ela pega a unidade de negócios, e todas as empresas, e percorre elas. Ao posicionar na empresa, pega todas as filiais, e percorre todas elas.
Quando está percorrendo as filiais, ai você pode chamar as funções para criação de tabelas, como ChkFile e DbSelectArea, ou se for uma atualização utilizar a X31UpdTable, lembrando de passar o alias dentro delas como “SB1”, e se for mais de uma tabela pode copiar a linha e colar abaixo.
Lembrando que essa função foi testada em um cenário com unidade de negócios, caso não dê certo, você pode adaptar as funcionalidades.
Abaixo a função criada.
//Bibliotecas
#Include "Protheus.ch"
/*/{Protheus.doc} zTstEmp
Função que percorre as empresas / filiais e cria as tabelas no banco
@author Daniel Atilio
@since 16/12/2017
@version 1.0
@example
u_zTstEmp()
/*/
User Function zTstEmp()
Local aAreaM0 := SM0->(GetArea())
Local cFilBk := cFilAnt
Local cEmpBk := cEmpAnt
Local cUnidNeg
Local aUnitNeg := Iif(lAllFil, FWAllGrpCompany(), {SM0->M0_CODIGO})
Local aEmpAux := Iif(lAllFil, FWAllCompany(), {cEmpAnt})
Local nGrp
Local nEmp
Local nAtu
//Percorrendo os grupos de empresa
For nGrp := 1 To Len(aUnitNeg)
cUnidNeg := aUnitNeg[nGrp]
//Percorrendo as empresas
For nEmp := 1 To Len(aEmpAux)
cEmpAnt := aEmpAux[nEmp]
aFilAux := FWAllFilial(cEmpAnt)
//Percorrendo as filiais listadas
For nAtu := 1 To Len(aFilAux)
//Se o tamanho da filial for maior, atualiza
If Len(cFilAnt) > Len(aFilAux[nAtu])
cFilAnt := cEmpAnt + aFilAux[nAtu]
Else
cFilAnt := aFilAux[nAtu]
EndIf
//Posiciono na empresa
SM0->(DbGoTop())
SM0->(DbSeek(cUnidNeg+cFilAnt))
//Aqui você pode usar ChkFile(), DbSelectArea() ou X31UpdTable() para criar / atualizar tabelas, e o TAB1, você pode colocar os alias que você deseja, como por exemplo, "SB1", "SA1", "SA2", etc
ChkFile("TAB1")
Next
Next
Next
cFilAnt := cFilBk
cEmpAnt := cEmpBk
RestArea(aAreaM0)
Return
Bom pessoal, por hoje é só.
Abraços e até a próxima.
Nas terças, mais certo e útil que o paredão no BBB é o Ti publicando algo sobre AdvPL e Protheus. Excelente publicação, essa função vai gerar um ganho absurdo de tempo.
Grande Edivaldo.
Obrigado pelo comentário jovem, rs…
Um grande abraço.