TBROWSE

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

ederxc
Usuário Nível 4
Usuário Nível 4
Mensagens: 619
Registrado em: 15 Set 2006 08:40
Localização: Pedreira -SP-

Mensagem por ederxc »

Quando se quer inovações requer bibliotecas e morte de muitos neuronios ahahahahah valeu Pablo e pode me chamar de apenas Eder , quando fiz o cadastro no forum pensei que ederxc seria apenas meu login , ae eu dancei agora creio que ñ de para mudar mais , porem isso ñ iauhauhahuahahauahuahahahurta muito .. té+++
C:\Xharbour\Xdev\Fw\VSX
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 »

Mas ao final Eder, você conseguiu resolver a sua questão ?. Eu sei, vai levar um tempinho entender e adaptar... não é ?. Espero que você consiga os melhores resultados. Assim como outros também consigam desenvolver com maiores recursos e fortalecer a nossa linguagem.

Um clip-abraço :)Pos
ederxc
Usuário Nível 4
Usuário Nível 4
Mensagens: 619
Registrado em: 15 Set 2006 08:40
Localização: Pedreira -SP-

Mensagem por ederxc »

"TEMPINHO " bota tempinho nisso , aprender a usar vetor e ao mesmo tempo o tbrowse , vai levar um século ... mas quando resolver posto os resultados ...
C:\Xharbour\Xdev\Fw\VSX
ederxc
Usuário Nível 4
Usuário Nível 4
Mensagens: 619
Registrado em: 15 Set 2006 08:40
Localização: Pedreira -SP-

Mensagem por ederxc »

Código: Selecionar todos

Amigo Pablo velho a lhe pedir mais uma ajuda ...

Tentei criar o seguinte vetor 

vetor:={nf,item,datemi,nomefor}

Pesquisa , se achou....

do while ! eof()  
    AADD(VETRO[1],NF)             //ja esta dando erro aqui. 
    AADD(VETRO[2],ITEM)
    AADD(VETRO[3],DATEMI)
    AADD(VETRO[4],NOMEFOR)
     skip
enddo

first argument to AADD() was not an array value.

OBS: o Banco e o indice esta devidamente selecionado pois eu usava os indices e a pesquisa com DBSEEK() no dbedit 


 Minha duvida é sera que estou montando certo a matriz ou a sintexe que vc me passou tem algo a ser alterado ???
C:\Xharbour\Xdev\Fw\VSX
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 »

Oi Eder,

Acho que está errado a declaração da matriz. Assim ficaria certo:

*

Código: Selecionar todos

VETOR:={}
SELE 1
SEEK STRZERO(VCLI,6,0) // Pesquisa , se achou.... 
do while (1->CLIENTE)=VCLI
    AADD(VETOR,{(1->NF),(1->ITEM),(1->DATEMI),(1->NOMEFORN)}) 
    skip 
enddo
Desta forma só adicionará ao vetor se TODOS os registros do DBF forem relacionados aquele cliente (por exemplo). Note que eu acostumo colocar o número do SELE do BD (fica mais entendível e mais seguro).

Um clip-abraço :)Pos
Editado pela última vez por Pablo César em 23 Mai 2007 14:07, em um total de 1 vez.
ederxc
Usuário Nível 4
Usuário Nível 4
Mensagens: 619
Registrado em: 15 Set 2006 08:40
Localização: Pedreira -SP-

Mensagem por ederxc »

Pablo esta dando o seguinte erro nesta sintaxe

BASE/1187 Bound error: AADD

Explanation: The array passed to AADD() already contained the
maximum number of elements.

Action: Correct the program. The maximum number of elements in an
array is 4096.

Penso que os vetores estão se sobrecarregando , e o mais extranho é que este banco deve ter uns 15 arquivos seria possivel esta sintaxe fazer um "loop" até extrapolar o vetor?? tentei com o Do while ! EOF() e da o mesmo erro !

Código: Selecionar todos

SET ORDER TO 2
      GO TOP
      VETOR:={{},{},{},{}}
      chave=(STR(VFORN,3)+DTOS(VDATEMI))
      IF DBSEEK(CHAVE)
         Do while (str(B->forn,03)+dtos(B->datemi))=chave
               AADD(VETOR[1],(B->nf))
               AADD(VETOR[2],(B->item))
               AADD(VETOR[3],(B->datemi))
               AADD(VETOR[4],(B->mostforn))
         enddo
         tabela()
      else
         return
      endif
  endif[b]


[i]Obs: Pablo me descupe ficar lhe sobrecarregando com o mesmo assunto , mas agora que comecei quero ir até  o fim pesso encarecidamente que tenha um pouco de paciencia e ñ me deixe na mão té+++ [/i][/i][/b]
C:\Xharbour\Xdev\Fw\VSX
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 »

