Página 5 de 6

Enviado: 17 Mai 2007 12:44
por Eolo
Po, Don Pablito, qual a bronca com o bom e velho Dbedit()???? Tá falando mal de Velho por que? Perdeu a vontade de viver???? eh eh eh

:P

Cara, eu usei o Dbedit() desde sempre, aí só fiquei de bronca porque ele não fazia o "refresh" do TBrowse() em rede... Então, convidei o TBrowse() pra tomar umas Quilmes (conhece?) e prosear. No fim, entendi bem uns 10% do que ele falou, mas foi o suficiente pra criar o Edita(), que eu uso agora, simples como o Dbedit() e com o refresh do Tbrowse()... E, inclusive, com o encadeamento, um Edita() chamando outro e outro e outro...

Capaz até de eu postar o Edita(), mas só se os experts em TBrowse() prometerem não zombar...

Enviado: 17 Mai 2007 13:20
por Pablo César
Olha Eolo, mesmo eu tomando uma Quilmes, Brahama... não indicaria o uso do DBEDIT pelas razões ja mencionadas. Veja aqui neste tópico uma das razões então: https://pctoledo.org/forum/viewto ... 5084#25084

Se você tem algo feito com DBEDIT() e está funcionando... então deixe assim. As vezes ter que modificar só por mera sugestão... não vale a pena. O DBEDIT(), é uma função do Clipper muito simples e que para casos de exibição, talvez valha a pena utilizar. Mas eu não deixo de ter vontade viver por causa disso. É que se falamos tanto do TBROWSE, falamos que é um começo ao OOP, que para edição tem maiores recursos... então por quê usar o DBEDIT() ?. Faça um bem a si mesmo, comece pensar em inovação. É assim, que começam outros emprendimentos.

Veja qe desde então que começamos a falar do TBROWSE, isto motivou a vários colegas a aprender um pouco mais. Eliane é um exemplo, Eder outro e espero que outros venh a conhecé-lo e decifrá-lo cada vez mais. Pois eu lembro que pra mim há alguns anos atrás (no surgimento do 5.1) parecia uma coisa indecifrável, dificil de entender... agora não é tanto assim. Agora é pior... hehehe... não falando sério, eu gosto de motivar aos colegas para inovarem seus métodos, para que alcancem melhores resultados, melhor aparência, maiores recursos e o que eu estou insentivando, não é mau. Sim é um caminho difícil, mas tudo é assim.

Mas Eolo, sinta-se livre para demostrar o seu exemplo. Mas coloque com exemplos, de preferência com alguns dados assim nós podemos testá-lo sem problemas e depois possamos fazer uma comparação (atenção que não é nenhum desafio e sim um momento de refletir).

Um clip-abraço :)Pos

Enviado: 18 Mai 2007 15:22
por ederxc
Dbedit() e Tbrowse são irmãos são filhos do mesmo pai haahahaha

comecei a usar o tbrowse pois o o dbedit() só faria o que eu preciso com o set filter() e como todo mundo fala mal de set filter() eu larguei de mão e "ainda esquento a cabeça com o Tbrowse() " ... É como o pablo falou , se funciona com um e funciona muito bem , ñ a ha motivo para mudar ! Algumas coisas vou deixar com o Dbedit() mesmo pois me serve bem o velho amigo , e o que for necessario usarei o tbrowse()


Eliane me mande o que tiver , informação só acumula aqui ñ se disperça

ederxc@itelefonica.com.br :xau

Enviado: 21 Mai 2007 14:26
por ederxc
Boa tarde Amigos !

Pablo , é o seguinte estou tendo um problema na alteração do numero da nota fiscal , todo o restante esta funcionando perfeitamente , altero e grava , mas o numero da nota apenas se grava o ultimo numero alterado ex:

nota fiscal

00000001
00000001
00000001
00000001
00000001

Caso eu altere este numeros a cima , apenas é feita a gravação do ultimo alterado , quando a dos outros campo do Browse se grava normalmente, o problema é só no campo de nota fiscal.
A forma que estou usando para gravar é a que voce me passaou a cima
ja to ficando meio retardado té++ :%

Enviado: 21 Mai 2007 14:48
por Pablo César
Oi Eder !

