1 Conceito
O Editor de Relatórios é uma ferramenta que possibilita criar e modificar os relatórios existentes no sistema. Com ele é possível criar a tela de parâmetros para o relatório e informar como o sistema deve buscar e demonstrar os dados do relatório.
Para a criação de relatórios no AutoSystem é indispensável um conhecimento básico de linguagem SQL.
2 Padrões para os modelos de Relatórios
As linhas do relatório devem conter no máximo 120 (cento e vinte) caracteres.
Tamanho dos campos (colunas) |
|
Cabeçalho do relatório |
|
Texto de ajuda |
|
Totalizadores |
|
3 Tela
Na aba Tela é possível indicar que parâmetros serão solicitados ao usuário para a exibição do relatório. Todos os campos criados poderão ser utilizados mais tarde para construir a consulta SQL que irá criar o relatório.
Para definir que informações serão solicitadas para o usuário, deve ser utilizado o campo "Desenho da tela". Este campo deve ser preenchido com uma estrutura XML, semelhante a uma página HTML.
Exemplo:
<quadro titulo="Parâmetros"> <procura id="empresa" modelo="empresa" /> <campo id="data" tipo="data" titulo="Data" /> </quadro> |
---|
Para incluir dois campos na mesma linha é necessário usar o parâmetro '<caixa'>:
<caixa> <campo id="data_emis" modelo="periodo" titulo="Emissão entre"/> <campo id="turno" tipo="numero" titulo="Turno" /> </caixa> |
---|
3.1 Tipos de Objetos de Tela
Abaixo, a relação de objetos que podem ser utilizados para construir uma tela de filtro para um relatório:
3.1.1 Procura
O tipo de campo procura permite que o usuário informe ou selecione um registro em uma tabela do banco de dados. É utilizado para quando se deseja informar um cliente, um produto, uma conta, um motivo de movimentação, etc.
A sintaxe da tag procura é:
<procura id="aaa" modelo="bbb" requerido="sim" valor_padrao="ccc" condicao="ddd"/> |
---|
Onde:
id | Nome do campo. Será utilizado posteriormente para montar a consulta SQL |
modelo | Formato pré-definido de procura. Veja tabela a seguir |
requerido | Indica se o campo deve ser preenchido pelo usuário |
titulo | Titulo do objeto check |
valor_padrao | Valor inicial do campo. Deve ser informada uma consulta SQL |
condicao | Condição SQL para exibição dos registros |
Modelos pré-definidos de procura:
empresa | Relação de Empresas (postos) |
pessoa | Relação de todas as pessoas cadastradas |
cliente | Relação de Clientes |
funcionario | Relação de Funcionários |
fornecedor | Relação de Fornecedores |
usuario | Relação de Fornecedores |
conta | Relação de Contas |
produto | Relação de produtos |
grupo_produto | Relação de Grupos de Produtos |
grupo_pessoa | Relação de Grupos de Pessoas |
deposito | Relação de Depósitos |
motivo_movto | Relação de Motivos de Movimentação |
cargo | Relação de Cargos |
cst | Relação de CST's |
tributacao | Relação de Tributação |
subgrupo_produto | Relação de Subgrupo |
Exemplo de procura com condição simples
Para exibir apenas contas que iniciam com 1.3.*:
<procura id="conta" modelo="conta" condicao="codigo like '1.3.%'" /> |
---|
Também é possível colocarmos um valor de outro campo para a condição da procura, vejamos:
Exemplo de procura com condição dependente do valor de outro parâmetro
Para exibir apenas subgrupos de produto de um grupo de produto selecionado, ou exibir todos os subgrupos de produto se não houver grupo selecionado, deve-se fazer desta forma:
<procura id="grupo" modelo="grupo" titulo="Grupo" /> |
---|
Exemplo de procura dinâmica
Para criar uma procura dinâmica, deverá ser informado o modelo com o valor "dinamico", uma tabela ou o SQL para buscar os registros, e também as chaves que serão utilizadas. Pode ser informado o nome das colunas também. As chaves devem ser no mínimo três, onde a primeira trata-se do valor a ser utilizado na origem de dados, o segundo e o terceiro serão as colunas exibidas e também o valor retornado a janela.
<quadro titulo="Parâmetros"> <procura id="cliente" modelo="cliente"/> <procura id="pessoa" modelo="dinamico" sql="select * from pessoa" chaves="grid,codigo,nome,,tipo" titulo="Pessoa"/> <procura id="uf" modelo="dinamico" tabela="unidade_federativa" chaves="codigo,sigla,nome" valor_padrao="select 42" titulo="UF"/> <procura id="municipio" modelo="dinamico" sql="select m.codigo, m.nome, ms.uf from municipio m join micro_regiao mc on (m.micro_regiao=mc.codigo) join meso_regiao ms on (mc.meso_reg <procura id="bico_abastecimento" modelo="dinamico" tabela="bico_abastecimento" chaves="codigo,bico,quantidade,preco_unit" titulo_colunas="Bico,Qtade,Preco" titulo="Bico Abast"/> </quadro> |
---|
3.1.2 Campo
O tipo de objeto campo permite que o usuário informe um número, uma data ou um texto livre qualquer.
A sintaxe da tag campo é:
<campo id="aaa" tipo="bbb" modelo="ccc" requerido="sim" valor_padrao="ddd" /> |
---|
Onde:
id | Nome do campo. Será utilizado posteriormente para montar a consulta SQL |
tipo | Tipo de dados do campo: numero, data ou valor |
modelo | Formato pré-definido de campo. Veja tabela a seguir |
titulo | Titulo do objeto check |
requerido | Indica se o campo deve ser preenchido pelo usuário |
valor_padrao | Valor inicial do campo. Deve ser informada uma consulta SQL |
expandido | Indica se o campo deve ser mostrado expandido na tela, valor padrão "Não", exceto para campos tipo texto |
Modelos pré-definidos de campo:
periodo | Exibe dois campos, um para a data inicial e outro para a final. Se o id do campo for vencto, por exemplo, estarão disponíveis na consulta SQL as variaveis vencto_ini e vencto_fim |
3.1.3 Check
O tipo de campo check permite que o usuário informe uma opção(SIM/NÃO).
A sintaxe da tag check é:
<check id="aaa" titulo="Permite clientes bloqueados" valor_padrao="select true" /> |
---|
Onde:
id | Nome do campo. Será utilizado posteriormente para montar a consulta SQL |
titulo | Titulo do objeto check |
valor_padrao | Valor inicial do campo. Deve ser informada uma consulta SQL |
3.1.4 Seleção
O tipo de campo selecao exibe uma lista que permite ao usuário selecionar a opção desejada.
A sintaxe da tag selecao é:
<selecao id="aaa" titulo="bbb" origem="ccc" requerido="sim" valor_padrao="ddd" /> |
---|
Onde:
id | Nome do campo. Será utilizado posteriormente para montar a consulta SQL |
origem | Consulta SQL que define o conteúdo da lista. Se retornar 2 colunas, a primeira será o valor do campo e a segunda o valor exibido |
requerido | Indica se o campo tem seu preenchimento obrigatório. Caso não for obrigatório, haverá uma linha em branco como primeira opção da seleção |
titulo | Titulo do campo |
valor_padrao | Valor inicial do campo. Deve ser informada uma consulta SQL |
Exemplos de origem
Lista de grupos de produtos:
SELECT grid, nome FROM grupo_produto ORDER BY nome |
---|
Lista genérica:
VALUES (1, 'Clientes em atraso'), (2, 'Clientes em dia'), (3, 'Todos os cliente') |
---|
Exemplos para "valor_padrao"
O parâmetros valor_padrao permite indicar uma sugestão para os campos tipo procura e campo. Neste parâmetro deve ser informada uma consulta SQL que retorne o valor a ser exibido.
A seguir, alguns exemplos de consultas:
Informação a ser exibida | Consulta SQL |
Data atual | select current_date |
Data ontem | select current_date - 1 |
Data amanhã | select current_date + 1 |
Inicio do mes atual | select to_char(current_date, 'YYYY-mm-01')::date |
Final do mes atual | select to_char(current_date + interval '1 month', 'YYYY-mm-01')::date - 1 |
Conta "Valores a Receber" | select conta from conta_config where chave='VALORES A RECEBER' |
Conta 1.3.01 | select '1.3.01' |
Empresa local | select empresa from empresa_local limit 1 |
Especialmente para campos onde "modelo" for "periodo", deve ser utilizado no parâmetro valor_padrao uma consulta SQL que retorne duas colunas. No exemplo a seguir uma consulta que retorna duas colunas com a data de hoje:
SELECT CURRENT_DATE, CURRENT_DATE |
---|
ou senão para retornar o início e o final do mês corrente:
SELECT to_char(CURRENT_DATE, 'YYYY-mm-01')::DATE, to_char(CURRENT_DATE + INTERVAL '1 month', 'YYYY-mm-01')::DATE - 1 |
---|
4 Relatórios
4.1 Origem dos dados (SQL)
Esta é a sessão principal de um relatório, onde deve ser informada a consulta SQL utilizada para obter os dados do relatório. Para utilizar os campos da tela do relatório informe o caractere $ (cifrão) e o nome do campo.
Exemplo: se na tela existir um campo com id="empresa", informar $empresa para se referir ao conteúdo do campo:
SELECT codigo, nome FROM funcionario WHERE (CASE WHEN $empresa IS NULL THEN TRUE ELSE empresa = $empresa END); |
---|
Ao processar a consulta SQL, caso o conteúdo informado pelo usuário para o campo empresa seja 1, a seguinte consulta será executada no banco de dados:
SELECT codigo, nome FROM funcionario WHERE empresa=1::int8 |
---|
5 Condições Opcionais
Como regra do AutoSystem, quando um campo não é preenchido em um filtro significa que o filtro não deve ser aplicado. Para realizar esta operação em SQL, será necessário utilizar o comando CASE. O exemplo a seguir retorna uma lista de produtos, leva em conta que na tela foi definido um campo "procura" com "id" igual a grupo, que é opcional:
SELECT codigo, nome |
---|
Os filtros para os tipos de dados em SQL são:
Inteiro:
(CASE WHEN $grupo IS NULL THEN TRUE ELSE grupo = $grupo END) |
---|
Texto:
(CASE WHEN $cidade = '' THEN TRUE ELSE cidade = $cidade END) |
---|
Data:
(CASE WHEN $data IS NULL THEN TRUE ELSE DATA = $data END) |
---|
6 Gráficos
Para gerar gráficos é necessário que a consulta SQL retorne 2 colunas, sendo a primeira um texto e a segunda um valor, para a correta visualização do gráfico.
O nome padrão das colunas é Rótulo e Valor. Se quiser utilizar outro nome, o nome da coluna (no SQL) deve iniciar com nomecoluna_, o titulo será o que vier após o "_" (underline).
Para os gráficos de linhas, pode-se retornar uma consulta SQL com várias colunas, sendo a primeira um texto e as demais um valor. O nome da coluna será o mesmo retornado pelo SQL.
7 Visualização no Menu
Para que os relatórios desenvolvidos apareçam no menu principal do módulo Gerencial do AutoSystem, basta salvar o arquivo .xml na pasta "relatorio/custom" do AutoSystem. Caso existam relatórios salvos nesta pasta, um novo menu chamado "Relatórios" será exibido após o menu "Gráficos", constando todos os relatórios existentes. O nome de exibição será o que foi informado no campo Título do relatório.
8 Galeria SQL
Abaixo, exemplos de sentenças SQL utilizadas para obter dados diversos no sistema:
Venda por combustível
SELECT p.nome, SUM(l.quantidade) AS quantidade, SUM(l.valor) AS valor FROM produto p JOIN lancto l ON (p.grid=l.produto) |
---|