Como trocar um ícone de legenda de uma rotina do Protheus | Ti Responde 0121

No vídeo de hoje, vamos demonstrar em como alterar uma legenda em uma tela padrão, modificando o ícone exibido.

A dúvida de hoje, nos perguntaram, se seria possível em uma tela, buscar uma legenda, por exemplo, bolinha verde, e alterar para outro ícone qualquer.

 

Pensando nisso, montamos esse exemplo, onde vamos demonstrar em como manipular o array de legenda, no caso usando o ponto de entrada FINALEG e na rotina Contas a Pagar.

 

Segue abaixo o vídeo exemplificando:

 

E abaixo o código fonte desenvolvido:

//Bibliotecas
#Include "TOTVS.ch"

/*/{Protheus.doc} FINALEG
Ponto de Entrada na manipulação de legendas do financeiro
@type user function
@author Atilio
@since 30/01/2024
@see https://tdn.totvs.com/display/public/PROT/FINALEG+-+Manipula+legendas+financeiro
/*/

User Function FINALEG()
    Local aArea     := FWGetArea()
    Local cTabela   := ParamIXB[2]
    Local aRegras   := ParamIXB[3]
    Local aLegendas := ParamIXB[4]
    Local cProcura  := "BR_BRANCO"
    Local cSubstit  := "BPMSTSK2A"
    Local nPosicao  := 0

    //Se for o Contas a Pagar
    If cTabela == "SE2"
        //Se tiver regras
        If Len(aRegras) > 0
            //Procura pela cor Branca
            nPosicao := aScan(aRegras, {|x| Alltrim(x[2]) == cProcura})

            //Se encontrou, substitui o ícone
            If nPosicao > 0
                aRegras[nPosicao][2] := cSubstit
            EndIf
        EndIf

        //Se tiver legendas
        If Len(aLegendas) > 0
            //Procura pela cor Branca
            nPosicao := aScan(aLegendas, {|x| Alltrim(x[1]) == cProcura})

            //Se encontrou, substitui o ícone
            If nPosicao > 0
                aLegendas[nPosicao][1] := cSubstit
            EndIf

            //Aciona a tela para visualizar as legendas
            BrwLegenda(cCadastro, "Legenda", aLegendas)
        EndIf

    //Senão, se for Contas a Receber
    Else
        //Aciona a tela para visualizar as legendas
        BrwLegenda(cCadastro, "Legenda", aLegendas)
    EndIf

    FWRestArea(aArea)
Return aRegras

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.

2 Responses

  1. Maurilio disse:

    Olá Dan, tudo jóia ?
    Eu consigo criar uma nova legenda com o PE F040URET fazendo validação com SE5 ? Eu preciso sinalizar com uma nova legenda na tela do contas a receber, os títulos que foram feito por baixa para perda (E5_MOTBX == “BXP”). Tentei fazer um dbSeek com os dados da SE1 para buscar na SE5, mas não deu certo e também não sei se é a melhor forma de fazer isso.

    • Bom dia Maurilio, tudo joia graças a Deus e você?

      Então, as legendas o ideal é ser na mesma tabela que é apresentada no browse, por questões de performance e tudo mais.

      O que eu recomendaria então para o seu cenário, seria:
      1. Cria um campo novo na SE1, do contexto real, chamado por exemplo, E1_X_MOTBX
      2. Use o ponto de entrada SACI008 que é após a baixa do título a Receber – https://tdn.totvs.com/pages/releaseview.action?pageId=6071312
      3. Dentro dele, dê um RecLock na SE1 posicionada, e grave o campo E1_X_MOTBX com o E5_MOTBX
      4. Nisso, volte para o ponto de entrada que você estava usando para adicionar a legenda, e ai você consegue usar o E1_X_MOTBX para fazer os testes

      Tenha uma ótima e abençoada quarta feira.

      Um forte abraço.

Deixe uma resposta

Terminal de Informação