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: [caption id="attachment_2258" align="aligncenter" width="1048"]pergunta_sx1 Clique na imagem para aumentá-la[/caption] 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