TBROWSE
Moderador: Moderadores
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
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
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
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Oi Eder,
Acho que está errado a declaração da matriz. Assim ficaria certo:
*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
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
enddoUm clip-abraço :)Pos
Editado pela última vez por Pablo César em 23 Mai 2007 14:07, em um total de 1 vez.
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 !
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
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Você quis dizer: REGISTROSederxc escreveu:Penso que os vetores estão se sobrecarregando, e o mais extranho é que este banco deve ter uns 15 arquivos
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:seria possivel esta sintaxe fazer um "loop" até extrapolar o vetor?? tentei com o Do while ! EOF() e da o mesmo erro !
Não esquenta, não iria deixar ninguém na mão se estiver nas minhas possibilidades. Mas acho que agora vai.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
Um clip-abraço :)Pos
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
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 ?.
*
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
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})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.
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 ...
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
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Então Eder, você deve também guardar o FORN no VETOR para que você possa localizá-lo dentro do seu DBF.ederxc escreveu:Sim pablo , pretendo fazer alterações por este motivo estou usando o Tbrowsedb()
SELE Bederxc escreveu:Outra coisa ainda ñ esta funcionando, fiz da forma que vc falou mas o filtro ñ esta funcionando todo o banco é exbido no tbrowsedb()
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()))}) 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.
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 .
Voce poderia me passar seu E-mail para que eu possa lhe enviar o *.prg ,*.ntx e *.dbf .
C:\Xharbour\Xdev\Fw\VSX
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
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
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.
Pablo..
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
- Pablo César
- Usuário Nível 7

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