PAGUE 6 MESES
LEVE 12 MESES
GARANTIR DESCONTO

Fórum Lógica para congelamentos de dados #516235

09/04/2015

0

Galera tenho uma tabela de CONTAS A RECEBER, preciso fazer filtros que simule um congelamento. Por exemplo: Dia 01/04 tinha no Contas a Receber em aberto 500.000,00, e no dia 07/04 fazer o mesmo filtro para saber quanto tinha em aberto no dia 01/04, embora ja tenha tido movimentações, entrado titulo, baixados, baixas parciais, cancelamentos. O importante é saber quanto tinha lançado em aberto naquele dia.

Tenho um campo status que identifico: 'NÃO CONCILIDADO' = Titulo aberto, 'CONCILIADO' = titulo baixado, e no campo CONREC_NUM_DOC se tiver a letra 'P', quer dizer que foi um titulo gerado por uma baixa parcial.

Estou fazendo o seguite select, mas os valores estão mudando, ou seja, não esta o mesmo valor do período. Se algum poder me ajudar na lógica, agradeço.
 SELECT conrec_id,
       ped_id,
       data_cad,
       data_emissao,
       data_pag,
       CONREC_NUM_DOC,
       conrec_valor_parcela parcela,
       conrec_valor_pago    pago,
       conrec_acrescimo     juros,
       conrec_desconto      desconto,
       recebido_total       recebido_total,
       Iif((status = 'NÃO CONCILIADO') OR (status = 'CANCELADO'), COALESCE(conrec_valor_parcela, 0),
      recebido_total) as valorCongelado
FROM   vw_rel_contasreceber
WHERE  ( ( ( Cast(data_emissao AS DATE) <= :dt_fim )
           AND ( status = 'NÃO CONCILIADO' ) )
          OR ( ( Cast(data_emissao AS DATE) <= :dt_fim )
               AND ( Cast(data_pag AS DATE) > :dt_fim )
               AND ( ( status = 'CONCILIADO' )
                      OR ( status = 'CANCELADO' ) ) ) )
       AND ( loj_id = :loja )



Estrutura da View
CREATE OR ALTER VIEW VW_REL_CONTASRECEBER(
    CONREC_ID,
    CONREC_NUM_DOC,
    DATA_CAD,
    DATA_EMISSAO,
    DATA_PAG,
    CLI_ID,
    CLI_RAZAO,
    CLI_CPF_CNPJ,
    ENDERECO,
    CLI_BAIRRO,
    CLI_CIDADE,
    CLI_FONE1,
    CLI_FONE2,
    CLI_FONE3,
    ROT_ID,
    ROTA,
    SET_ID,
    SET_DESCRICAO,
    CLI_INTINERARIO,
    FUN_ID,
    FUN_APELIDO,
    STATUS,
    CONREC_MOTIVO_CANCELAMENTO,
    CONREC_HISTORICO,
    CONREC_VALOR_PARCELA,
    CONREC_VALOR_TOTAL,
    NDA,
    CONREC_VALOR_PAGO,
    CONREC_ACRESCIMO,
    CONREC_DESCONTO,
    RECEBIDO_TOTAL,
    ARECEBER,
    CONREC_NUM_PARCELA,
    CONREC_DATA_VENCIMENTO,
    FGPTO_ID,
    FPGTO_DESCRICAO,
    CPGTO_ID,
    CPGTO_DESCRICAO,
    PED_ID,
    LOJ_ID,
    LOJ_NOME,
    USU_ID,
    CEN_ID,
    CENTRO,
    CON_ID,
    CON_NOME,
    NFE_ID,
    USU_NOME,
    CONREC_OBS)
AS
select distinct
    contasreceber.conrec_id,
    contasreceber.conrec_num_doc,
    contasreceber.data_cad,
    contasreceber.data_emissao,
    contasreceber.data_pag,
    contasreceber.cli_id,
    clientes.cli_razao,
    clientes.cli_cpf_cnpj,
    clientes.cli_endereco || ', '||clientes.cli_numero as endereco,
    clientes.cli_bairro,
    clientes.cli_cidade,
    clientes.cli_fone1,
    clientes.cli_fone2,
    clientes.cli_fone3,
    clientes.rot_id,
    (select rot_descricao from rotas where rot_id = clientes.rot_id) as rota,
    (SELECT first 1 sp_getsetor.set_id FROM SP_GETSETOR(clientes.rot_id)),
    (SELECT first 1 sp_getsetor.set_descricao FROM SP_GETSETOR(clientes.rot_id)),
    clientes.cli_intinerario,
    case
      when contasreceber.ped_id > 0 then
        pedidos.fun_id
      else
        (select first 1 funcionarios.fun_id from funcionarios where funcionarios.set_id = (SELECT sp_getsetor.set_id FROM SP_GETSETOR(clientes.rot_id)))
    end as fun_id,

    case
      when contasreceber.ped_id > 0 then
        (select first 1 funcionarios.fun_apelido from funcionarios where funcionarios.fun_id = pedidos.fun_id)
      else
        (select first 1 funcionarios.fun_apelido from funcionarios where funcionarios.set_id = (SELECT sp_getsetor.set_id FROM SP_GETSETOR(clientes.rot_id)))
    end  as fun_apelido,

    case
      when contasreceber.status = 0 then 'NÃO CONCILIADO'
      when contasreceber.status = 2 then 'CANCELADO'
      when contasreceber.status = 1 then 'CONCILIADO'
    end as status,
    contasreceber.conrec_motivo_cancelamento,
    contasreceber.conrec_historico,
    coalesce(contasreceber.conrec_valor_parcela,0) as conrec_valor_parcela,
    coalesce(contasreceber.conrec_valor_total,0) as conrec_valor_total,
    case
        when (current_date - cast(contasreceber.conrec_data_vencimento as date)) < 0 then 0 || ' Dias'
     else
       (current_date - cast(contasreceber.conrec_data_vencimento as date))|| ' Dias'
     end as nda,
    coalesce(contasreceber.conrec_valor_pago,0) as conrec_valor_pago,
    coalesce(contasreceber.conrec_acrescimo,0) as conrec_acrescimo,
    coalesce(contasreceber.conrec_desconto,0) as conrec_desconto,
    case
      when coalesce(contasreceber.conrec_acrescimo,0)  > 0 then
       coalesce(contasreceber.conrec_valor_pago,0) - coalesce(contasreceber.conrec_acrescimo,0)
      else
        coalesce(contasreceber.conrec_valor_pago,0)

    end as Recebido_Total,
    case
        when
            coalesce(contasreceber.conrec_valor_pago,0) + coalesce(contasreceber.conrec_acrescimo,0) >
              coalesce(contasreceber.conrec_valor_parcela,0) then 0
         when
            coalesce(contasreceber.conrec_valor_pago,0) + coalesce(contasreceber.conrec_desconto,0) =
              coalesce(contasreceber.conrec_valor_parcela,0) then 0
        else
        coalesce(contasreceber.conrec_valor_parcela,0) - coalesce(contasreceber.conrec_valor_pago,0)
    end,
    contasreceber.conrec_num_parcela,
    contasreceber.conrec_data_vencimento,
    contasreceber.fgpto_id,
    forma_pagamento.fpgto_descricao,
    contasreceber.cpgto_id,
    condicao_de_pagamento.cpgto_descricao,
    contasreceber.ped_id,
    contasreceber.loj_id,
    lojas.loj_nome,
    contasreceber.usu_id,
    contasreceber.cen_id,
    centros.centro,
    contasreceber.con_id,
    contas.con_nome,
    pedidos.nfe_id,
    usuarios.usu_nome,
    contasreceber.conrec_obs
from contasreceber
   inner join forma_pagamento on (contasreceber.fgpto_id = forma_pagamento.fpgto_id)
   inner join condicao_de_pagamento on (contasreceber.cpgto_id = condicao_de_pagamento.cpgto_id)
   inner join clientes on (contasreceber.cli_id = clientes.cli_id)
   left join pedidos on (contasreceber.ped_id = pedidos.ped_id)
   inner join usuarios on (contasreceber.usu_id = usuarios.usu_id)
   left join contas on (contasreceber.con_id = contas.con_id)
   left join centros on (contasreceber.cen_id = centros.cen_id)
   inner join lojas on (contasreceber.loj_id = lojas.loj_id)
;


Estrutura da Tabela

CREATE TABLE CONTASRECEBER (
    CONREC_ID                   INTEGER NOT NULL PRIMARY KEY,
    CONREC_NUM_DOC              VARCHAR(25),
    DATA_CAD                    TIMESTAMP,
    DATA_EMISSAO                TIMESTAMP,
    DATA_ALT                    TIMESTAMP,
    DATA_PAG                    TIMESTAMP,
    STATUS                      INTEGER,
    CONREC_MOTIVO_CANCELAMENTO  VARCHAR(100),
    CONREC_HISTORICO            VARCHAR(150),
    CONREC_VALOR_PARCELA        "DValor" /* "DValor" = NUMERIC(12,2) DEFAULT 0 */,
    CONREC_VALOR_TOTAL          "DValor" /* "DValor" = NUMERIC(12,2) DEFAULT 0 */,
    CONREC_NUM_PARCELA          VARCHAR(6),
    CONREC_DATA_VENCIMENTO      DATE,
    CONREC_VALOR_PAGO           "DValor" /* "DValor" = NUMERIC(12,2) DEFAULT 0 */,
    CONREC_ACRESCIMO            "DValor" /* "DValor" = NUMERIC(12,2) DEFAULT 0 */,
    CONREC_DESCONTO             "DValor" /* "DValor" = NUMERIC(12,2) DEFAULT 0 */,
    FGPTO_ID                    INTEGER,
    CPGTO_ID                    INTEGER,
    CLI_ID                      INTEGER,
    PED_ID                      INTEGER,
    LOJ_ID                      INTEGER,
    USU_ID                      INTEGER,
    CEN_ID                      INTEGER,
    CON_ID                      INTEGER,
    EXCLUIDO                    CHAR(1),
    CONREC_OBS                  VARCHAR(150),
    DATA_CANCELAMENTO           "DDataHora" /* "DDataHora" = TIMESTAMP */
);


Sidney Abreu

Sidney Abreu

Responder

Posts

09/04/2015

Sidney Abreu

Uma coisa que notei foi as baixas canceladas, que estão influenciando, mas como corrigir esse select?
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar