Olá pessoal…
Hoje vou mostrar uma função desenvolvida que retorna a descrição da opção de um campo Combo em AdvPL (por exemplo, S=Sim, ele retorna Sim).
A função recebe 3 parâmetros, o primeiro é a chave de pesquisa (por exemplo ‘S’, ‘N’, ‘1’, etc), o segundo parâmetro é o campo do configurador (por exemplo ‘A1_TIPO’, ‘C5_TIPO’, ‘B1_RASTRO’, etc), e o terceiro parâmetro é o conteúdo do combo (essa opção só é utilizada, caso você não use o campo).
Abaixo um exemplo utilizando o campo:
u_zCmbDesc( "D",; //Chave Pesquisada "C5_TIPO",; //Campo "") //Conteúdo
Abaixo um exemplo utilizando o conteúdo:
u_zCmbDesc( "S",; //Chave Pesquisada "",; //Campo "S=Sim;N=Nao") //Conteúdo
Abaixo o fonte completo da rotina.
//Bibliotecas #Include "Protheus.ch" /*/{Protheus.doc} zCmbDesc Função que retorna a descrição da opção do Combo selecionada @type function @author Atilio @since 28/08/2016 @version 1.0 @param cChave, character, Chave de pesquisa dentro do combo @param cCampo, character, Campo do tipo combo @param cConteudo, character, Conteúdo no formato de combo @return cDescri, Descrição da opção do combo @example u_zCmbDesc("D", "C5_TIPO", "") //Utilizando por Campo u_zCmbDesc("S", "", "S=Sim;N=Não;A=Ambos;") //Utilizando por Conteúdo /*/ User Function zCmbDesc(cChave, cCampo, cConteudo) Local aArea := GetArea() Local aCombo := {} Local nAtual := 1 Local cDescri := "" Default cChave := "" Default cCampo := "" Default cConteudo := "" //Se o campo e o conteúdo estiverem em branco, ou a chave estiver em branco, não há descrição a retornar If (Empty(cCampo) .And. Empty(cConteudo)) .Or. Empty(cChave) cDescri := "" Else //Se tiver campo If !Empty(cCampo) aCombo := RetSX3Box(GetSX3Cache(cCampo, "X3_CBOX"),,,1) //Percorre as posições do combo For nAtual := 1 To Len(aCombo) //Se for a mesma chave, seta a descrição If cChave == aCombo[nAtual][2] cDescri := aCombo[nAtual][3] EndIf Next //Se tiver conteúdo ElseIf !Empty(cConteudo) aCombo := StrTokArr(cConteudo, ';') //Percorre as posições do combo For nAtual := 1 To Len(aCombo) //Se for a mesma chave, seta a descrição If cChave == SubStr(aCombo[nAtual], 1, At('=', aCombo[nAtual])-1) cDescri := SubStr(aCombo[nAtual], At('=', aCombo[nAtual])+1, Len(aCombo[nAtual])) EndIf Next EndIf EndIf RestArea(aArea) Return cDescri
Bom pessoal, por hoje é só.
Abraços e até a próxima.
Olá Danilo..
Parabéns pelos artigos. Ajudam bastante a comunidade.
Há também a função não documentada chamada X3COMBO(“campo”,conteudo)
Exemplo
X3COMBO(“A1_PESSOA”,”F”) – Retorna Física.
Toda vez que preciso dela, esqueço o nome da função.
E quando pesquiso sempre aparece este seu post nos resultados.
Agora fica mais fácil lembrar através do seu post
Abraços e sucesso.
Obrigado pelo comentário Rodrigo.
Depois irei adicionar na base de conhecimento.
Um grande abraço.