Como fazer um Combo num ParamBox conforme definições de um campo na SX3 | Ti Responde 0136

No vídeo de hoje, vamos demonstrar em como criar um ComboBox numa tela de parâmetros com ParamBox mas com as opções vindas direta do dicionário de dados (X3_CBOX).

A dúvida de hoje, nos perguntaram, se seria possível em um ParamBox, exibir um Combo que tivesse as mesmas opções de um campo do Protheus, conforme o X3_CBOX.

 

Pensando nisso, montamos esse exemplo, onde vamos demonstrar em como usar a função TkSX3Box e através dela montar um Array que usaremos no ParamBox.

 

Segue abaixo o vídeo exemplificando:

 

E abaixo o código fonte desenvolvido:

//Bibliotecas
#Include "TOTVS.ch"
#Include "TopConn.ch"

/*/{Protheus.doc} User Function zVid0136
Exemplo de como criar um ComboBox no ParamBox com as definições diretas de um campo do dicionário (X3_CBOX)
@type  Function
@author Atilio
@since 12/01/2024
/*/

User Function zVid0136()
    Local aArea        := FWGetArea()
    Local aPergs       := {}
    Local dDataDe      := FirstDate(Date())
    Local dDataAt      := LastDate(Date())
    Local cClienteDe   := Space(TamSX3('A1_COD')[01])
    Local cClienteAte  := StrTran(cClienteDe, ' ', 'Z')
    Local nTipo        := 1
    Local cTipClient   := "0"
    Local aTiposCli    := TkSX3Box("A1_TIPO")

    //Adiciona o tipo todos
    aSize(aTiposCli, Len(aTiposCli) + 1)
    aIns(aTiposCli, 1)
    aTiposCli[1] = "0=Todos"

    //Adicionando os parâmetros
    aAdd(aPergs, {1, "Data da Última Compra De",  dDataDe,     "", ".T.", "",    ".T.", 80,  .F.}) // MV_PAR01
    aAdd(aPergs, {1, "Data da Última Compra Até", dDataAt,     "", ".T.", "",    ".T.", 80,  .T.}) // MV_PAR02
    aAdd(aPergs, {1, "Cliente De",                cClienteDe,  "", ".T.", "SA1", ".T.", 60,  .F.}) // MV_PAR03
    aAdd(aPergs, {1, "Cliente Até",               cClienteAte, "", ".T.", "SA1", ".T.", 60,  .T.}) // MV_PAR04
    aAdd(aPergs, {2, "Tipo do Filtro",      nTipo,      {"1=Trazer Tudo", "2=Trazer somente os que compraram", "3=Trazer os que nunca compraram"},  100, ".T.", .F.}) // MV_PAR05
    aAdd(aPergs, {2, "Tipo Cliente",        cTipClient, aTiposCli,  100, ".T.", .F.}) // MV_PAR06
 
    //Mostra a tela para o usuário confirmar
    If ParamBox(aPergs, "Informe os parâmetros", , , , , , , , , .F., .F.)
        MV_PAR05 := Val(cValToChar(MV_PAR05))
        MV_PAR06 := Left(MV_PAR06, 1)
        
        fContaRegs()
    EndIf

    FWRestArea(aArea)
Return

Static Function fContaRegs()
    Local aArea    := FWGetArea()
	Local cQryDad  := ""
	Local nTotal   := 0
	
	//Montando consulta de dados
	cQryDad := "SELECT "		+ CRLF
	cQryDad += "    A1_COD, "		+ CRLF
	cQryDad += "    A1_NOME, "		+ CRLF
	cQryDad += "    A1_ULTCOM "		+ CRLF
	cQryDad += "FROM "		+ CRLF
	cQryDad += "    " + RetSQLName("SA1") + " SA1 "		+ CRLF
	cQryDad += "WHERE "		+ CRLF
	cQryDad += "    A1_FILIAL = '" + FWxFilial("SA1") + "' "		+ CRLF
    cQryDad += "    AND A1_COD >= '" + MV_PAR03 + "' "		+ CRLF
	cQryDad += "    AND A1_COD <= '" + MV_PAR04 + "' "		+ CRLF
    If MV_PAR05 == 2
        cQryDad += "    AND A1_ULTCOM != '' "		+ CRLF
        cQryDad += "    AND A1_ULTCOM >= '" + dToS(MV_PAR01) + "' "		+ CRLF
        cQryDad += "    AND A1_ULTCOM <= '" + dToS(MV_PAR02) + "' "		+ CRLF
	ElseIf MV_PAR05 == 3
        cQryDad += "    AND A1_ULTCOM = '' "		+ CRLF
    EndIf
    If MV_PAR06 != "0"
        cQryDad += "    AND A1_TIPO = '" + MV_PAR06 + "' "		+ CRLF
    EndIf
	cQryDad += "    AND SA1.D_E_L_E_T_ = ' ' "		+ CRLF
	cQryDad += "ORDER BY "		+ CRLF
    cQryDad += "    A1_COD "		+ CRLF

    //Baixe a zViewQry nesse link - https://terminaldeinformacao.com/2021/12/22/como-usar-a-funcao-showlog/
    u_zViewQry(cQryDad)
	
	//Executando consulta
	TCQuery cQryDad New Alias "QRY_DAD"
	TCSetField("QRY_DAD", "A1_ULTCOM", "D")
	
	//Conta a quantidade de registros
	Count To nTotal
	QRY_DAD->(DbCloseArea())
	
	//Exibe uma mensagem
	Alert("Foi encontrado " + cValToChar(nTotal) + " registro(s)")

    FWRestArea(aArea)
Return

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.

Deixe uma resposta

Terminal de Informação