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.