Página 1 de 1

Ajuda com Matrizes

Enviado: 07 Nov 2006 12:14
por matrix
Pessoal,
nao tenho muita pratica ou quase nada com matrizes e creio que precisarei da ajuda de vcs pra fazer o seguinte relatorio?

num arquivo tenho formas de pgto definidas com codigo e Descriçao, e preciso escolher o periodo e acumular as formas de pgto que houveram nesse periodo num resumo.
separar o periodo tranquilo, o problema é acumular os totais e guardar pra imprimir a cada descriçao seu valor acumulado.

agradeço a ajuda.

Enviado: 07 Nov 2006 13:47
por rochinha
Amiguinho

De uma olhada na sessão codigo fonte e verifique o codigo relacionado a relatório simples e perfeito.

Veja que o código possui a variável RESUMIR basta coloca-la como TRUE que cada dia sera acumulado.

No seu caso troque no INDEX o dtos(DATA) pelo campo onde voce armazena a condição de pagamento. Troque também a variável QUEBRA pois é esta que fará a parada da contagem em cada conjunto.

Os valores serão armazenados na variável SUM_0001 e se voce tiver mais valores use SUM_0002, SUM_000X, etc.

@braços :?)

Enviado: 07 Nov 2006 13:49
por gvc
Por favor, explique melhor o que vc quer fazer. Exemplifique.

Enviado: 07 Nov 2006 14:13
por matrix
tenho no arquivo assim:
01- dinheiro R$ 23,00
03- a prazo R$ 12,00
04- cartao R$ 2,50
01- dinheiro R$ 11,50
04- cartao R$ 3,50
01- dinheiro R$ 2,50

e assim por diante dentro do arquivo. entaum preciso emitir um relatorio dentro de um pediodo que seja um resumo da seguinte forma.

01- dinheiro R$ 37,00
03- a prazo R$ 12,00
04- cartao R$ 6,00

isso, creio que terei que ir acumulando numa matriz e depois mostra-la, mas aé q me apertei.

Enviado: 07 Nov 2006 19:01
por gvc
a_total := {}

[arquivo]->(dbgotop())
while ![arquivo]->(eof())
a1 := ascan(a_total, {|x| x[1] = [arquivo]->codigo})
if a1 = 0
aadd(a_total, {[arquivo]->codigo, 0})
a1 := len(a_total)
end
a_total[a1, 2] += [arquivo]->valor

[arquivo]->(dbskip())
end

for i := 1 to len(a_total)
? a_total[i, 1], a_total[i, 2]
next

*****************
Teste e comunique quaisquer problema.
[arquivo] Nome do arquivo que contém os dados.

Enviado: 08 Nov 2006 00:09
por matrix
valeu, funcionando meu amigo,
nao querendo abusar, so faltou mostrar no FOR o "codigo"+"descricao"+"Valor", no resumo..............o calculo acumulado tá OK, podem mastigar mais essa ????

agradeço

Enviado: 08 Nov 2006 09:30
por gvc
a_total := {}

[arquivo]->(dbgotop())
while ![arquivo]->(eof())
a1 := ascan(a_total, {|x| x[1] = [arquivo]->codigo})
if a1 = 0
aadd(a_total, {[arquivo]->codigo, [arquivo]->descricao, 0})
a1 := len(a_total)
end
a_total[a1, 3] += [arquivo]->valor

[arquivo]->(dbskip())
end

for i := 1 to len(a_total)
? a_total[i, 1], a_total[i, 2], a_total[i, 3]
next

Enviado: 08 Nov 2006 17:17
por matrix
Valeu, só fiz um ajustezinho e ta 10.
vejam.....


Set Printer to Lpt.txt
Set Device To Print

While EMISSA_SAI >= dDt1 .and. EMISSA_SAI <= dDt2 .and. !Eof()
IF linha=0
@ Linha+1,70 Say Padl(Date(),10)
@ Linha+2,10 Say Padc("Resumo Financeiro no Periodo de "+DTOC(dDt1)+" a "+DTOC(dDt2),60)
@ Linha+2,70 Say Padl(Time(),10)
@ Linha+3,00 Say "CX004"
@ Linha+3,72 Say "P g:"
@ Linha+3,77 Say Padl(Pag,3)
@ Linha+4,00 Say Repl("=",80)
Linha:=7
Endif

a1:= ascan(a_total,{|x| x[1] = Mov_sai->CODMEI_SAI})
If a1 = 0
aadd(a_total, {Mov_sai->CODMEI_SAI, Mov_sai->DESMEI_SAI, 0})
a1:= len(a_total)
Endif
a_total[a1,3] += Mov_sai->VLNOTA_SAI

Dbskip()
Enddo

For i:= 1 to len(a_total)
@ Linha,00 Say a_total[i,1]
@ Linha,05 Say a_total[i,2]
@ linha,35 Say a_total[i,3]
Linha++
Next

Eject
Set Device to Screen
Set Printer to
Exit
Enddo
Set Softseek Off
Close All
Selecionar Dispositivo de impressao.

Enviado: 08 Nov 2006 18:22
por gvc
Set Printer to Lpt.txt
Set Device To Print

While EMISSA_SAI >= dDt1 .and. EMISSA_SAI <= dDt2 .and. !Eof()
a1:= ascan(a_total,{|x| x[1] = Mov_sai->CODMEI_SAI})
If a1 = 0
aadd(a_total, {Mov_sai->CODMEI_SAI, Mov_sai->DESMEI_SAI, 0})
a1:= len(a_total)
End
a_total[a1,3] += Mov_sai->VLNOTA_SAI
Dbskip()
End

linha := 1
@ Linha+1,70 Say Padl(Date(),10)
@ Linha+2,10 Say Padc("Resumo Financeiro no Periodo de "+DTOC(dDt1)+" a "+DTOC(dDt2),60)
@ Linha+2,70 Say Padl(Time(),10)
@ Linha+3,00 Say "CX004"
@ Linha+3,72 Say "P g:"
@ Linha+3,77 Say Padl(Pag,3)
@ Linha+4,00 Say Repl("=",80)

For i:= 1 to len(a_total)
@ Linha,00 Say a_total[i,1]
@ Linha,05 Say a_total[i,2]
@ linha,35 Say a_total[i,3]
Linha++
Next

Eject
Set Device to Screen
Set Printer to