Muitas vezes precisamos de informações de memórias do sistema antes que estas apareçam na seção detalhe.
Uma forma é criarmos várias variáveis, que requer muita atenção pois esta solução aumenta a possibilidade de erro, e aumenta a quantidade de linhas de programação.
Para isso a LSP possui uma ferramenta muito interessante, infelizmente pouco usada, a matriz (tabela).
Esta é definida de linhas e colunas, a vantagem é que estas informações ficam guardadas durante toda a execução do relatório podendo ser chamadas a qualquer momento na execução do relatório através de uma coordenada Linha x Coluna em uma variável dinâmica.
Imagina uma planilha de Excel por exemplo, com as informações:
C.P.F. do Colaborador | Valor do Ultimo Salário | Código do Cargo
Agora imagine que você precise destas informações em qualquer momento no relatório, não apenas do colaborador ativo no momento, mas de todos os colaboradores.
Para isso definiremos uma matriz (tabela).
A criação de uma tabela é bem simples, tendo como base o exemplo temos:
Definir Cursor Cur_R034FUN;
Definir Data EDatRef;
Definir Tabela xTab[1000]= @ entre colchetes a quantidade máxima de posições(linhas) que terá a matriz(tabela)@
{ @ Início das definições das colunas @
Numero Num_Cpf; @ Coluna, número porque o CPF é uma informação numérica @
Numero Val_Sal;
Alfa Cod_Car;
}; @ Fim das definições das colunas @
xNumEmp = EmpAtu;
Cur_R034FUN.SQL"Select NumCpf, CodCar, ValSal FROM R034FUN \
Where NumEmp =:xNumEmp \
And TipCol = 1 \
And SitAfa <> 7 \
And DatAdm <=:EdatRef “; @ data de referência pode ser incluída na entrada do relatório, se for o caso @
Cur_R034FUN.AbrirCursor();
Enquanto (Cur_R034FUN.Achou)
Inicio
xLin = xLin + 1; @ xLin será o número da linha, ele irá fazer a junção das colunas, como um indexador, entenderemos algumas linhas abaixo @
xTab[xLin].Num_Cpf = Cur_R034FUN.CodCpf;
xTab[xLin].Cod_Car = Cur_R034FUN.CodCar;
xTab[xLin].Val_Sal = Cur_R034FUN.ValSal;
Cur_R034FUN.Proximo();
Fim;
Cur_R034FUN.FecharCursor();
@ Pronto, agora temos todas as informações da tabela, para todos os colaboradores, ao nosso alcance. Para acessá-las, basta chamar as linha da tabela pelo índice @
Formula001 = xTab[10].Num_Cpf;
Formula001 = xTab[10].Val_Sal;
@ As linhas acima, dão o valor da 10º linha da tabela às formulas, se essa programação foi feita na seção Título, ou mesmo na Seleção do relatório, podemos fazer comparativos entre o registro atual e todos os outros registros da tabela, ou seja, todos os outros colaboradores, como podemos ver abaixo:@
@- > Imagine que a tabela foi feita na seleção, e as linhas a seguir foram feitas na seção detalhe @
x = 0;
Enquanto((R034FUN.ValSal > xTab[x].Val_Sal) e (x < 1000))
Inicio
x = x + 1;
Fim;
Se (x > 1000)
AlteraControle(“Descricao001”,”Descrição”,”Este é o Maior Salário”);
@ Veja que assim podemos identificar o maior salário da empresa no relatório, independente da ordenação @
Bem...!
Espero ter contribuído com esta informação abraços e até a próxima !
Quaisquer dúvidas estarei a disposição !
Sebastião Rameno.
