UPDATE TBCHEQUE T
    SET T.SALDO = T.VALOR
    WHERE
        (((T.SALDO IS NULL) OR (T.SALDO = 0))
            AND T.CHEQUE_SEM_PARCELA > 0 AND T.SITUACAO = '3') OR
        (((T.SALDO IS NULL) OR (T.SALDO = 0))
            AND T.CHEQUE_SEM_PARCELA = 0 AND T.SITUACAO = '0');

SET TERM ^ ;

CREATE OR ALTER trigger ttbcheque_b02i for tbcheque
active before insert position 1
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF(NEW.ID > 0)THEN
    BEGIN
        HISTORICO = HISTORICO||'REGISTRO DO CHEQUE '||NEW.NUMERO_CHEQUE||'['||NEW.TIPO||'] INCLUIDO';
    END

    NEW.SALDO = NEW.VALOR;

    IF(HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBCHEQUE', NEW.ID, HISTORICO);
    END
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbcheque_b01u for tbcheque
active before update position 1
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);
DECLARE VARIABLE OLD_ESTABELECIMENTO VARCHAR(500);
DECLARE VARIABLE NEW_ESTABELECIMENTO VARCHAR(500);
DECLARE VARIABLE OLD_BANCO VARCHAR(500);
DECLARE VARIABLE NEW_BANCO VARCHAR(500);
DECLARE VARIABLE OLD_CAIXABANCO VARCHAR(500);
DECLARE VARIABLE NEW_CAIXABANCO VARCHAR(500);
DECLARE VARIABLE OLD_EMPRESA VARCHAR(500);
DECLARE VARIABLE NEW_EMPRESA VARCHAR(500);
DECLARE VARIABLE OLD_BANCO_PAGAMENTO VARCHAR(500);
DECLARE VARIABLE NEW_BANCO_PAGAMENTO VARCHAR(500);
DECLARE VARIABLE OLD_CLASSIFICACAO VARCHAR(500);
DECLARE VARIABLE NEW_CLASSIFICACAO VARCHAR(500);
DECLARE VARIABLE OLD_CENTRO_DE_CUSTO VARCHAR(500);
DECLARE VARIABLE NEW_CENTRO_DE_CUSTO VARCHAR(500);
BEGIN

    IF( (OLD.DATA_RECEBIMENTO <> NEW.DATA_RECEBIMENTO) OR
        (OLD.VALOR <> NEW.VALOR) OR
        (OLD.CAIXABANCO_ID <> NEW.CAIXABANCO_ID) OR 
        (OLD.ESTABELECIMENTO_ID <> NEW.ESTABELECIMENTO_ID) OR
        (OLD.BANCO_ID <> NEW.BANCO_ID) OR

        (OLD.AGENCIA <> NEW.AGENCIA) OR
        (OLD.CONTA <> NEW.CONTA) OR
        (OLD.CONTA_DIGITO <> NEW.CONTA_DIGITO) OR
        (OLD.NUMERO_CHEQUE <> NEW.NUMERO_CHEQUE) OR
        (OLD.NOME_TITULAR <> NEW.NOME_TITULAR) OR
        (OLD.DATA_CHEQUE <> NEW.DATA_CHEQUE) OR
        (OLD.BANCO_PAGAMENTO <> NEW.BANCO_PAGAMENTO) OR
        (OLD.CLASSIFICACAO <> NEW.CLASSIFICACAO) OR
        (OLD.CENTRO_DE_CUSTO <> NEW.CENTRO_DE_CUSTO) )THEN
    BEGIN
        IF(NEW.CHEQUE_SEM_PARCELA > 0)THEN
        BEGIN
            IF((OLD.SITUACAO = 1) OR (OLD.SITUACAO = 4))THEN
            BEGIN
                EXCEPTION "..." 'REGISTRO: '||FN_LPAD(OLD.ID, 4, '0')||' COM SITUAÇÃO: '||OLD.SITUACAO||' - BAIXADO, ALTERAÇÃO NÃO AUTORIZADA!';
            END
            IF((OLD.SITUACAO = 2) OR (OLD.SITUACAO = 5))THEN
            BEGIN
                EXCEPTION "..." 'REGISTRO: '||FN_LPAD(OLD.ID, 4, '0')||' COM SITUAÇÃO: '||OLD.SITUACAO||' - DEVOLVIDO, ALTERAÇÃO NÃO AUTORIZADA!';
            END
            IF((OLD.SITUACAO = 7) OR (OLD.SITUACAO = 8))THEN
            BEGIN
                EXCEPTION "..." 'REGISTRO: '||FN_LPAD(OLD.ID, 4, '0')||' COM SITUAÇÃO: '||OLD.SITUACAO||' - REEMBOLSADO, ALTERAÇÃO NÃO AUTORIZADA!';
            END
        END
        IF(NEW.CHEQUE_SEM_PARCELA = 0)THEN
        BEGIN
            IF((OLD.SITUACAO = 1) OR (OLD.SITUACAO = 4))THEN
            BEGIN
                EXCEPTION "..." 'REGISTRO: '||FN_LPAD(OLD.ID, 4, '0')||' COM SITUAÇÃO: '||OLD.SITUACAO||' - BAIXADO, ALTERAÇÃO NÃO AUTORIZADA!';
            END
            IF((OLD.SITUACAO = 2) OR (OLD.SITUACAO = 5))THEN
            BEGIN
                EXCEPTION "..." 'REGISTRO: '||FN_LPAD(OLD.ID, 4, '0')||' COM SITUAÇÃO: '||OLD.SITUACAO||' - DEVOLVIDO, ALTERAÇÃO NÃO AUTORIZADA!';
            END
            IF(OLD.SITUACAO = 3)THEN
            BEGIN
                IF ( ((OLD.AGENCIA <> NEW.AGENCIA) OR
                     (OLD.CONTA <> NEW.CONTA) OR
                     (OLD.CONTA_DIGITO <> NEW.CONTA_DIGITO) OR
                     (OLD.NUMERO_CHEQUE <> NEW.NUMERO_CHEQUE) OR
                     (OLD.NOME_TITULAR <> NEW.NOME_TITULAR) OR
                     (OLD.DATA_CHEQUE <> NEW.DATA_CHEQUE) OR
                     (OLD.BANCO_PAGAMENTO <> NEW.BANCO_PAGAMENTO) OR
                     (OLD.CLASSIFICACAO <> NEW.CLASSIFICACAO) OR
                     (OLD.CENTRO_DE_CUSTO <> NEW.CENTRO_DE_CUSTO))

                     AND

                     OLD.DATA_RECEBIMENTO = NEW.DATA_RECEBIMENTO AND
                     OLD.VALOR = NEW.VALOR AND
                     OLD.CAIXABANCO_ID = NEW.CAIXABANCO_ID AND
                     OLD.ESTABELECIMENTO_ID = NEW.ESTABELECIMENTO_ID AND
                     OLD.BANCO_ID = NEW.BANCO_ID ) THEN
                BEGIN

                END ELSE
                BEGIN
                    EXCEPTION "..." 'REGISTRO: '||FN_LPAD(OLD.ID, 4, '0')||' COM SITUAÇÃO: '||OLD.SITUACAO||' - QUITADO, ALTERAÇÃO NÃO AUTORIZADA!';
                END
            END
            IF((OLD.SITUACAO = 7) OR (OLD.SITUACAO = 8))THEN
            BEGIN
                EXCEPTION "..." 'REGISTRO: '||FN_LPAD(OLD.ID, 4, '0')||' COM SITUAÇÃO: '||OLD.SITUACAO||' - REEMBOLSADO, ALTERAÇÃO NÃO AUTORIZADA!';
            END
        END
    END

    HISTORICO = '';
    OLD_ESTABELECIMENTO = COALESCE((SELECT FIRST 1 FN_LPAD(C.CODIGO, 6, '0')||' - '||C.NOMEFANTASIA FROM TBESTABELECIMENTO C WHERE C.CODIGO = OLD.ESTABELECIMENTO_ID), '');
    NEW_ESTABELECIMENTO = COALESCE((SELECT FIRST 1 FN_LPAD(C.CODIGO, 6, '0')||' - '||C.NOMEFANTASIA FROM TBESTABELECIMENTO C WHERE C.CODIGO = NEW.ESTABELECIMENTO_ID), '');
    OLD_BANCO = COALESCE((SELECT FIRST 1 A.CODIGO||' - '||A.DESCRICAO FROM TBBANCO A WHERE A.CODIGO = OLD.BANCO_ID), '');
    NEW_BANCO = COALESCE((SELECT FIRST 1 A.CODIGO||' - '||A.DESCRICAO FROM TBBANCO A WHERE A.CODIGO = NEW.BANCO_ID), '');
    OLD_CAIXABANCO = COALESCE((SELECT FIRST 1 FN_LPAD(B.CODIGO, 4, '0')||' - '||B.NOME FROM TBCAIXABANCO B WHERE B.CODIGO = OLD.CAIXABANCO_ID), '');
    NEW_CAIXABANCO = COALESCE((SELECT FIRST 1 FN_LPAD(B.CODIGO, 4, '0')||' - '||B.NOME FROM TBCAIXABANCO B WHERE B.CODIGO = NEW.CAIXABANCO_ID), '');
    OLD_EMPRESA = COALESCE((SELECT FIRST 1 FN_LPAD(C.CODIGO, 6, '0')||' - '||C.NOMEFANTASIA FROM TBEMPRESA C WHERE C.CODIGO = OLD.EMPRESA_ID), '');
    NEW_EMPRESA = COALESCE((SELECT FIRST 1 FN_LPAD(C.CODIGO, 6, '0')||' - '||C.NOMEFANTASIA FROM TBEMPRESA C WHERE C.CODIGO = NEW.EMPRESA_ID), '');
    OLD_BANCO_PAGAMENTO = COALESCE((SELECT FIRST 1 FN_LPAD(D.CODIGO, 4, '0')||' - '||D.NOME FROM TBCAIXABANCO D WHERE D.CODIGO = OLD.BANCO_PAGAMENTO), '');
    NEW_BANCO_PAGAMENTO = COALESCE((SELECT FIRST 1 FN_LPAD(D.CODIGO, 4, '0')||' - '||D.NOME FROM TBCAIXABANCO D WHERE D.CODIGO = NEW.BANCO_PAGAMENTO), '');
    OLD_CLASSIFICACAO = COALESCE((SELECT FIRST 1 FN_MASK_V2(E.CODIGO, 'CLASS')||' - '||E.DESCRICAO FROM TBCLASSIFICACAO_CONTABIL E WHERE E.CODIGO = OLD.CLASSIFICACAO), '');
    NEW_CLASSIFICACAO = COALESCE((SELECT FIRST 1 FN_MASK_V2(E.CODIGO, 'CLASS')||' - '||E.DESCRICAO FROM TBCLASSIFICACAO_CONTABIL E WHERE E.CODIGO = NEW.CLASSIFICACAO), '');
    OLD_CENTRO_DE_CUSTO = COALESCE((SELECT FIRST 1 FN_MASK_V2(F.CODIGO, 'CC')||' - '||F.DESCRICAO FROM TBCENTRO_DE_CUSTO F WHERE F.CODIGO = OLD.CENTRO_DE_CUSTO), '');
    NEW_CENTRO_DE_CUSTO = COALESCE((SELECT FIRST 1 FN_MASK_V2(F.CODIGO, 'CC')||' - '||F.DESCRICAO FROM TBCENTRO_DE_CUSTO F WHERE F.CODIGO = NEW.CENTRO_DE_CUSTO), '');

    IF(OLD.SITUACAO <> NEW.SITUACAO)THEN
    BEGIN
        HISTORICO = HISTORICO||' SITUACAO:'||OLD.SITUACAO||'->'||NEW.SITUACAO;

        IF((OLD.SITUACAO = 0 AND NEW.SITUACAO = 3) AND (OLD.CHEQUE_SEM_PARCELA = NEW.CHEQUE_SEM_PARCELA))THEN
        BEGIN
            /* Parcelas Baixadas */
            HISTORICO = HISTORICO||' BAIXA DAS PARCELAS DO CHEQUE REALIZADA';
        END
        IF(OLD.SITUACAO = 3 AND NEW.SITUACAO = 1)THEN
        BEGIN
            /* Cheque Baixado - Transferência */
            HISTORICO = HISTORICO||' BAIXA POR TRANSFERENCIA DO CHEQUE REALIZADA';
        END
        IF(OLD.SITUACAO = 1 AND NEW.SITUACAO = 2)THEN
        BEGIN
            /* Cheque Devolvido - Transferência */
            HISTORICO = HISTORICO||' DEVOLUCAO POR TRANSFERENCIA DO CHEQUE REALIZADA';
        END
        IF(OLD.SITUACAO = 3 AND NEW.SITUACAO = 4)THEN
        BEGIN
            /* Cheque Baixado - Antecipação */
            HISTORICO = HISTORICO||' BAIXA POR ANTECIPACAO DO CHEQUE REALIZADA';
        END
        IF(OLD.SITUACAO = 4 AND NEW.SITUACAO = 5)THEN
        BEGIN
            /* Cheque Devolvido - Antecipação */
            HISTORICO = HISTORICO||' DEVOLUCAO POR ANTECIPACAO DO CHEQUE REALIZADA';
        END
        IF((OLD.SITUACAO = 5 AND NEW.SITUACAO = 8) OR (OLD.SITUACAO = 2 AND NEW.SITUACAO = 7))THEN
        BEGIN
            /* Cheque Reembolsado */
            HISTORICO = HISTORICO||' REEMBOLSO DO CHEQUE REALIZADO';
        END
        -----------------------------------------------
        IF((OLD.SITUACAO = 3 AND NEW.SITUACAO = 0) AND (OLD.CHEQUE_SEM_PARCELA = NEW.CHEQUE_SEM_PARCELA))THEN
        BEGIN
            /* Desfazer Parcelas Baixadas */
            HISTORICO = HISTORICO||' BAIXA DAS PARCELAS DO CHEQUE DESFEITA';
        END
        IF(OLD.SITUACAO = 1 AND NEW.SITUACAO = 3)THEN
        BEGIN
            /* Desfazer Cheque Baixado - Transferência */
            HISTORICO = HISTORICO||' BAIXA POR TRANSFERENCIA DO CHEQUE DESFEITA';
        END
        IF(OLD.SITUACAO = 2 AND NEW.SITUACAO = 1)THEN
        BEGIN
            /* Desfazer Cheque Devolvido - Transferência */
            HISTORICO = HISTORICO||' DEVOLUCAO POR TRANSFERENCIA DO CHEQUE DESFEITA';
        END
        IF(OLD.SITUACAO = 4 AND NEW.SITUACAO = 3)THEN
        BEGIN
            /* Desfazer Cheque Baixado - Antecipação */
            HISTORICO = HISTORICO||' BAIXA POR ANTECIPACAO DO CHEQUE DESFEITA';
        END
        IF(OLD.SITUACAO = 5 AND NEW.SITUACAO = 4)THEN
        BEGIN
            /* Desfazer Cheque Devolvido - Antecipação */
            HISTORICO = HISTORICO||' DEVOLUCAO POR ANTECIPACAO DO CHEQUE DESFEITA';
        END
        IF((OLD.SITUACAO = 8 AND NEW.SITUACAO = 5) OR (OLD.SITUACAO = 7 AND NEW.SITUACAO = 2))THEN
        BEGIN
            /* Desfazer Cheque Reembolsado */
            HISTORICO = HISTORICO||' REEMBOLSO DO CHEQUE DESFEITO';
        END
    END

    IF(OLD.DATA_RECEBIMENTO <> NEW.DATA_RECEBIMENTO)THEN
    BEGIN
        HISTORICO = HISTORICO||' DT.EMISSAO:'||FORMATDATE(OLD.DATA_RECEBIMENTO)||'->'||FORMATDATE(NEW.DATA_RECEBIMENTO);
    END

    IF(OLD.ESTABELECIMENTO_ID <> NEW.ESTABELECIMENTO_ID)THEN
    BEGIN
        HISTORICO = HISTORICO||' ESTAB:'||OLD_ESTABELECIMENTO||'->'||NEW_ESTABELECIMENTO;
    END

    IF(OLD.BANCO_ID <> NEW.BANCO_ID)THEN
    BEGIN
        HISTORICO = HISTORICO||' BANCO:'||OLD_BANCO||'->'||NEW_BANCO;
    END

    IF(OLD.AGENCIA <> NEW.AGENCIA)THEN
    BEGIN
        HISTORICO = HISTORICO||' AGENCIA:'||OLD.AGENCIA||'->'||NEW.AGENCIA;
    END

    IF(OLD.CONTA <> NEW.CONTA)THEN
    BEGIN
        HISTORICO = HISTORICO||' CONTA:'||OLD.CONTA||'->'||NEW.CONTA;
    END

    IF(OLD.CONTA_DIGITO <> NEW.CONTA_DIGITO)THEN
    BEGIN
        HISTORICO = HISTORICO||' DV:'||OLD.CONTA_DIGITO||'->'||NEW.CONTA_DIGITO;
    END

    IF(OLD.NUMERO_CHEQUE <> NEW.NUMERO_CHEQUE)THEN
    BEGIN
        HISTORICO = HISTORICO||' N.CHEQUE:'||OLD.NUMERO_CHEQUE||'->'||NEW.NUMERO_CHEQUE;
    END

    IF(OLD.NOME_TITULAR <> NEW.NOME_TITULAR)THEN
    BEGIN
        HISTORICO = HISTORICO||' TITULAR:'||OLD.NOME_TITULAR||'->'||NEW.NOME_TITULAR;
    END

    IF(OLD.DATA_CHEQUE <> NEW.DATA_CHEQUE)THEN
    BEGIN
        HISTORICO = HISTORICO||' DT.VENCIMENTO:'||FORMATDATE(OLD.DATA_CHEQUE)||'->'||FORMATDATE(NEW.DATA_CHEQUE);
    END

    IF(OLD.VALOR <> NEW.VALOR)THEN
    BEGIN
        NEW.SALDO = NEW.VALOR;
        HISTORICO = HISTORICO||' VALOR:R$'||FN_FORMAT_NUMBER2(OLD.VALOR, 2)||'->R$'||FN_FORMAT_NUMBER2(NEW.VALOR, 2);
    END

    IF(OLD.CHEQUE_SEM_PARCELA <> NEW.CHEQUE_SEM_PARCELA)THEN
    BEGIN
        HISTORICO = HISTORICO||' SEM DOC.REF.:'||OLD.CHEQUE_SEM_PARCELA||'->'||NEW.CHEQUE_SEM_PARCELA;
    END

    IF(OLD.CAIXABANCO_ID <> NEW.CAIXABANCO_ID)THEN
    BEGIN
        HISTORICO = HISTORICO||' CAIXA/BANCO:'||OLD_CAIXABANCO||'->'||NEW_CAIXABANCO;
    END
    
    IF(OLD.DATAHORA_REEMBOLSO <> NEW.DATAHORA_REEMBOLSO)THEN
    BEGIN
        HISTORICO = HISTORICO||' DT.REEMBOLSO:'||FN_TIMESTAMP_TO_STRING(OLD.DATAHORA_REEMBOLSO)||'->'||FN_TIMESTAMP_TO_STRING(NEW.DATAHORA_REEMBOLSO);
    END
    
    IF(OLD.TIPO <> NEW.TIPO)THEN
    BEGIN
        HISTORICO = HISTORICO||' TIPO:'||OLD.TIPO||'->'||NEW.TIPO;
    END

    IF(OLD.EMPRESA_ID <> NEW.EMPRESA_ID)THEN
    BEGIN
        HISTORICO = HISTORICO||' EMPRESA:'||OLD_EMPRESA||'->'||NEW_EMPRESA;
    END

    IF(OLD.BANCO_PAGAMENTO <> NEW.BANCO_PAGAMENTO)THEN
    BEGIN
        HISTORICO = HISTORICO||' BANCO PAG:'||OLD_BANCO_PAGAMENTO||'->'||NEW_BANCO_PAGAMENTO;
    END

    IF (OLD.CLASSIFICACAO <> NEW.CLASSIFICACAO) THEN
    BEGIN
        HISTORICO = HISTORICO||' CLASSIFICACAO:'||OLD_CLASSIFICACAO||'->'||NEW_CLASSIFICACAO;
    END

    IF (OLD.CENTRO_DE_CUSTO <> NEW.CENTRO_DE_CUSTO) THEN
    BEGIN
        HISTORICO = HISTORICO||' C.CUSTO:'||OLD_CENTRO_DE_CUSTO||'->'||NEW_CENTRO_DE_CUSTO;
    END

    IF(OLD.OBSERVACAO <> NEW.OBSERVACAO)THEN
    BEGIN
        HISTORICO = HISTORICO||' OBSERVAÇÃO DO CHEQUE ALTERADA!';
    END

    IF(OLD.OBSERVACAO_DEVOLUCAO <> NEW.OBSERVACAO_DEVOLUCAO)THEN
    BEGIN
        HISTORICO = HISTORICO||' OBSERVAÇÃO PARA DEVOLUÇÃO DO CHEQUE ALTERADA!';
    END

    IF(OLD.OBSERVACAO_REEMBOLSO <> NEW.OBSERVACAO_REEMBOLSO)THEN
    BEGIN
        HISTORICO = HISTORICO||' OBSERVAÇÃO PARA REEMBOLSO DO CHEQUE ALTERADA!';
    END

    IF(OLD.SALDO <> NEW.SALDO)THEN
    BEGIN
        HISTORICO = HISTORICO||' SALDO:R$'||FN_FORMAT_NUMBER2(OLD.SALDO, 2)||'->R$'||FN_FORMAT_NUMBER2(NEW.SALDO, 2);
    END

    IF(HISTORICO <> '') THEN
    BEGIN
        HISTORICO = ' REGISTRO DO CHEQUE '||OLD.NUMERO_CHEQUE||' ALTERADO:'||HISTORICO;
        EXECUTE PROCEDURE SPI_HISTORICO('TBCHEQUE', OLD.ID, FN_ELIPSES(HISTORICO, 500));
    END
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbcheque_b05u for tbcheque
active before update position 0
AS
DECLARE VARIABLE SALDO NUMERIC(15,4);
BEGIN

    IF (OLD.CHEQUE_SEM_PARCELA > 0) THEN
    BEGIN

        IF (OLD.SITUACAO IN ('3', '1', '4') AND NEW.SITUACAO IN ('1', '4') AND OLD.SITUACAO <> NEW.SITUACAO) THEN
        BEGIN

            SALDO = OLD.SALDO - OLD.VALOR;
    
            IF (SALDO < 0) THEN
            BEGIN
                EXCEPTION "..." 'SALDO NÃO PODE SER NEGATIVO! CHEQUE NR.:'||FN_LPAD(OLD.NUMERO_CHEQUE, 6, '0')||' SALDO DISPONIVEL:R$'||REPLACE(CAST(OLD.SALDO AS NUMERIC(15,2)), '.', ',')||' SALDO A BAIXAR:R$'||REPLACE(CAST((SALDO * -1) AS NUMERIC(15,2)), '.', ',');
            END
    
            NEW.SALDO = SALDO;

        END

        IF (OLD.SITUACAO IN ('1', '4') AND NEW.SITUACAO = '3') THEN
        BEGIN

            SALDO = OLD.VALOR;

            NEW.SALDO = SALDO;

        END

    END

    IF (OLD.CHEQUE_SEM_PARCELA = 0) THEN
    BEGIN

        IF ( (OLD.AGENCIA <> NEW.AGENCIA) OR
             (OLD.CONTA <> NEW.CONTA) OR
             (OLD.CONTA_DIGITO <> NEW.CONTA_DIGITO) OR
             (OLD.NUMERO_CHEQUE <> NEW.NUMERO_CHEQUE) OR
             (OLD.NOME_TITULAR <> NEW.NOME_TITULAR) OR
             (OLD.DATA_CHEQUE <> NEW.DATA_CHEQUE) OR
             (OLD.BANCO_PAGAMENTO <> NEW.BANCO_PAGAMENTO) OR
             (OLD.CLASSIFICACAO <> NEW.CLASSIFICACAO) OR
             (OLD.CENTRO_DE_CUSTO <> NEW.CENTRO_DE_CUSTO) ) THEN
        BEGIN

        END ELSE
        BEGIN

            IF (OLD.SITUACAO IN ('0', '3') AND NEW.SITUACAO = '3' AND OLD.SITUACAO <> NEW.SITUACAO) THEN
            BEGIN
    
                SALDO = OLD.SALDO - OLD.VALOR;
        
                IF (SALDO < 0) THEN
                BEGIN
                    EXCEPTION "..." 'SALDO NÃO PODE SER NEGATIVO! CHEQUE NR.:'||FN_LPAD(OLD.NUMERO_CHEQUE, 6, '0')||' SALDO DISPONIVEL:R$'||REPLACE(CAST(OLD.SALDO AS NUMERIC(15,2)), '.', ',')||' SALDO A BAIXAR:R$'||REPLACE(CAST((SALDO * -1) AS NUMERIC(15,2)), '.', ',');
                END
        
                NEW.SALDO = SALDO;
    
            END
    
            IF (OLD.SITUACAO = '3' AND NEW.SITUACAO = '0') THEN
            BEGIN
    
                SALDO = OLD.VALOR;
    
                NEW.SALDO = SALDO;
    
            END

        END

    END

END
^

SET TERM ; ^

