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.