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