ederxc escreveu:Penso que os vetores estão se sobrecarregando, e o mais extranho é que este banco deve ter uns 15 arquivos
Você quis dizer: REGISTROS
ederxc escreveu:seria possivel esta sintaxe fazer um "loop" até extrapolar o vetor?? tentei com o Do while ! EOF() e da o mesmo erro !
Positivo, Eder. O seu DOWHILE não tem saída, pois está faltando algo importante: SKIP dentro do seu DOWHILE, hihihi (isto acontence...)
ederxc escreveu:Pablo me descupe ficar lhe sobrecarregando com o mesmo assunto, mas agora que comecei quero ir até o fim pesso encarecidamente que tenha um pouco de paciencia e ñ me deixe na mão
Não esquenta, não iria deixar ninguém na mão se estiver nas minhas possibilidades. Mas acho que agora vai.

Um clip-abraço :)Pos
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 »

Caro Eder,

Eu entendo que você está criando matrizes para serem exibidas em TBROWSE de ARRAYS (vetores ou matrizes como preferir). Nesse TBROWSE, você vai editar tais campos também ?.

*

Código: Selecionar todos

VETOR:={} 
AADD(VETOR,{NF,item,datemi,forn})
Porque se você não vai editá-los, te convém utilizar apenas um VETOR UNIDIRECIONAL. Isto é, você poderia CONCATENAR todos esses campos, ora porque você iria exibir-los apenas. E lembre que isto ocupa menos memória (de acordo definições anteriores sobre VETOR)

Ja se você for EDITAR esses campos, você vai precisar guardar também o CODFORN que servirá para localizar no DBF e atualizar. Não sei se o campo (B->mostforn) guarda o código ou o nome. Eu sugiro que você guarde esse campo no QUINTO elemento_coluna do VETOR. Você não precisará EXIBI-LO no TBROWSE, mas estará lá para localização do registro no DBF.

Um clip-abraço :)Pos
Editado pela última vez por Pablo César em 23 Mai 2007 14:19, em um total de 2 vezes.
ederxc
Usuário Nível 4
Usuário Nível 4
Mensagens: 619
Registrado em: 15 Set 2006 08:40
Localização: Pedreira -SP-

Mensagem por ederxc »

Sim pablo , pretendo fazer alterações por este motivo estou usando o Tbrowsedb() se fosse apenas para mostrar os dados na tela usaria um relatório em tela com Row()+1,03 say (qualquer coisa)


Outra coisa ainda ñ esta funcionando, fiz da forma que vc falou mas o filtro ñ esta funiconando todo o banco é exbido no tbrowsedb()
vejamos onde estou errando ...

Código: Selecionar todos

SELE B
      go top
      SET ORDER TO 2
      VETOR:={{},{},{},{}}
      chave=(STR(VFORN,3)+DTOS(VDATEMI))
      if dbseek(CHAVE)
         Do while (CHAVE)=(STR(FORN,3)+DTOS(DATEMI))
            AADD(VETOR[1],nf)
            AADD(VETOR[2],item)
            AADD(VETOR[3],datemi)
            AADD(VETOR[4],mostforn)
             skip
         enddo
         tabela()
      else
         return
      endif
  endif
**************************<Funcao Tabela>***************************************
function tabela()
          GO TOP
         #include "inkey.ch"
         setcolor('n/gb')
         @06,03 clear to 20,76
         dispbox(06,03,20,76)
oMybrowser:=TBrowseDb(07,04,19,75)
oMybrowser:HeadSep  :=Chr(196)  + Chr(196) + CHr(196)
oMybrowser:ColSep   :=Space(01) + Chr(179) + Space(01)
oMybrowser:ColorSpec:='N/GB'
ocolum1:=tbcolumnnew('NUMERO DA NOTA'   ,{||(VETOR[1],nf)})
ocolum2:=tbcolumnnew('ITEM'                      ,{||(VETOR[2],item)})
ocolum3:=tbcolumnnew('DATA EMISSAO'       ,{||(VETOR[3],datemi)})
ocolum4:=tbcolumnnew('NOME FORNECEDOR',{||(VETOR[4],mostforn)})
oMybrowser:addcolumn(ocolum1)
oMybrowser:addcolumn(ocolum2)
oMybrowser:addcolumn(ocolum3)
oMybrowser:addcolumn(ocolum4)
C:\Xharbour\Xdev\Fw\VSX
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 »

ederxc escreveu:Sim pablo , pretendo fazer alterações por este motivo estou usando o Tbrowsedb()
Então Eder, você deve também guardar o FORN no VETOR para que você possa localizá-lo dentro do seu DBF.
ederxc escreveu:Outra coisa ainda ñ esta funcionando, fiz da forma que vc falou mas o filtro ñ esta funcionando todo o banco é exbido no tbrowsedb()
SELE B
go top
SET ORDER TO 2
// Isto está errado: // VETOR:={{},{},{},{}}

* O correto é:

Código: Selecionar todos

AADD(NFS,{(B->NF),(B->ITEM),(B->DATEMI),(B->FORN),(B->PROD),(B->(RECNO()))}) 
/* Pois como eu disse na minha msg anterior, você aqui precisa abrir mais uma coluna-vetor, senão você não segue armazenar o FORN
Antes, disso me confirme se existe este campo e se tem esta caracteiristica (campo numérico). Considerando que é isso mesmo, você deveria declarar o vetor (com mais um dimensão):

Você colocou parte do seu código, fica dificil de avaliar. Mas tenho impressão que o seu TBROWSE é furado. Você deve ganhar intimidade com o TBROWSE antes de fazer o seu definitivo. Quero dizer, deverias, fazer um teste de como funciona o seu TBROWSE. Eu estou colocando um exemplo aqui que pode ser adaptado, mas que servirá como exemplo. A edição é um pouco laboriosa porque você terá que fazer uma função que altere cada elemento conforme o número da coluna (esta é uma das formas que eu faço para identificar qual é o campo a ser editado).

* O antigo código fonte (foi removido por causar confusão), veja um exemplo atualizado: Código exemplo

Veja também que o VQFORN, seria uma função que busque através do código, o nome do fornecedor.

Quando você menciona que o "FILTRO", que na verdade não é filtro algum, e sim é uma seleção de registros que atendam tal CHAVE. Não tem como não funcionar. Pelo que percebí você não conseguiu fazer o TBROWSE de VETORES. Dê uma olha que o AINDEX é a variavel onde indica a posição (em LINHAS) na MATRIZ (seria como se fosse um SKIP no DBF). E as declarações são feitas no inicio do PRG não na função.

Se ainda não conseguires reproduzir este TBROWSE, sugiro que me mandes teu código fonte (dessa parte onde chama o TBROWSE junto com seu DBF para que eu possa testar aqui e postar já corrigido.

Sorte. Um clip-abraço :)Pos
Editado pela última vez por Pablo César em 23 Mai 2007 14:01, em um total de 1 vez.
ederxc
Usuário Nível 4
Usuário Nível 4
Mensagens: 619
Registrado em: 15 Set 2006 08:40
Localização: Pedreira -SP-

Mensagem por ederxc »

POis é pablo ñ estou conseguindo ainda , ñ intendo quando vc fala de armazenas a variavel com numero do fonecedor para fazer diferença entre os registros na alteração quando ja tem o campo item para fazer a diferença entre registros ...

Voce poderia me passar seu E-mail para que eu possa lhe enviar o *.prg ,*.ntx e *.dbf .
C:\Xharbour\Xdev\Fw\VSX
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 »

Caro colega, eu menciono de você armazenar o código do fornecedor na matriz, porque ela é essencial para procurá-la após edição da matriz e fazer o REPLACE no DBF. Eu acho que você deveria gravar no DBF, logo após que o usuário fizesse todas as alterações do TBROWSE-de-MATRIZ e depois repassá-la no se DBF. É como se você fizesse alterações em variáveis nos seus GETs e depois fizesse o REPLACE. Acho que este conceito, é o mais apropriado. Ou você estaria mudando diretamente no DBF a cada edição ?.

De todas formas, meu email é pablo.arrascaeta@terra.com.br

Mas você conseguiu visualizar os elementos da matriz dos registros pre-selecionados ?. Você vou que na edição dos vetores, você tinha errado ?.
Era para ser:

* ocolum1:=tbcolumnnew('NUMERO DA NOTA' ,{|| VETOR[AINDEX,1] })

e não assim:

ocolum1:=tbcolumnnew('NUMERO DA NOTA' ,{||(VETOR[1],nf)})

Percebeu ?. Bem se você precisar que elabore o TBROWSE para você, então me mande, que eu veriei se precisarei de algum arquivo para rodá-lo aqui. Um clip-abraço

:)Pos
Editado pela última vez por Pablo César em 23 Mai 2007 14:21, em um total de 1 vez.
ederxc
Usuário Nível 4
Usuário Nível 4
Mensagens: 619
Registrado em: 15 Set 2006 08:40
Localização: Pedreira -SP-

Pablo..

Mensagem por ederxc »

Ja mandei o E-mail para vc dar uma olhada mais de perto , deu certo ? vc recebeu o e-mail ? :f
C:\Xharbour\Xdev\Fw\VSX
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 »

Oi Eder, recebí seu BD e fiz as alterações no seu código (apesar de não gostar muito desse exemplo) conforme eu tinha te indicado na minha mensagem anterior. Dê uma ulhada, é importante que você entenda como funciona e espero que sriva o seu propósito:

* O antigo código fonte (foi removido por causar confusão), veja um exemplo atualizado: Código exemplo

Pois o se propósito servirá para mais alguém, assim espero.

Um clip-abraço e pode postar as suas dúvidas que terei prazer em te responder, falou ?

:)Pos
Editado pela última vez por Pablo César em 23 Mai 2007 14:13, em um total de 2 vezes.
ederxc
Usuário Nível 4
Usuário Nível 4
Mensagens: 619
Registrado em: 15 Set 2006 08:40
Localização: Pedreira -SP-

Mensagem por ederxc »

Pablo , voce é o cara mesmo hein , vou levar até para minha casa e vou estudar esse Tbrowse , logo volto com as duvidas , dei uma olhada no codigo e ja vi tem algumas coisas que desconheço ...


Muito Obrigado
:)Pos :)Pos :)Pos :)Pos :)Pos :)Pos :)Pos
C:\Xharbour\Xdev\Fw\VSX
Responder