- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Array (Juntar e somar)
×
Linguagem de Programação ADVPL
Perguntas Array (Juntar e somar)
- aarezende
- Autor do Tópico
- Desconectado
- Membro Sénior
Menos
Mais
- Postagens: 64
- Obrigados Recebidos: 0
10 anos 11 meses atrás #20159
por aarezende
Array (Juntar e somar) foi criado 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
[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.
- hbaldin
- Desconectado
- Membro Dourado
Menos
Mais
- Postagens: 266
- Obrigados Recebidos: 0
- aarezende
- Autor do Tópico
- Desconectado
- Membro Sénior
Menos
Mais
- Postagens: 64
- Obrigados Recebidos: 0
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.
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.
- kanaamlrr
- Desconectado
- Membro Platina
Menos
Mais
- Postagens: 1576
- Obrigados Recebidos: 4
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:
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.
- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Array (Juntar e somar)
Tempo para a criação da página:0.128 segundos