Os relatórios formatados pelo iReport e depois executados no SankhyaW precisam de funções utilitárias que devem rodar tanto no ambiente de design quanto no próprio SankhyaW.
Uma das funções mais utilizadas é a PDES, que existe em pelo menos 3 classes mas que não estão no formato adequado para ser usada no iReport, pois em sua maioria dependem de recursos não disponíveis no ambiente de design.
Para resolver esse problema e criar um padrão de funções disponíveis para o iReport foi criada a classe br.com.sankhya.jasperfuncs.Funcoes onde devemos disponibilizar métodos utilitários.
O primeiro método implementado é justamente o pdes, com a seguinte assinatura:
public static String pdes(Connection c , String sCol, String sTable, String sWhere)
vejam que ele recebe a conexão como primeiro argumento, isso é necessário para torná-la independente de chamador.
Segue um exemplo de uso em uma expressão de campo do iReport:
br.com.sankhya.jasperfuncs.Funcoes.pdes($P{REPORT_CONNECTION},”NOMEPARC”,”TGFPAR”,”CODPARC=” + $F{CODPARC})
Notem o uso do parâmetro REPORT_CONNECTION que é criado automaticamente pelo iReport e possui referencia para a conexão JDBC em uso pelo JasperReport.
Essa classe faz parte do projeto SankhyaUtil, e portanto temos que atualizar nosso iReport para download.
Função STP:
Essa função permite chamar StoredProcedures ou Functions do banco de dados dentro de relatório formatados no iReport, segue a sintaxe:
br.com.sankhya.jasperfuncs.Funcoes.stp( <CONEXAO_BD>, <NOME_PROCEDURE>, <PARAMETROS_DE_ENTRADA> , <TIPO_DE_RETORNO> })
- <CONEXAO_BD>: conexão com o banco de dados usada pelo iReport.
- <NOME_PROCEDURE> : nome da procedure, exatamente como está declarada no BD
- <PARAMETROS_DE_ENTRADA>: parâmetros que serão passados para a procedure. Na prática é uma lista de pares com tipo e valor (conforme exemplo)
- <TIPO_DE_RETORNO>: Esse parâmetro é OPCIONAL, e só deve ser usado se a procedure retornar algum valor que o relatório vá usar.
- Chamada para uma procedure com 1 parâmetro de entrada do tipo numérico:
- Chamada para uma procedure com 2 parâmetros de entrada, o primeiro numérico e o segundo texto:
- Chamada para uma procedure com 3 parâmetros de entrada, o primeiro numérico ,o segundo texto e o terceiro data:
Por padrão o resultado das variáveis/funções são do tipo 'string', sendo assim não consegue fazer cálculos com os mesmos.
A função 'Val()' é utilizada para converter a string para um valor numérico, sendo assim possível fazer cálculos com o resultado.
Exemplo:
VAL(PDES('VLRDESCTOT','TGFCAB','NUNOTA='+NUNOTA))
FormatNumeric(Utilizado na visualização de relatórios)
FORMATNUMERIC('M', 'V') - Formata um valor, onde 'M' representa a mascara e 'V' o valor a ser formatado.
Exemplo:
VLRNOTA = 13900,66(sem formatação)
FORMATNUMERIC('###,###,##0.00', VLRNOTA)
Resultado com o Format: 13.900,66
Observação: Essa função foi utilizada da formatação de formulas. Logo qualquer outra função que esteja disponível também pode ser utilizado por esse formatador.
Round('Campo','Casas decimais para considerar no round').
Usado para arredondar as casas decimais do resultado da expressão/campo.
Exemplo:
PI = 3.14159265359
Round(PI,4)
Resultado do Round = 3.1416- Note que houve arrendondamento para cima.
Trunc('Campo','Casas decimais para considerar no trunc')
Usado para truncar as casas decimais do resultado da expressão/campo.
Trunc remove a parte fracionaria do numero.
Exemplo:
PI = 3.14159265359
Round(PI,4)
Resultado do Round = 3.1415 - Note que não houve arredondamento de forma alguma.
IF('Expressão booleana', 'Retorna aqui, se verdadeiro', 'Retornar aqui, se falso');
A expressão de logica booleana é uma estrutura logica que pode ser verdadeira ou falsa. A logica booleana usa tabelas verdade (TRUE ou FALSE) para determinar o valor verdade (TRUE ou FALSE) das expressões.
Exemplo:
Idade = 15
IF(idade > 18, "Sou maior de idade","Sou menor de idade")
Resultado do IF "Sou maior de idade"
Pdes('Campos','Tabelas','Condição');
Semelhante a SELECT, busca informações de tabelas/view do sistema.
Exemplo: SELECT AD_VLRVENDOR FROM TGFCAB WHERE NUNOTA = 1100
PDES('AD_VLRVENDOR','TGFCAB','NUNOTA='+:NUNOTA)
Comentários
2 comentários
Bom dia, ainda não encontrei uma forma de poder selecionar dentre uma lista de informações (filtro) quais itens quero mostrar no relatorio, via ireport.
Exemplo: Preciso filtrar as vendas de algumas marcas. Não consigo carregar a opção de todas as macas, para eu selecionar apenas 2 ou 3 marcas, dentre todas.
Tentei vincular o ireport junto com o dashboard, eu até consigo enviar parametros e argumentos de valores unicos para o ireport. Porém, quando tento enviar parametros do tipo '1','2','3' o ireport não consegue visualizar os dados. apresenta o erro
java.sql.SQLException: ORA-01722: número inválido
No select do ireport está configurado da forma correta de receber os dados
AND (VI.CODMARCA IN $P{P_MARCA} OR VI.CODMARCA IS NULL)
Preciso de uma solução para melhorar as analises via relatorios.
Olá Daniel,
Identificamos que a sua dúvida foi respondida no ticket #76017, agradecemos o seu contato.
Atenciosamente,
Equipe Central de Ajuda
Por favor, entre para comentar.