Função que cria tabela genérica (SX5) via AdvPL

Função que cria tabela genérica (SX5) via AdvPL

Olá pessoal…

Hoje vou mostrar uma função que desenvolvi em AdvPL para criação de uma tabela genérica (SX5).

AdvPL
AdvPL

Na chamada da função é necessário, passar o alias da tabela, a descrição, e o conteúdo em formato de array, similar a:

aDadAux   := {}
cAliasAux := "ZZ"
cDescAux  := "Teste"

aAdd(aDadAux, {"001", "Teste Pt", "Teste Es", "Teste In"})
aAdd(aDadAux, {"002", "Teste Pt", "Teste Es", "Teste In"})
aAdd(aDadAux, {"003", "Teste Pt", "Teste Es", "Teste In"})

u_zCriaGen(cAliasAux, cDescAux, aDadAux)

Abaixo o código fonte completo:

//Bibliotecas
#Include "Protheus.ch"

/*/{Protheus.doc} zCriaGen
Função que cria tabela genérica
@type function
@author Atilio
@since 03/02/2017
@version 1.0
	@param cTab, Caracter, Tabela
	@param cDesc, Caracter, Nome da Tabela
	@param aSX5, Array, Array com os dados da SX5
	@example
	u_zCriaGen("ZZ", "Teste", aSX5)
	@obs Abaixo a estrutura do array:
	SX5:
		[nLinha][01] - Chave
		[nLinha][02] - Descrição
		[nLinha][03] - Descrição Espanhol
		[nLinha][04] - Descrição Inglês
/*/

User Function zCriaGen(cTab, cDesc, aSX5)
	Local aAreaX5 := SX5->(GetArea())
	Local nAtual  := 0
	Default cTab  := ""
	Default cDesc := ""
	Default aSX5  := ""
	
	DbSelectArea("SX5")
	SX5->(DbSetOrder(1))
	
	//Se tiver tabela e descrição
	If !Empty(cTab) .And. !Empty(cDesc)
		//Se não conseguir posicionar, cria a tabela
		If ! SX5->(DbSeek(cFilSX5 + '00' + cTab))
			RecLock('SX5', .T.)
				X5_FILIAL   := FWxFilial('SX5')
				X5_TABELA   := '00'
				X5_CHAVE    := cTab
				X5_DESCRI   := cDesc
				X5_DESCSPA  := cDesc
				X5_DESCENG  := cDesc
			SX5->(MsUnlock())
		EndIf
		
		//Se tiver dados
		If Len(aSX5) > 0
			//Percorrendo os registros
			For nAtual := 1 To Len(aSX5)
				//Se conseguir posicionar no registro, será alteração
				If SX5->(DbSeek(cFilSX5 + cTab + aSX5[nAtual][01]))
					RecLock('SX5', .F.)
						X5_DESCRI   := aSX5[nAtual][02]
						X5_DESCSPA  := aSX5[nAtual][03]
						X5_DESCENG  := aSX5[nAtual][04]
					SX5->(MsUnlock())
				
				//Senão, será inclusão
				Else
					RecLock('SX5', .T.)
						X5_FILIAL   := FWxFilial('SX5')
						X5_TABELA   := cTab
						X5_CHAVE    := aSX5[nAtual][01]
						X5_DESCRI   := aSX5[nAtual][02]
						X5_DESCSPA  := aSX5[nAtual][03]
						X5_DESCENG  := aSX5[nAtual][04]
					SX5->(MsUnlock())
				EndIf
			Next
		EndIf
	EndIf
	
	MsgInfo("Processamento finalizado!", "Atenção")
	
	RestArea(aAreaX5)
Return

Esses e outros códigos, estão disponíveis gratuitamente no nosso GitHub, acesse em github.com/dan-atilio/AdvPL.

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.

Deixe uma resposta

%d blogueiros gostam disto: