Rotina para percorrer todas as filiais em AdvPL

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).


AdvPL

AdvPL

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.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

Deixe uma resposta

Terminal de Informação