Criando recibo de quitação do zero, Convertendo estrutura fixa de tabelas para comando dinâmico

Weverton Johnnys

Valdécio

Autor Weverton Johnnys
Data de criação Sep 3, 2021
Última edição Modificado há 3 anos
Visualizações 1 visualizações


OBS: Este artigo mostra a criação de um recibo de quitação, porém a partir de 21/04/2022 este artigo fica desatualizado devido ao fato de que a query para geração do relatório foi modificada devido a possibilidade de impressão de quitação parcial.

Para visualizar a diferença verifique o curso de criação de relatório utilizando o Task Report no tópico de recibo de quitação.

Neste artigo irei abordar os passos utilizados para realizar a manutenção em um relatório personalizado. alterando a estrutura fixa de tabelas para a utilização de comandos SQL personalizados.


Neste Caso em específico iremos alterar a estrutura do recibo de quitação. para deixa-lo conforme protótipo enviado pelo cliente.

Realizar Backup

Primeiro passo, sempre que for realizar alterações grandes como essa, é fazer a exportação do arquivo, para usar como backup e não alterar o arquivo original em uso pelo cliente, até que os testes tenham sido feitos, e o cliente tenha aprovado. Para realizar Backup, é preciso apenas exporta-lo para arquivo, e importa-lo na base a qual desenvolverá o relatório, ou caso desenvolva na mesma base, basta salvar como um novo relatório, conforme imagem a baixo:

Acione o Gerador de relatório na base que deseja obter o relatório do cliente.

Edite o desenho do relatório desejado

Acione a opção de “salvar como..” e salve no local da árvore de relatórios desejado

Automaticamente ele mudará a edição para o novo arquivo que você salvou e poderá realizar as alterações desejadas sem problemas.

Para salvar no computador e transferir para outra base, selecione a opção “Salvar para Arquivo..“

Para importar na nova base, basta criar um novo relatório em branco, acionando o botão direito e criando um novo relatório.

Após criado o novo relatório, basta carregar o arquivo exportado anteriormente.

Conferir estrutura do relatório

Neste ponto acionando a opção de dados e observando a distribuição dos campos no relatório, e a demanda para adição dos novos campos, já se deve imaginar o que se deseja carregar para o novo relatório, neste caso , desejamos, obter o número do documento referente a quitação realizada, e a hora em que a quitação foi realizada.

Os passos para criar um novo relatório, e realizar essa alteração são basicamente os mesmos, considerando que ao criar um novo relatório importamos o modelo padrão, disponibilizado no repositório, pois nele já contem, cabeçalho, e a estrutura para substituir os comandos. feito isso, seguiremos normalmente para o próximo passo, que é criar o comando, com os campos já existentes e os novos, para auxiliar neste processo, é possível, visualizar o SQL criado pelo gerador de relatório, basta aciona-lo conforme demostrado na imagem:

Criar Tabela personalizada

Precisamos criar um tabela física com todos os dados necessários para distribuir os novos campos. neste caso como não utilizaremos mais essa estrutura , teremos de apaga-la, basta clicar com botão direito dentro da tabela, e apagar:

Feito isso iremos criar a nossa tabela personalizada, e conferir se os valores resultantes são o que esperamos, neste caso obtive os números dos documentos da quitação e a hora que ela foi feita, e mantive os campos que já eram utilizados, conforme mostra resultado abaixo.

Construindo novo relatório.

Criando novo conjunto de dados

Com a tabela criada, podemos obtê-la no conjunto de dados, do relatório. lembrando, que se estiver com gerador aberto, deve fecha-lo e abrir novamente para carregar está nova tabela “QueryRecibQuit“, Obser que só será possível criar o conjunto de dados, se estiver na primeira guia “Dados” nas demais não aparecerá a opção.

Selecionar tabela e campos

Iremos selecionar a tabela que criamos localizando e dando um duplo click nela.

Em seguida vamos selecionar os campos, neste caso como queremos todos, é só marcar a opção todos, mais o método de seleção também é com duplo click.

Para testar se deu certo, basta acionar a lupa para visualizar os dados, se aparecerem podemos prosseguir. se ocorre algum erro é necessário fazer uma revisão, da tabela criada, pode ser que ao ser criado os campos ficaram com uma codificação não aceita, deve-se ter cuidado ao utilizar o comando em exemplo, onde é criado uma tabela direto com a consulta, por segurança crie a tabela, e realize o insert posteriormente, ou trate os campos para serem gravados na codificação latin1, conforme fiz na coluna de número de documento, “AS CHAR CHARACTER SET latin1”, depende de cada caso avaliar qual será a maior complexidade.

Criar a tabela em tempo de execução

Depois de termos criado a tabela física no banco, e obtido sua fonte, vamos colocar o código para que ela seja criada em tempo de execução sempre que o relatório for impresso, pegando como parâmetro o código do registro, que estamos imprimindo, pois até agora estamos trabalhando com um valor fixo. Neste caso vamos utilizar o mesmo comando que criamos a tabela, só vamos adequá-lo a linguem correta, para leitura do relatório.

Para isso vamos na guia de calculo e localizar o evento onInitializeParameter“, nele vamos fazer as modificações, observe que existe um código, nele, que é referente a estrutura antiga, se for um relatório novo, ele estará branco como os outros, basta clicar com botão direito e clicar em novo, que irá abrir a tela abaixo.

Observamos ainda que neste caso como se trata de um modelo de ficha, nós temos o código direto do registro retornado pela função “PegarInformaçãoAdicional“, ou seja, só vamos imprimir o registro referente a uma quitação, diretamente do formulário , se a impressão fosse uma lista de várias quitações, teríamos de utilizar uma tabela intermediária, “subblocoimpressaotask“ que armazenada o código de todos os registros. cada caso é específico deve-se consultar responsáveis para avaliar qual método utilizado, ou então, realizar um teste básico de impressão do relatório ,se gravar registro nesta tabela poderá ser utilizado, é possível ainda fazer um teste direto no task, colocando uma mensagem para exibir o valor retornado para avaliar se é o código do bloco ou do registro.

Vamos colocar nosso comando, e testa-lo clicando em visualizar a impressão, em ambiente de teste nosso código ficará da seguinte maneira:

Algumas considerações importantes são necessárias por exemplo:

  • Nunca deixe a tabela como física em produção, após os teste volte a String para “TEMPORARY“ isso evitará erro, ao duas pessoas imprimirem o relatório

  • Nunca se esqueça de comentar a linha do CodigoBloco que está com valor fixo, pois em teste ele subsistiu o que veio da função, mais em produção não pode substituir

Abaixo o Código que pode ser copiado para testes.

procedure ReportOnInitializeParameters(var aCancel: Boolean); var SQL, codigobloco, TEMPORARY : String; begin codigobloco := PegaInformacaoAdicional; codigobloco := '860'; // PARA TESTE COLOQUE ESTA LINHA, EM PRODUÇÃO TEM DE ESTAR COMENTADA TEMPORARY := ''; // PARA TESTE DEIXE A STRING VAZIO, EM PRODUÇÃO TEM DE DEIXAR TEMPORARY SQL:= 'DROP '+ TEMPORARY + ' TABLE IF EXISTS QueryRecibQuit'; ExecutarQuery('', ' ',SQL, 'Não'); SQL:= ' CREATE '+ TEMPORARY + ' TABLE QueryRecibQuit'; SQL := SQL + ' SELECT'; SQL := SQL + ' CAST(GROUP_CONCAT(DISTINCT contasareceber.numerodocumento SEPARATOR " | ") AS CHAR CHARACTER SET latin1 ) as numerodocumento,'; SQL := SQL + ' quitacao.horaedicao as HoraQuitacao, '; SQL := SQL + ' quitacao.DATA,'; SQL := SQL + ' quitacao.ValorTotal,'; SQL := SQL + ' quitacao.Desconto, '; SQL := SQL + ' quitacao.Acrescimo,'; SQL := SQL + ' quitacao.ValorQuitado,'; SQL := SQL + ' quitacao.Descricao,'; SQL := SQL + ' cliente.codigo,'; SQL := SQL + ' cliente.nomerazaosocial,'; SQL := SQL + ' cliente.cpfcnpj,'; SQL := SQL + ' quitacao.ValorAQuitar,'; SQL := SQL + ' loja.razaosocial,'; SQL := SQL + ' quitacao.codigo AS codigo_2,'; SQL := SQL + ' ( quitacao.ValorAQuitar - quitacao.ValorQuitado ) AS quitacao_ValorAQuitar_qu '; SQL := SQL + ' FROM'; SQL := SQL + ' quitacao quitacao'; SQL := SQL + ' INNER JOIN cliente cliente ON ( cliente.codigo = quitacao.codigocf )'; SQL := SQL + ' INNER JOIN loja loja ON ( loja.codigo = quitacao.CodigoLE )'; SQL := SQL + ' INNER JOIN origemquitacao ON ( origemquitacao.codigoquitacao = quitacao.codigo )'; SQL := SQL + ' INNER JOIN contasareceber ON ( contasareceber.codigo = origemquitacao.codigoorigem ) '; SQL := SQL + ' WHERE'; SQL := SQL + ' quitacao.codigo = '+ codigobloco + ''; SQL := SQL + ' GROUP BY quitacao.codigo;'; ExecutarQuery('', ' ',SQL, 'Não'); Report.ShowAutoSearchDialog := false; aCancel := False; end;

  • Uma dica para formatar o código SQL no formato assim mais facilmente, pode ser vista no GIF abaixo, utilizando Comando Alt + Tab pressionados juntos, e selecionando a coluna na vertical, e utilizando macro para formatar o final de cada linha, é necessário utilizar o Notepad++ para esse recurso.

    FORMATANTO SQL.gif

Devemos também apagar a tabela após a impressão no seguinte evento:

Ajustando o desenho do relatório para colocar os campos que desejamos. já podemos imprimir e testar

Dados carregados corretamente, podemos seguir para os últimos passos, salvar o relatório e identificar em produção e pedir o cliente para testar

os últimos passos, são os vistos no inicio do artigo,

  • Remover os dados de teste do relatório, conforme dito anteriormente.

  • Salvar o relatório (lembre-se de salva-lo com frequência durante o desenvolvimento, pois se houver algum problema como uma oscilação na rede você perderá todo trabalho feito.

  • Exportar para arquivo.

  • Importar para arquivo na máquina do cliente.

  • identifica-lo no gerenciador de consulta. e imprimir uma quitação de teste.

Identificando relatório

Quando relatório é novo ele precisa ser identificado para que possa ser vinculado ao formulário.

Definindo acesso ao relatório

Vinculando o relatório no formulário pelo gerenciamento.

Ultimo teste, imprimindo direto pelo formulário

O resultado é o mesmo que vimos ao visualizar impressão, mais é importante fazer este teste, para não passar questões simples de serem ajustadas. ambiente de teste pode ser diferente.

1. Realizar Backup
1.1. Acione o Gerador de relatório na base que deseja obter o relatório do cliente.
1.2. Edite o desenho do relatório desejado
1.3. Acione a opção de “salvar como..” e salve no local da árvore de relatórios desejado
1.4. Para salvar no computador e transferir para outra base, selecione a opção “Salvar para Arquivo..“
1.5. Para importar na nova base, basta criar um novo relatório em branco, acionando o botão direito e criando um novo relatório.
1.6. Após criado o novo relatório, basta carregar o arquivo exportado anteriormente.
1.7. Conferir estrutura do relatório
1.8. Criar Tabela personalizada
2. Construindo novo relatório.
2.1. Criando novo conjunto de dados
2.2. Selecionar tabela e campos
2.3. Criar a tabela em tempo de execução
3. Identificando relatório
3.1. Definindo acesso ao relatório
3.2. Vinculando o relatório no formulário pelo gerenciamento.
3.3. Ultimo teste, imprimindo direto pelo formulário