Artigo Clube Delphi Magazine 64 - Sistema SysCash

Nessa segunda parte da série, implementaremos as triggers e stored procedures contendo as regras de negócio do sistema SysCash.

 

Esse artigo faz parte da revista Clube Delphi edição 64. Clique aqui para ler todos os artigos desta edição

Clique aqui para ler essa revista em PDF.

Sistema SysCash

Parte II – Criando as regras de negócio

 

Nessa segunda parte da série, implementaremos as triggers e stored procedures contendo as regras de negócio do sistema SysCash. Iniciaremos também o desenvolvimento da aplicação Delphi, criando as telas de cadastro, previsões (contas a pagar/receber) e lançamentos (avulsos e baixas).

 

Gerando o histórico

Todas as operações realizadas nas tabelas Cax_Contas, Cax_Previsoes e Cax_Lancamentos serão armazenadas na tabela de histórico do sistema. Cada vez que o usuário do sistema incluir, alterar ou apagar um registro dessas tabelas, será disparada uma trigger que armazenará as informações do registro em questão, na tabela de histórico (Cax_Historico).

Todo o processo de geração do histórico será feito através de triggers vinculadas a eventos das tabelas. Utilizaremos os eventos After Insert, After Update e After Delete para inserir as informações na tabela de histórico. Veja na Listagem 1 as instruções SQL para geração do histórico da tabela Cax_Contas.

 

Listagem 1. Triggers para geração do histórico referente às operações efetuadas na tabela Cax_Contas

/*CAX_CONTAS - Após inserir um novo registro*/

CREATE TRIGGER "TRG_INS_CON_HIS" FOR "CAX_CONTAS"

ACTIVE AFTER INSERT POSITION 0

AS

BEGIN

  INSERT INTO CAX_HISTORICO (HIS_PRELANCON, HIS_TIPO,

HIS_CODREFERENCIA, HIS_DESCRNOVA, HIS_VALORNOVO)

  VALUES ('C', 'I', NEW.CON_CODIGO, NEW.CON_DESCRICAO,

  NEW.CON_SALDOINICIAL);

END;

 

/*CAX_CONTAS – Após alterar um registro*/

CREATE TRIGGER "TRG_UPD_CON_HIS" FOR "CAX_CONTAS"

ACTIVE AFTER UPDATE POSITION 0

AS

BEGIN

  IF ((OLD.CON_DESCRICAO <> NEW.CON_DESCRICAO) OR

  (OLD.CON_SALDOINICIAL <> NEW.CON_SALDOINICIAL)) THEN

  BEGIN

INSERT INTO CAX_HISTORICO (HIS_PRELANCON, HIS_TIPO,

HIS_CODREFERENCIA, HIS_DESCRANTIGA, HIS_DESCRNOVA,

   HIS_VALORANTIGO, HIS_VALORNOVO)

VALUES ('C', 'A', NEW.CON_CODIGO,

OLD.CON_DESCRICAO, NEW.CON_DESCRICAO,

OLD.CON_SALDOINICIAL, NEW.CON_SALDOINICIAL);

  END

END;

 

/*CAX_CONTAS – Após apagar um registro*/

CREATE TRIGGER "TRG_DEL_CON_HIS" FOR "CAX_CONTAS"

ACTIVE AFTER DELETE POSITION 0

AS

BEGIN

  INSERT INTO CAX_HISTORICO (HIS_PRELANCON, HIS_TIPO,

  HIS_CODREFERENCIA, HIS_DESCRANTIGA, HIS_VALORANTIGO)

   VALUES ('C', 'D', OLD.CON_CODIGO, OLD.CON_DESCRICAO,

   OLD.CON_SALDOINICIAL);

END;

Para o campo His_PreLanCon da tabela Cax_Historico armazenamos os valores “C” (Contas), “P” (Previsões) ou “L” (Lançamentos) para identificar a origem do registro. No campo His_Tipo armazenaremos os valores “I” (Inclusão), “A” (Alteração) ou “D” (Delete/Exclusão) para indicar a operação que originou o registro no histórico.

Na tabela de histórico serão incluídas apenas as informações mais importantes de cada tabela. Na trigger Trg_Upd_Con_His, por exemplo, só geraremos um histórico da alteração caso os campos Con_Descricao ou Con_SaldoInicial tenham sido alterados pelo usuário.

Dica: A variável Old guarda temporariamente os valores antigos das colunas, enquanto que a variável New armazena os novos valores a serem inseridos/alterados nas colunas.

Você pode baixar o script contendo as instruções SQL para definição das triggers para geração de histórico das tabelas Cax_Previsoes e Cax_Lancamentos a partir do endereço de download deste artigo, como também os arquivos do banco para FB 1.5, IB 6 e IB 7.5.

 

Controlando a inclusão/alteração do saldo inicial das contas

Cada vez que uma conta é cadastrada ou alterada, o sistema permite que o usuário entre com um saldo inicial. Essa opção é interessante, visto que quando uma empresa passa a utilizar um sistema informatizado para controlar suas contas, como caixa e contas bancárias, por exemplo, normalmente essas contas já possuem algum saldo (positivo ou negativo).

O saldo diário de cada conta cadastrada no sistema será armazenado junto com a data na tabela Cax_Saldos. Caso algum valor seja incluído ou alterado no campo Con_SaldoInicial da tabela Cax_Contas, utilizaremos uma stored procedure para atualizar o saldo na tabela Cax_Saldos. Para criar a SP, utilize a instrução da Listagem 2.

 

Listagem 2. Criando uma Stored Procedure para atualizar o saldo

CREATE PROCEDURE PROC_ATUALIZA_SALDO_CONTA (

  CODCONTA INTEGER, DT DATE, VALOR NUMERIC(18, 2))

AS

BEGIN

  /*Caso já exista um saldo para a conta na data

  informada no parâmetro DT, atualiza o valor*/

  IF (EXISTS(SELECT 1 FROM CAX_SALDOS

WHERE CON_CODIGO = :CODCONTA AND

SAL_DATASALDO = :DT)) THEN

" [...] continue lendo...

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados