TBROWSE ????

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Zeca Roque
Usuário Nível 2
Usuário Nível 2
Mensagens: 59
Registrado em: 11 Jul 2006 15:40
Localização: SÃO PAULO-CAPITAL

TBROWSE ????

Mensagem por Zeca Roque »

Ola a todos !!!

Tenho uma rotina que filtra determinados registros e cria um TBROWSE com os registros que obedecem as condições impostas. Acontece que as vezes não há registro no arquivo que satisfaça esta condição e o TBROWSE é criado sem nenhum registro. O que eu preciso saber é como evitar que este TBROWSE seja criado sem nenhum registro. Tem como, durante a ESTABILIZAÇÃO do TBROWSE verificar se o mesmo está vazio e sair (EXIT) imediatamente, por exemplo:

Do While ( ! oMyBrowser:Stabilize() )

nKey:=InKey()

If nKey != 0
Exit
EndIf
IF "NAO TEM REGISTRO NO ARQUIVO"
exit
ENDIF

EndDo

Grato a todos ´o)
Saudacoes

José Carlos
Fw/Fwh - Clipper 52e - Blinker 7.0 - WS 4.50 - SIX - xHarbour110
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Antes do TBROWSE

Mensagem por Pablo César »

Colega Zeca Roque,

Antes de chamar a função que contém o TBROWSE, verifique se está vazio. Ponha numa variavel, quantos regitros tem seu DBF utilizando as funções LASTREC(). E se essa varia for igual a zero, poderias colocar um registro em branco e dar a mensagem que "NAO TEM REGISTRO NO ARQUIVO" também.

Boa sorte ! :)Pos
Zeca Roque
Usuário Nível 2
Usuário Nível 2
Mensagens: 59
Registrado em: 11 Jul 2006 15:40
Localização: SÃO PAULO-CAPITAL

Re: Antes do TBROWSE

Mensagem por Zeca Roque »

Pablo César escreveu:Colega Zeca Roque,

Antes de chamar a função que contém o TBROWSE, verifique se está vazio. Ponha numa variavel, quantos regitros tem seu DBF utilizando as funções LASTREC(). E se essa varia for igual a zero, poderias colocar um registro em branco e dar a mensagem que "NAO TEM REGISTRO NO ARQUIVO" também.

Boa sorte ! :)Pos
Boa tarde !!!

Não posso fazer como voce fala por vários motivos.

1. O arquivo SEMPRE tem algum registro. Eu escolho alguns registros deste arquivo através de um filtro.
2. o TBROWSE está dentro de uma função que por sua vez é originada de um GET. Veja parte do codigo:

@ 10,23 GET m_remete PICT "@!K" COLOR "N/W*";
VALID RetNome(08,42,17,77,"ROMANEIO",9,{"REMETE"},{" Remetente"},{"@!"},"REMETE")

Este "embrolio" acima desemboca no RETNOME(TBROWSE) que falei.
Porisso que eu penso que o melhor é testar o TBROWSE e não o arquivo, mesmo porque o arquivo SEMPRE TERÁ ALGUM REGISTRO enquanto que o TBROWSE nem sempre terá registros. :'(
Saudacoes

José Carlos
Fw/Fwh - Clipper 52e - Blinker 7.0 - WS 4.50 - SIX - xHarbour110
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

TBROWSE EMPTY

Mensagem por Pablo César »

Ok José agora entendí,

Gostaria ver como você faz para mostrar cada coluna do TBrowse. Caso o seu seja algo parecido a este, faria assim:

Código: Selecionar todos

column := TBColumnNew( PADC("Status",22), { || VECAMP(2->CODEVL) } )
b:addColumn(column)

FUNCTION VECAMP(VCOD)
/*
Esta função serve para ver o conteudo de um campo que está em outro DBF. E você poderia aqui usar quanto estiver sem registros.
*/
IF EMPTY(ALLTRIM(VCOD))
   VRET:=SPACE(8)
ELSE
   SELE 3
   SEEK VCOD
   IF FOUND()
      VRET:=TRANSFORM((3->DEVE),"@E 9,999.99")
   ELSE
      VRET:=SPACE(8)
   ENDIF
ENDIF
RETURN VRET
Eu não sei razão de você chamar o TBROWSE em um GET.
Mas acho que irá funcionar.

:xau
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

Esquecí de voltar ao select() que estava antes da função VECAMP().

Então insira uma linha antes de RETURN VRET e coloque SELE 2. Claro que tudo isto é um exemplo.

sds :-o
Zeca Roque
Usuário Nível 2
Usuário Nível 2
Mensagens: 59
Registrado em: 11 Jul 2006 15:40
Localização: SÃO PAULO-CAPITAL

Mensagem por Zeca Roque »

Pablo César escreveu:Esquecí de voltar ao select() que estava antes da função VECAMP().

Então insira uma linha antes de RETURN VRET e coloque SELE 2. Claro que tudo isto é um exemplo.

sds :-o
Boa Tarde PABLO !!!

Segue a linha de codigo solicitada:

For I:=1 To Len(Campo)
Coluna:=TbColumnNew(Cabecalho,FieldwBlock(Campo,Select()))
Coluna:Picture:=Pict
oMybrowser:AddColumn(Coluna)

Next
Saudacoes

José Carlos
Fw/Fwh - Clipper 52e - Blinker 7.0 - WS 4.50 - SIX - xHarbour110
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

TBROWSE PERSONALIZADO

Mensagem por Pablo César »

Caro colega Zeca Roque,

O seu TBROWSE é genérico. Isto é serve para exibir qualque tipo de campo. Mas pergunto: essa função exibe outro campos em outra situação também ou essa função é única para esse caso. Se for única para esse caso, diria que você pode estabelecer já colocando os nomes do campos de forma FIXA. Assim:

1.) Digamos que você vai editar o campo DESCRICAO

Código: Selecionar todos

column := TBColumnNew( PADC("Descricao",21), { || TRANSFORM(DESCRICAO,"@!") } )
column : cargo := { FIELDBLOCK("DESCRICAO"),"@!" }
b:addColumn(column)
2.) Caso que você vai exibir, somente (que creio que é seu caso), faça:

Código: Selecionar todos

column := TBColumnNew( PADC("Descricao",21), { || TRANSFORM(DESCRICAO,"@!") } )
b:addColumn(column)
3.) Se você tem 1 campo de um DBF que a ser exibido com mais outro campo de um outro DBF faça:

Código: Selecionar todos

column := TBColumnNew( PADC("Nome completo",40), { || TRANSFORM(1->NOME),"@!") } ) 
b:addColumn(column) 

column := TBColumnNew( PADC("Status",22), { || VECAMP(1->CODEVL) } ) 
b:addColumn(column)

FUNCTION VECAMP(VCOD) 
/* 
Esta função serve para ver o conteudo de um campo que está em outro DBF. E você poderia aqui usar quanto estiver sem registros. 
*/ 
IF EMPTY(ALLTRIM(VCOD)) 
VRET:=SPACE(8) 
ELSE 
SELE 2 // (claro que tem que estar o outro DBF indexado por código, por exemplo) 
SEEK VCOD 
IF FOUND() 
VRET:=TRANSFORM((3->DEVE),"@E 9,999.99") 
ELSE 
VRET:=SPACE(8) 
ENDIF 
ENDIF 
SELE 1
RETURN VRET
Tente fazer, você mesmo. Eu também demorei muito para entender o TBROWSE (que faz parte da programação orientada a objetos). Mas ele é fantastico, dá para obter resultados muito rápidos e com uma exibição bem ampla. Tem que meter as caras como dizem por aí. Pois é muito importante você perceber como funciona, de acordo com a experiência de cada um. Mas esse é o caminho. Se houver duvidas, poste ainda aqui, que a gente dá uma mãozinha.

Um clip-abraço
:)Pos
Zeca Roque
Usuário Nível 2
Usuário Nível 2
Mensagens: 59
Registrado em: 11 Jul 2006 15:40
Localização: SÃO PAULO-CAPITAL

Tbrowse(de novo) !!!!! URGENTE

Mensagem por Zeca Roque »

Bom Dia!!!

Gostaria de uma força do pessoal do forum para resolver um problema em CLIPPER, usando o TBROWSE.
Dentro de um mesmo arquivo, num mesmo registro gostaria de colocar um IF para, dependendo da situação mostrar uma coisa ou outra no TBROWSE.

Por exemplo:
Caso o tipo seja "C" (coleta) ele deve mostrar o campo COLETA e seus "derivados".
Caso contrario deverá mostrar o campo CSGTO (entrega) e "seus derivados"
No modo abaixo, aparece somente as COLETAS ("C").
As entregas no TBROWSE aparece com o numero zerado e não aparece na tela

Veja o exemplo abaixo e corrija, por favor, onde eu errei
.......


Coluna1 := TBColumnNew("Numero",IF (C->TIPO="C",{|| C->COLETA },{|| C->CSGCTO }))
Coluna2 := TBColumnNew("Cliente",IF (TIPO="C",{|| CLTREMETE },{|| CSGREMETE }))
Coluna3 := TBColumnNew("Bairro",IF (TIPO="C",{|| CLTBAIRRO },{|| CSGBAIRRO }))
Coluna4 := TBColumnNew("Fone",IF (TIPO="C",{|| CLTFONE },{|| CSGFONE }))
Coluna5 := TBColumnNew("Baixa",{|| FEITO })
OMybrowser:addColumn(coluna1)
OMybrowser:addColumn(coluna2)
OMybrowser:addColumn(coluna3)
OMybrowser:addColumn(coluna4)
OMybrowser:addColumn(coluna5)


Eis o layout do arquivo ROMANEIO


CODIGO ("C") 06
MOTORISTA ("C") 30
CARRO ("C) 09
PLACA ("C) 09
CELULAR ("C) 09
JUDANTE1 ("C) 15
AJUDANTE2 ("C) 15
CONFERENTE ("C) 15
DATA ("D)
COLETA ("N) 06 0 <---------------------- Numero da Coleta
HORA ("C) 08
PROMETIDO ("D)
POREXTENSO ("C) 30
FRETECOMB ("N) 11 2
MODO ("C) 01
ALMOCO ("C) 30
CLTREMETE ("C) 30
CLTBAIRRO ("C) 15
CLTMUNIC ("C) 15
CLTCONTATO ("C) 15
CLTFONE ("C) 09
CLTDESTINA ("C) 30
CLTCIDADE ("C) 15
CLTQUANT ("N) 06 0
CLTPESO ("N) 06 0
CLTEMITIDO ("C) 10
CLTOBS1 ("C) 50
CLTOBS2 ("C) 50
CSGCTO ("N) 06 0 <-------------------Numero do Conhecimento
CSGREMETE ("C) 30
CSGBAIRR ("C) 15
CSGMUNIC ("C) 15
CSGDESTIN ("C) 30
CSGCIDADE ("C) 15
CONSIGNAT ("C) 30
CSGBAIRRO ("C) 15
CSGMUNICI ("C) 15
CSGFONE ("C) 09
CSGQUANT ("N) 06 0
CSGPESO ("N) 06 0
CSGNFISCAL ("C) 10
CSGFRETE ("N) 11 2
TIPO ("C) 01 <----------------------< ("E) ENTREGA ou ("C) COLETA
FEITO ("C) 01
IMPRESSO ("C) 01

Como disse acima, quando a COLETA for # de 0 ele vai mostrar alguns campos que começam com CLT
E quando CSGCTO for # de 0 ele vai mostrar algums campos que comecam com CSG.
Tudo dentro do mesmo BROWSE, uma vez que cada registro tem CSG e CLT

Saudações
:'(
Saudacoes

José Carlos
Fw/Fwh - Clipper 52e - Blinker 7.0 - WS 4.50 - SIX - xHarbour110
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

TBROWSE

Mensagem por Pablo César »

Caro colega ZECA ROQUE, não entendí mais o menos o seu problema, porém, cabe verificar o seu código fonte. Você não poderia postar por completo o seu TBROWSE, coloque inclusive a forma de abertura dos seus DBFs. Assim poderei te auxiliar melhor.

Um clip-abraço
:)Pos
Responder