Criando um janela de multiplas opções para retornar o resultado em um campo

Vemos isso normalmente nos módulos de Recursos Humanos, a seleção de multiplas opções onde o resultado das seleções vão para um campo.
Abaixo irei mostrar como usar em uma consulta padrão de um campo e o conteúdo que irá aparecer na janela de seleção trazendo as opções de uma tabela SX5 ou de um array.
No Configurador, vá em Consulta Padrão,
Selecione o tipo de consulta específica, de um nome para a sua consulta e clique em Avançar.
Para o exemplo em questão, na próxima tela, selecione a tabela SX5, em expressão chame a função que iremos criar e neste caso é a FMULTIOP, como parâmetro iremos colocar no nome da tabela YL – Código EDI. Poderia ser qualquer outra tabela, em retorno, teremos que dar um nome, mas para a nossa consulta não será necessário, mas como é um campo obrigatório coloque uma variavel qualquer e clique em Finalizar.
Abra a tabela SXB no APSDU e remova a variável do retorno, localize o campo XB_TIPO = 5, vá no campo XB_CONTEM e remova o conteúdo.
No Configurador ou APSDU, vá no campo que desejar e informe o nome de sua consulta padrão.
Nota: A quantidade de registros selecionados dependerá do tamanho do campo que irá receber, então se o campo é de tamanho 6, apenas 6 registros serão selecionados.
Para, retornar apenas um registro, informe no parâmetro l1Elem como verdadeiro (.T.)
Exemplo: U_FMULTIOP(‘YL’,’CODIGO EDI’,.T.)
Trazendo opções de uma tabela SX5:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
//U_FMULTIOP('05') User Function FMULTIOP(cTabela,cTitulo,l1Elem,lTipoRet) //Exemplo extraído da função GPEXFUNW, mas com pequenas modificações Local MvPar Local MvParDef:="" Private aCat:={} Default cTitulo:="" //O titulo não é obrigatório pois pode ser pegar o titulo da tabela SX5 Default lTipoRet := .T. If(Empty(cTabela)) MsgStop("Informe a tabela a ser pesquisada na SX5!"+CRLF+CRLF+"Avise ao Administrador do sistema. Função: FMULTIOP()","ERRO") Return Endif l1Elem := If (l1Elem = Nil , .F. , .T.) cAlias := Alias() // Salva Alias Anterior IF lTipoRet MvPar:=&(Alltrim(ReadVar())) // Carrega Nome da Variavel do Get em Questao mvRet:=Alltrim(ReadVar()) // Iguala Nome da Variavel ao Nome variavel de Retorno EndIF dbSelectArea("SX5") If dbSeek(xFilial("SX5")+"00"+cTabela) cTitulo := Alltrim(Left(X5Descri(),20)) Endif If dbSeek(xFilial("SX5")+cTabela) CursorWait() aCat := {} While SX5->(!Eof()) .AND. SX5->X5_FILIAL == XFilial("SX5") .AND. SX5->X5_Tabela == cTabela Aadd(aCat,Left(SX5->X5_Chave,1) + " - " + Alltrim(X5Descri())) MvParDef+=Left(SX5->X5_Chave,1) dbSkip() Enddo CursorArrow() Else Help('',1,'FMULTIOP',,'As opções não foram inseridas!',1,0) Endif IF lTipoRet IF f_Opcoes(@MvPar,cTitulo,aCat,MvParDef,12,49,l1Elem) // Chama funcao f_Opcoes (padrão Protheus) &MvRet := mvpar // Devolve Resultado EndIF EndIF dbSelectArea(cAlias) // Retorna Alias Return( IF( lTipoRet , .T. , MvParDef ) ) |
Sintaxe da função f_Opcoes()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Function f_Opcoes( uVarRet ,; //Variavel de Retorno cTitulo ,; //Titulo da Coluna com as opcoes aOpcoes ,; //Opcoes de Escolha (Array de Opcoes) cOpcoes ,; //String de Opcoes para Retorno nLin1 ,; //Nao Utilizado nCol1 ,; //Nao Utilizado l1Elem ,; //Se a Selecao sera de apenas 1 Elemento por vez nTam ,; //Tamanho da Chave nElemRet ,; //No maximo de elementos na variavel de retorno lMultSelect ,; //Inclui Botoes para Selecao de Multiplos Itens lComboBox ,; //Se as opcoes serao montadas a partir de ComboBox de Campo ( X3_CBOX ) cCampo ,; //Qual o Campo para a Montagem do aOpcoes lNotOrdena ,; //Nao Permite a Ordenacao lNotPesq ,; //Nao Permite a Pesquisa lForceRetArr ,; //Forca o Retorno Como Array cF3 ; //Consulta F3 ) |
Continua página 2
Você precisa fazer log in para comentar.