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

Deixe uma resposta

%d blogueiros gostam disto: