Página 1 de 1
TBROWSE ????
Enviado: 05 Set 2006 11:26
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)
Antes do TBROWSE
Enviado: 05 Set 2006 11:42
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
Re: Antes do TBROWSE
Enviado: 05 Set 2006 12:52
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. :'(
TBROWSE EMPTY
Enviado: 05 Set 2006 13:31
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
Enviado: 05 Set 2006 13:36
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

Enviado: 05 Set 2006 15:12
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

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
TBROWSE PERSONALIZADO
Enviado: 05 Set 2006 15:52
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
Tbrowse(de novo) !!!!! URGENTE
Enviado: 22 Set 2006 11:59
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
:'(
TBROWSE
Enviado: 23 Set 2006 08:00
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