CREATE OR ALTER TRIGGER TTBBANCO_BIUD998 FOR TBBANCO
ACTIVE BEFORE INSERT OR UPDATE OR DELETE POSITION 998
AS
BEGIN

    IF(INSERTING) THEN
    BEGIN
        EXECUTE PROCEDURE SPI_INTEGRACAO('TBBANCO', NEW.ID, 2);
    END ELSE
    BEGIN
        EXECUTE PROCEDURE SPI_INTEGRACAO('TBBANCO', OLD.ID, 2);
    END

END;

UPDATE TBBANCO T SET T.DESCRICAO = TRIM(T.DESCRICAO);

ALTER TABLE TBCHEQUE
    ADD CHEQUE_PDV_ID INTEGER DEFAULT 0,
    ADD PDV_ID INTEGER DEFAULT 0;


ALTER TABLE TBPDV_CFE_FORMA_PAGAMENTO
    ADD CHEQUE_ID INTEGER DEFAULT 0;
	
ALTER TABLE TBCHEQUE ALTER COLUMN SITUACAO
SET DEFAULT '0';	

CREATE OR ALTER procedure SP_CFE_FORMA_PAGAMENTO (
    PDV_CFE_ID integer,
    ACAO integer = 1)
as
declare variable VALOR_LIQUIDO numeric(15,2);
declare variable PDV_DEVOLUCAO_TROCA_ID integer;
declare variable PDV_MOVIMENTO_DETALHE_ID integer;
declare variable PDV_TIPO integer;
declare variable COLABORADOR_ID integer;
declare variable NATUREZA integer;
declare variable CHEQUE_ID integer;
declare variable OLD_SALDO_DEVOLUCAO numeric(15,2);
declare variable NEW_SALDO_DEVOLUCAO numeric(15,2);
declare variable OLD_SALDO_DEPOSITO numeric(15,2);
declare variable NEW_SALDO_DEPOSITO numeric(15,2);
declare variable OLD_SALDO_CHEQUE numeric(15,2);
declare variable NEW_SALDO_CHEQUE numeric(15,2);
BEGIN

    FOR SELECT
        CAST(ROUND(A.VALOR_LIQUIDO - A.TROCO, 2) AS NUMERIC(15,2)) AS VALOR_LIQUIDO,
        COALESCE(A.PDV_DEVOLUCAO_TROCA_ID, 0) AS PDV_DEVOLUCAO_TROCA_ID,
        COALESCE(A.PDV_MOVIMENTO_DETALHE_ID, 0) AS PDV_MOVIMENTO_DETALHE_ID,
        PF.PDV_TIPO,
        COALESCE(C.COLABORADOR_ID, 0) AS COLABORADOR_ID,
        COALESCE(C.NATUREZA, 1) AS NATUREZA,
        COALESCE(A.CHEQUE_ID, 0) AS CHEQUE_ID
    FROM TBPDV_CFE_FORMA_PAGAMENTO A
    INNER JOIN TBPDV_CFE C ON C.ID = A.PDV_CFE_ID
    INNER JOIN TBPAGAMENTO_FORMA PF ON PF.CODIGO = A.PAGAMENTO_FORMA_ID
    WHERE A.PDV_CFE_ID = :PDV_CFE_ID
    INTO :VALOR_LIQUIDO, :PDV_DEVOLUCAO_TROCA_ID, :PDV_MOVIMENTO_DETALHE_ID,
    :PDV_TIPO, :COLABORADOR_ID, :NATUREZA, :CHEQUE_ID
    DO BEGIN
        IF(:ACAO = 1) THEN /* DESFAZER BAIXA DE SALDO PARA DEVOLUÇÕES */
        BEGIN
            IF(:PDV_DEVOLUCAO_TROCA_ID > 0) THEN
            BEGIN
    
                UPDATE TBPDV_DEVOLUCAO_TROCA SET VALOR_SALDO = VALOR_SALDO + :VALOR_LIQUIDO
                        WHERE ID = :PDV_DEVOLUCAO_TROCA_ID;
    
            END ELSE IF(:PDV_MOVIMENTO_DETALHE_ID > 0) THEN
            BEGIN
                
                UPDATE TBPDV_MOVIMENTO_DETALHE SET VALOR_SALDO = VALOR_SALDO + :VALOR_LIQUIDO
                        WHERE ID = :PDV_MOVIMENTO_DETALHE_ID;
    
            END

            /* ELSE IF(:CHEQUE_ID > 0) THEN
            BEGIN
                
                UPDATE TBCHEQUE SET SALDO = SALDO + :VALOR_LIQUIDO
                        WHERE ID = :CHEQUE_ID;
    
            END*/


            /* IF(:PDV_TIPO = 6 AND :NATUREZA = 0) THEN
            BEGIN
                UPDATE TBCOLABORADOR_CREDITO SET SALDO = SALDO + :VALOR_LIQUIDO
                    WHERE COLABORADOR_ID = :COLABORADOR_ID;
            END*/

        END ELSE
        IF(:ACAO = 2) THEN /* REALIZAR BAIXA DE DEVOLUÇÕES */
        BEGIN
            
            IF(:PDV_DEVOLUCAO_TROCA_ID > 0) THEN
            BEGIN
                SELECT
                T.VALOR_SALDO
                FROM TBPDV_DEVOLUCAO_TROCA T
                WHERE T.ID = :PDV_DEVOLUCAO_TROCA_ID
                INTO :OLD_SALDO_DEVOLUCAO;
        
                IF(COALESCE(:OLD_SALDO_DEVOLUCAO, 0) > 0) THEN
                BEGIN
                    :NEW_SALDO_DEVOLUCAO = ROUND(:OLD_SALDO_DEVOLUCAO - :VALOR_LIQUIDO, 2);
        
                    IF(:NEW_SALDO_DEVOLUCAO >= 0) THEN
                    BEGIN
                        UPDATE TBPDV_DEVOLUCAO_TROCA SET VALOR_SALDO = :NEW_SALDO_DEVOLUCAO
                            WHERE ID = :PDV_DEVOLUCAO_TROCA_ID;

                    END
                END

            END ELSE
            IF(:PDV_MOVIMENTO_DETALHE_ID > 0) THEN
            BEGIN
                SELECT
                    T.VALOR_SALDO
                    FROM TBPDV_MOVIMENTO_DETALHE T
                    WHERE T.ID = :PDV_MOVIMENTO_DETALHE_ID
                    INTO :OLD_SALDO_DEPOSITO;
            
                    IF(COALESCE(:OLD_SALDO_DEPOSITO, 0) > 0) THEN
                    BEGIN
                        :NEW_SALDO_DEPOSITO = ROUND(:OLD_SALDO_DEPOSITO - :VALOR_LIQUIDO, 2);
            
                        IF(:NEW_SALDO_DEPOSITO >= 0) THEN
                        BEGIN
            
                            UPDATE TBPDV_MOVIMENTO_DETALHE SET VALOR_SALDO = :NEW_SALDO_DEPOSITO
                                WHERE ID = :PDV_MOVIMENTO_DETALHE_ID;
            
            
                        END
                    END

              END

              /* ELSE
              IF(:CHEQUE_ID > 0) THEN
              BEGIN

                SELECT
                    T.SALDO
                FROM TBCHEQUE T
                WHERE T.ID = :CHEQUE_ID
                INTO :OLD_SALDO_CHEQUE;

                IF(COALESCE(:OLD_SALDO_CHEQUE, 0) > 0) THEN
                BEGIN
                    :NEW_SALDO_CHEQUE = ROUND(:OLD_SALDO_CHEQUE - :VALOR_LIQUIDO, 2);
        
                    IF(:NEW_SALDO_CHEQUE >= 0) THEN
                    BEGIN
        
                        UPDATE TBCHEQUE SET SALDO = :NEW_SALDO_CHEQUE
                            WHERE ID = :CHEQUE_ID;

                    END
                END


              END */


              IF(:PDV_TIPO = 6 AND :NATUREZA = 0) THEN
              BEGIN
                UPDATE TBCOLABORADOR_CREDITO SET SALDO = SALDO - :VALOR_LIQUIDO
                    WHERE COLABORADOR_ID = :COLABORADOR_ID;

              END
        END



    END


END;


ALTER TABLE TBPDV
    ADD CAIXABANCO_ID_CHEQUE INTEGER DEFAULT 0,
    ADD CLASSIFICACAO_FINAN_CHEQUE VARCHAR(10),
    ADD CCUSTO_CHEQUE VARCHAR(10);

COMMENT ON COLUMN TBPDV.CAIXABANCO_ID_CHEQUE IS
'CAIXA DO CHEQUE';

COMMENT ON COLUMN TBPDV.CLASSIFICACAO_FINAN_CHEQUE IS
'CLASSIFICACAO FINANCEIRA DO CHEQUE';

COMMENT ON COLUMN TBPDV.CCUSTO_CHEQUE IS
'CENTRO DE CUSTO DO CHEQUE';


CREATE OR ALTER procedure SPUI_CHEQUE (
    DATA_EMISSAO date,
    BANCO_ID integer,
    AGENCIA varchar(15),
    CONTA varchar(15),
    NUMERO_CHEQUE varchar(15),
    EMPRESA_ID integer,
    NOME_TITULAR varchar(100),
    DATA_CHEQUE date,
    VALOR decimal(15,4),
    OBSERVACAO varchar(200),
    CHEQUE_PDV_ID integer,
    PDV_ID integer)
returns (
    ID integer)
as
declare variable ESTABELECIMENTO_ID integer;
declare variable CAIXABANCO_ID_CHEQUE integer;
declare variable CLASSIFICACAO_FINAN_CHEQUE varchar(10);
declare variable CCUSTO_CHEQUE varchar(10);
BEGIN

    SELECT FIRST 1
        T.ESTABELECIMENTO_ID,
        T.CAIXABANCO_ID_CHEQUE,
        T.CLASSIFICACAO_FINAN_CHEQUE,
        T.CCUSTO_CHEQUE
    FROM TBPDV T
    WHERE T.ID = :PDV_ID
    INTO :ESTABELECIMENTO_ID, :CAIXABANCO_ID_CHEQUE, :CLASSIFICACAO_FINAN_CHEQUE, :CCUSTO_CHEQUE;
    

    UPDATE OR INSERT INTO TBCHEQUE (ESTABELECIMENTO_ID, DATA_RECEBIMENTO, BANCO_ID, AGENCIA, CONTA,
                                    NUMERO_CHEQUE, NOME_TITULAR, DATA_CHEQUE, VALOR, OBSERVACAO,
                                    CHEQUE_SEM_PARCELA, CAIXABANCO_ID, TIPO, EMPRESA_ID, CLASSIFICACAO, CENTRO_DE_CUSTO,
                                    CHEQUE_PDV_ID, PDV_ID)
    VALUES (:ESTABELECIMENTO_ID, :DATA_EMISSAO, :BANCO_ID, :AGENCIA, :CONTA,
            :NUMERO_CHEQUE, :NOME_TITULAR, :DATA_CHEQUE, :VALOR, :OBSERVACAO, '0', :CAIXABANCO_ID_CHEQUE,
            'D', :EMPRESA_ID, :CLASSIFICACAO_FINAN_CHEQUE, :CCUSTO_CHEQUE, :CHEQUE_PDV_ID, :PDV_ID)
    MATCHING (ESTABELECIMENTO_ID, CHEQUE_PDV_ID, PDV_ID)
    RETURNING ID INTO :ID;

  SUSPEND;

END;


CREATE OR ALTER PROCEDURE SP_CFE_PARCELAMENTO (
    PDV_CFE_ID INTEGER,
    ESTABELECIMENTO_ID INTEGER,
    REPRESENTANTE_ID INTEGER,
    REPRESENTANTE_COMISSAO NUMERIC(15,2),
    VENDEDOR_ID INTEGER,
    VENDEDOR_COMISSAO NUMERIC(15,2),
    CLIENTE_ID INTEGER,
    CAIXA_ID INTEGER,
    NUMERO_CFE INTEGER,
    SERIE_CFE VARCHAR(3),
    DATA_EMISSAO DATE,
    ACAO INTEGER)
AS
DECLARE VARIABLE PARCELAMENTO_ID INTEGER;
DECLARE VARIABLE ID INTEGER;
DECLARE VARIABLE PAGAMENTO_FORMA_ID INTEGER;
DECLARE VARIABLE VALOR_TEMP NUMERIC(15,2);
DECLARE VARIABLE VALOR_SALDO NUMERIC(15,2);
DECLARE VARIABLE VALOR_TOTAL NUMERIC(15,2);
DECLARE VARIABLE TROCO NUMERIC(15,2);
DECLARE VARIABLE VALOR_LIQUIDO NUMERIC(15,2);
DECLARE VARIABLE VALOR_REAL NUMERIC(15,2);
DECLARE VARIABLE PARCELA_X INTEGER;
DECLARE VARIABLE PARCELAS INTEGER;
DECLARE VARIABLE ID_PAGAMENTO INTEGER;
DECLARE VARIABLE TIPO_PAG CHAR(2);
DECLARE VARIABLE CONTA_RECEBER_BANCO INTEGER;
DECLARE VARIABLE CONTA_RECEBER_MODALIDADE INTEGER;
DECLARE VARIABLE CONTA_RECEBER_POSICAO INTEGER;
DECLARE VARIABLE CONTA_RECEBER_COBRANCA INTEGER;
DECLARE VARIABLE CONTA_RECEBER_OPERACAO INTEGER;
DECLARE VARIABLE NATUREZA CHAR(1);
DECLARE VARIABLE OBSERVACAO VARCHAR(100);
DECLARE VARIABLE FORMA_COMISSAO CHAR(1);
DECLARE VARIABLE COUNT_PARCELA INTEGER;
DECLARE VARIABLE SEQUENCIA INTEGER;
DECLARE VARIABLE CODIGO_AUTORIZACAO VARCHAR(50);
DECLARE VARIABLE NSU VARCHAR(50);
DECLARE VARIABLE PERMITE_GERAR_BAIXA VARCHAR(1);
DECLARE VARIABLE CAIXABANCO_CONTROLE INTEGER;
DECLARE VARIABLE CONTA_RECEBER_BAIXA_ID INTEGER;
DECLARE VARIABLE CAIXABANCO_CONTA VARCHAR(12);
DECLARE VARIABLE CAIXABANCO_LANC_INCLUIDO INTEGER;
DECLARE VARIABLE CONTA_RECEBER_BAIXA_CC VARCHAR(10);
DECLARE VARIABLE CAIXABANCO_ID INTEGER;
DECLARE VARIABLE CONTA_RECEBER_BAIXA_CLASS VARCHAR(10);
DECLARE VARIABLE CONTA_RECEBER_BAIXA_HIST VARCHAR(100);
DECLARE VARIABLE CONTA_RECEBER_BAIXA_TP_CONTA VARCHAR(11);
DECLARE VARIABLE CONTA_RECEBER_BAIXA_CONTA VARCHAR(11);
DECLARE VARIABLE CONTA_CONTABIL_EMPRESA1 VARCHAR(11);
DECLARE VARIABLE CONTA_CONTABIL_EMPRESA2 VARCHAR(11);
DECLARE VARIABLE CONTA_RECEBER_REG_CONTROLE INTEGER;
DECLARE VARIABLE CONTABILIZACAO_BANCO_ID INTEGER;
DECLARE VARIABLE CONTABILIZACAO_MESTRE_ID INTEGER;
DECLARE VARIABLE CONTABILIZACAO_REG_ID INTEGER;
DECLARE VARIABLE DATA_CREDITO DATE;
DECLARE VARIABLE PDV_TIPO INTEGER;
DECLARE VARIABLE QTD_PARCELAS INTEGER;
DECLARE VARIABLE DIA_CREDITO INTEGER;
DECLARE VARIABLE PARCELAS_SEM_SALDO INTEGER;
DECLARE VARIABLE OBSERVACAO_BRINDE VARCHAR(100);
DECLARE VARIABLE CHEQUE_ID INTEGER;
DECLARE VARIABLE CHEQUE_ITEM_ID INTEGER;
BEGIN

    /* REGISTRAR PARCELAS NO CAIXA BANCO */
    IF(:ACAO = 1) THEN
    BEGIN
        :COUNT_PARCELA = 1;

        IF(COALESCE(:CLIENTE_ID, 0) = 0) THEN :CLIENTE_ID = FN_PARAMETRO('SISTEMA.CLIENTE_QUIOSQUE');

        SELECT T.FORMA_COMISSAO FROM TBREPRESENTANTE T WHERE T.CODIGO = :REPRESENTANTE_ID INTO :FORMA_COMISSAO;

        FOR SELECT
                T.ID,
                T.PAGAMENTO_FORMA_ID,
                T.VALOR,
                T.TROCO,
                T.VALOR_LIQUIDO,
                T.PARCELAS,
                T.PAGAMENTO_ID AS ID_PAGAMENTO,
                PF.NFE_TIPPAG AS TIPO_PAG,
                PF.BANCO_ID,
                PF.MODALIDADE_ID,
                PF.POSICAO_ID,
                PF.COBRANCA_ID,
                PF.OPERACAO_ID,
                OP.TIPO,
                T.CODIGO_AUTORIZACAO,
                T.NSU,
                COALESCE(PF.REGISTRAR_RECEBIMENTO_NFS, 0) AS PERMITE_GERAR_BAIXA,
                COALESCE((SELECT FIRST 1 C.CODIGO FROM TBCONTA_RECEBER_OPERACAO C WHERE C.CODIGO = PF.CONTA_RECEBER_BAIXA_ID
                          AND CHAR_LENGTH(TRIM(COALESCE(C.CLASSIFICACAO_FINANCEIRA,''))) > 3), 0) AS CONTA_RECEBER_BAIXA_ID,
                COALESCE(PF.PDV_TIPO, 0) AS PDV_TIPO,
                COALESCE(PF.QTD_PARCELAS, 1) AS QTD_PARCELAS,
                COALESCE(PF.DIA_CREDITO, 1) AS DIA_CREDITO,
                COALESCE(PF.PARCELAS_SEM_SALDO, 0) AS PARCELAS_SEM_SALDO,
                COALESCE(C.OBSERVACAO_BRINDE, '') AS OBSERVACAO_BRINDE,
                COALESCE(T.CHEQUE_ID, 0) AS CHEQUE_ID
            FROM TBPDV_CFE_FORMA_PAGAMENTO T
            INNER JOIN TBPDV_CFE C ON C.ID = T.PDV_CFE_ID
            INNER JOIN TBPAGAMENTO_FORMA PF ON PF.CODIGO = T.PAGAMENTO_FORMA_ID
            INNER JOIN TBCONTA_RECEBER_OPERACAO OP ON OP.CODIGO = PF.OPERACAO_ID
            WHERE T.PDV_CFE_ID = :PDV_CFE_ID
            INTO
            :ID, :PAGAMENTO_FORMA_ID, :VALOR_TOTAL,
            :TROCO, :VALOR_LIQUIDO, :PARCELAS,
            :ID_PAGAMENTO, :TIPO_PAG, :CONTA_RECEBER_BANCO,
            :CONTA_RECEBER_MODALIDADE, :CONTA_RECEBER_POSICAO, :CONTA_RECEBER_COBRANCA,
            :CONTA_RECEBER_OPERACAO, :NATUREZA, :CODIGO_AUTORIZACAO, :NSU, :PERMITE_GERAR_BAIXA, :CONTA_RECEBER_BAIXA_ID,
            :PDV_TIPO, :QTD_PARCELAS, :DIA_CREDITO, :PARCELAS_SEM_SALDO, :OBSERVACAO_BRINDE, :CHEQUE_ID
            DO BEGIN

                   :PARCELA_X = 1;

                   :VALOR_REAL = ROUND(:VALOR_LIQUIDO - :TROCO, 2);

                   :VALOR_TEMP = ROUND(:VALOR_REAL / :PARCELAS, 2);
    
                   :SEQUENCIA = 1;

                   WHILE (:PARCELA_X <= :PARCELAS) DO
                    BEGIN

                        IF(:PARCELA_X = :PARCELAS) THEN
                        BEGIN
                            :VALOR_TEMP = :VALOR_REAL - (:VALOR_TEMP * (:PARCELAS - 1));
                        END
            
                        IF(:PARCELAS = 1) THEN
                        BEGIN
                            :VALOR_TEMP = :VALOR_REAL;
                        END
    
                        :PARCELAMENTO_ID = GEN_ID(GTBNFS_PARCELAMENTO, 1);

                        :OBSERVACAO = 'CUPOM: ' || :NUMERO_CFE ||'-'|| LPAD(:SERIE_CFE,2,'0')||' CAIXA:'|| :CAIXA_ID;

                        IF(:PDV_TIPO = 7 AND :OBSERVACAO_BRINDE <> '') THEN
                        BEGIN
                            :OBSERVACAO = :OBSERVACAO_BRINDE;
                        END


    
                        /* INSERT REGISTRO TBNFS_PARCELAMENTO */
                        IF(:PDV_TIPO = 6) THEN
                        BEGIN
                            :DATA_CREDITO = CAST(:DIA_CREDITO||'.'||EXTRACT(MONTH FROM :DATA_EMISSAO)||'.'||EXTRACT(YEAR FROM :DATA_EMISSAO) AS DATE);

                            :DATA_CREDITO = DATEADD(MONTH, :PARCELA_X, :DATA_CREDITO);

                        END ELSE
                        BEGIN
                            :DATA_CREDITO = :DATA_EMISSAO;

                            IF(:PARCELAS > 1) THEN
                            BEGIN
                                :DATA_CREDITO = DATEADD(MONTH, :PARCELA_X, :DATA_CREDITO);
                            END
                        END


                        :VALOR_SALDO = :VALOR_TEMP;
                        IF(:PARCELAS_SEM_SALDO = 1) THEN
                        BEGIN
                            :VALOR_SALDO = 0;
                        END

                        INSERT INTO TBNFS_PARCELAMENTO (CAIXA_ID, NFS_CONTROLE, PARCELA, VALOR, DATA_VENCIMENTO,
                            DATA_FLUXO, CONTA_RECEBER_OPERACAO, CONTA_RECEBER_BANCO, CONTA_RECEBER_MODALIDADE,
                            CONTA_RECEBER_POSICAO, CONTA_RECEBER_COBRANCA, ACEITE, ESTABELECIMENTO_CODIGO,
                            NUMERO_NOTAFISCAL, DATA_EMISSAO, EMPRESA_CODIGO, SITUACAO, CONTROLE, VALOR_DESCONTO,
                            VALOR_SALDO, REMESSA_ARQUIVO, REMESSA_DATA, REMESSA_NUMERO_BANCO, VIA_DUPLICATA, SERIE,
                            PAGAMENTO_FORMA, AVULSO, CLASSIFICACAO_CONTABIL, CCUSTO, CLASSIFICACAO, OBSERVACAO, FLAG,
                            SALESFORCE, NOTIFICADO_VENCIMENTO, REPRESENTANTE_COMISSAO, REPRESENTANTE_ID, VENDEDOR_ID,
                            VENDEDOR_COMISSAO, FORMA_COMISSAO, DATAHORA,TIPO, PDV_CFE_FORMA_PAGAMENTO_ID, SEQUENCIA, CODIGO_AUTORIZACAO, NSU)
                        VALUES (:CAIXA_ID, 0, :COUNT_PARCELA, :VALOR_TEMP, :DATA_CREDITO, NULL,
                            :CONTA_RECEBER_OPERACAO, :CONTA_RECEBER_BANCO, :CONTA_RECEBER_MODALIDADE, :CONTA_RECEBER_POSICAO,
                            :CONTA_RECEBER_COBRANCA, 'S', :ESTABELECIMENTO_ID, :NUMERO_CFE, :DATA_EMISSAO, :CLIENTE_ID,
                            1, :PARCELAMENTO_ID, 0, :VALOR_SALDO, NULL, NULL, '', NULL, :SERIE_CFE, :PAGAMENTO_FORMA_ID,
                            '0', '', '', '', :OBSERVACAO, 0, '0', 0, :REPRESENTANTE_COMISSAO, :REPRESENTANTE_ID, :VENDEDOR_ID, :VENDEDOR_COMISSAO, :FORMA_COMISSAO, CURRENT_TIMESTAMP, 2, :ID, :SEQUENCIA, :CODIGO_AUTORIZACAO, :NSU);

                        /* INSERT REGISTRO CAIXABANCO */

                        INSERT INTO TBCAIXABANCO_LANCAMENTO_REG (CONTROLE, ESTABELECIMENTO_CODIGO, CAIXABANCO_CONTROLE,
                            DATA, EMPRESA_CODIGO, NFE_PARCELAMENTO_CONTROLE, NFS_PARCELAMENTO_CONTROLE, CAIXABANCO_CODIGO,
                            OPERACAO_CODIGO, DOCUMENTO_NUMERO, PARCELA, VALOR, VALOR_DESCONTO, VALOR_JUROS, VALOR_MULTA,
                            VALOR_DESPESA_DIVERSA, VALOR_DESPESA_COBRANCA, VALOR_DESPESA_CARTORIO, REGISTRO_MESTRE,
                            OCORRENCIA_CONTROLE, VALOR_SALDO, DATA_REGISTRO, TIPO, SERIE, CODORIGEM, CONTA_DEBITO,
                            CONTA_CREDITO, NFE_CONTROLE, NFS_CONTROLE, VALOR_TOTAL, ARQUIVO, CCUSTO, LANCAMENTO_CLASS_ID)
                        VALUES (GEN_ID(GTBCAIXABANCO_REGISTRO, 1), :ESTABELECIMENTO_ID, 0, :DATA_EMISSAO,
                            :CLIENTE_ID, 0, :PARCELAMENTO_ID, :CONTA_RECEBER_BANCO,
                            :CONTA_RECEBER_OPERACAO, :NUMERO_CFE, :COUNT_PARCELA, :VALOR_TEMP, 0, 0, 0, 0, 0, 0,
                            '1', NULL, :VALOR_SALDO, CURRENT_TIMESTAMP, :NATUREZA, :SERIE_CFE,
                            'CF1', '', '', 0, 0, :VALOR_TEMP, NULL, '', 0);

                        IF(:CHEQUE_ID > 0) THEN
                        BEGIN
                            :CHEQUE_ITEM_ID = GEN_ID(GTBCHEQUE_ITEM, 1);

                            INSERT INTO TBCHEQUE_ITEM (ID, CHEQUE_ID, EMPRESA_ID, TIPO_DOCUMENTO, DOCUMENTO_ID, VALOR)
                            VALUES (:CHEQUE_ITEM_ID, :CHEQUE_ID, :CLIENTE_ID, '2', :PARCELAMENTO_ID, :VALOR_TEMP);

                        END
    
                        IF(:PERMITE_GERAR_BAIXA = '1' AND :CONTA_RECEBER_BAIXA_ID > 0) THEN
                        BEGIN
                            CAIXABANCO_LANC_INCLUIDO = 0;

                            FOR
                            SELECT
                              FIRST 1
                                 A.CODIGO AS CAIXABANCO_ID,
                                 A.CONTA_CONTABIL,

                                 COALESCE((SELECT FIRST 1 B.CONTROLE FROM TBCAIXABANCO_LANCAMENTO B WHERE B.BAIXA_CUPOM = '1'
                                           AND B.DATA_LANCAMENTO = :DATA_EMISSAO AND B.CAIXABANCO_CODIGO = A.CODIGO),0) AS CAIXABANCO_CONTROLE,

                                 COALESCE((SELECT FIRST 1 B.MOVCONTMESTRE_ID FROM TBCAIXABANCO_LANCAMENTO B WHERE B.BAIXA_CUPOM = '1'
                                           AND B.DATA_LANCAMENTO = :DATA_EMISSAO AND B.CAIXABANCO_CODIGO = A.CODIGO),0) AS CONTABILIZACAO_MESTRE_ID,

                                 COALESCE((SELECT FIRST 1 B.MOVCONTABIL_ID FROM TBCAIXABANCO_LANCAMENTO B WHERE B.BAIXA_CUPOM = '1'
                                           AND B.DATA_LANCAMENTO = :DATA_EMISSAO AND B.CAIXABANCO_CODIGO = A.CODIGO),0) AS CONTABILIZACAO_BANCO_ID,

                                 COALESCE((SELECT FIRST 1 DD.CODIGO FROM TBCONTA_RECEBER_OPERACAO C, TBCENTRO_DE_CUSTO DD
                                               WHERE C.CODIGO = :CONTA_RECEBER_BAIXA_ID AND DD.CODIGO = C.CCUSTO
                                               AND CHAR_LENGTH(TRIM(COALESCE(C.CLASSIFICACAO_FINANCEIRA,''))) > 3), '') AS CONTA_RECEBER_BAIXA_CC,
                                 COALESCE((SELECT FIRST 1 DE.CODIGO FROM TBCONTA_RECEBER_OPERACAO C, TBCLASSIFICACAO_CONTABIL DE
                                               WHERE C.CODIGO = :CONTA_RECEBER_BAIXA_ID AND DE.CODIGO = C.CLASSIFICACAO_FINANCEIRA
                                               AND CHAR_LENGTH(TRIM(COALESCE(C.CLASSIFICACAO_FINANCEIRA,''))) > 3), '') AS CONTA_RECEBER_BAIXA_CLASS,
                                 COALESCE((SELECT FIRST 1 C.HISTORICO_CONTABIL FROM TBCONTA_RECEBER_OPERACAO C, TBCLASSIFICACAO_CONTABIL DE
                                               WHERE C.CODIGO = :CONTA_RECEBER_BAIXA_ID AND DE.CODIGO = C.CLASSIFICACAO_FINANCEIRA
                                               AND CHAR_LENGTH(TRIM(COALESCE(C.CLASSIFICACAO_FINANCEIRA,''))) > 3), '') AS CONTA_RECEBER_BAIXA_HIST,
                                 COALESCE((SELECT FIRST 1 C.TIPO_CREDITO FROM TBCONTA_RECEBER_OPERACAO C, TBCLASSIFICACAO_CONTABIL DE
                                               WHERE C.CODIGO = :CONTA_RECEBER_BAIXA_ID AND DE.CODIGO = C.CLASSIFICACAO_FINANCEIRA
                                               AND CHAR_LENGTH(TRIM(COALESCE(C.CLASSIFICACAO_FINANCEIRA,''))) > 3), '') AS CONTA_RECEBER_BAIXA_TP_CONTA,
                                 COALESCE((SELECT FIRST 1 C.CONTA_CREDITO FROM TBCONTA_RECEBER_OPERACAO C, TBCLASSIFICACAO_CONTABIL DE
                                               WHERE C.CODIGO = :CONTA_RECEBER_BAIXA_ID AND DE.CODIGO = C.CLASSIFICACAO_FINANCEIRA
                                               AND CHAR_LENGTH(TRIM(COALESCE(C.CLASSIFICACAO_FINANCEIRA,''))) > 3), '') AS CONTA_RECEBER_BAIXA_CONTA,

                                 COALESCE((SELECT FIRST 1 N.CONTA_CONTABIL FROM TBEMPRESA N WHERE N.CODIGO = :CLIENTE_ID),'') AS CONTA_CONTABIL_EMPRESA1,
                                 COALESCE((SELECT FIRST 1 N.CONTA_CONTABIL2 FROM TBEMPRESA N WHERE N.CODIGO = :CLIENTE_ID),'') AS CONTA_CONTABIL_EMPRESA2

    

                             FROM TBCAIXABANCO A
                             WHERE A.CODIGO = (SELECT FIRST 1 X.CAIXABANCO_ID FROM TBPDV_CAIXA X WHERE X.ID = :CAIXA_ID)
                             INTO CAIXABANCO_ID, CAIXABANCO_CONTA, CAIXABANCO_CONTROLE, CONTABILIZACAO_MESTRE_ID, CONTABILIZACAO_BANCO_ID, CONTA_RECEBER_BAIXA_CC,
                                  CONTA_RECEBER_BAIXA_CLASS, CONTA_RECEBER_BAIXA_HIST, CONTA_RECEBER_BAIXA_TP_CONTA, CONTA_RECEBER_BAIXA_CONTA, CONTA_CONTABIL_EMPRESA1,
                                  CONTA_CONTABIL_EMPRESA2 DO
                                  BEGIN
                                     IF(:CAIXABANCO_ID IS NOT NULL AND :CONTA_RECEBER_BAIXA_CLASS <> '')THEN
                                     BEGIN
                                         IF(:CONTA_RECEBER_BAIXA_CONTA = '0' AND :CONTA_RECEBER_BAIXA_TP_CONTA = 'A')THEN
                                         BEGIN
                                            IF(CHAR_LENGTH(TRIM(:CONTA_CONTABIL_EMPRESA1)) > 3)THEN
                                            BEGIN
                                              :CONTA_RECEBER_BAIXA_CONTA = :CONTA_CONTABIL_EMPRESA1;
                                            END
                                         END
                                         IF(:CONTA_RECEBER_BAIXA_CONTA = '0' AND :CONTA_RECEBER_BAIXA_TP_CONTA = 'P')THEN
                                         BEGIN
                                            IF(CHAR_LENGTH(TRIM(:CONTA_CONTABIL_EMPRESA2)) > 3)THEN
                                            BEGIN
                                              :CONTA_RECEBER_BAIXA_CONTA = :CONTA_CONTABIL_EMPRESA2;
                                            END
                                         END

                                         IF(:CAIXABANCO_CONTROLE = 0)THEN
                                         BEGIN
                                            /* GERAR LANÇAMENTO DE BAIXA GERADO NO CAIXA/BANCO SE NAO EXISTIR*/
                                             :CAIXABANCO_LANC_INCLUIDO = 1;
                                             :CAIXABANCO_CONTROLE = GEN_ID(GTBCAIXABANCO_LANCAMENTO,1);
                                             
                                             IF(FN_PARAMETRO('SISTEMA.INTEGRACAO_CONTABIL') = '1' AND :CONTABILIZACAO_MESTRE_ID = 0
                                                AND CHAR_LENGTH(TRIM(:CAIXABANCO_CONTA)) > 3 AND CHAR_LENGTH(TRIM(:CONTA_RECEBER_BAIXA_CONTA)) > 3)THEN
                                                BEGIN
                                                    CONTABILIZACAO_MESTRE_ID = GEN_ID(GTBMOVCONTMESTRE,1);
                                                    CONTABILIZACAO_BANCO_ID  = GEN_ID(TBMOVCONT_ID_GEN,1);
    
                                                    INSERT INTO TBMOVCONTMESTRE(ID, CODESTABELECIMENTO, DATA)
                                                         VALUES (:CONTABILIZACAO_MESTRE_ID, :ESTABELECIMENTO_ID, :DATA_EMISSAO);
    
                                                    INSERT INTO TBMOVCONTABIL(ID, CODESTABELECIMENTO, IDCONTMOV, NATUREZA, CONTA,
                                                            DATA, IDDOCUMENTO, DESCRICAO, CODORIGEM, VALOR,    IDHISTORICO, HISTORICO)
                                                        VALUES (:CONTABILIZACAO_BANCO_ID, :ESTABELECIMENTO_ID, :CONTABILIZACAO_MESTRE_ID, 'D', :CAIXABANCO_CONTA, :DATA_EMISSAO,
                                                            :CAIXABANCO_CONTROLE, FN_LPAD(:NUMERO_CFE,7,0), 'RDP', :VALOR_TEMP, 0, ' VENDAS CF-E CAIXA:'|| :CAIXA_ID);
                                                END
                
                                                INSERT INTO TBCAIXABANCO_LANCAMENTO (ESTABELECIMENTO_CODIGO, CAIXABANCO_CODIGO, DATA_LANCAMENTO,
                                                    NUMERO_CHEQUE, CONTA_CONTABIL, HISTORICO, VALOR_TOTAL, OBSERVACAO, CONTROLE, TIPO, NATUREZA,
                                                    USUARIO_CODIGO, DATA, MOVCONTABIL_ID, MOVCONTMESTRE_ID, DATA_COMPETENCIA,BAIXA_CUPOM)
                                                   VALUES (:ESTABELECIMENTO_ID, :CAIXABANCO_ID, :DATA_EMISSAO, :NUMERO_CFE, :CAIXABANCO_CONTA,
                                                    ' VENDAS CF-E CAIXA:'|| :CAIXA_ID, :VALOR_TEMP, '', :CAIXABANCO_CONTROLE, 'R', 'D', FN_CURRENT_USER_ID(),
                                                    CURRENT_DATE, :CONTABILIZACAO_BANCO_ID, :CONTABILIZACAO_MESTRE_ID, :DATA_EMISSAO, '1');
                                         END
    
                                        /* GERAR REGISTRO DE BAIXA E SUA CLASSIFICACAO NO LANCAMENTO DO CAIXA/BANCO */
                                         CONTA_RECEBER_REG_CONTROLE = GEN_ID(GTBCAIXABANCO_REGISTRO, 1);
                                         CONTABILIZACAO_REG_ID      = 0;

                                         IF(FN_PARAMETRO('SISTEMA.INTEGRACAO_CONTABIL') = '1' AND :CONTABILIZACAO_MESTRE_ID > 0
                                            AND CHAR_LENGTH(TRIM(:CAIXABANCO_CONTA)) > 3 AND CHAR_LENGTH(TRIM(:CONTA_RECEBER_BAIXA_CONTA)) > 3)THEN
                                            BEGIN
                                               CONTABILIZACAO_REG_ID = GEN_ID(TBMOVCONT_ID_GEN,1);

                                               INSERT INTO TBMOVCONTABIL(ID, CODESTABELECIMENTO, IDCONTMOV, NATUREZA, CONTA,
                                                    DATA, IDDOCUMENTO, DESCRICAO, CODORIGEM, VALOR, IDHISTORICO, HISTORICO)
                                                VALUES (:CONTABILIZACAO_REG_ID, :ESTABELECIMENTO_ID, :CONTABILIZACAO_MESTRE_ID,
                                                    'C', :CONTA_RECEBER_BAIXA_CONTA, :DATA_EMISSAO, :CAIXABANCO_CONTROLE,
                                                    FN_LPAD(:NUMERO_CFE,7,0), 'RDP', :VALOR_TEMP, 0,
                                                    :CONTA_RECEBER_BAIXA_HIST||' CF. '||FN_LPAD(:NUMERO_CFE,6,0));
                                            END

                                             INSERT INTO TBCAIXABANCO_LANCAMENTO_REG (CONTROLE, ESTABELECIMENTO_CODIGO, CAIXABANCO_CONTROLE,
                                                    DATA, EMPRESA_CODIGO, NFE_PARCELAMENTO_CONTROLE, NFS_PARCELAMENTO_CONTROLE, CAIXABANCO_CODIGO,
                                                    OPERACAO_CODIGO, DOCUMENTO_NUMERO, PARCELA, VALOR, VALOR_DESCONTO, VALOR_JUROS, VALOR_MULTA,
                                                    VALOR_DESPESA_DIVERSA, VALOR_DESPESA_COBRANCA, VALOR_DESPESA_CARTORIO, REGISTRO_MESTRE,
                                                    OCORRENCIA_CONTROLE, VALOR_SALDO, DATA_REGISTRO, TIPO, SERIE, CODORIGEM, CONTA_DEBITO,
                                                    CONTA_CREDITO, NFE_CONTROLE, NFS_CONTROLE, VALOR_TOTAL, ARQUIVO, CCUSTO, LANCAMENTO_CLASS_ID,
                                                    HISTORICO, MOVCONTABIL_ID, MOVCONTMESTRE_ID)
                                                 VALUES (:CONTA_RECEBER_REG_CONTROLE, :ESTABELECIMENTO_ID, :CAIXABANCO_CONTROLE, :DATA_EMISSAO,
                                                    :CLIENTE_ID, 0, :PARCELAMENTO_ID, :CONTA_RECEBER_BANCO, :CONTA_RECEBER_BAIXA_ID, :NUMERO_CFE,
                                                    :COUNT_PARCELA, :VALOR_TEMP, 0, 0, 0, 0, 0, 0, '1', NULL, :VALOR_TEMP, CURRENT_TIMESTAMP, 'C',
                                                    :SERIE_CFE, 'RDP', :CAIXABANCO_CONTA, :CONTA_RECEBER_BAIXA_CONTA, 0, 0, :VALOR_TEMP, NULL, '', 0,
                                                    :CONTA_RECEBER_BAIXA_HIST||' CF. '||FN_LPAD(:NUMERO_CFE,6,0), :CONTABILIZACAO_REG_ID, :CONTABILIZACAO_MESTRE_ID);
        
                                             INSERT INTO TBCAIXABANCO_LANCAMENTO_CLASS (ESTABELECIMENTO_CODIGO, CONTROLE, CAIXABANCO_CONTROLE,
                                                    CONTA_PAGAR_CONTROLE, CONTA_RECEBER_CONTROLE, CLASSIFICACAO_CONTABIL, CCUSTO,
                                                    HISTORICO_CONTABIL, CONTA_CONTABIL, TIPO, DATA, VALOR)
                                                VALUES (:ESTABELECIMENTO_ID, GEN_ID(GTBCAIXABANCO_LANCAMENTO, 1), :CAIXABANCO_CONTROLE, 0,
                                                    :CONTA_RECEBER_REG_CONTROLE, :CONTA_RECEBER_BAIXA_CLASS, :CONTA_RECEBER_BAIXA_CC, :CONTA_RECEBER_BAIXA_HIST||' CF. '||FN_LPAD(:NUMERO_CFE,6,0),
                                                    '', 'C', :DATA_EMISSAO, :VALOR_TEMP);
            
                                            EXECUTE PROCEDURE SPU_CONTA_RECEBER_SALDO2(0, :PARCELAMENTO_ID);
                
                                            UPDATE TBNFS_PARCELAMENTO A SET A.VALOR_SALDO = COALESCE((SELECT SUM(CASE WHEN B.TIPO = 'C'
                                                THEN B.VALOR_TOTAL*-1  ELSE B.VALOR_TOTAL END) SALDO FROM TBCAIXABANCO_LANCAMENTO_REG B
                                                WHERE B.NFS_CONTROLE = A.NFS_CONTROLE
                                                AND B.TIPO IN ('D','C')
                                                AND B.NFS_PARCELAMENTO_CONTROLE = A.CONTROLE),0)
                                                WHERE A.NFS_CONTROLE = 0
                                                AND A.CONTROLE = :PARCELAMENTO_ID;
    
                                        /* ATUALIZAR VALOR DO LANÇAMENTO DE BAIXA GERADO NO CAIXA/BANCO SE JA EXISTIR*/
                                        IF(:CAIXABANCO_LANC_INCLUIDO = 0) THEN
                                        BEGIN

                                           UPDATE TBCAIXABANCO_LANCAMENTO
                                             SET VALOR_TOTAL = COALESCE((SELECT SUM(F.VALOR_TOTAL) FROM TBCAIXABANCO_LANCAMENTO_REG F WHERE F.CAIXABANCO_CONTROLE = :CAIXABANCO_CONTROLE AND F.TIPO = 'C'),0)
                                             WHERE CONTROLE = :CAIXABANCO_CONTROLE
                                             AND BAIXA_CUPOM = '1'
                                             AND DATA_LANCAMENTO = :DATA_EMISSAO;

                                            IF(:CONTABILIZACAO_BANCO_ID > 0)THEN
                                            BEGIN
                                               UPDATE TBMOVCONTABIL
                                                 SET VALOR = COALESCE((SELECT SUM(F.VALOR_TOTAL) FROM TBCAIXABANCO_LANCAMENTO_REG F WHERE F.CAIXABANCO_CONTROLE = :CAIXABANCO_CONTROLE AND F.TIPO = 'C'),0)
                                                 WHERE ID = :CONTABILIZACAO_BANCO_ID;
                                            END

                                        END
                                     END
                                 END
                        END
    
                        :PARCELA_X      = :PARCELA_X + 1;
                        :COUNT_PARCELA  = :COUNT_PARCELA + 1;

                        IF(:PARCELAS > :SEQUENCIA) THEN
                        BEGIN
                            :SEQUENCIA = :SEQUENCIA + 1;

                        END ELSE
                        BEGIN
                           :SEQUENCIA = 1;

                        END

                     END
            END
     END
     /* DELETAR PARCELAS DO CAIXA BANCO */

     ELSE IF(:ACAO = 2) THEN
     BEGIN
         FOR
            SELECT T.CONTROLE, COALESCE(CFP.CHEQUE_ID, 0)
            FROM TBNFS_PARCELAMENTO T, TBPDV_CFE_FORMA_PAGAMENTO CFP
            WHERE T.PDV_CFE_FORMA_PAGAMENTO_ID = CFP.ID
            AND CFP.PDV_CFE_ID = :PDV_CFE_ID
          INTO
             :PARCELAMENTO_ID, :CHEQUE_ID
          DO BEGIN
            DELETE FROM TBCAIXABANCO_LANCAMENTO_REG S WHERE S.NFS_PARCELAMENTO_CONTROLE = :PARCELAMENTO_ID AND S.TIPO = 'C';
            DELETE FROM TBCAIXABANCO_LANCAMENTO_REG S WHERE S.NFS_PARCELAMENTO_CONTROLE = :PARCELAMENTO_ID AND S.TIPO = 'D';
            DELETE FROM TBCAIXABANCO_LANCAMENTO_REG S WHERE S.NFS_PARCELAMENTO_CONTROLE = :PARCELAMENTO_ID AND S.TIPO NOT IN ('C', 'D');
            DELETE FROM TBNFS_PARCELAMENTO T WHERE T.CONTROLE = :PARCELAMENTO_ID;
            DELETE FROM TBCHEQUE_ITEM T WHERE T.CHEQUE_ID = :CHEQUE_ID;
          END 
          /* ATUALIZAR LANÇAMENTO DE BAIXA GERADO NO CAIXA/BANCO */
          FOR
          SELECT
             FIRST 1
             COALESCE((SELECT FIRST 1 B.CONTROLE FROM TBCAIXABANCO_LANCAMENTO B
                        WHERE B.BAIXA_CUPOM = '1' AND B.DATA_LANCAMENTO = :DATA_EMISSAO AND B.CAIXABANCO_CODIGO = A.CODIGO
                        AND COALESCE((SELECT SUM(C.VALOR) FROM TBCAIXABANCO_LANCAMENTO_REG C WHERE C.CAIXABANCO_CONTROLE = B.CONTROLE AND C.TIPO = 'C'),0) > 0),0) AS CAIXABANCO_CONTROLE,
                        
             COALESCE((SELECT FIRST 1 B.MOVCONTABIL_ID FROM TBCAIXABANCO_LANCAMENTO B
                        WHERE B.BAIXA_CUPOM = '1' AND B.DATA_LANCAMENTO = :DATA_EMISSAO AND B.CAIXABANCO_CODIGO = A.CODIGO
                        AND COALESCE((SELECT SUM(C.VALOR) FROM TBCAIXABANCO_LANCAMENTO_REG C WHERE C.CAIXABANCO_CONTROLE = B.CONTROLE AND C.TIPO = 'C'),0) > 0),0) AS CONTABILIZACAO_BANCO_ID
             FROM TBCAIXABANCO A
             WHERE A.CODIGO = (SELECT FIRST 1 X.CAIXABANCO_ID FROM TBPDV_CAIXA X WHERE X.ID = :CAIXA_ID)
             INTO CAIXABANCO_CONTROLE, CONTABILIZACAO_BANCO_ID DO
             BEGIN
               IF(:CAIXABANCO_CONTROLE > 0) THEN
               BEGIN
                    UPDATE TBCAIXABANCO_LANCAMENTO
                     SET VALOR_TOTAL = COALESCE((SELECT SUM(F.VALOR_TOTAL) FROM TBCAIXABANCO_LANCAMENTO_REG F WHERE F.CAIXABANCO_CONTROLE = :CAIXABANCO_CONTROLE AND F.TIPO = 'C'),0)
                     WHERE CONTROLE = :CAIXABANCO_CONTROLE
                     AND BAIXA_CUPOM = '1'
                     AND DATA_LANCAMENTO = :DATA_EMISSAO;

                    IF(:CONTABILIZACAO_BANCO_ID > 0)THEN
                    BEGIN
                       UPDATE TBMOVCONTABIL
                         SET VALOR = COALESCE((SELECT SUM(F.VALOR_TOTAL) FROM TBCAIXABANCO_LANCAMENTO_REG F WHERE F.CAIXABANCO_CONTROLE = :CAIXABANCO_CONTROLE AND F.TIPO = 'C'),0)
                         WHERE ID = :CONTABILIZACAO_BANCO_ID;
                    END
               END
             END
          /* EXCLUIR LANÇAMENTO DE BAIXA GERADO NO CAIXA/BANCO */
          FOR
          SELECT
             FIRST 1
             COALESCE((SELECT FIRST 1 B.CONTROLE FROM TBCAIXABANCO_LANCAMENTO B
                        WHERE B.BAIXA_CUPOM = '1' AND B.DATA_LANCAMENTO = :DATA_EMISSAO AND B.CAIXABANCO_CODIGO = A.CODIGO
                        AND COALESCE((SELECT SUM(C.VALOR) FROM TBCAIXABANCO_LANCAMENTO_REG C WHERE C.CAIXABANCO_CONTROLE = B.CONTROLE AND C.TIPO = 'C'),0) = 0),0) AS CAIXABANCO_CONTROLE
             FROM TBCAIXABANCO A
             WHERE A.CODIGO = (SELECT FIRST 1 X.CAIXABANCO_ID FROM TBPDV_CAIXA X WHERE X.ID = :CAIXA_ID)
             INTO CAIXABANCO_CONTROLE DO
             BEGIN
               IF(:CAIXABANCO_CONTROLE > 0) THEN
               BEGIN
                   DELETE FROM TBCAIXABANCO_LANCAMENTO WHERE BAIXA_CUPOM = '1' AND CONTROLE = :CAIXABANCO_CONTROLE;
               END
             END
     END
END;