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 

Soma por coluna do mes?
Ir à página Anterior  1, 2
 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
imex
Moderador
Moderador


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

MensagemEnviada: Qui Mar 11, 2021 5:21 pm    Assunto: Responder com Citação

Experimente acrescentar um Cast:

Código:
(EXTRACT(YEAR FROM data) - cast(:panoini as integer)) * 12 +
 EXTRACT(MONTH FROM data) - cast(:pmesini as integer) as Coluna,


Mas acho que com a query na aplicação ou SP não será necessário acrescentar esses Casts.

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: Qui Mar 11, 2021 5:28 pm    Assunto: Responder com Citação

imex escreveu:
Experimente acrescentar um Cast:

Código:
(EXTRACT(YEAR FROM data) - cast(:panoini as integer)) * 12 +
 EXTRACT(MONTH FROM data) - cast(:pmesini as integer) as Coluna,


Mas acho que com a query na aplicação ou SP não será necessário acrescentar esses Casts.

Espero que ajude
Sim bateu os valores e 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: Sex Mar 12, 2021 10:25 am    Assunto: Responder com Citação

Segue uma sugestão para testes:

Código:
create or alter procedure Minha_SP (
    PMESINI integer,
    PANOINI integer,
    PDATAINI date,
    PDATAFIM date)
returns (
    TIPO integer,
    PLANO_CONTAS varchar(100),
    COLUNA0 decimal(18, 2),
    COLUNA1 decimal(18, 2),
    COLUNA2 decimal(18, 2),
    COLUNA3 decimal(18, 2),
    COLUNA4 decimal(18, 2),
    COLUNA5 decimal(18, 2),
    COLUNA6 decimal(18, 2),
    COLUNA7 decimal(18, 2),
    COLUNA8 decimal(18, 2),
    COLUNA9 decimal(18, 2),
    COLUNA10 decimal(18, 2),
    COLUNA11 decimal(18, 2),
    SOMA_COLUNA decimal(18, 2)
as
  declare variable ANT_TIPO integer;

  declare variable REG_TIPO integer;
  declare variable REG_PLANO_CONTAS varchar(100);
  declare variable REG_COLUNA0 decimal(18, 2);

  declare variable TOT_COLUNA0 decimal(18, 2);

  declare variable GER_COLUNA0 decimal(18, 2);
begin
  TIPO_ANT = -1;
  GER_COLUNA0 = 0;

  WITH CTE_COL AS
  (
    SELECT
      tipo,
      id_planconta,
      (EXTRACT(YEAR FROM data) - :panoini) * 12 + EXTRACT(MONTH FROM data) - :pmesini as Coluna,
      SUM(valor) as valor
    FROM movconta
    WHERE
      data between :pdataini AND :pdatafim AND
      TIPO IN (0, 1)
    GROUP BY
      1, 2, 3
  )

  FOR
    SELECT
      a.tipo,
      b.nome AS plano_contas,
      SUM(IIF(a.Coluna = 0, a.valor, 0)) AS COLUNA0
    FROM CTE_COL A
    INNER JOIN planodecontas b ON b.id = A.id_planconta
    group BY 1, 2
    order by tipo, plano_contas

  INTO :REG_TIPO, :REG_PLANO_CONTAS, :REG_COLUNA0

  DO BEGIN
    IF (REG_TIPO <> ANT_TIPO) THEN
      BEGIN
        IF (ANT_TIPO <> -1) THEN
          BEGIN
            TIPO = ANT_TIPO;
            PLANO_CONTAS = 'TOTAL TIPO';
            COLUNA0 = TOT_COLUNA0;
            SUSPEND;
          END;

        GER_COLUNA0 = GER_COLUNA0 + TOT_COLUNA0;
        TOT_COLUNA0 = 0;
        ANT_TIPO = TIPO;
      END

    TOT_COLUNA0 = TOT_COLUNA0 + REG_COLUNA0;

    TIPO = REG_TIPO;
    PLANO_CONTAS = REG_PLANO_CONTAS;
    COLUNA0 = REG_COLUNA0;
    SUSPEND;
  END

  GER_COLUNA0 = GER_COLUNA0 + TOT_COLUNA0;

  TIPO = ANT_TIPO;
  PLANO_CONTAS = 'TOTAL TIPO';
  COLUNA0 = TOT_COLUNA0;
  SUSPEND;

  TIPO = NULL;
  PLANO_CONTAS = 'TOTAL GERAL';
  COLUNA0 = GER_COLUNA0;
  SUSPEND;
end^


Coloquei as variáveis REG, TOT e GER apenas para a primeira coluna, é só acrescentar e repetir o código para as demais colunas.
Acredito que a partir dessa sugestão seja possível fazer as adaptações para alcançar o resultado esperado.

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: Sex Mar 12, 2021 11:02 am    Assunto: Responder com Citação

imex escreveu:
Segue uma sugestão para testes:

Código:
create or alter procedure Minha_SP (
    PMESINI integer,
    PANOINI integer,
    PDATAINI date,
    PDATAFIM date)
returns (
    TIPO integer,
    PLANO_CONTAS varchar(100),
    COLUNA0 decimal(18, 2),
    COLUNA1 decimal(18, 2),
    COLUNA2 decimal(18, 2),
    COLUNA3 decimal(18, 2),
    COLUNA4 decimal(18, 2),
    COLUNA5 decimal(18, 2),
    COLUNA6 decimal(18, 2),
    COLUNA7 decimal(18, 2),
    COLUNA8 decimal(18, 2),
    COLUNA9 decimal(18, 2),
    COLUNA10 decimal(18, 2),
    COLUNA11 decimal(18, 2),
    SOMA_COLUNA decimal(18, 2)
as
  declare variable ANT_TIPO integer;

  declare variable REG_TIPO integer;
  declare variable REG_PLANO_CONTAS varchar(100);
  declare variable REG_COLUNA0 decimal(18, 2);

  declare variable TOT_COLUNA0 decimal(18, 2);

  declare variable GER_COLUNA0 decimal(18, 2);
begin
  TIPO_ANT = -1;
  GER_COLUNA0 = 0;

  WITH CTE_COL AS
  (
    SELECT
      tipo,
      id_planconta,
      (EXTRACT(YEAR FROM data) - :panoini) * 12 + EXTRACT(MONTH FROM data) - :pmesini as Coluna,
      SUM(valor) as valor
    FROM movconta
    WHERE
      data between :pdataini AND :pdatafim AND
      TIPO IN (0, 1)
    GROUP BY
      1, 2, 3
  )

  FOR
    SELECT
      a.tipo,
      b.nome AS plano_contas,
      SUM(IIF(a.Coluna = 0, a.valor, 0)) AS COLUNA0
    FROM CTE_COL A
    INNER JOIN planodecontas b ON b.id = A.id_planconta
    group BY 1, 2
    order by tipo, plano_contas

  INTO :REG_TIPO, :REG_PLANO_CONTAS, :REG_COLUNA0

  DO BEGIN
    IF (REG_TIPO <> ANT_TIPO) THEN
      BEGIN
        IF (ANT_TIPO <> -1) THEN
          BEGIN
            TIPO = ANT_TIPO;
            PLANO_CONTAS = 'TOTAL TIPO';
            COLUNA0 = TOT_COLUNA0;
            SUSPEND;
          END;

        GER_COLUNA0 = GER_COLUNA0 + TOT_COLUNA0;
        TOT_COLUNA0 = 0;
        ANT_TIPO = TIPO;
      END

    TOT_COLUNA0 = TOT_COLUNA0 + REG_COLUNA0;

    TIPO = REG_TIPO;
    PLANO_CONTAS = REG_PLANO_CONTAS;
    COLUNA0 = REG_COLUNA0;
    SUSPEND;
  END

  GER_COLUNA0 = GER_COLUNA0 + TOT_COLUNA0;

  TIPO = ANT_TIPO;
  PLANO_CONTAS = 'TOTAL TIPO';
  COLUNA0 = TOT_COLUNA0;
  SUSPEND;

  TIPO = NULL;
  PLANO_CONTAS = 'TOTAL GERAL';
  COLUNA0 = GER_COLUNA0;
  SUSPEND;
end^


Coloquei as variáveis REG, TOT e GER apenas para a primeira coluna, é só acrescentar e repetir o código para as demais colunas.
Acredito que a partir dessa sugestão seja possível fazer as adaptações para alcançar o resultado esperado.

Espero que ajude


Bom dia Imex,

Sabe porque esta dando problema no FOR do select?
Tentei rodar mais não deu certo
Código:
SQL error code = -104.
Token unknown - line 51, column 3.
FOR.

_________________
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: Sex Mar 12, 2021 11:19 am    Assunto: Responder com Citação

Bom dia,

Experimente colocar somente o For antes do With para ver se funciona.

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: Sex Mar 12, 2021 11:27 am    Assunto: Responder com Citação

imex escreveu:
Bom dia,

Experimente colocar somente o For antes do With para ver se funciona.

Espero que ajude


No primeiro momento rodou tive que colocar uma variavel TIPO_ANT também para compilar.

Mais não me trouxe o TOTAL_LINHA, TOTAL_TIPO E TOTAL_GERAL .

Código:
CREATE OR ALTER procedure MINHA_SP (
    PMESINI integer,
    PANOINI integer,
    PDATAINI date,
    PDATAFIM date)
returns (
    TIPO integer,
    TIPO_ANT integer,
    PLANO_CONTAS varchar(100),
    COLUNA0 decimal(18,2),
    COLUNA1 decimal(18,2),
    COLUNA2 decimal(18,2),
    COLUNA3 decimal(18,2),
    COLUNA4 decimal(18,2),
    COLUNA5 decimal(18,2),
    COLUNA6 decimal(18,2),
    COLUNA7 decimal(18,2),
    COLUNA8 decimal(18,2),
    COLUNA9 decimal(18,2),
    COLUNA10 decimal(18,2),
    COLUNA11 decimal(18,2),
    SOMA_COLUNA decimal(18,2))
as
declare variable ANT_TIPO integer;
declare variable REG_TIPO integer;
declare variable REG_PLANO_CONTAS varchar(100);
declare variable REG_COLUNA0 decimal(18,2);
declare variable TOT_COLUNA0 decimal(18,2);
declare variable GER_COLUNA0 decimal(18,2);
begin
  TIPO_ANT = -1;
  GER_COLUNA0 = 0;
  FOR
      WITH CTE_COL AS
      (
        SELECT
          tipo,
          id_planconta,
          (EXTRACT(YEAR FROM data) - :panoini) * 12 + EXTRACT(MONTH FROM data) - :pmesini as Coluna,
          SUM(valor) as valor
        FROM movconta
        WHERE
          data between :pdataini AND :pdatafim AND
          TIPO IN (0, 1)
        GROUP BY
          1, 2, 3
      )

  SELECT
      a.tipo,
      b.nome AS plano_contas,
      SUM(IIF(a.Coluna = 0, a.valor, 0)) AS COLUNA0
    FROM CTE_COL A
    INNER JOIN planodecontas b ON b.id = A.id_planconta
    group BY 1, 2
    order by tipo, plano_contas

  INTO :REG_TIPO, :REG_PLANO_CONTAS, :REG_COLUNA0

  DO BEGIN
    IF (REG_TIPO <> ANT_TIPO) THEN
      BEGIN
        IF (ANT_TIPO <> -1) THEN
          BEGIN
            TIPO = ANT_TIPO;
            PLANO_CONTAS = 'TOTAL TIPO';
            COLUNA0 = TOT_COLUNA0;
            SUSPEND;
          END

        GER_COLUNA0 = GER_COLUNA0 + TOT_COLUNA0;
        TOT_COLUNA0 = 0;
        ANT_TIPO = TIPO;
      END

    TOT_COLUNA0 = TOT_COLUNA0 + REG_COLUNA0;

    TIPO = REG_TIPO;
    PLANO_CONTAS = REG_PLANO_CONTAS;
    COLUNA0 = REG_COLUNA0;
    SUSPEND;
  END

  GER_COLUNA0 = GER_COLUNA0 + TOT_COLUNA0;

  TIPO = ANT_TIPO;
  PLANO_CONTAS = 'TOTAL TIPO';
  COLUNA0 = TOT_COLUNA0;
  SUSPEND;

  TIPO = NULL;
  PLANO_CONTAS = 'TOTAL GERAL';
  COLUNA0 = GER_COLUNA0;
  SUSPEND;
end


Sei que é apenas da primeira coluna que foi feito, mais não somou.

outra coisa Imex, preciso separar o TIPO = 0 DO TIPO = 1
Qye são campo
0 - RECEITAS
1 - DESPESA
DEPOIS O TOTAL GERAL.
_________________
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: Sex Mar 12, 2021 2:09 pm    Assunto: Responder com Citação

Boa tarde Imex,

Montei aqui a SP


Código:
CREATE OR ALTER procedure MINHA_SP (
    PMESINI integer,
    PANOINI integer,
    PDATAINI date,
    PDATAFIM date)
returns (
    TIPO integer,
    TIPO_ANT integer,
    PLANO_CONTAS varchar(100),
    COLUNA0 decimal(18,2),
    COLUNA1 decimal(18,2),
    COLUNA2 decimal(18,2),
    COLUNA3 decimal(18,2),
    COLUNA4 decimal(18,2),
    COLUNA5 decimal(18,2),
    COLUNA6 decimal(18,2),
    COLUNA7 decimal(18,2),
    COLUNA8 decimal(18,2),
    COLUNA9 decimal(18,2),
    COLUNA10 decimal(18,2),
    COLUNA11 decimal(18,2),
    SOMA_COLUNA decimal(18,2))
as
declare variable ANT_TIPO integer;
declare variable REG_TIPO integer;
declare variable REG_PLANO_CONTAS varchar(100);
declare variable REG_COLUNA0 numeric(15,2);
declare variable TOT_COLUNA0 numeric(15,2);
declare variable GER_COLUNA0 numeric(15,2);
declare variable REG_COLUNA1 numeric(15,2);
declare variable TOT_COLUNA1 numeric(15,2);
declare variable GER_COLUNA1 numeric(15,2);
declare variable REG_COLUNA2 numeric(15,2);
declare variable TOT_COLUNA2 numeric(15,2);
declare variable GER_COLUNA2 numeric(15,2);
declare variable REG_COLUNA3 numeric(15,2);
declare variable TOT_COLUNA3 numeric(15,2);
declare variable GER_COLUNA3 numeric(15,2);
declare variable REG_COLUNA4 numeric(15,2);
declare variable TOT_COLUNA4 numeric(15,2);
declare variable GER_COLUNA4 numeric(15,2);
declare variable REG_COLUNA5 numeric(15,2);
declare variable TOT_COLUNA5 numeric(15,2);
declare variable GER_COLUNA5 numeric(15,2);
declare variable REG_COLUNA6 numeric(15,2);
declare variable TOT_COLUNA6 numeric(15,2);
declare variable GER_COLUNA6 numeric(15,2);
declare variable REG_COLUNA7 numeric(15,2);
declare variable TOT_COLUNA7 numeric(15,2);
declare variable GER_COLUNA7 numeric(15,2);
declare variable REG_COLUNA8 numeric(15,2);
declare variable TOT_COLUNA8 numeric(15,2);
declare variable GER_COLUNA8 numeric(15,2);
declare variable REG_COLUNA9 numeric(15,2);
declare variable TOT_COLUNA9 numeric(15,2);
declare variable GER_COLUNA9 numeric(15,2);
declare variable REG_COLUNA10 numeric(15,2);
declare variable TOT_COLUNA10 numeric(15,2);
declare variable GER_COLUNA10 numeric(15,2);
declare variable REG_COLUNA11 numeric(15,2);
declare variable TOT_COLUNA11 numeric(15,2);
declare variable GER_COLUNA11 numeric(15,2);
begin
  TIPO_ANT = -1;
  GER_COLUNA0 = 0;
  GER_COLUNA1 = 0;
  GER_COLUNA2 = 0;
  GER_COLUNA3 = 0;
  GER_COLUNA4 = 0;
  GER_COLUNA5 = 0;
  GER_COLUNA6 = 0;
  GER_COLUNA7 = 0;
  GER_COLUNA8 = 0;
  GER_COLUNA9 = 0;
  GER_COLUNA10 = 0;
  GER_COLUNA11 = 0;
  FOR
      WITH CTE_COL AS
      (
        SELECT
          tipo,
          id_planconta,
          (EXTRACT(YEAR FROM data) - :panoini) * 12 + EXTRACT(MONTH FROM data) - :pmesini as Coluna,
          SUM(valor) as valor
        FROM movconta
        WHERE
          data between :pdataini AND :pdatafim AND
          TIPO IN (0, 1)
        GROUP BY
          1, 2, 3
      )

  SELECT
      a.tipo,
      b.nome AS plano_contas,
      SUM(IIF(a.Coluna = 0, a.valor, 0)) AS COLUNA0,
      SUM(IIF(a.Coluna = 1, a.valor, 0)) AS COLUNA1,
      SUM(IIF(a.Coluna = 2, a.valor, 0)) AS COLUNA2,
      SUM(IIF(a.Coluna = 3, a.valor, 0)) AS COLUNA3,
      SUM(IIF(a.Coluna = 4, a.valor, 0)) AS COLUNA4,
      SUM(IIF(a.Coluna = 5, a.valor, 0)) AS COLUNA5,
      SUM(IIF(a.Coluna = 6, a.valor, 0)) AS COLUNA6,
      SUM(IIF(a.Coluna = 7, a.valor, 0)) AS COLUNA7,
      SUM(IIF(a.Coluna = 8, a.valor, 0)) AS COLUNA8,
      SUM(IIF(a.Coluna = 9, a.valor, 0)) AS COLUNA9,
      SUM(IIF(a.Coluna = 10, a.valor, 0)) AS COLUNA10,
      SUM(IIF(a.Coluna = 11, a.valor, 0)) AS COLUNA11,
      SUM(A.VALOR) AS SOMA_COLUNA
    FROM CTE_COL A
    INNER JOIN planodecontas b ON b.id = A.id_planconta
    group BY 1, 2
    order by tipo, plano_contas

  INTO :REG_TIPO, :REG_PLANO_CONTAS, :REG_COLUNA0, :reg_coluna1,
  :REG_COLUNA2, :reg_coluna3,
  :REG_COLUNA4, :reg_coluna5,
  :REG_COLUNA6, :reg_coluna7,
  :REG_COLUNA8, :reg_coluna9,
  :REG_COLUNA10, :reg_coluna11,
  :soma_coluna

  DO BEGIN
    IF (REG_TIPO <> ANT_TIPO) THEN
      BEGIN
        IF (ANT_TIPO <> -1) THEN
          BEGIN
            TIPO = ANT_TIPO;
            PLANO_CONTAS = 'TOTAL TIPO';
            COLUNA0 = TOT_COLUNA0;
            coluna1 = tot_coluna1;
            COLUNA2 = TOT_COLUNA2;
            coluna3 = tot_coluna3;
            COLUNA4 = TOT_COLUNA4;
            coluna5 = tot_coluna5;
            COLUNA6 = TOT_COLUNA6;
            coluna7 = tot_coluna7;
            COLUNA8 = TOT_COLUNA8;
            coluna9 = tot_coluna9;
            COLUNA10 = TOT_COLUNA10;
            coluna11 = tot_coluna11;
            SUSPEND;
          END

        GER_COLUNA0 = GER_COLUNA0 + TOT_COLUNA0;
        GER_COLUNA1 = GER_COLUNA1 + TOT_COLUNA1;
        GER_COLUNA2 = GER_COLUNA2 + TOT_COLUNA2;
        GER_COLUNA3 = GER_COLUNA3 + TOT_COLUNA3;
        GER_COLUNA4 = GER_COLUNA4 + TOT_COLUNA4;
        GER_COLUNA5 = GER_COLUNA5 + TOT_COLUNA5;
        GER_COLUNA6 = GER_COLUNA6 + TOT_COLUNA6;
        GER_COLUNA7 = GER_COLUNA7 + TOT_COLUNA7;
        GER_COLUNA8 = GER_COLUNA8 + TOT_COLUNA8;
        GER_COLUNA9 = GER_COLUNA9 + TOT_COLUNA9;
        GER_COLUNA10 = GER_COLUNA10 + TOT_COLUNA10;
        GER_COLUNA11 = GER_COLUNA11 + TOT_COLUNA11;

        TOT_COLUNA0 = 0;
        TOT_COLUNA1 = 0;
        TOT_COLUNA2 = 0;
        TOT_COLUNA3 = 0;
        TOT_COLUNA4 = 0;
        TOT_COLUNA5 = 0;
        TOT_COLUNA6 = 0;
        TOT_COLUNA7 = 0;
        TOT_COLUNA8 = 0;
        TOT_COLUNA9 = 0;
        TOT_COLUNA10 = 0;
        TOT_COLUNA11 = 0;
        ANT_TIPO = TIPO;
      END

    TOT_COLUNA0 = TOT_COLUNA0 + REG_COLUNA0;
    TOT_COLUNA1 = tot_coluna1 + reg_coluna1;
    TOT_COLUNA2 = TOT_COLUNA2 + REG_COLUNA2;
    TOT_COLUNA3 = tot_coluna3 + reg_coluna3;
    TOT_COLUNA4 = TOT_COLUNA4 + REG_COLUNA4;
    TOT_COLUNA5 = tot_coluna5 + reg_coluna5;
    TOT_COLUNA6 = TOT_COLUNA6 + REG_COLUNA6;
    TOT_COLUNA7 = tot_coluna7 + reg_coluna7;
    TOT_COLUNA8 = TOT_COLUNA8 + REG_COLUNA8;
    TOT_COLUNA9 = tot_coluna9 + reg_coluna9;
    TOT_COLUNA10 = TOT_COLUNA10 + REG_COLUNA10;
    TOT_COLUNA11 = tot_coluna11 + reg_coluna11;

    TIPO = REG_TIPO;
    PLANO_CONTAS = REG_PLANO_CONTAS;
    COLUNA0 = REG_COLUNA0;
    coluna1 = reg_coluna1;
    COLUNA2 = REG_COLUNA2;
    coluna3 = reg_coluna3;
    COLUNA4 = REG_COLUNA4;
    coluna5 = reg_coluna5;
    COLUNA6 = REG_COLUNA6;
    coluna7 = reg_coluna7;
    COLUNA8 = REG_COLUNA8;
    coluna9 = reg_coluna9;
    COLUNA10 = REG_COLUNA10;
    coluna11 = reg_coluna11;
    SUSPEND;
  END

  GER_COLUNA0 = GER_COLUNA0 + TOT_COLUNA0;
  ger_coluna1 = ger_coluna1 + tot_coluna1;
  GER_COLUNA2 = GER_COLUNA2 + TOT_COLUNA2;
  ger_coluna3 = ger_coluna3 + tot_coluna3;
  GER_COLUNA4 = GER_COLUNA4 + TOT_COLUNA4;
  ger_coluna5 = ger_coluna5 + tot_coluna5;
  GER_COLUNA6 = GER_COLUNA6 + TOT_COLUNA6;
  ger_coluna7 = ger_coluna7 + tot_coluna7;
  GER_COLUNA8 = GER_COLUNA8 + TOT_COLUNA8;
  ger_coluna9 = ger_coluna9 + tot_coluna9;
  GER_COLUNA10 = GER_COLUNA10 + TOT_COLUNA10;
  ger_coluna11 = ger_coluna11 + tot_coluna11;

  TIPO = ANT_TIPO;
  PLANO_CONTAS = 'TOTAL TIPO';
  COLUNA0 = TOT_COLUNA0;
  coluna1 = tot_coluna1;
  COLUNA2 = TOT_COLUNA2;
  coluna3 = tot_coluna3;
  COLUNA4 = TOT_COLUNA4;
  coluna5 = tot_coluna5;
  COLUNA6 = TOT_COLUNA6;
  coluna7 = tot_coluna7;
  COLUNA8 = TOT_COLUNA8;
  coluna9 = tot_coluna9;
  COLUNA10 = TOT_COLUNA10;
  coluna11 = tot_coluna11;
  SUSPEND;

  TIPO = NULL;
  PLANO_CONTAS = 'TOTAL GERAL';
  COLUNA0 = GER_COLUNA0;
  coluna1 = ger_coluna1;
  COLUNA2 = GER_COLUNA2;
  coluna3 = GER_coluna3;
  COLUNA4 = GER_COLUNA4;
  coluna5 = GER_coluna5;
  COLUNA6 = GER_COLUNA6;
  coluna7 = GER_coluna7;
  COLUNA8 = GER_COLUNA8;
  coluna9 = GER_coluna9;
  COLUNA10 = GER_COLUNA10;
  coluna11 = GER_coluna11;
  SUSPEND;
end


Parece que esta somando corretamente as colunas, mais...

Preciso separar a soma da receita das despesas
O campo TOTAL_TIPO e TOTAL_GERAL não somou ficaram null

Só que como disse o TOTAL_TIPO deve ser o TIPO 0 (Receitas) TIPO 1 (Despesas)

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
imex
Moderador
Moderador


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

MensagemEnviada: Sex Mar 12, 2021 2:24 pm    Assunto: Responder com Citação

Boa tarde,

Esse TIPO_ANT não deve existir, remova ele do Returns, e a primeira linha depois do primeiro Begin deve ser ANT_TIPO:
Código:
  ANT_TIPO = -1;


E altere a linha onde está
Código:
        ANT_TIPO = TIPO;


para
Código:
        ANT_TIPO = REG_TIPO;


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: Sex Mar 12, 2021 2:31 pm    Assunto: Responder com Citação

imex escreveu:
Boa tarde,

Esse TIPO_ANT não deve existir, remova ele do Returns, e a primeira linha depois do primeiro Begin deve ser ANT_TIPO:
Código:
  ANT_TIPO = -1;


E altere a linha onde está
Código:
        ANT_TIPO = TIPO;


para
Código:
        ANT_TIPO = REG_TIPO;


Espero que ajude


Boa tarde Imex, o problema do das somas do TIPO foi resolvido, mais o TOTAL_GERAL não esta somando ainda

Aproveitando da situação...
Tem como na primeira linha aparecer RECEITAS
No resumo das receitas antes criar uma linha em branco
Depois o resumo da receita
pular mais uma linha
E na primeira linha proxima aparecer DESPESA
e no resumo da DESPESAS pular uma linha antes
depois pular outra linha para trazer o total geral

Pois assim fica muito junto e dificil de ver

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
imex
Moderador
Moderador


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

MensagemEnviada: Sex Mar 12, 2021 3:47 pm    Assunto: Responder com Citação

Experimente colocar as somas dos totais gerais dentro do If como está no trecho abaixo:

Código:
        IF (ANT_TIPO <> -1) THEN
          BEGIN
            TIPO = ANT_TIPO;
            PLANO_CONTAS = 'TOTAL TIPO';
            COLUNA0 = TOT_COLUNA0;
            coluna1 = tot_coluna1;
            COLUNA2 = TOT_COLUNA2;
            coluna3 = tot_coluna3;
            COLUNA4 = TOT_COLUNA4;
            coluna5 = tot_coluna5;
            COLUNA6 = TOT_COLUNA6;
            coluna7 = tot_coluna7;
            COLUNA8 = TOT_COLUNA8;
            coluna9 = tot_coluna9;
            COLUNA10 = TOT_COLUNA10;
            coluna11 = tot_coluna11;
            SUSPEND;

            GER_COLUNA0 = GER_COLUNA0 + TOT_COLUNA0;
            GER_COLUNA1 = GER_COLUNA1 + TOT_COLUNA1;
            GER_COLUNA2 = GER_COLUNA2 + TOT_COLUNA2;
            GER_COLUNA3 = GER_COLUNA3 + TOT_COLUNA3;
            GER_COLUNA4 = GER_COLUNA4 + TOT_COLUNA4;
            GER_COLUNA5 = GER_COLUNA5 + TOT_COLUNA5;
            GER_COLUNA6 = GER_COLUNA6 + TOT_COLUNA6;
            GER_COLUNA7 = GER_COLUNA7 + TOT_COLUNA7;
            GER_COLUNA8 = GER_COLUNA8 + TOT_COLUNA8;
            GER_COLUNA9 = GER_COLUNA9 + TOT_COLUNA9;
            GER_COLUNA10 = GER_COLUNA10 + TOT_COLUNA10;
            GER_COLUNA11 = GER_COLUNA11 + TOT_COLUNA11;
          END


Sobre essas linhas adicionais, para acrescentar uma linha no resultado você tem que acrescentar um Suspend, preenchendo antes os parâmetros do Returns com os valores que devem ser retornados na linha em questão.

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: Sex Mar 12, 2021 3:52 pm    Assunto: Responder com Citação

imex escreveu:
Experimente colocar as somas dos totais gerais dentro do If como está no trecho abaixo:

Código:
        IF (ANT_TIPO <> -1) THEN
          BEGIN
            TIPO = ANT_TIPO;
            PLANO_CONTAS = 'TOTAL TIPO';
            COLUNA0 = TOT_COLUNA0;
            coluna1 = tot_coluna1;
            COLUNA2 = TOT_COLUNA2;
            coluna3 = tot_coluna3;
            COLUNA4 = TOT_COLUNA4;
            coluna5 = tot_coluna5;
            COLUNA6 = TOT_COLUNA6;
            coluna7 = tot_coluna7;
            COLUNA8 = TOT_COLUNA8;
            coluna9 = tot_coluna9;
            COLUNA10 = TOT_COLUNA10;
            coluna11 = tot_coluna11;
            SUSPEND;

            GER_COLUNA0 = GER_COLUNA0 + TOT_COLUNA0;
            GER_COLUNA1 = GER_COLUNA1 + TOT_COLUNA1;
            GER_COLUNA2 = GER_COLUNA2 + TOT_COLUNA2;
            GER_COLUNA3 = GER_COLUNA3 + TOT_COLUNA3;
            GER_COLUNA4 = GER_COLUNA4 + TOT_COLUNA4;
            GER_COLUNA5 = GER_COLUNA5 + TOT_COLUNA5;
            GER_COLUNA6 = GER_COLUNA6 + TOT_COLUNA6;
            GER_COLUNA7 = GER_COLUNA7 + TOT_COLUNA7;
            GER_COLUNA8 = GER_COLUNA8 + TOT_COLUNA8;
            GER_COLUNA9 = GER_COLUNA9 + TOT_COLUNA9;
            GER_COLUNA10 = GER_COLUNA10 + TOT_COLUNA10;
            GER_COLUNA11 = GER_COLUNA11 + TOT_COLUNA11;
          END


Sobre essas linhas adicionais, para acrescentar uma linha no resultado você tem que acrescentar um Suspend, preenchendo antes os parâmetros do Returns com os valores que devem ser retornados na linha em questão.

Espero que ajude


Sobre a soma TOTAL da certo assim, porém acho que tenho que negativar a parte DESPESA, pq ele esta somando todos e deve somar total receita - total despesa
_________________
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: Sex Mar 12, 2021 4:33 pm    Assunto: Responder com Citação

Para soma geral coloquei assim
Código:

IF (ant_tipo = 0) THEN
    begin
        TOT_COLUNA0 = TOT_COLUNA0 + REG_COLUNA0;
        TOT_COLUNA1 = tot_coluna1 + reg_coluna1;
        TOT_COLUNA2 = TOT_COLUNA2 + REG_COLUNA2;
        TOT_COLUNA3 = tot_coluna3 + reg_coluna3;
        TOT_COLUNA4 = TOT_COLUNA4 + REG_COLUNA4;
        TOT_COLUNA5 = tot_coluna5 + reg_coluna5;
        TOT_COLUNA6 = TOT_COLUNA6 + REG_COLUNA6;
        TOT_COLUNA7 = tot_coluna7 + reg_coluna7;
        TOT_COLUNA8 = TOT_COLUNA8 + REG_COLUNA8;
        TOT_COLUNA9 = tot_coluna9 + reg_coluna9;
        TOT_COLUNA10 = TOT_COLUNA10 + REG_COLUNA10;
        TOT_COLUNA11 = tot_coluna11 + reg_coluna11;
    end
    else
    begin
       TOT_COLUNA0 = TOT_COLUNA0 - REG_COLUNA0;
       TOT_COLUNA1 = tot_coluna1 - reg_coluna1;
       TOT_COLUNA2 = TOT_COLUNA2 - REG_COLUNA2;
       TOT_COLUNA3 = tot_coluna3 - reg_coluna3;
       TOT_COLUNA4 = TOT_COLUNA4 - REG_COLUNA4;
       TOT_COLUNA5 = tot_coluna5 - reg_coluna5;
       TOT_COLUNA6 = TOT_COLUNA6 - REG_COLUNA6;
       TOT_COLUNA7 = tot_coluna7 - reg_coluna7;
       TOT_COLUNA8 = TOT_COLUNA8 - REG_COLUNA8;
       TOT_COLUNA9 = tot_coluna9 - reg_coluna9;
       TOT_COLUNA10 = TOT_COLUNA10 - REG_COLUNA10;
       TOT_COLUNA11 = tot_coluna11 - reg_coluna11;
    end


Sobre esse aqui, não entendi como fazer Imex
Citação:
Sobre essas linhas adicionais, para acrescentar uma linha no resultado você tem que acrescentar um Suspend, preenchendo antes os parâmetros do Returns com os valores que devem ser retornados na linha em questão.

_________________
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: Sex Mar 12, 2021 4:53 pm    Assunto: Responder com Citação

Comece acrescentando um Suspend onde já existe um para os totais e confira o resultado que acho que fica mais fácil de entender.
Cada Suspend acrescenta uma linha a mais no resultado.
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 Mar 13, 2021 3:21 pm    Assunto: Responder com Citação

imex escreveu:
Comece acrescentando um Suspend onde já existe um para os totais e confira o resultado que acho que fica mais fácil de entender.
Cada Suspend acrescenta uma linha a mais no resultado.


Problema resolvido.

Obrigado Imex.
_________________
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
Página 2 de 2

 
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