Índice Virtual em uma Tabela Padrão via AdvPL

No artigo de hoje, vamos demonstrar em como criar e utilizar um índice temporário em uma tabela padrão do sistema, através da IndRegua.

Pessoal, antes de começarmos, bem antigamente era comum usarmos a CriaTrab junto da IndRegua, mas conforme o passar do tempo e a evolução do sistema, atualmente não é mais indicado utilizar CriaTrab, por isso no lugar usamos a GetNextAlias, conforme a documentação do TDN disponível nesse link – https://tdn.totvs.com/display/public/framework/CriaTrab+-+Retorna+arquivo+de+trabalho

Dito isso, como que funciona a IndRegua, basicamente ela recebe o alias da tabela, um nome temporário para o índice e a chave dos campos que irão compor o índice.

Então para nosso exemplo, nós vamos criar um índice temporário com os campos B1_FILIAL, B1_CODGTIN e B1_DESC. Notem como ficou o fonte:

//Bibliotecas
#Include "TOTVS.ch"

/*/{Protheus.doc} User Function zTstIndic
Função para testar a criação de índices temporárias em tabelas padrões
@type  Function
@author Atilio
@since 04/11/2023
/*/

User Function zTstIndic()
    Local cTabela   := "SB1"
    Local cIndTmp   := GetNextAlias()
    Local cCampos   := "B1_FILIAL+B1_CODGTIN+B1_DESC"
    Local cMensagem := ""

    //Abre a tabela de produtos
    DbSelectArea(cTabela)

    //Monta a mensagem do Antes
    cMensagem += "==== ANTES ====" + CRLF
    cMensagem += "O índice numérico é: " + cValToChar((cTabela)->(IndexOrd())) + CRLF
    cMensagem += "E a chave do índice é: " + (cTabela)->(IndexKey()) + CRLF
    cMensagem += "Estou no registro: " + Alltrim((cTabela)->B1_COD) + " - " + Alltrim((cTabela)->B1_DESC) + CRLF
    cMensagem += CRLF + CRLF

    //Agora monta o índice temporário
    IndRegua(cTabela, cIndTmp, cCampos)

    //Monta a mensagem do Depois
    cMensagem += "==== DEPOIS ====" + CRLF
    cMensagem += "O índice numérico é: " + cValToChar((cTabela)->(IndexOrd())) + CRLF
    cMensagem += "E a chave do índice é: " + (cTabela)->(IndexKey()) + CRLF
    cMensagem += "Estou no registro: " + Alltrim((cTabela)->B1_COD) + " - " + Alltrim((cTabela)->B1_DESC) + CRLF
    cMensagem += CRLF + CRLF

    //Mostra a mensagem
    ShowLog(cMensagem)
Return

Agora vejam o print da tela de resultado:

Exemplo do resultado

 

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