somar vetor

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

clebermano
Usuário Nível 3
Usuário Nível 3
Mensagens: 187
Registrado em: 03 Out 2004 12:39
Contato:

somar vetor

Mensagem 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
Editado pela última vez por Pablo César em 04 Nov 2012 12:47, em um total de 1 vez.
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
Vastec - Automacao Comercial Ltda - Ribeirao Preto - SP. (16)3968-2299-(16)8154-7828 (16)8121-4139
msn: suporte@clebermano.com.br - email: clebermanorp@yahoo.com.br
Quem nao vive pra servir nao serve pra viver !
angeiras
Usuário Nível 3
Usuário Nível 3
Mensagens: 134
Registrado em: 21 Nov 2005 20:53
Localização: Olinda/PE

Mensagem 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
Clipper 5.2e + sixcdx + catools + nanfor
xHarbour 1.0.0 + gtwvw / xHarbour 1.2.1 + Fivewin
clebermano
Usuário Nível 3
Usuário Nível 3
Mensagens: 187
Registrado em: 03 Out 2004 12:39
Contato:

Mensagem por clebermano »

nao da certo, pq mx nao retorna pra mim a posicao atual do ponteiro, e sim se achou ou nao .(.t.,.f.)
Vastec - Automacao Comercial Ltda - Ribeirao Preto - SP. (16)3968-2299-(16)8154-7828 (16)8121-4139
msn: suporte@clebermano.com.br - email: clebermanorp@yahoo.com.br
Quem nao vive pra servir nao serve pra viver !
clebermano
Usuário Nível 3
Usuário Nível 3
Mensagens: 187
Registrado em: 03 Out 2004 12:39
Contato:

Mensagem por clebermano »

Sera q ninguem sabe??
Vastec - Automacao Comercial Ltda - Ribeirao Preto - SP. (16)3968-2299-(16)8154-7828 (16)8121-4139
msn: suporte@clebermano.com.br - email: clebermanorp@yahoo.com.br
Quem nao vive pra servir nao serve pra viver !
náufel
Usuário Nível 1
Usuário Nível 1
Mensagens: 12
Registrado em: 28 Nov 2005 16:55

Mensagem 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
Editado pela última vez por Pablo César em 04 Nov 2012 12:48, em um total de 1 vez.
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
angeiras
Usuário Nível 3
Usuário Nível 3
Mensagens: 134
Registrado em: 21 Nov 2005 20:53
Localização: Olinda/PE

Mensagem 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
Clipper 5.2e + sixcdx + catools + nanfor
xHarbour 1.0.0 + gtwvw / xHarbour 1.2.1 + Fivewin
clebermano
Usuário Nível 3
Usuário Nível 3
Mensagens: 187
Registrado em: 03 Out 2004 12:39
Contato:

Mensagem por clebermano »

deu certo.
muito obrigado aos q colaboraram.
afinal de contas a uniao faz faz q açucar eheheheeh
Vastec - Automacao Comercial Ltda - Ribeirao Preto - SP. (16)3968-2299-(16)8154-7828 (16)8121-4139
msn: suporte@clebermano.com.br - email: clebermanorp@yahoo.com.br
Quem nao vive pra servir nao serve pra viver !
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Mensagem 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.
Editado pela última vez por Pablo César em 04 Nov 2012 12:46, em um total de 2 vezes.
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
Responder