Página 1 de 1

somar vetor

Enviado: 27 Nov 2006 09:23
por clebermano
Bom dia. Prezados amigos,
Estou com um probleminha, aki , q eu sabia como resolver mas eskeci, por isso recorro aos amigos do forum.
Seguinte.
Preciso fazer um agrupamento de produtos em uma NF.
ow seja antes de imprimir preciso verificar se existe um produto do mesmo codigo no pedido de venda e agrupar. acho q seria + ou - assim.

Código: Selecionar todos

use pedido 
go top 
do whil !eof() 
     if mx:=ascan(Vmat1, codprod)==0
        aadd(vmat1, codprod)
        aadd(Vmat2,qtde)
     else 
        vmat2[recno()]:=vmat2[recno()]+qtde
     endif
skip
enddo
acho q era assim q eu fazia so q fiz aki e nao deu certo.
bom aguardo as colaboracoes.
obrigado.



skip
enddo

Enviado: 27 Nov 2006 09:58
por angeiras
Ola,

Ve se assim funciona :

Código: Selecionar todos

use pedido
dbGoTop()
while !eof()
   if ( mx := ascan( vmat1, codprod ) ) == 0
      aadd( vmat1, codprod )
      aadd( vmat2, qtde )
   else
      vmat2[ mx ] += qtde
   endif
   dbSkip()
enddo
[]s
Manoel Angeiras

Enviado: 27 Nov 2006 10:43
por clebermano
nao da certo, pq mx nao retorna pra mim a posicao atual do ponteiro, e sim se achou ou nao .(.t.,.f.)

Enviado: 27 Nov 2006 11:28
por clebermano
Sera q ninguem sabe??

Enviado: 27 Nov 2006 11:43
por náufel
Olá.

Tente isolar as partes.

Código: Selecionar todos

use pedido
go top
do whil !eof()
   mx := ascan(Vmat1, codprod)
   if mx == 0
      aadd(vmat1, codprod)
      aadd(Vmat2,qtde)
   else
      vmat2[mx] += qtde
   endif
   skip
enddo

Enviado: 27 Nov 2006 11:51
por angeiras
Olá,

Desculpa mas voce está equivocado. A função ASCAN retorna um numérico informando a posição na matriz ou 0 ( zero ) se não achou.

do NG em inglês do Clipper :

Código: Selecionar todos

     ASCAN(<aTarget>, <expSearch>,
        [<nStart>], [<nCount>]) --> nStoppedAt
[]s
Manoel Angeiras

Enviado: 27 Nov 2006 14:19
por clebermano
deu certo.
muito obrigado aos q colaboraram.
afinal de contas a uniao faz faz q açucar eheheheeh

Enviado: 27 Nov 2006 14:23
por gvc

Código: Selecionar todos

use pedido 
go top 

ma := {}
while !eof() 
   mx := ascan(ma, {|x| x[1] = pedido->codprod)
   if mx = 0
      aadd(ma, {pedido->codprod, 0})
      mx := len(ma)
   end
   ma[mx] += pedido->qtde
skip 
enddo
Veja que vc não esta separando os pedidos. Vc esta somente agrupando os itens de todos os pedidos.

Para separar os itens de um pedido, vc deverá trabalhar com o indice e com o while:

Código: Selecionar todos

use pedido 
index on <arq chave por número de pedido>
dbseek(<variável número o pedido>)

ma := {}
while !eof() .and. <campo número do pedido> = <variavel número do pedido>
Boa sorte.