Hoje vou mostrar como filtrar os itens de um cadastro pelo browse aberto.
Se você já precisou pegar o browse padrão, e realizar filtros nos registros, hoje vou mostrar duas formas de se fazer, uma mais nova e uma da maneira clássica.
Em ambos os exemplos, pense no contexto em que você precisa filtrar automaticamente o browse, após a inclusão ou alteração de algum registro.
O que devemos fazer, é seja em ponto de entrada, ou alguma outra forma, interceptar a tela, e assim aplicar os filtros desejados.
Usando FWmBrwActive (FWMBrowse / MVC):
//Monta o filtro cCondicao := "SB1->B1_TIPO == 'PA'" //Intercepta o FWMBrowse e executa o filtro oBrowse := FWmBrwActive() oBrowse:SetFilterDefault(cCondicao) oBrowse:oBrowse:Refresh()
Usando GetObjBrow (mBrowse clássico):
//Monta o Filtro cCondicao := " UC_CODIGO == '000001' " //Intercepta o mBrowse e executa o filtro oBrowse := GetObjBrow() oBrowse:SetFilterDefault(cCondicao) oBrowse:Refresh()
Bom pessoal, por hoje é só.
Abraços e até a próxima.
Boa tarde Tudo bem?
Gostaria de saber se é possível fazer um Browse com base em uma tabela temporária com condições SQL, fiz uma tela Mod. 2 em MVC e gostaria de filtrar para aparecer somente 1 registro com os campos do cabeçalho para o usuário entrar e acho que um dos jeitos “mais fáceis” de fazer isso é com SQL (DISTINCT).
Agradeço desde já qualquer link ou qualquer ajuda!
Bem, gostaria de deixar documentado que não consegui achar um meio de uma tabela temporária com SQL para ativação do Browse, porem consegui fazer algo para solucionar meu problema e para fins de documentação gostaria de deixar documentado o que fiz para resolver para caso alguém tenha o mesmo problema.
a melhor solução que usei e deu certo foi fazer um filtro mesmo no Browse com SetFilterDefault pegando apenas o campo XXX_ITEM com = ‘0001’, ai ele aparece apenas o primeiro registro do grid mas quando você entra no registro ele aparece o grid inteiro, esta dando certo pra mim atualmente.
Bom dia Henrique, tudo joia?
Opa, obrigado pelo feedback.
Só se atente ao que enviamos no outro comentário, caso o usuário exclua o item ‘0001’, crie algum mecanismo para que o item 0002 se torne o 0001 e assim por diante.
Ou efetue a tratativa de subQuery buscando os RecNo conforme o link que enviamos.
Um grande abraço.
Bom dia Henrique, tudo joia graças a Deus e você?
Teria algumas formas, abaixo vou detalhar duas.
Forma 1 – Filtrando pelo campo de item
a. Se sua tabela tiver algum campo sequencial, tipo item (igual C7_ITEM)
b. Ai você da um SetFilterDefault filtrando o primeiro registro dela
c. Por exemplo, supondo que o campo tenha tamanho 3, você coloca “CAMPO_ITEM == ‘001’” no seu filtro
d. Obs.: Adicione alguma tratativa para impedir que o usuário apague o registro ‘001’ ou se ele apagar, para que você transforme o próximo item ‘002’ em ‘001’, senão o registro não vai ser exibido no browse
Forma 2 – Fazendo uma SubQuery buscando um RecNo da Tabela
a. Caso sua tabela não tenha campo de item, ou nela o usuário utilizar bastante a rotina de exclusão
b. Ai você pode montar alguma lógica com MAX ou MIN ou subquery pegando o primeiro ou o último recno de um grupo de registros (se for por exemplo, do pedido de compras, é do C7_NUM)
c. Nesse link tem um exemplo – https://terminaldeinformacao.com/2018/01/30/como-deixar-apenas-uma-linha-por-pedido-browse-pedido-de-compras/
Um grande abraço.
—
Se você achou esse comentário útil, considere em apoiar o nosso projeto se tornando um Assinante Premium, saiba mais em https://terminaldeinformacao.com/assinatura