Criando Pergunta com caixa de seleção

Blog Advpl - Share knowledge

Criando Pergunta com caixa de seleção

Vai aí uma dica de como criar uma pergunta para usar em suas rotinas onde aparece uma tela com caixa de seleção.

pergunta_lista_tela1

Primeiramente vamos montar o fonte para gerar a tela:

#include "protheus.ch"
User Function fTipoSit(l1Elem,lTipoRet)

Local cTitulo:=""
Local MvPar
Local MvParDef:=""

Private aSit:={}
l1Elem := If (l1Elem = Nil , .F. , .T.)

DEFAULT lTipoRet := .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

	aSit := {"A - TODOS","B - LIBERADOS","C - BLOQUEADOS"}
	MvParDef:="ABC"
	cTitulo :="Tipos de Situação"

IF lTipoRet
	IF f_Opcoes(@MvPar,cTitulo,aSit,MvParDef,12,49,l1Elem)  // Chama funcao f_Opcoes
		&MvRet := mvpar                                                                          // Devolve Resultado
	EndIF
EndIF

dbSelectArea(cAlias) 								 // Retorna Alias

Return( IF( lTipoRet , .T. , MvParDef ) )

Agora vamos configurar a pergunta:

pergunta_sx1

Clique na imagem para aumentá-la

Agora no fonte que irá receber o parâmetro o tratamento do resultado é bem simples:

Usando CONTÉM ($)

cTipoSit := MV_PAR06
cTipoSit:= MV_PAR06
If "A"$cTipoSit

//seu código

Endif

ou usando numa consulta SQL

nReg      := 0
cTipoSit:= MV_PAR06 //recebe o resultado da pegunta
cSitQuery := ""

For nReg:=1 to Len(cTipoSit)
     cSitQuery += "'"+Subs(cTipoSit,nReg,1)+"'"
     If ( nReg+1 ) <= Len(cTipoSit)
          cSitQuery += "," 
     Endif
Next nReg   

cSitQuery := "%" + cSitQuery + "%"

BeginSql alias cAliasX
     SELECT SC1.*
     FROM %table:SC1% SC1
     WHERE SC1.%notDel% 
        SC1.C1_TPSIT IN (%exp:Upper(cSitQuery)%)
     ORDER BY %exp:cOrdem%
EndSql 

E o resultado final, quando você entrar e sai do campo a janela será exibida.

pergunta_lista_tela2