Olá pessoal…
Hoje vou mostrar uma função que desenvolvi em AdvPL para criação de uma tabela genérica (SX5).
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.
