ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Débito, crédito e saldo Firebird?
Ir à página Anterior  1, 2, 3, 4, 5
 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Sex Fev 26, 2021 5:39 pm    Assunto: Responder com Citação

Parece que o primeiro probema foi por falta de fechar o bloco
Código:
begin
              if (:PNAOMOSTRARSALDO = 0) then
              begin
                TOTAL_GERAL = TOTAL_GERAL + DEPOSITO - PAGAMENTO;
              end
              else
                TOTAL_GERAL = 0;

            total_geral_credito = total_geral_credito + deposito;
            total_geral_debito = total_geral_debito + pagamento;
           end


Ja o segundo problema acho que assim resolve no filtro mais essa condição
Código:
   AND ( (UPPER(C.NOMEFANTASIA) LIKE :PCONDICAO) OR           
          '          (UPPER(MC.FAVORECIDO) LIKE :PCONDICAO) or (mc.id_cliente is null) )

_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree


Editado pela última vez por adriano_servitec em Sáb Fev 27, 2021 8:09 am, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Sex Fev 26, 2021 5:43 pm    Assunto: Responder com Citação

adriano_servitec escreveu:
Parece que o primeiro probema foi por falta de fechar o bloco
Código:
begin
              if (:PNAOMOSTRARSALDO = 0) then
              begin
                TOTAL_GERAL = TOTAL_GERAL + DEPOSITO - PAGAMENTO;
              end
              else
                TOTAL_GERAL = 0;

            total_geral_credito = total_geral_credito + deposito;
            total_geral_debito = total_geral_debito + pagamento;
           end



Não, não é isso não. Esta errado a soma ainda.
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Sáb Fev 27, 2021 8:26 am    Assunto: Responder com Citação

Será que é assim a forma correta?

Só deixei esse dois aqui
Código:
 total_geral_credito = total_geral_credito + deposito;
 total_geral_debito = total_geral_debito +- pagamento;


Código:
create or alter procedure SP_REL_MOVIMENTACAO (
    PID_CONTA varchar(1025),
    PDATA1 date,
    PDATA2 date,
    PSTATUS varchar(255),
    PCONDICAO varchar(255),
    PNAOMOSTRARSALDO integer,
    PUSUARIO varchar(100))
returns (
    ID_CONTA integer,
    NOME_CONTA varchar(100) character set WIN1252 collate WIN_PTBR,
    ID integer,
    DATA date,
    NUMERO varchar(20),
    ID_CLIENTE integer,
    FAVORECIDO varchar(100) character set WIN1252 collate WIN_PTBR,
    ID_PLANCONTA integer,
    NOME varchar(100) character set WIN1252 collate WIN_PTBR,
    HISTORICO varchar(200) character set WIN1252 collate WIN_PTBR,
    SALDO_ANT numeric(15,2),
    DEPOSITO numeric(15,2),
    PAGAMENTO numeric(15,2),
    SALDO numeric(15,2),
    TIPO integer,
    STATUS integer,
    ID_CCUSTO integer,
    NOME_CCUSTO varchar(100) character set WIN1252 collate WIN_PTBR,
    VALOR numeric(15,2),
    D_C char(1),
    TOTAL_GERAL numeric(15,2),
    SALDO_POR_CONTA numeric(15,2),
    TOTAL_GERAL_DEBITO numeric(15,2),
    TOTAL_GERAL_CREDITO numeric(15,2))
as
declare variable ID_CONTA_ANT integer;
declare variable INICIO_CONTA char(1);
BEGIN
  ID_CONTA_ANT = 0;
  TOTAL_GERAL = 0;
  total_geral_debito = 0;
  total_geral_credito = 0;
  FOR
    SELECT
    MC.ID_CONTA,
    MC.ID,
    MC.DATA,
    MC.NUMERO,
    MC.ID_CLIENTE,
    CASE WHEN MC.FAVORECIDO IS NULL THEN
      C.NOMEFANTASIA
    ELSE
      MC.FAVORECIDO
    END,
    MC.ID_PLANCONTA,
    MC.ID_CCUSTO,
    MC.HISTORICO,
    MC.STATUS,
    MC.TIPO,
    SUM(MC.VALOR * CASE WHEN MC.TIPO IN (0, 3) THEN 1 ELSE 0 END),
    SUM(MC.VALOR * CASE WHEN MC.TIPO IN (1, 2) THEN 1 ELSE 0 END),
    SUM(MC.VALOR * CASE WHEN MC.TIPO IN (0, 3) THEN 1 ELSE -1 END),
    IIF( MC.TIPO IN (1, 2), 'D', 'C')
    FROM MOVCONTA MC
    LEFT JOIN CLIENTE C ON C.ID = MC.ID_CLIENTE
    INNER JOIN USUARIOCONTAS UC ON UC.CONTA_ID = MC.ID_CONTA

    WHERE POSITION(cast(MC.ID_CONTA as varchar(255)) || ',', :PID_CONTA) > 0 AND
    MC.Data <= : PDATA2
    AND ( (UPPER(C.NOMEFANTASIA) LIKE :PCONDICAO) OR
          (UPPER(MC.FAVORECIDO) LIKE :PCONDICAO) or (mc.id_cliente is null) )

    AND UC.CD_USUARIO LIKE :PUSUARIO

    GROUP BY 1,2,3,4,5,6,7,8,9,10,11
    ORDER BY mc.id_conta, MC.DATA, MC.ID

    INTO : ID_CONTA, : ID, : DATA, : NUMERO, : ID_CLIENTE, : FAVORECIDO,
    : ID_PLANCONTA, : ID_CCUSTO,
    : HISTORICO, : STATUS, : TIPO,
    : DEPOSITO, : PAGAMENTO,
    : VALOR, : D_C
    DO BEGIN
        IF (ID_CONTA <> ID_CONTA_ANT) THEN
          BEGIN
            ID_CONTA_ANT = ID_CONTA;
            INICIO_CONTA = 'S';
            SALDO = 0;
            saldo_por_conta = 0;
          END

        if (:PNAOMOSTRARSALDO = 0) then
        begin
          SALDO_ANT = SALDO;
        end
        else
          saldo_ant = 0;

        IF (: STATUS <> 30) THEN
          if (: data >= : pdata1 ) then
            saldo_por_conta = saldo_por_conta + DEPOSITO - PAGAMENTO;

          total_geral_credito = total_geral_credito + deposito;
          total_geral_debito = total_geral_debito +- pagamento;

          if (:PNAOMOSTRARSALDO = 0) then
          begin
            SALDO = SALDO + DEPOSITO - PAGAMENTO;
          end
          else
            SALDO = 0;

        IF (: DATA >= : PDATA1) THEN
          BEGIN
            IF (INICIO_CONTA = 'S') THEN
              BEGIN
                INICIO_CONTA = 'N';
                TOTAL_GERAL = TOTAL_GERAL + SALDO;
              END
            ELSE
            begin
              if (:PNAOMOSTRARSALDO = 0) then
              begin
                TOTAL_GERAL = TOTAL_GERAL + DEPOSITO - PAGAMENTO;
              end
              else
                TOTAL_GERAL = 0;
           end

            SELECT REPLACE (CT.NOME,  '  ', ' ') AS NOME_CONTA
              FROM CONTA CT
             WHERE CT.ID = :ID_CONTA
              INTO : NOME_CONTA;

             SELECT PC.NOME
              FROM PLANODECONTAS PC
             WHERE PC.ID = :ID_PLANCONTA
              INTO : NOME;

            SELECT CC.NOME
              FROM CENTRODECUSTO CC
             WHERE CC.ID = :ID_CCUSTO
              INTO : NOME_CCUSTO;
            SUSPEND;
          END
    END
END

_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Seg Mar 01, 2021 10:15 am    Assunto: Responder com Citação

Acho que talvez esteja faltando o If para ver se o status é diferente de 30:

Código:
        IF (: STATUS <> 30) THEN
        begin
          if (: data >= : pdata1 ) then
            saldo_por_conta = saldo_por_conta + DEPOSITO - PAGAMENTO;

          total_geral_credito = total_geral_credito + deposito;
          total_geral_debito = total_geral_debito + pagamento;

          if (:PNAOMOSTRARSALDO = 0) then
          begin
            SALDO = SALDO + DEPOSITO - PAGAMENTO;
          end
          else
            SALDO = 0;
        end

        IF (: DATA >= : PDATA1) THEN
          BEGIN
            IF (INICIO_CONTA = 'S') THEN
              BEGIN
                INICIO_CONTA = 'N';
                TOTAL_GERAL = TOTAL_GERAL + SALDO;
              END
            ELSE
            begin
              if (:PNAOMOSTRARSALDO = 0) then
              begin
                IF (: STATUS <> 30) THEN
                  TOTAL_GERAL = TOTAL_GERAL + DEPOSITO - PAGAMENTO;
              end
              else
                TOTAL_GERAL = 0;
            end


Espero que ajude
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Seg Mar 01, 2021 2:44 pm    Assunto: Responder com Citação

Boa tarde,

Fiz 2 lancamentos para este mes
Valor 5.000,00
e outro 400,00

Ai no SP chamei do periodo 01/03/2021 a 31/03/2021

E esta vindo 3X o valor
15.000,00
1.200

Sabe dizer o que aconteceu?

A SP
Código:
create or alter procedure XSP_REL_MOVIMENTACAO (
    PID_CONTA varchar(1025),
    PDATA1 date,
    PDATA2 date,
    PSTATUS varchar(255),
    PCONDICAO varchar(255),
    PNAOMOSTRARSALDO integer,
    PUSUARIO varchar(100))
returns (
    ID_CONTA integer,
    NOME_CONTA varchar(100) character set WIN1252 collate WIN_PTBR,
    ID integer,
    DATA date,
    NUMERO varchar(20),
    ID_CLIENTE integer,
    FAVORECIDO varchar(100) character set WIN1252 collate WIN_PTBR,
    ID_PLANCONTA integer,
    NOME varchar(100) character set WIN1252 collate WIN_PTBR,
    HISTORICO varchar(200) character set WIN1252 collate WIN_PTBR,
    SALDO_ANT numeric(15,2),
    DEPOSITO numeric(15,2),
    PAGAMENTO numeric(15,2),
    SALDO numeric(15,2),
    TIPO integer,
    STATUS integer,
    ID_CCUSTO integer,
    NOME_CCUSTO varchar(100) character set WIN1252 collate WIN_PTBR,
    VALOR numeric(15,2),
    D_C char(1),
    TOTAL_GERAL numeric(15,2),
    SALDO_POR_CONTA numeric(15,2),
    TOTAL_GERAL_DEBITO numeric(15,2),
    TOTAL_GERAL_CREDITO numeric(15,2))
as
declare variable ID_CONTA_ANT integer;
declare variable INICIO_CONTA char(1);
BEGIN
  ID_CONTA_ANT = 0;
  TOTAL_GERAL = 0;
  total_geral_debito = 0;
  total_geral_credito = 0;
  FOR
    SELECT
    MC.ID_CONTA,
    MC.ID,
    MC.DATA,
    MC.NUMERO,
    MC.ID_CLIENTE,
    CASE WHEN MC.FAVORECIDO IS NULL THEN
      C.NOMEFANTASIA
    ELSE
      MC.FAVORECIDO
    END,
    MC.ID_PLANCONTA,
    MC.ID_CCUSTO,
    MC.HISTORICO,
    MC.STATUS,
    MC.TIPO,
    SUM(MC.VALOR * CASE WHEN MC.TIPO IN (0, 3) THEN 1 ELSE 0 END),
    SUM(MC.VALOR * CASE WHEN MC.TIPO IN (1, 2) THEN 1 ELSE 0 END),
    SUM(MC.VALOR * CASE WHEN MC.TIPO IN (0, 3) THEN 1 ELSE -1 END),
    IIF( MC.TIPO IN (1, 2), 'D', 'C')
    FROM MOVCONTA MC
    LEFT JOIN CLIENTE C ON C.ID = MC.ID_CLIENTE
    INNER JOIN USUARIOCONTAS UC ON UC.CONTA_ID = MC.ID_CONTA

    WHERE POSITION(cast(MC.ID_CONTA as varchar(255)) || ',', :PID_CONTA) > 0 AND
    MC.Data <= : PDATA2
    AND ( (UPPER(C.NOMEFANTASIA) LIKE :PCONDICAO) OR
          (UPPER(MC.FAVORECIDO) LIKE :PCONDICAO) or (mc.id_cliente is null) )

    AND UC.CD_USUARIO LIKE :PUSUARIO

    GROUP BY 1,2,3,4,5,6,7,8,9,10,11
    ORDER BY mc.id_conta, MC.DATA, MC.ID

    INTO : ID_CONTA, : ID, : DATA, : NUMERO, : ID_CLIENTE, : FAVORECIDO,
    : ID_PLANCONTA, : ID_CCUSTO,
    : HISTORICO, : STATUS, : TIPO,
    : DEPOSITO, : PAGAMENTO,
    : VALOR, : D_C
    DO BEGIN
        IF (ID_CONTA <> ID_CONTA_ANT) THEN
          BEGIN
            ID_CONTA_ANT = ID_CONTA;
            INICIO_CONTA = 'S';
            SALDO = 0;
            saldo_por_conta = 0;
          END

        if (:PNAOMOSTRARSALDO = 0) then
        begin
          SALDO_ANT = SALDO;
        end
        else
          saldo_ant = 0;

        IF (: STATUS <> 30) THEN
        BEGIN
          if (: data >= : pdata1 ) then
            saldo_por_conta = saldo_por_conta + DEPOSITO - PAGAMENTO;

          total_geral_credito = total_geral_credito + deposito;
          total_geral_debito = total_geral_debito +- pagamento;

          if (:PNAOMOSTRARSALDO = 0) then
          begin
            SALDO = SALDO + DEPOSITO - PAGAMENTO;
          end
          else
            SALDO = 0;
        END

        IF (: DATA >= : PDATA1) THEN
          BEGIN
            IF (INICIO_CONTA = 'S') THEN
              BEGIN
                INICIO_CONTA = 'N';
                TOTAL_GERAL = TOTAL_GERAL + SALDO;
              END
            ELSE
            begin
              if (:PNAOMOSTRARSALDO = 0) then
              begin
                TOTAL_GERAL = TOTAL_GERAL + DEPOSITO - PAGAMENTO;
              end
              else
                TOTAL_GERAL = 0;
           end

            SELECT REPLACE (CT.NOME,  '  ', ' ') AS NOME_CONTA
              FROM CONTA CT
             WHERE CT.ID = :ID_CONTA
              INTO : NOME_CONTA;

             SELECT PC.NOME
              FROM PLANODECONTAS PC
             WHERE PC.ID = :ID_PLANCONTA
              INTO : NOME;

            SELECT CC.NOME
              FROM CENTRODECUSTO CC
             WHERE CC.ID = :ID_CCUSTO
              INTO : NOME_CCUSTO;
            SUSPEND;
          END
    END
END

_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Seg Mar 01, 2021 3:34 pm    Assunto: Responder com Citação

O problema parece estar no select
Código:
SELECT mc.id_conta,
       MC.id,
       MC.data,
       MC.numero,
       MC.id_cliente,
       CASE
         WHEN MC.favorecido IS NULL THEN C.nomefantasia
         ELSE MC.favorecido
       END,
       MC.id_planconta,
       MC.id_ccusto,
       MC.historico,
       MC.status,
       MC.tipo,
       SUM(MC.valor * CASE
                        WHEN MC.tipo IN ( 0, 3 ) THEN 1
                        ELSE 0
                      END),
       SUM(MC.valor * CASE
                        WHEN MC.tipo IN ( 1, 2 ) THEN 1
                        ELSE 0
                      END),
       SUM(MC.valor * CASE
                        WHEN MC.tipo IN ( 0, 3 ) THEN 1
                        ELSE -1
                      END),
       Iif(MC.tipo IN ( 1, 2 ), 'D', 'C')
FROM   movconta MC
       left join cliente C
              ON C.id = MC.id_cliente
       inner join conta CT
               ON CT.id = MC.id_conta
       inner join usuariocontas UC
               ON UC.conta_id = CT.id
WHERE  Position(Cast(MC.id_conta AS VARCHAR(255))
                || ',', :PID_CONTA) > 0
       AND MC.data BETWEEN :pdata1 AND : PDATA2
       AND ( ( Upper(C.nomefantasia) LIKE :PCONDICAO )
              OR ( Upper(MC.favorecido) LIKE :PCONDICAO )
              OR ( MC.id_cliente IS NULL ) )
       AND UC.cd_usuario LIKE :PUSUARIO
GROUP  BY 1,
          2,
          3,
          4,
          5,
          6,
          7,
          8,
          9,
          10,
          11
ORDER  BY mc.id_conta,
          MC.data,
          MC.id


Esta somando 3X o VALOR, ou seja o SUM esta triplicando o valor. Acho que não deve ter um sum nesse campos
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Seg Mar 01, 2021 3:47 pm    Assunto: Responder com Citação

Assim parece dar certo os valores
Código:
create or alter procedure XSP_REL_MOVIMENTACAO (
    PID_CONTA varchar(1025),
    PDATA1 date,
    PDATA2 date,
    PSTATUS varchar(255),
    PCONDICAO varchar(255),
    PNAOMOSTRARSALDO integer,
    PUSUARIO varchar(100))
returns (
    ID_CONTA integer,
    NOME_CONTA varchar(100) character set WIN1252 collate WIN_PTBR,
    ID integer,
    DATA date,
    NUMERO varchar(20),
    ID_CLIENTE integer,
    FAVORECIDO varchar(100) character set WIN1252 collate WIN_PTBR,
    ID_PLANCONTA integer,
    NOME varchar(100) character set WIN1252 collate WIN_PTBR,
    HISTORICO varchar(200) character set WIN1252 collate WIN_PTBR,
    SALDO_ANT numeric(15,2),
    DEPOSITO numeric(15,2),
    PAGAMENTO numeric(15,2),
    SALDO numeric(15,2),
    TIPO integer,
    STATUS integer,
    ID_CCUSTO integer,
    NOME_CCUSTO varchar(100) character set WIN1252 collate WIN_PTBR,
    VALOR numeric(15,2),
    D_C char(1),
    TOTAL_GERAL numeric(15,2),
    SALDO_POR_CONTA numeric(15,2),
    TOTAL_GERAL_DEBITO numeric(15,2),
    TOTAL_GERAL_CREDITO numeric(15,2))
as
declare variable ID_CONTA_ANT integer;
declare variable INICIO_CONTA char(1);
BEGIN
  ID_CONTA_ANT = 0;
  TOTAL_GERAL = 0;
  total_geral_debito = 0;
  total_geral_credito = 0;
  FOR
    SELECT
    MC.ID_CONTA,
    MC.ID,
    MC.DATA,
    MC.NUMERO,
    MC.ID_CLIENTE,
    CASE WHEN MC.FAVORECIDO IS NULL THEN
      C.NOMEFANTASIA
    ELSE
      MC.FAVORECIDO
    END,
    MC.ID_PLANCONTA,
    MC.ID_CCUSTO,
    MC.HISTORICO,
    MC.STATUS,
    MC.TIPO,
    MC.VALOR * CASE WHEN MC.TIPO IN (0, 3) THEN 1 ELSE 0 END,
    MC.VALOR * CASE WHEN MC.TIPO IN (1, 2) THEN 1 ELSE 0 END,
    MC.VALOR * CASE WHEN MC.TIPO IN (0, 3) THEN 1 ELSE -1 END,
    IIF( MC.TIPO IN (1, 2), 'D', 'C')
    FROM MOVCONTA MC
    LEFT JOIN CLIENTE C ON C.ID = MC.ID_CLIENTE
    INNER JOIN USUARIOCONTAS UC ON UC.CONTA_ID = MC.ID_CONTA

    WHERE POSITION(cast(MC.ID_CONTA as varchar(255)) || ',', :PID_CONTA) > 0 AND
    MC.DATA <= : PDATA2
    AND ( (UPPER(C.NOMEFANTASIA) LIKE :PCONDICAO) OR
          (UPPER(MC.FAVORECIDO) LIKE :PCONDICAO) or (mc.id_cliente is null) )

    AND UC.CD_USUARIO LIKE :PUSUARIO

    GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12,13,14
    ORDER BY mc.id_conta, MC.DATA, MC.ID

    INTO : ID_CONTA, : ID, : DATA, : NUMERO, : ID_CLIENTE, : FAVORECIDO,
    : ID_PLANCONTA, : ID_CCUSTO,
    : HISTORICO, : STATUS, : TIPO,
    : DEPOSITO, : PAGAMENTO,
    : VALOR, : D_C
    DO BEGIN
        IF (ID_CONTA <> ID_CONTA_ANT) THEN
          BEGIN
            ID_CONTA_ANT = ID_CONTA;
            INICIO_CONTA = 'S';
            SALDO = 0;
            saldo_por_conta = 0;
          END

        if (:PNAOMOSTRARSALDO = 0) then
        begin
          SALDO_ANT = SALDO;
        end
        else
          saldo_ant = 0;

        IF (: STATUS <> 30) THEN
        BEGIN
          if (: data >= : pdata1 ) then
            saldo_por_conta = saldo_por_conta + DEPOSITO - PAGAMENTO;

          total_geral_credito = total_geral_credito + deposito;
          total_geral_debito = total_geral_debito +- pagamento;

          if (:PNAOMOSTRARSALDO = 0) then
          begin
            SALDO = SALDO + DEPOSITO - PAGAMENTO;
          end
          else
            SALDO = 0;
        END

        IF (: DATA >= : PDATA1) THEN
          BEGIN
            IF (INICIO_CONTA = 'S') THEN
              BEGIN
                INICIO_CONTA = 'N';
                TOTAL_GERAL = TOTAL_GERAL + SALDO;
              END
            ELSE
            begin
              if (:PNAOMOSTRARSALDO = 0) then
              begin
                TOTAL_GERAL = TOTAL_GERAL + DEPOSITO - PAGAMENTO;
              end
              else
                TOTAL_GERAL = 0;
           end

            SELECT REPLACE (CT.NOME,  '  ', ' ') AS NOME_CONTA
              FROM CONTA CT
             WHERE CT.ID = :ID_CONTA
              INTO : NOME_CONTA;

             SELECT PC.NOME
              FROM PLANODECONTAS PC
             WHERE PC.ID = :ID_PLANCONTA
              INTO : NOME;

            SELECT CC.NOME
              FROM CENTRODECUSTO CC
             WHERE CC.ID = :ID_CCUSTO
              INTO : NOME_CCUSTO;
            SUSPEND;
          END
    END
END

_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Qua Mar 03, 2021 3:55 pm    Assunto: Responder com Citação

Preciso de um total_geral_anterior ao filtro

Fiz assim
Código:
create or alter procedure XSP_REL_MOVBALANCETE (
    PID_CONTA varchar(1025),
    PDATA1 date,
    PDATA2 date,
    PSTATUS varchar(255),
    PCONDICAO varchar(255),
    PNAOMOSTRARSALDO integer,
    PUSUARIO varchar(100))
returns (
    ID_CONTA integer,
    NOME_CONTA varchar(100) character set WIN1252 collate WIN_PTBR,
    ID integer,
    DATA date,
    NUMERO varchar(20),
    ID_CLIENTE integer,
    FAVORECIDO varchar(100) character set WIN1252 collate WIN_PTBR,
    ID_PLANCONTA integer,
    NOME varchar(100) character set WIN1252 collate WIN_PTBR,
    HISTORICO varchar(200) character set WIN1252 collate WIN_PTBR,
    SALDO_ANT numeric(15,2),
    DEPOSITO numeric(15,2),
    PAGAMENTO numeric(15,2),
    SALDO numeric(15,2),
    TIPO integer,
    STATUS integer,
    ID_CCUSTO integer,
    NOME_CCUSTO varchar(100) character set WIN1252 collate WIN_PTBR,
    VALOR numeric(15,2),
    NOME_TIPO_RECEITA_DESPESA varchar(100),
    D_C char(1),
    TOTAL_GERAL numeric(15,2),
    SALDO_POR_PLANOCONTA numeric(15,2),
    TOTAL_GERAL_DEBITO numeric(15,2),
    TOTAL_GERAL_CREDITO numeric(15,2),
    TOTAL_GERAL_ANTERIOR numeric(15,2))
as
declare variable ID_CONTA_ANT integer;
declare variable INICIO_PLANOCONTA char(1);
declare variable VID_PLANCONTA integer;
declare variable VNOME_TIPO_RECEITA_DESPESA varchar(100);
BEGIN
ID_CONTA_ANT = 0;
total_geral_debito = 0;
total_geral_credito = 0;
VID_PLANCONTA = 0;
vnome_tipo_receita_despesa = '';
FOR
SELECT
MC.ID_CONTA,
MC.ID,
MC.DATA,
MC.NUMERO,
MC.ID_CLIENTE,
CASE WHEN MC.FAVORECIDO IS NULL THEN
C.NOMEFANTASIA
ELSE
MC.FAVORECIDO
END,
MC.ID_PLANCONTA,
MC.ID_CCUSTO,
MC.HISTORICO,
MC.STATUS,
MC.TIPO,
CASE WHEN MC.TIPO IN (0, 3) THEN '< RECEITAS >'
     WHEN MC.TIPO IN (1, 2) THEN '< DESPESAS >'
END AS NOME_TIPO_RECEITA_DESPESA,
MC.VALOR * CASE WHEN MC.TIPO IN (0, 3) THEN 1 ELSE 0 END,
MC.VALOR * CASE WHEN MC.TIPO IN (1, 2) THEN 1 ELSE 0 END,
MC.VALOR * CASE WHEN MC.TIPO IN (0, 3) THEN 1 ELSE -1 END,
IIF( MC.TIPO IN (1, 2), 'D', 'C')
FROM MOVCONTA MC
LEFT JOIN CLIENTE C ON C.ID = MC.ID_CLIENTE
LEFT JOIN USUARIOCONTAS UC ON UC.CONTA_ID = MC.ID_CONTA
WHERE POSITION(cast(MC.ID_CONTA as varchar(1025)) || ',', :PID_CONTA) > 0
AND  MC.DATA <= : PDATA2
AND ( (UPPER(C.NOMEFANTASIA) LIKE :PCONDICAO) OR
     (UPPER(MC.FAVORECIDO) LIKE :PCONDICAO) )
AND ((UC.CD_USUARIO LIKE :PUSUARIO) or (UC.cd_usuario IS NULL))
ORDER BY NOME_TIPO_RECEITA_DESPESA DESC, MC.ID_PLANCONTA, MC.Data, MC.ID
INTO : ID_CONTA, : ID, : DATA, : NUMERO, : ID_CLIENTE, : FAVORECIDO,
: ID_PLANCONTA, : ID_CCUSTO, : HISTORICO, : STATUS, : TIPO, : NOME_TIPO_RECEITA_DESPESA,
: DEPOSITO, : PAGAMENTO, : VALOR, : D_C
DO BEGIN
if (nome_tipo_receita_despesa <> vnome_tipo_receita_despesa) then
BEGIN
  TOTAL_GERAL = 0;
  vnome_tipo_receita_despesa = nome_tipo_receita_despesa;
END
if (id_planconta <> vid_planconta) then
BEGIN
  INICIO_PLANOCONTA = 'S';
  saldo_por_planoconta = 0;
  SALDO = 0;
  vid_planconta = id_planconta;
END

if (:PNAOMOSTRARSALDO = 0) then
begin
  SALDO_ANT = SALDO;
end
else
  saldo_ant = 0;

total_geral_anterior = total_geral;


IF (: STATUS <> 30) THEN
BEGIN
    if (: data >= : pdata1 ) then
      saldo_por_planoconta = saldo_por_planoconta + DEPOSITO - PAGAMENTO;
    total_geral_credito = total_geral_credito + deposito;
    total_geral_debito = total_geral_debito +- pagamento;
    if (:PNAOMOSTRARSALDO = 0) then
    begin
      SALDO = SALDO + DEPOSITO - PAGAMENTO;
    end
    else
      SALDO = 0;
    END

    IF (: DATA >= : PDATA1) THEN
    BEGIN
      IF (INICIO_PLANOCONTA = 'S') THEN
      BEGIN
        INICIO_PLANOCONTA = 'N';
        TOTAL_GERAL = TOTAL_GERAL + SALDO;
      END
      ELSE
      begin
      if (:PNAOMOSTRARSALDO = 0) then
      begin
        TOTAL_GERAL = TOTAL_GERAL + DEPOSITO - PAGAMENTO;
      end
      else
        TOTAL_GERAL = 0;
      end

      SELECT REPLACE (CT.NOME,  '  ', ' ') AS NOME_CONTA
        FROM CONTA CT
       WHERE CT.ID = :ID_CONTA
       INTO : NOME_CONTA;
      SELECT PC.NOME
        FROM PLANODECONTAS PC
       WHERE PC.ID = :ID_PLANCONTA
        INTO : NOME;
      SELECT CC.NOME
        FROM CENTRODECUSTO CC
       WHERE CC.ID = :ID_CCUSTO
        INTO : NOME_CCUSTO;
      SUSPEND;
    END
  END
END


Passando o valor aqui
total_geral_anterior = total_geral;

Mais não deu certo
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qua Mar 03, 2021 5:09 pm    Assunto: Responder com Citação

Experimente a versão abaixo:

Código:
      IF (INICIO_PLANOCONTA = 'S') THEN
      BEGIN
        INICIO_PLANOCONTA = 'N';
        TOTAL_GERAL_ANTERIOR = TOTAL_GERAL_ANTERIOR + SALDO;
        TOTAL_GERAL = TOTAL_GERAL + SALDO;
      END
      ELSE
      begin
        if (:PNAOMOSTRARSALDO = 0) then
        begin
          TOTAL_GERAL = TOTAL_GERAL + DEPOSITO - PAGAMENTO;
        end
        else
        begin
          TOTAL_GERAL_ANTERIOR = 0;
          TOTAL_GERAL = 0;
        end;
      end


Espero que ajude
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Qua Mar 03, 2021 5:32 pm    Assunto: Responder com Citação

imex escreveu:
Experimente a versão abaixo:

Código:
      IF (INICIO_PLANOCONTA = 'S') THEN
      BEGIN
        INICIO_PLANOCONTA = 'N';
        TOTAL_GERAL_ANTERIOR = TOTAL_GERAL_ANTERIOR + SALDO;
        TOTAL_GERAL = TOTAL_GERAL + SALDO;
      END
      ELSE
      begin
        if (:PNAOMOSTRARSALDO = 0) then
        begin
          TOTAL_GERAL = TOTAL_GERAL + DEPOSITO - PAGAMENTO;
        end
        else
        begin
          TOTAL_GERAL_ANTERIOR = 0;
          TOTAL_GERAL = 0;
        end;
      end


Espero que ajude


Voce diz assim?
Código:
create or alter procedure XSP_REL_MOVBALANCETE (
    PID_CONTA varchar(1025),
    PDATA1 date,
    PDATA2 date,
    PSTATUS varchar(255),
    PCONDICAO varchar(255),
    PNAOMOSTRARSALDO integer,
    PUSUARIO varchar(100))
returns (
    ID_CONTA integer,
    NOME_CONTA varchar(100) character set WIN1252 collate WIN_PTBR,
    ID integer,
    DATA date,
    NUMERO varchar(20),
    ID_CLIENTE integer,
    FAVORECIDO varchar(100) character set WIN1252 collate WIN_PTBR,
    ID_PLANCONTA integer,
    NOME varchar(100) character set WIN1252 collate WIN_PTBR,
    HISTORICO varchar(200) character set WIN1252 collate WIN_PTBR,
    SALDO_ANT numeric(15,2),
    DEPOSITO numeric(15,2),
    PAGAMENTO numeric(15,2),
    SALDO numeric(15,2),
    TIPO integer,
    STATUS integer,
    ID_CCUSTO integer,
    NOME_CCUSTO varchar(100) character set WIN1252 collate WIN_PTBR,
    VALOR numeric(15,2),
    NOME_TIPO_RECEITA_DESPESA varchar(100),
    D_C char(1),
    TOTAL_GERAL numeric(15,2),
    SALDO_POR_PLANOCONTA numeric(15,2),
    TOTAL_GERAL_DEBITO numeric(15,2),
    TOTAL_GERAL_CREDITO numeric(15,2),
    TOTAL_GERAL_ANTERIOR numeric(15,2))
as
declare variable ID_CONTA_ANT integer;
declare variable INICIO_PLANOCONTA char(1);
declare variable VID_PLANCONTA integer;
declare variable VNOME_TIPO_RECEITA_DESPESA varchar(100);
BEGIN
ID_CONTA_ANT = 0;
total_geral_debito = 0;
total_geral_credito = 0;
VID_PLANCONTA = 0;
vnome_tipo_receita_despesa = '';
FOR
SELECT
MC.ID_CONTA,
MC.ID,
MC.DATA,
MC.NUMERO,
MC.ID_CLIENTE,
CASE WHEN MC.FAVORECIDO IS NULL THEN
C.NOMEFANTASIA
ELSE
MC.FAVORECIDO
END,
MC.ID_PLANCONTA,
MC.ID_CCUSTO,
MC.HISTORICO,
MC.STATUS,
MC.TIPO,
CASE WHEN MC.TIPO IN (0, 3) THEN '< RECEITAS >'
     WHEN MC.TIPO IN (1, 2) THEN '< DESPESAS >'
END AS NOME_TIPO_RECEITA_DESPESA,
MC.VALOR * CASE WHEN MC.TIPO IN (0, 3) THEN 1 ELSE 0 END,
MC.VALOR * CASE WHEN MC.TIPO IN (1, 2) THEN 1 ELSE 0 END,
MC.VALOR * CASE WHEN MC.TIPO IN (0, 3) THEN 1 ELSE -1 END,
IIF( MC.TIPO IN (1, 2), 'D', 'C')
FROM MOVCONTA MC
LEFT JOIN CLIENTE C ON C.ID = MC.ID_CLIENTE
LEFT JOIN USUARIOCONTAS UC ON UC.CONTA_ID = MC.ID_CONTA
WHERE POSITION(cast(MC.ID_CONTA as varchar(1025)) || ',', :PID_CONTA) > 0
AND  MC.DATA <= : PDATA2
AND ( (UPPER(C.NOMEFANTASIA) LIKE :PCONDICAO) OR
     (UPPER(MC.FAVORECIDO) LIKE :PCONDICAO) )
AND ((UC.CD_USUARIO LIKE :PUSUARIO) or (UC.cd_usuario IS NULL))
ORDER BY NOME_TIPO_RECEITA_DESPESA DESC, MC.ID_PLANCONTA, MC.Data, MC.ID
INTO : ID_CONTA, : ID, : DATA, : NUMERO, : ID_CLIENTE, : FAVORECIDO,
: ID_PLANCONTA, : ID_CCUSTO, : HISTORICO, : STATUS, : TIPO, : NOME_TIPO_RECEITA_DESPESA,
: DEPOSITO, : PAGAMENTO, : VALOR, : D_C
DO BEGIN
if (nome_tipo_receita_despesa <> vnome_tipo_receita_despesa) then
BEGIN
  TOTAL_GERAL = 0;
  vnome_tipo_receita_despesa = nome_tipo_receita_despesa;
END
if (id_planconta <> vid_planconta) then
BEGIN
  INICIO_PLANOCONTA = 'S';
  saldo_por_planoconta = 0;
  SALDO = 0;
  vid_planconta = id_planconta;
END

if (:PNAOMOSTRARSALDO = 0) then
begin
  SALDO_ANT = SALDO;
end
else
  saldo_ant = 0;

--TOTAL_GERAL_ANTERIOR = TOTAL_GERAL;

IF (: STATUS <> 30) THEN
BEGIN
    if (: data >= : pdata1 ) then
      saldo_por_planoconta = saldo_por_planoconta + DEPOSITO - PAGAMENTO;
    total_geral_credito = total_geral_credito + deposito;
    total_geral_debito = total_geral_debito +- pagamento;
    if (:PNAOMOSTRARSALDO = 0) then
    begin
      SALDO = SALDO + DEPOSITO - PAGAMENTO;
    end
    else
      SALDO = 0;
    END

    IF (: DATA >= : PDATA1) THEN
    BEGIN
      IF (INICIO_PLANOCONTA = 'S') THEN
      BEGIN
        INICIO_PLANOCONTA = 'N';
        TOTAL_GERAL_ANTERIOR = TOTAL_GERAL_ANTERIOR + SALDO;
        TOTAL_GERAL = TOTAL_GERAL + SALDO;
      END
      ELSE
      begin
        if (:PNAOMOSTRARSALDO = 0) then
        begin
          TOTAL_GERAL = TOTAL_GERAL + DEPOSITO - PAGAMENTO;
        end
        else
        begin
          TOTAL_GERAL_ANTERIOR = 0;
          TOTAL_GERAL = 0;
        end
      end

      SELECT REPLACE (CT.NOME,  '  ', ' ') AS NOME_CONTA
        FROM CONTA CT
       WHERE CT.ID = :ID_CONTA
       INTO : NOME_CONTA;
      SELECT PC.NOME
        FROM PLANODECONTAS PC
       WHERE PC.ID = :ID_PLANCONTA
        INTO : NOME;
      SELECT CC.NOME
        FROM CENTRODECUSTO CC
       WHERE CC.ID = :ID_CCUSTO
        INTO : NOME_CCUSTO;
      SUSPEND;
    END
  END
END


Se for ai vem NULL o campo
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Qua Mar 03, 2021 5:44 pm    Assunto: Responder com Citação

Faltou inicializar a variavel = 0

Mais deu diferença

Tenho nesse campo assim
113.388,16
98.268,07
14.148,68

225.804,91

Mais ele retornou
226.642,32

Como esta a SP
Código:
CREATE OR ALTER procedure XSP_REL_MOVBALANCETE (
    PID_CONTA varchar(1025),
    PDATA1 date,
    PDATA2 date,
    PSTATUS varchar(255),
    PCONDICAO varchar(255),
    PNAOMOSTRARSALDO integer,
    PUSUARIO varchar(100))
returns (
    ID_CONTA integer,
    NOME_CONTA varchar(100) character set WIN1252 collate WIN_PTBR,
    ID integer,
    DATA date,
    NUMERO varchar(20),
    ID_CLIENTE integer,
    FAVORECIDO varchar(100) character set WIN1252 collate WIN_PTBR,
    ID_PLANCONTA integer,
    NOME varchar(100) character set WIN1252 collate WIN_PTBR,
    HISTORICO varchar(200) character set WIN1252 collate WIN_PTBR,
    SALDO_ANT numeric(15,2),
    DEPOSITO numeric(15,2),
    PAGAMENTO numeric(15,2),
    SALDO numeric(15,2),
    TIPO integer,
    STATUS integer,
    ID_CCUSTO integer,
    NOME_CCUSTO varchar(100) character set WIN1252 collate WIN_PTBR,
    VALOR numeric(15,2),
    NOME_TIPO_RECEITA_DESPESA varchar(100),
    D_C char(1),
    TOTAL_GERAL numeric(15,2),
    SALDO_POR_PLANOCONTA numeric(15,2),
    TOTAL_GERAL_DEBITO numeric(15,2),
    TOTAL_GERAL_CREDITO numeric(15,2),
    TOTAL_GERAL_ANTERIOR numeric(15,2))
as
declare variable ID_CONTA_ANT integer;
declare variable INICIO_PLANOCONTA char(1);
declare variable VID_PLANCONTA integer;
declare variable VNOME_TIPO_RECEITA_DESPESA varchar(100);
BEGIN
ID_CONTA_ANT = 0;
total_geral_debito = 0;
total_geral_credito = 0;
VID_PLANCONTA = 0;
vnome_tipo_receita_despesa = '';
FOR
SELECT
MC.ID_CONTA,
MC.ID,
MC.DATA,
MC.NUMERO,
MC.ID_CLIENTE,
CASE WHEN MC.FAVORECIDO IS NULL THEN
C.NOMEFANTASIA
ELSE
MC.FAVORECIDO
END,
MC.ID_PLANCONTA,
MC.ID_CCUSTO,
MC.HISTORICO,
MC.STATUS,
MC.TIPO,
CASE WHEN MC.TIPO IN (0, 3) THEN '< RECEITAS >'
     WHEN MC.TIPO IN (1, 2) THEN '< DESPESAS >'
END AS NOME_TIPO_RECEITA_DESPESA,
MC.VALOR * CASE WHEN MC.TIPO IN (0, 3) THEN 1 ELSE 0 END,
MC.VALOR * CASE WHEN MC.TIPO IN (1, 2) THEN 1 ELSE 0 END,
MC.VALOR * CASE WHEN MC.TIPO IN (0, 3) THEN 1 ELSE -1 END,
IIF( MC.TIPO IN (1, 2), 'D', 'C')
FROM MOVCONTA MC
LEFT JOIN CLIENTE C ON C.ID = MC.ID_CLIENTE
LEFT JOIN USUARIOCONTAS UC ON UC.CONTA_ID = MC.ID_CONTA
WHERE POSITION(cast(MC.ID_CONTA as varchar(1025)) || ',', :PID_CONTA) > 0
AND  MC.DATA <= : PDATA2
AND ( (UPPER(C.NOMEFANTASIA) LIKE :PCONDICAO) OR
     (UPPER(MC.FAVORECIDO) LIKE :PCONDICAO) )
AND ((UC.CD_USUARIO LIKE :PUSUARIO) or (UC.cd_usuario IS NULL))
ORDER BY NOME_TIPO_RECEITA_DESPESA DESC, MC.ID_PLANCONTA, MC.Data, MC.ID
INTO : ID_CONTA, : ID, : DATA, : NUMERO, : ID_CLIENTE, : FAVORECIDO,
: ID_PLANCONTA, : ID_CCUSTO, : HISTORICO, : STATUS, : TIPO, : NOME_TIPO_RECEITA_DESPESA,
: DEPOSITO, : PAGAMENTO, : VALOR, : D_C
DO BEGIN

if (nome_tipo_receita_despesa <> vnome_tipo_receita_despesa) then
BEGIN
  TOTAL_GERAL = 0;
  TOTAL_GERAL_ANTERIOR = 0;
  vnome_tipo_receita_despesa = nome_tipo_receita_despesa;
END
if (id_planconta <> vid_planconta) then
BEGIN
  INICIO_PLANOCONTA = 'S';
  saldo_por_planoconta = 0;
  SALDO = 0;
  vid_planconta = id_planconta;
END

if (:PNAOMOSTRARSALDO = 0) then
begin
  SALDO_ANT = SALDO;
end
else
  saldo_ant = 0;

IF (: STATUS <> 30) THEN
BEGIN
    if (: data >= : pdata1 ) then
      saldo_por_planoconta = saldo_por_planoconta + DEPOSITO - PAGAMENTO;
    total_geral_credito = total_geral_credito + deposito;
    total_geral_debito = total_geral_debito +- pagamento;
    if (:PNAOMOSTRARSALDO = 0) then
    begin
      SALDO = SALDO + DEPOSITO - PAGAMENTO;
    end
    else
      SALDO = 0;
    END

    IF (: DATA >= : PDATA1) THEN
    BEGIN
      IF (INICIO_PLANOCONTA = 'S') THEN
      BEGIN
        INICIO_PLANOCONTA = 'N';
        TOTAL_GERAL_ANTERIOR = TOTAL_GERAL_ANTERIOR + SALDO;
        TOTAL_GERAL = TOTAL_GERAL + SALDO;
      END
      ELSE
      begin
        if (:PNAOMOSTRARSALDO = 0) then
        begin
          TOTAL_GERAL = TOTAL_GERAL + DEPOSITO - PAGAMENTO;
        end
        else
        begin
          TOTAL_GERAL_ANTERIOR = 0;
          TOTAL_GERAL = 0;
        end
      end

      SELECT REPLACE (CT.NOME,  '  ', ' ') AS NOME_CONTA
        FROM CONTA CT
       WHERE CT.ID = :ID_CONTA
       INTO : NOME_CONTA;
      SELECT PC.NOME
        FROM PLANODECONTAS PC
       WHERE PC.ID = :ID_PLANCONTA
        INTO : NOME;
      SELECT CC.NOME
        FROM CENTRODECUSTO CC
       WHERE CC.ID = :ID_CCUSTO
        INTO : NOME_CCUSTO;
      SUSPEND;
    END
  END
END

_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Qua Mar 03, 2021 5:47 pm    Assunto: Responder com Citação

adriano_servitec escreveu:
Faltou inicializar a variavel = 0

Mais deu diferença

Tenho nesse campo assim
113.388,16
98.268,07
14.148,68

225.804,91

Mais ele retornou
226.642,32

Como esta a SP
Código:
CREATE OR ALTER procedure XSP_REL_MOVBALANCETE (
    PID_CONTA varchar(1025),
    PDATA1 date,
    PDATA2 date,
    PSTATUS varchar(255),
    PCONDICAO varchar(255),
    PNAOMOSTRARSALDO integer,
    PUSUARIO varchar(100))
returns (
    ID_CONTA integer,
    NOME_CONTA varchar(100) character set WIN1252 collate WIN_PTBR,
    ID integer,
    DATA date,
    NUMERO varchar(20),
    ID_CLIENTE integer,
    FAVORECIDO varchar(100) character set WIN1252 collate WIN_PTBR,
    ID_PLANCONTA integer,
    NOME varchar(100) character set WIN1252 collate WIN_PTBR,
    HISTORICO varchar(200) character set WIN1252 collate WIN_PTBR,
    SALDO_ANT numeric(15,2),
    DEPOSITO numeric(15,2),
    PAGAMENTO numeric(15,2),
    SALDO numeric(15,2),
    TIPO integer,
    STATUS integer,
    ID_CCUSTO integer,
    NOME_CCUSTO varchar(100) character set WIN1252 collate WIN_PTBR,
    VALOR numeric(15,2),
    NOME_TIPO_RECEITA_DESPESA varchar(100),
    D_C char(1),
    TOTAL_GERAL numeric(15,2),
    SALDO_POR_PLANOCONTA numeric(15,2),
    TOTAL_GERAL_DEBITO numeric(15,2),
    TOTAL_GERAL_CREDITO numeric(15,2),
    TOTAL_GERAL_ANTERIOR numeric(15,2))
as
declare variable ID_CONTA_ANT integer;
declare variable INICIO_PLANOCONTA char(1);
declare variable VID_PLANCONTA integer;
declare variable VNOME_TIPO_RECEITA_DESPESA varchar(100);
BEGIN
ID_CONTA_ANT = 0;
total_geral_debito = 0;
total_geral_credito = 0;
VID_PLANCONTA = 0;
vnome_tipo_receita_despesa = '';
FOR
SELECT
MC.ID_CONTA,
MC.ID,
MC.DATA,
MC.NUMERO,
MC.ID_CLIENTE,
CASE WHEN MC.FAVORECIDO IS NULL THEN
C.NOMEFANTASIA
ELSE
MC.FAVORECIDO
END,
MC.ID_PLANCONTA,
MC.ID_CCUSTO,
MC.HISTORICO,
MC.STATUS,
MC.TIPO,
CASE WHEN MC.TIPO IN (0, 3) THEN '< RECEITAS >'
     WHEN MC.TIPO IN (1, 2) THEN '< DESPESAS >'
END AS NOME_TIPO_RECEITA_DESPESA,
MC.VALOR * CASE WHEN MC.TIPO IN (0, 3) THEN 1 ELSE 0 END,
MC.VALOR * CASE WHEN MC.TIPO IN (1, 2) THEN 1 ELSE 0 END,
MC.VALOR * CASE WHEN MC.TIPO IN (0, 3) THEN 1 ELSE -1 END,
IIF( MC.TIPO IN (1, 2), 'D', 'C')
FROM MOVCONTA MC
LEFT JOIN CLIENTE C ON C.ID = MC.ID_CLIENTE
LEFT JOIN USUARIOCONTAS UC ON UC.CONTA_ID = MC.ID_CONTA
WHERE POSITION(cast(MC.ID_CONTA as varchar(1025)) || ',', :PID_CONTA) > 0
AND  MC.DATA <= : PDATA2
AND ( (UPPER(C.NOMEFANTASIA) LIKE :PCONDICAO) OR
     (UPPER(MC.FAVORECIDO) LIKE :PCONDICAO) )
AND ((UC.CD_USUARIO LIKE :PUSUARIO) or (UC.cd_usuario IS NULL))
ORDER BY NOME_TIPO_RECEITA_DESPESA DESC, MC.ID_PLANCONTA, MC.Data, MC.ID
INTO : ID_CONTA, : ID, : DATA, : NUMERO, : ID_CLIENTE, : FAVORECIDO,
: ID_PLANCONTA, : ID_CCUSTO, : HISTORICO, : STATUS, : TIPO, : NOME_TIPO_RECEITA_DESPESA,
: DEPOSITO, : PAGAMENTO, : VALOR, : D_C
DO BEGIN

if (nome_tipo_receita_despesa <> vnome_tipo_receita_despesa) then
BEGIN
  TOTAL_GERAL = 0;
  TOTAL_GERAL_ANTERIOR = 0;
  vnome_tipo_receita_despesa = nome_tipo_receita_despesa;
END
if (id_planconta <> vid_planconta) then
BEGIN
  INICIO_PLANOCONTA = 'S';
  saldo_por_planoconta = 0;
  SALDO = 0;
  vid_planconta = id_planconta;
END

if (:PNAOMOSTRARSALDO = 0) then
begin
  SALDO_ANT = SALDO;
end
else
  saldo_ant = 0;

IF (: STATUS <> 30) THEN
BEGIN
    if (: data >= : pdata1 ) then
      saldo_por_planoconta = saldo_por_planoconta + DEPOSITO - PAGAMENTO;
    total_geral_credito = total_geral_credito + deposito;
    total_geral_debito = total_geral_debito +- pagamento;
    if (:PNAOMOSTRARSALDO = 0) then
    begin
      SALDO = SALDO + DEPOSITO - PAGAMENTO;
    end
    else
      SALDO = 0;
    END

    IF (: DATA >= : PDATA1) THEN
    BEGIN
      IF (INICIO_PLANOCONTA = 'S') THEN
      BEGIN
        INICIO_PLANOCONTA = 'N';
        TOTAL_GERAL_ANTERIOR = TOTAL_GERAL_ANTERIOR + SALDO;
        TOTAL_GERAL = TOTAL_GERAL + SALDO;
      END
      ELSE
      begin
        if (:PNAOMOSTRARSALDO = 0) then
        begin
          TOTAL_GERAL = TOTAL_GERAL + DEPOSITO - PAGAMENTO;
        end
        else
        begin
          TOTAL_GERAL_ANTERIOR = 0;
          TOTAL_GERAL = 0;
        end
      end

      SELECT REPLACE (CT.NOME,  '  ', ' ') AS NOME_CONTA
        FROM CONTA CT
       WHERE CT.ID = :ID_CONTA
       INTO : NOME_CONTA;
      SELECT PC.NOME
        FROM PLANODECONTAS PC
       WHERE PC.ID = :ID_PLANCONTA
        INTO : NOME;
      SELECT CC.NOME
        FROM CENTRODECUSTO CC
       WHERE CC.ID = :ID_CCUSTO
        INTO : NOME_CCUSTO;
      SUSPEND;
    END
  END
END


Achei o problema Imex
tem que ser assim
Código:
TOTAL_GERAL_ANTERIOR = TOTAL_GERAL_ANTERIOR + saldo_ant;


Resolvido amigo.
Obrigado
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Ir à página Anterior  1, 2, 3, 4, 5
Página 5 de 5

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB