Ricardo,
Matriz é um campo de memoria processada, que voce cria no seu sistema.. para utilizaçao de calculos rapidos.
Para criar uma matriz é assim:
Nome da matriz : { }
O nome deve ter no maximo 8 caracteres...
Para utilização é simples...
Veja o exemplo abaixo, no caso para adicionar dados uma matriz..
AADD - Adiciona dados
ADel - Deleta dados da matriz.
ASort - Organiza os dados na matriz, conforme o interesse
Exemplo de organizar dados na matriz :
Código: Selecionar todos
aSort( Matriz ,,, { |x,y| x <= y } )
asort( Fun2,,, { |x,y| Left( x , 5 ) <= Left( y , 5 ) } )
aSort( Mtz ,,, { |x,y| Str(x[1],3,0)+Str(x[2],3,0) <= Str(y[1],3,0)+Str(y[2],3,0) } )
asort( MtzRel ,,, { |x,y| Ctod(x[2]) <= Ctod(y[2]) } ) - Organizando por data crescente..
Dadas as condiçoes.. veja um exemplo simplorio de como é facil trabalhar com matrizes....
Código: Selecionar todos
If Str( New, 1 ) $ "1/2/3"
If AbreVarios( { 98 , 121 }, xLoja + oMesBase ) .and. AbreVarios( { 18 , 19 , 135 , 136 }, oMesBase )
COD_CLI := Left( vCOD_CLI , 5 )
NR->( DbReset( , 1 ) )
Do While NR->( ! Eof() )
If Range( vDT1 , vDT2 , NR->DT_EMISSAO ) .and. Left( vCOD_CLI , 5 ) == NR->COD_CLI
xLiq := Round( NR->( VLR_MERC - DESCONTO ) , 2 )
NR->([b] AAdd[/b]( Brw , { "NF" ,;
NUM_DOC ,;
DT_EMISSAO ,;
If( VLR_MERC > VLR_TOTAL , VLR_MERC , VLR_TOTAL ),;
0 ,;
DESCONTO ,;
xLiq ,;
ShowCont( 3 , COD_VEND ) ,;
ShowCont( 9 , COD_NATOP ) ,;
NUM_DOC } ) )
Ni->( DbReset( , 1 ) )
If Ni->( USeek( NR->( SERIE + NUM_DOC ) ,, 1 ) )
Do While Ni->( NR->( SERIE + NUM_DOC ) == SERIE + NUM_DOC .and. ! Eof() )
Ni->([b] AAdd[/b]( Tmp , { NUM_DOC ,;
" " +;
ShowCont(8,COD_PROD,"Left( Mod11y()+[ - ]+DESCRICAO,38)" , 1 )+;
" ³ " +;
Ni->(Tran( QUANT , m_26 ) ) +;
" ³ " +;
Tran( PC_UNIT , m_6 ) +;
" ³ " +;
Tran( QUANT * PC_UNIT , m_6 ) } ) )
Ni->( DbSkip() )
End
End
End
Para imprimir, gera-se o cabeçalho do relatorio normalmente.. para imprimir os dados, utilizamos um FOR na matriz.
For z := 1 To Len(Matriz)
Isso significa que havera um loop tantas vezes quantas for o tamanho da matriz.. e a cada linha, sera impresso o conteudo da linha da matriz..
Nao tera acesso a disco, por isso, é muito rapido o esquema..