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.