Isto deve acontecer quando você faz o seu REPLACE dentro de um FOR ... NEXT ?. Certifique-se que a matriz correspondente (que se não me engano é a primeira coluna_elemento), deve estar VETOR[1,1], daí ´claro que sempre irá pegar sempre o mesmo elemento. Se não for isso, coloque aqui o seu código onde você edita e onde você faz o REPLACE. Alias... você ficou em que iria mostrar pra todos nós...

Não esquenta, ja sei que você está trabalhando nisso. Então examine a ver se você encontra o VETOR[1,1], é fácil confundir o 1 (numero um) com o I (letra i de india)...

Um clip-abraço :)Pos

Enviado: 21 Mai 2007 15:17
por ederxc
Acertou em cheio , é no laço for next mesmo o erro vetor[1] ! mas como resolvo isso pablo ?

Enviado: 21 Mai 2007 15:31
por Pablo César
Essa é uma boa pergunta !!!

Dependerá do modo em que você o fez.

No início eu apresentei um TBROWSE DE VETORES com a criação de uma forma digamos "NÃO CONVENCIONAL", lembra que ja tocamos neste assunto ?.

Bem depois eu mostrei como seria conveniente re-passar o TBROWSE e substituir a forma de interpretação da NOVA estrutura da MATRIZ. Eu decidí, assumir a minha culpa por ter usado esse tipo de MATRIZ (não convencional, vamos dizer) quando eu me deparei com a necessidade de fazer um ASORT(), daí que os colega Maligno e Eolo, me demostraram que seria muito trabalhoso trabalhar daquela forma.

Se caso, você não souber diferenciar entre uma e outra. Coloque aqui apenas o trecho onde você cria a sua MATRIZ, que eu lhe direi então que tipo de MATRIZ você usou e reponderei acertadamente a sua pergunta aqui...

Mais uma vez colega, peço-lhe a minhas desculpas pela confusão criada.

Um clip-abraço :)Pos

Enviado: 21 Mai 2007 15:55
por ederxc
Imagina pablo , voce só me ajuda cara , ñ cria confusão alguma ! acho que terei de lhe mandar outra vez o banco de dados com e o PRG e executaveis para voce ver , pois eu ja tentei tudo que estava ao meu alcance para resolver este problema de gravação ...

Enviado: 21 Mai 2007 16:19
por Pablo César
Outra vez os dados ?. O que foi, mudou a estrutura ?. Deixa te dar um conselho. Viu como eu fiz ?. Coloque em forma de texto o conteúdo dos dados (claro que foram 5 registros só), tenta fazer isso e poste o se código fonte. Não tem problema você postar novamente. Eu acho que toda experiência é válido para os vem atrás, ou até mesmo poderá servir para qualquer colega que esteja necessitando de exemplos e de entender como a coisa funciona. Eu prefiro que você trate aqui em comunidade para que não pareça uma questão pessoal. Ou então, veja... ei falei para você colocar um pouco do seu código (um trecho apenas) onde você estaria atribuindo os valores a sua matriz.

Olha: a matriz convencional, naquele TBROWSE deverá ser tratada assim:

FOR ponteiro=1 TO LEN(AR)
REPLACE NF WITH AR[1,ponteiro]
NEXT

e aquela matriz que eu tinha passado era para ser:
FOR ponteiro=1 TO LEN(AR)
REPLACE NF WITH AR[ponteiro,1]
NEXT

Ao contrário, viu ? Na hora de edição a mesma coisa.
Vamos lá... não desanime colega !!!! :)Pos

Enviado: 22 Mai 2007 07:19
por ederxc
Verei Hoje o que consigo e logo mais posto se deu certo , quanto a desanimar , acho que voce ñ leu minha assinatura ! :)Pos

Enviado: 22 Mai 2007 16:03
por ederxc
É Pablo , fiz as alterações mais no final ñ mudou em nada acabou ficando na mesma ! :'( tentei fazer de outra forma para ver se funcinava e seguindo o raciocinio era pra funcionar ..

Código: Selecionar todos

seek (chave) 
dbgotop()  
do while (chave)=str(nf,10)+dtos(datemi)
     repla nf with vetor[aindex,1]
      skip
enddo     
tentei o que voce me passou e tambem tentei esta opção a cima , mas nada feito fica na mesma ! More options ??

´o)

Enviado: 22 Mai 2007 20:07
por Pablo César
Este código que você postou, olhe as minhas observações:

Código: Selecionar todos

seek (chave) // Gostaria saber qual é o valor de chave
dbgotop()  // O quê é isto ?? Isto NÃO condiz com a sua procura
// Desta forma você está matando a sua procura... assim de simples 
do while (chave)=str(nf,10)+dtos(datemi)
     repla nf with vetor[aindex,1] // Mas é claro que aqui so pode dar erro !
/*Você está dentro de um DO WHILE e não estás mudando a variável AINDEX (que deveria ser um contador). Você deveria VARRER a sua matriz, através do FOR...NEXT*/
      skip
enddo
Eder, vamos ver se você me entende... Eu solicitei que você postasse parte do seu código onde você estaria atribuindo os valores a sua matriz (onde você está criando a MATRIZ). Eu te expliquei o por quê... (é pela razão que foi dado por mim DOIS exemplos de TBROWSE com vetores). Só que eu não sei qual deles você está usando. O meu ultimo TBROWSE, é o ideal, porque trabalha com uma matriz "convencional", lembra ? (me responde isso).

Vou sintetizar para ver se eu consigo que você me responda. A sua matriz você criou assim ?:

Código: Selecionar todos

VETOR:={{},{},{},{}} // OPÇÃO "A"
chave=(STR(VNF,10,0)+DTOS(VDATEMI)) 
IF !DBSEEK(CHAVE) 
   @ 24,00 SAY PADC("Nota n„o encontrada !",80) COLOR "N/W" 
   INKEY(3) 
   return 
ENDIF 
Do while (chave)=str(NF,10)+dtos(datemi) 
   AADD(VETOR[1],NF) 
   AADD(VETOR[2],item) 
   AADD(VETOR[3],datemi) 
   AADD(VETOR[4],forn) 
   skip 
enddo
Ou você criou assim ?:

Código: Selecionar todos

VETOR:={}  // OPÇÃO "B"
chave=(STR(VNF,10,0)+DTOS(VDATEMI)) 
IF !DBSEEK(CHAVE) 
   @ 24,00 SAY PADC("Nota n„o encontrada !",80) COLOR "N/W" 
   INKEY(3) 
   return 
ENDIF 
Do while (chave)=str(NF,10)+dtos(datemi) 
   AADD(VETOR,{NF,item,datemi,forn}) 
   skip 
enddo
É necessário saber em que forma você criou a sua MATRIZ (OPÇÃO "A" ou "B" ?) (me responde isso) para eu poder dizer o que estaria errado. Acho que o seu erro está que você com certeza não leu a minha ultima mensagem corrigindo aquela questão de matriz "não convencional". Peço encarecidamente, que você leia com muita atenção, repare nos comentários (nas linhas onde contém /* */ e // você notar com isso a diferença que existem entre elas (a de matriz "NÃO CONVENCIONAL" e matriz "CONVENCIONAL"). Clique aqui e compare

Eu preciso a sua resposta do que eu estou te perguntando... please man !

Um clip-abraço :)Pos

Enviado: 23 Mai 2007 07:21
por ederxc
É Pablo , fiz as alterações mais no final ñ mudou em nada acabou ficando na mesma !
Quado disse isso ,quis dizer que mudei para OPÇÂO (B) e fiz identica a qual voce havia me passado !

Código: Selecionar todos


FOR ponteiro=1 TO LEN(vetor)
      REPLACE NF WITH vetor[ponteiro,1]
NEXT
ñ funciona !

