Olá pessoal…
Hoje vou mostrar um exemplo de rotina em AdvPL para percorrer todas as filiais no Protheus (considerando a unidade de negócios e o grupo de empresas).
A Rotina foi escrita, pegando todas as unidades de negócios, todas as empresas e por último todas as filiais, alterando as variáveis públicas cFilAnt e cEmpAnt.
lAllFil := .T. //Se for .T. irá pegar todas as filiais, se for .F. será só da empresa atual
aAreaM0 := SM0->(GetArea())
cFilBk := cFilAnt
cEmpBk := cEmpAnt
aUnitNeg:= Iif(lAllFil, FWAllGrpCompany(), {SM0->M0_CODIGO})
aEmpAux := Iif(lAllFil, FWAllCompany(), {cEmpAnt})
//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 (para poder pegar o ident)
SM0->(DbGoTop())
SM0->(DbSeek(cUnidNeg+cFilAnt)) //é utilizado o 01, por grupo de empresas, caso necessário rotina pode ser adaptada
//......................
//Fazer tratamentos necessários neste ponto, se for consultas SQL lembrar de utilizar RetSQLName e FWxFilial
//......................
Next
Next
Next
//Voltando backups
cEmpAnt := cEmpBk
cFilAnt := cFilBk
RestArea(aAreaM0)
Bom pessoal, por hoje é só.
Abraços e até a próxima.
