Página 3 de 6

Enviado: 20 Abr 2007 13:38
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é+++

Enviado: 20 Abr 2007 15:17
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

Enviado: 20 Abr 2007 15:38
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 ...

Enviado: 26 Abr 2007 15:20
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 ???

Enviado: 26 Abr 2007 15:55
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

Enviado: 27 Abr 2007 08:13
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]

Enviado: 27 Abr 2007 09:10
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

Enviado: 27 Abr 2007 09:38
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

Enviado: 30 Abr 2007 08:41
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)

Enviado: 30 Abr 2007 16:16
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

Enviado: 02 Mai 2007 12:58
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 .

Enviado: 02 Mai 2007 13:57
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

Pablo..

Enviado: 03 Mai 2007 11:06
por ederxc
Ja mandei o E-mail para vc dar uma olhada mais de perto , deu certo ? vc recebeu o e-mail ? :f

Enviado: 03 Mai 2007 11:43
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

Enviado: 03 Mai 2007 14:42
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