:)Pos :(Neg

Enviado: 23 Mai 2007 07:23
por ederxc
É Pablo , fiz as alterações mais no final ñ mudou em nada acabou ficando na mesma !
Quado disse isso ,quis dizer que mudei para OPÇÂO (B) e fiz identica a qual voce havia me passado , ou seja mudei todo o coddigo de me tbrowse() para
opção(B) ainda ñ funfa , help me !

:'( :f

Enviado: 23 Mai 2007 07:35
por ederxc
Pois bem aqui esta o codigo do Tbrowse()

Código: Selecionar todos

#include "inkey.ch"
#define AR_SKIPBLOCK(atb,ai,VETOR) atb:skipblock={|n, sa| sa:=ai,iif(ai+n > LEN(VETOR), ai:= LEN(VETOR), iif(ai+n < 1, ai:=1, ai += n)), ai-sa}
set score off
set date british
set cent on
set dele on
set epoc to 2000
cls
setcolor('gr+/b')

 SELE A
use lancnf
INDEX ON (STR(NF,10)+DTOS(DATEMI)+STR(ITEM,3)) TO XCOMP
set index to xcomp

 SELE B
Use Fornec
Index on forn to xfornome
index on cod to xcodfor
set index to xcodfor,xfornome

 Sele C
Use Cadpeca
index on cod to xNprod
index on desc to xCdesc

 Sele A
dbgotop()
vNF=1
vdatemi=ctod("01/01/2007")

VCAMPO=0
vforn:=vprod:=SPACE(16)


aindex=1
@02,01 SAY 'NOTA FISCAL.:'
@02,30 SAY "DATA DE EMISSAO.:"
@02,14 GET  VNF  PICT '9999999999'
@02,47 GET  VDATEMI PICT '99/99/9999'
READ
IF LASTKEY()=27
   DBCLOSEAREA()
   RETURN
ENDIF
setcolor('w+/b')
VETOR:={}
chave=(STR(VNF,10,0)+DTOS(VDATEMI))
IF !DBSEEK(CHAVE)
   @ 24,00 SAY PADC("Nota n„o encontrada !",80) COLOR "N/W"
   INKEY(3)
   return
ENDIF
Do while (chave)=str(NF,10)+dtos(datemi)
   AADD(VETOR,{NF,ITEM,DATEMI,MOSTFORN,FORN,MOSTPROD,PROD})
   skip
Enddo
VETOR:=tabela(VETOR)
Sele A
DBgotop()
SEEK STR(VNF,10,0)+DTOS(VDATEMI)
FOR I=1 TO LEN(VETOR)
    REPLA NF         WITH VETOR[I,1]
    REPLA ITEM       WITH VETOR[I,2]
    REPLA DATEMI     WITH VETOR[I,3]
    REPLA MOSTFORN   WITH VETOR[I,4]
    REPLA FORN       WITH VETOR[I,5]
    REPLA MOSTPROD   WITH VETOR[I,6]
    REPLA PROD       WITH VETOR[I,7]
      SKIP
NEXT 
****************************<FUNÇAO TABELA>************************
FUNCTION TABELA(VETOR)
 SELE A
dbgotop()
setcolor('W+/B')
@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:gobottomblock={||aindex:=LEN(VETOR)}
oMybrowser:gotopblock={||aindex:=1}
AR_SKIPBLOCK(oMybrowser,aindex,VETOR)

oMybrowser:ColorSpec:='W+/B'

ocolum1:=tbcolumnnew('NUMERO DA NOTA',{|| VETOR[aindex,1]})
ocolum2:=tbcolumnnew('ITEM'               ,{|| VETOR[aindex,2]})
ocolum3:=tbcolumnnew('DATA EMISSAO'  ,{|| VETOR[aindex,3]})
ocolum4:=tbcolumnnew('NOME FORNECEDOR',{|| VETOR[aindex,4]})
ocolum6:=tbcolumnnew('PRODUTO'           {|| VETOR[aindex,6]})
oMybrowser:addcolumn(ocolum1)
oMybrowser:addcolumn(ocolum2)
oMybrowser:addcolumn(ocolum3)
oMybrowser:addcolumn(ocolum4)
oMybrowser:addcolumn(ocolum6)
oMybrowser:freeze:=2
do while .t.
   do while(! oMybrowser:stabilize())
   enddo
   set cursor on
   if oMybrowser:stable
      if oMybrowser:hitTop()
         @20,60 say" INICIO " color('G+/B')
      Elseif oMybrowser:hitBottom()
         @20,60 say"  FIM   " color('G+/B')
      else
         @20,60 say "ÄÄÄÄÄÄÄÄÄÄÄÄ"
      endif
   endif
   nkey:=inkey(0)
   if nkey == K_UP
      oMyBrowser:up()
   elseif nkey == K_DOWN
      oMybrowser:down()
   elseif nkey == K_LEFT
      oMybrowser:left()
   elseif nkey == K_RIGHT
      oMybrowser:right()
   elseif nkey == K_HOME
      oMybrowser:home()
   elseif nkey == K_END
      oMybrowser:end()
   elseif nkey == K_PGUP
      oMybrowser:pageUp()
   elseif nkey == K_PGDN
      oMybrowser:pageDown()
   elseif nkey == K_CTRL_PGUP
      oMybrowser:goTop()
   elseif nkey == K_CTRL_PGDN
      oMybrowser:goBottom()
   elseif nkey == K_CTRL_HOME
      oMybrowser:panHome()
   elseif nkey == K_CTRL_END
      oMybrowser:panEnd()
   elseif nkey == K_CTRL_LEFT
      oMybrowser:panLeft()
   elseif nkey == K_CTRL_RIGHT
      oMybrowser:panRight()
   elseif nKey== K_ENTER    
         if (oMybrowser:COLPOS)=1
              VCOL:=8
              VLIN:=(oMybrowser:RowPos())+8            
              @ VLIN,VCOL get vcampo pict "@9"
              READ
              IF !LASTKEY()=27
                 VETOR[AINDEX,1]:=Vcampo
              ENDIF
          elseif (oMybrowser:COLPOS)=2
              ALERT('ESTE CAMPO NAO;PODE SER ALTERARADO!',,'N/GB')
          Elseif (oMybrowser:COLPOS)=3
              VCOL:=29
              VLIN:=(oMybrowser:RowPos())+8
              VCAMPO:=VETOR[3,AINDEX]
              @ VLIN,VCOL GET VCAMPO PICT "@D"
              READ
              IF !LASTKEY()=27
                 VETOR[AINDEX,3]:=VCAMPO
              ENDIF
         elseif (oMybrowser:COLPOS)=4
               SELE B
              DBGOTOP()
              SET ORDER TO 2
              VTELA:=SAVESCREEN(00,00,25,80)
              @07,44 SAY "NOME FORNECEDOR:"COLOR('GR+/B')
              @07,60 GET Vforn PICT "@!"COLOR('W+/B')
               READ
              vNOM:=VFORN
              VNOM:=ALLTRIM(VNOM)
              IF DBSEEK(VNOM)
                 Public vforn1:=ARRAY(1),VFORN2:=ARRAY(1)
                 VFORN1[1]:="FORN"
                 VFORN2[1]:=" PESQUISA "
                 setcolor('N/GB')
                 DISPBOX(09,43,15,66)
                 Dbedit(10,44,14,65,vforn1,"","",VFORN2,"ÄÄ")
                 RESTSCREEN(00,00,24,80,VTELA)
                 SETCOLOR("W+/B")
                 IF !LASTKEY()=27
                      VETOR[AINDEX,4]:=Forn
                      VETOR[AINDEX,5]:=cod
                      vFORN=forn;vFORN:=substr(vFORN,1,16)
                 endif
              ELSE
                ALERT("FORNECEDOR INEXISTENTE !",,"N/GB")
                vforn=empty(vforn)
              ENDIF
         elseif (oMybrowser:COLPOS)=5
               SELE C
              DBgotop()
              set order to 2
              VTELA:=SAVESCREEN(00,00,25,80)
              VPROD=SPACE(16)
              @07,37 SAY "NOME PRODUTO:"COLOR('GR+/B')
              @07,50 GET VPROD PICT "@!"COLOR('W+/B')
              READ
              VPRO=VCAMPO
              Vpro:=ALLTRIM(VPRO)
              IF DBSEEK(VPRO)
                 Public vPROD1:=ARRAY(1),VPROD2:=ARRAY(1)
                 VPROD1[1] :="DESC"
                 VPROD2[1]:=" PESQUISA "
                 setcolor('N/GB')
                 DISPBOX(09,43,15,66)
                 Dbedit(10,44,14,65,vPROD1,"","",VPROD2,"ÄÄ")
                 RESTSCREEN(00,00,24,80,VTELA)
                 SETCOLOR("W+/B")
                 IF !LASTKEY()=27
                    VETOR[AINDEX,7]:=cod
                    VETOR[AINDEX,6]:=desc
                 ENDIF
              ELSE
                ALERT("PRODUTO INEXISTENTE !",,"N/GB")
                vprod=space(16)
              ENDIF           
              SET CURSOR OFF
         endif
         oMybrowser:refreshCurrent()
         oMybrowser:down()
   elseif nkey == K_ESC
        EXIT
   endif
ENDDO
RETURN VETOR