× Linguagem de Programação ADVPL

Perguntas Array (Juntar e somar)

Mais
10 anos 11 meses atrás #20159 por aarezende
Boa noite prezados, estou com uma duvida na formação de uma Array tenho o seguinte problema.

[1] [2] [3] [4] [5] [6]
AADD(aSD3,QSD3a->D3_COD,QSD3a->D3_UM,QSD3a->SOMA,QSD3a->D3_LOTECTL,QSD3a->CATEGORIA,QSD3a->CALIB})

Coloquei a determinada Query nessa aSD3{}, porem agora tenho que imprimir ela no relatório Aglutinando pelo seguinte critério.

Tenho que juntar(aglutinar) todos com os seguintes dados

QSD3a->D3_COD QSD3a->D3_UM QSD3a->SOMA QSD3a->D3_LOTECTL QSD3a->CATEGORIA QSD3a->CALIB
0001 UN 10 123456 BRANCA 001
0001 UN 35 123456 BRANCA 001
0050 KG 100 888888 VERMEL 004
0004 UN 50 222222 AZUL03 002


Ficaria assim:
QSD3a->D3_COD QSD3a->D3_UM QSD3a->SOMA QSD3a->D3_LOTECTL QSD3a->CATEGORIA QSD3a->CALIB
0001 UN 45 123456 BRANCA 001
0004 UN 50 222222 AZUL03 002
0050 KG 100 888888 VERMEL 004

Sei que tem que montar outra Array portanto fiz desta maneira, para aglutinar somente um único campo

aTotais := {}
for nAux := 1 to len(aSD3)
nPos := ASCAN(aTotais, {|x| x[1] == aSD3[nAux][1]})
aTotais[nPos][2] += aSD3[nAux][4]
else
AADD(aTotais, {aSD3[nAux][1], aSD3[nAux][4], aSD3[nAux][2]}) endif
next nAux


A duvida é tem como adicionar duas condições na verificação ?
Nesse Ponto:
nPos := ASCAN(aTotais, {|x| x[1] == aSD3[nAux][1]})

Aqui esta código, queria adicionar categoria.

Abs

AAR

Por favor Acessar ou Registrar para participar da conversa.

Mais
10 anos 11 meses atrás #20160 por hbaldin
Respondido por hbaldin no tópico Array (Juntar e somar)
Ola, cara faça já na query, usando group by pelo d3_cod e dando um order by na quantidade,

Por favor Acessar ou Registrar para participar da conversa.

Mais
10 anos 11 meses atrás #20171 por aarezende
Respondido por aarezende no tópico Array (Juntar e somar)
Olá Henrique, tudo bom ?

Ai que esta o problema essa query é om resultado de duas outras..uma delas dentro de um while, por isso a montagem da array, pensei em montar um .DBF e fazer uma query sobre ele...ou criar uma tabela no Top, vi alguns exemplos na net mas não consegui efetivar.

Por favor Acessar ou Registrar para participar da conversa.

Mais
10 anos 11 meses atrás #20173 por kanaamlrr
Respondido por kanaamlrr no tópico Array (Juntar e somar)
A.R.
Já tive um problema onde precisava de uma chave composta em um array para realizar a busca
Nesse caso, eu resolvi criando uma posição no final do array contendo a chave concatenada, e na hora da busca, utilizava essa posição.

Ficaria mais ou menos assim:
[1] [2] [3] [4] [5] [6] 
AADD(aSD3,QSD3a->D3_COD,QSD3a->D3_UM,QSD3a->SOMA,QSD3a->D3_LOTECTL,QSD3a->CATEGORIA,QSD3a->CALIB})

Em seguida, basta utilizar da seguinte forma:

aTotais := {}
for nAux := 1 to len(aSD3)
   If (nPos := ASCAN(aTotais, {|x| x[4] == aSD3[nAux][1]+aSD3[nAux][5]}))>0
      aTotais[nPos][2] += aSD3[nAux][4]
   else
      AADD(aTotais, {aSD3[nAux][1], aSD3[nAux][4], aSD3[nAux][2], aSD3[nAux][1]+aSD3[nAux][5]}) 
   endif
next nAux

Por favor Acessar ou Registrar para participar da conversa.

Tempo para a criação da página:0.128 segundos
Joomla templates by a4joomla