gss200610 Posted February 15, 2012 Report Share Posted February 15, 2012 OLA A TODOS, VEJAM SE ENTENDEM O QUE TO PRECISANDO FAZER. array venda 01/01/2011, 000600, teste 02/01/2011, 000601, teste 02/01/2011, 000602, teste 02/01/2011, 000603, teste array item 01/01/2011, 000602, produto teste 01/01/2011, 000601, produto teste 01/01/2011, 000603, produto teste 01/01/2011, 000600, produto teste preciso tipo varrer o array venda e listar os itens equivalentes do array item tipo for i:= to len(venda) n:=ascan(item, {|x| x[1] == venda[i,1] .AND. x[2]==venda[i,2] }) if n > 0 aqui listar todos os itens,como: for npos := 1 to len( aqui preciso pegar apenas os do next ascan endif next preciso sempre varrer o array venda e tipo fazer um seek do item nele e listar todos os itens da respectiva venda. lenbrando que os dois sao arrays e uso DBF. Gilmar Silva Santos Programador - Goiânia Go Não Recuarei, Nada Temerei, Comigo Está o Senhor. Email : gilmarss2010@gmail.com FWH 10.8, DBF, MED EDITOR, UESTUDIO, XHB 1.2, BCC 5.82 Editado por - gss200610 on 17/02/2012 07:09:03 Editado por - gss200610 on 17/02/2012 07:09:34 Quote Link to comment Share on other sites More sharing options...
gss200610 Posted February 15, 2012 Author Report Share Posted February 15, 2012 OLA A TODOS, VEJAM SE ENTENDEM O QUE TO PRECISANDO FAZER. array venda 01/01/2011, 000600, teste 02/01/2011, 000601, teste 02/01/2011, 000602, teste 02/01/2011, 000603, teste array item 01/01/2011, 000602, produto teste 01/01/2011, 000601, produto teste 01/01/2011, 000603, produto teste 01/01/2011, 000600, produto teste preciso tipo varrer o array venda e listar os itens equivalentes do array item tipo for i:= to len(venda) n:=ascan(item, {|x| x[1] == venda[i,1] .AND. x[2]==venda[i,2] }) if n > 0 aqui listar todos os itens,como: for npos := 1 to len( aqui preciso pegar apenas os do next ascan endif next preciso sempre varrer o array venda e tipo fazer um seek do item nele e listar todos os itens da respectiva venda. lenbrando que os dois sao arrays e uso DBF. Gilmar Silva Santos Programador - Goiânia Go Não Recuarei, Nada Temerei, Comigo Está o Senhor. Email : gilmarss2010@gmail.com FWH 10.8, DBF, MED EDITOR, UESTUDIO, XHB 1.2, BCC 5.82 Editado por - gss200610 on 17/02/2012 07:09:03 Editado por - gss200610 on 17/02/2012 07:09:34 Quote Link to comment Share on other sites More sharing options...
Luisão Posted February 15, 2012 Report Share Posted February 15, 2012 Se tudo der certo, isso resolverá seu problema: "02/01/2011", 000601, "teste" } ,; "02/01/2011", 000602, "teste" } ,; "02/01/2011", 000603, "teste" } } aItens:= {"01/01/2011", 000602, "produto teste" } ,; "01/01/2011", 000601, "produto teste" } ,; "01/01/2011", 000603, "produto teste" } ,; "01/01/2011", 000600, "produto teste" } } FOR i = 1 TO LEN(aVenda) nPos:= 0 WHILE (nPos:= ASCAN(aItens,{|X|X[1]==aVenda[i,01] .AND. X[2]==aVenda[i,02]},nPos) > 0) ? aItens[nPos,03] ENDDO NEXTid=code>id=code>*Correção Luis Fernando Jr. (Luisão) -- FWH8.01 + SQLLIB 1.9d + xHB 1.10 + xDev 0.65 + @SAY luis.fernando.majr@gmail.com juninho_luisao@hotmail.com (msn) Editado por - Luisão on 15/02/2012 13:41:21 Quote Link to comment Share on other sites More sharing options...
Kbelo Posted February 15, 2012 Report Share Posted February 15, 2012 conforme ja havia lhe passado pelo MSN. Segue como deve proceder Nesse exemplo vou mostrar 2 notas fazendo a adição manual. vNotas := {} vItens := {} //Nota 1 // Num,filial, cliente, valor id=green> aadd(vNotas, {"000001", 1, 20, 110.20 }) // Num ,filial, cliente, valorIte, Codigoid=green> aadd(vItens, {"000001", 1, 20, 100.00 , 123 }) aadd(vItens, {"000001", 1, 20, 10.20 , 125 }) Nota 2 id=green> aadd(vNotas, {"000002", 1, 22, 50.00 }) // Num ,filial, cliente, valorIte, Codigoid=green> aadd(vItens, {"000002", 1, 22, 20.00 , 975 }) aadd(vItens, {"000002", 1, 22, 30.00 , 984 }) id=code>id=code>apos a montagem dos arrays vem voce faz os for's //faz o asort para garantir a ordenação do arrayid=green> asort{vNotas,,,{|x| x[1] + str(x[2] + str(x[3]) > y[1] + str(y[2]) + str(y[3]))}} asort{vItens,,,{|x| x[1] + str(x[2] + str(x[3]) > y[1] + str(y[2]) + str(y[3]))}} for i := 1 to len(vNotas) // faz o ascan para garantir que o primeiro item seja encontradoid=green> nPosItens := ascan(vItens, {|x| x[1] + str(x[2] + str(x[3]) > vNotas[i, 1] + str(vNotas[i, 2]) + str(vNotas[i, 3]))}) if nPosItens > 0 for j := nPosItens to len(vItens) // verifica se o item é diferente, se verdadeiro sai do for de itens e pula para proxima notaid=green> if vItens[j, 1] + str(vItens[j, 2]) + str(vItens[j, 3]) <> vNotas[i, 1] + str(vNotas[i, 2]) + str(vNotas[i, 3]) exit endif // aqui voce usa os dados do vItensid=green> next endif //aqui voce usa os dados do vNotasid=green> next id=code>id=code>id=code>id=code> Marcelo Michels E-mail:marcelo@folksistemas.com.br Msn/E-mail:celo.michels@hotmail.com xHarbour 1.2 + Fwh 106(originalid=red>) + Bcc 5.82 + SQLRDD + Mate. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.