Função para criar tabelas em todas as filiais/empresas

Função para criar tabelas em todas as filiais/empresas

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

Esses e outros códigos, estão disponíveis gratuitamente no nosso GitHub, acesse em github.com/dan-atilio/AdvPL.
Caso queira uma customização específica para sua empresa, saiba mais em nossa Loja.

Bom pessoal, por hoje é só.
Abraços e até a próxima.

About Dan_Atilio

Analista e desenvolvedor de sistemas. Técnico em Informática pelo CTI da Unesp. Graduado em Banco de Dados pela Fatec Bauru. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor do projeto Terminal de Informação, onde são postados tutoriais e notícias envolvendo o mundo da tecnologia.

2 comentários em “Função para criar tabelas em todas as filiais/empresas

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

Deixe uma resposta

%d blogueiros gostam disto: