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

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