TBROWSE ????
Moderador: Moderadores
-
Zeca Roque
- Usuário Nível 2

- Mensagens: 59
- Registrado em: 11 Jul 2006 15:40
- Localização: SÃO PAULO-CAPITAL
TBROWSE ????
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)
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
José Carlos
Fw/Fwh - Clipper 52e - Blinker 7.0 - WS 4.50 - SIX - xHarbour110
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Antes do TBROWSE
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
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

- Mensagens: 59
- Registrado em: 11 Jul 2006 15:40
- Localização: SÃO PAULO-CAPITAL
Re: Antes do TBROWSE
Boa tarde !!!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
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
José Carlos
Fw/Fwh - Clipper 52e - Blinker 7.0 - WS 4.50 - SIX - xHarbour110
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
TBROWSE EMPTY
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:Eu não sei razão de você chamar o TBROWSE em um GET.
Mas acho que irá funcionar.
:xau
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 VRETMas acho que irá funcionar.
:xau
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
-
Zeca Roque
- Usuário Nível 2

- Mensagens: 59
- Registrado em: 11 Jul 2006 15:40
- Localização: SÃO PAULO-CAPITAL
Boa Tarde PABLO !!!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
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
José Carlos
Fw/Fwh - Clipper 52e - Blinker 7.0 - WS 4.50 - SIX - xHarbour110
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
TBROWSE PERSONALIZADO
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
2.) Caso que você vai exibir, somente (que creio que é seu caso), faça:
3.) Se você tem 1 campo de um DBF que a ser exibido com mais outro campo de um outro DBF faça:
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
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)Código: Selecionar todos
column := TBColumnNew( PADC("Descricao",21), { || TRANSFORM(DESCRICAO,"@!") } )
b:addColumn(column)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 VRETUm clip-abraço
:)Pos
-
Zeca Roque
- Usuário Nível 2

- Mensagens: 59
- Registrado em: 11 Jul 2006 15:40
- Localização: SÃO PAULO-CAPITAL
Tbrowse(de novo) !!!!! URGENTE
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
:'(
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
José Carlos
Fw/Fwh - Clipper 52e - Blinker 7.0 - WS 4.50 - SIX - xHarbour110
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
TBROWSE
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
Um clip-abraço
:)Pos