Página 1 de 1

Tbrowse mostrar registros filtrados

Enviado: 20 Jan 2017 10:01
por porter
olá pessoal,
No TBrowse tem como filtrar registros sem usar o SET FILTER, colocar cores diferentes para cada registro
estou conseguindo normalmente.

xHarbour, DBF.

Tbrowse mostrar registros filtrados

Enviado: 20 Jan 2017 10:50
por Vlademiro
Se for para mudar o filtro de acordo com uma condição aqui no fórum tem bastante material sobre isso. Por exemplo:



https://pctoledo.org/forum/viewto ... ec#p110502

Creio que nesse exemplo a condição entra no bloco de código definido por COLORBLOCK:

https://pctoledo.org/forum/viewto ... ect#p96696

Faça uma busca por COLORRECT OU COLORBLOCK. Acho que deve resolver.

Tbrowse mostrar registros filtrados

Enviado: 20 Jan 2017 11:22
por porter
Esses exemplos são para colorir uma linha conforme alguma condição,
eu quero que se um determinado campo tenha "*" por exemplo, esse registro
não é para aparecer no Tbrowse, não sei em qual parte do Tbrowse tenho
que pular esses registros.

Tbrowse mostrar registros filtrados

Enviado: 20 Jan 2017 13:11
por JoséQuintas
Vai apenas colocar asteriscos, ou quer filtrar mesmo?

se é asteriscos que quer mostrar, é no que vai mostrar que precisa colocar isso.

Código: Selecionar todos

// ao invés de 
{ || campo }
//
{ || iif( condicao, "*****", campo ) }
se é pra filtrar, só definir o skip do tbrowse.

Tbrowse mostrar registros filtrados

Enviado: 20 Jan 2017 17:53
por porter
Onde eu defino o skip do Tbrowse, quero mostrar somente registros que o campo ATIVAR esteja vazio.


PROCEDURE BRW_ArqMercadoria
PARAMETERS brw_ls,brw_cs,brw_li,brw_ci,brw_campos
brw:=TBrowseDB(brw_ls+1,brw_cs+1,brw_li-1,brw_ci-1)
brw:colorspec := "W+/N,R+G/G,,,G/R+G"
brw:headsep:=chr(196)+chr(196)
FOR i_=1 TO LEN(brw_campos)
cp_titu:=brw_campos[i_,3]
cp_masc:=brw_campos[i_,2]
cp_:=brw_campos[i_,1]
brw:addcolumn(tbcolumnnew(cp_titu,&("{||TRAN("+cp_+",["+cp_masc+"])}")))
brw:getcolumn(i_):width := LEN(TRAN(&cp_.,cp_masc))
NEXT
DO WHILE .T.
SETCOLOR("&PR/&CY")

brw:REFRESHALL()
DO WHILE !brw:stabilize() .AND. NEXTKEY()=0
ENDDO
IF LASTKEY() = 27
RETURN(0)
ELSEIF LASTKEY() = 73 .OR. LASTKEY() = 105 && I ou i
CADASTRO("I")
ENDDO

Tbrowse mostrar registros filtrados

Enviado: 20 Jan 2017 19:07
por JoséQuintas

Código: Selecionar todos

      brw:SkipBlock     := { | nSkip | dbViewSkip( nSkip, ... ) }
      brw:GoBottomBlock := { || dbViewBottom( ... ) }
      brw:GoTopBlock    := { || dbViewTop( ... ) }

STATIC FUNCTION dbViewSkip( nSkip, ... )
STATIC FUNCTION dbViewBottom( ... )
STATIC FUNCTION dbViewTop( ... )

Tbrowse mostrar registros filtrados

Enviado: 20 Jan 2017 22:34
por Vlademiro
A postagem do Quintas mostra como se faz. Caso vc tenha alguma dúvida quanto a função dbViewSkip() ela tem mais ou menos esse aspecto :

Código: Selecionar todos


FUNCTION dbSkipView( nSolicitado )
LOCAL nSaltados := 0

    IF nSolicitado == 0 // Não salta, apenas força a reescrita
       SKIP 0
    ELSEIF nSolicitado > 0 .AND. !eof()
       // SALTA ATÉ QUE O NUMERO PEDIDO SEJA ALCANÇADO
       DO WHILE nSaltados < nSolicitado
          SKIP 1
          IF !( COLOQUE SEU TESTE AQUI ) .OR. EOF()
               SKIP -1
               EXIT
          ENDIF
          nSaltados ++
       ENDDO
   ELSEIF ( nSolicitado < 0 )
       // agora inverte
       DO WHILE nSaltados > nSolicitado
          SKIP -1
          IF !( COLOQUE SEU TESTE AQUI )
               SKIP
               EXIT
          ENDIF
          nSaltados --
       ENDDO
   ENDIF
RETURN nSaltados
É mais ou menos essa a ideia, tem que testar pois eu não testei esse código.