Consulta não funciona! totalização: Soma e média

Bom dia pessoal tudo bem?

Estou com uma grid com alguns campos da totalização em soma e média que não estão trazendo os registros corretamente

Notem que o campo {MDA em dia} está correto a soma mas o campo {total_presentes} está incorreto. Já os campos de percentagem estão incorretos.

Versão SC: 9.0.0.18 / Mac

Poste o código utilizado para podermos verificar para lhe ajudar, ou detalhe como você fez de preferência com print das telas…

Em totalização está assim:

Já no evento onrecord:

$qtd_presentes = {qtd_adulto_presente} + {qtd_crianca_presente} + {qtd_visitantes} + {qtd_supervisores_presente} + {qtd_pastor_presente};
{total_presentes} = $qtd_presentes;

O campo {total_presentes} está somando os outros campos.

Já tentou o modo debug ?
Geralmente é possível identificar algum detalhe adicional (também na Query que o SC gera), auxiliando na descoberta de como a soma está resultando no valor 3.

Coloque tudo por favor, a tela com os campos, o grid totalmente aberto… tem algo estranho que talvez seja o problema entre a soma do campo e totalização. Coloque as imagens para ver melhor…

Segue:

Bom dia danyx.

Creio que descobrindo a forma como a Query foi montada internamente pelo SC talvez terá uma pista.
Ativando o modo debug, consegue verificar como o SC está realizando a totalização deste campo {total_presentes} ?

Amigo quando postar foto com muito código, copie o código para poder ajudar modificando o mesmo…

Bom… vamos lá…

  • Primeiro os campos verifiquei que tem campo TEXTO para receber numero, ou valor decimal… sugiro colocar tudo NUMERO, ou quando for a necessidade colocar DECIMAL(eu particularmente sempre uso como padrão), se no seu banco está assim, sugiro corrigir a modelagem.

//ATUALMENTE
$freq_em_dia = ({qtd_adulto_presente} + {qtd_crianca_presente}) / {total_membros} * 100;
{frequencia_membros} = $freq_em_dia;

//SUGESTÃO… SIGA O EXEMPLO E FAÇA ISTO PARA OS OUTROS…
$presente = {qtd_adulto_presente} + {qtd_crianca_presente};
{frequencia_membros} = ($presente / {total_membros}) * 100;

Faça as alterações e teste novamente…

1 -Fiz as alterações mas continua o erro.

2 - Esses campos texto é por cento agora porque o SC coloca a imagem de texto realmente eu não sei.

Altere todos os campos e coloque como número.

Boa tarde Joelton,

1 - Coloquei todos os campos com número e persiste o erro.

2 - Coloquei no mode debug mas aparece somente as querys e não visualizei a própria atualização do SC.

A versão é a V9… certo?.. faz o seguinte…

1 - Faça um backup Geral, e faça um backup deste projeto e feche o Scriptcase;
2 - Entre no diretório da instalação do Scriptcase e exclua tudo dentro da pasta app;
3 - Exclua tudo dentro da pasta temporária;
4 - Baixe a nova versão do Scriptcase para atualização manual;
5 - Faça a atualização manual do Scriptcase(http://www.scriptcase.com.br/atualizando_scriptcase/);
6 - Limpe tudo dos navegadores utilizados;
7 - Abre o Scriptcase e gere o código fonte novamente e faça novamente os testes…

Joelton,

Estou no caminho certo para resolver esse problema:

Eu coloquei uma query direto no campo:

select SUM(tipo)
from frequencia
where
membros_celula_setor_idsetor = '{setor_idsetor}'AND membros_celula_idcelula = ‘{idcelula}’ AND CURDATE() BETWEEN DATE(data) AND DATE(data_fim)

Desabilitei no onrecord:

$qtd_presentes = {qtd_adulto_presente} + {qtd_crianca_presente} + {qtd_visitantes} + {qtd_supervisores_presente} + {qtd_pastor_presente};

{total_presentes} = $qtd_presentes;

A totalização do SC funcionou, no entanto, nas colunas preciso da somatório desses campos que aí de cima e ele não somou.

Conclusão: O SC faz a totalização de um ou de outro e não os 2 juntos. E agora? Será que eu tenho que somar esses campos no select também?

Acho que agora estou compreendendo sua necessidade, neste caso a resposta é sim, calcular diretamente no banco por tratar de possuir o tratamento de algumas possibilidades que no caso do SQL é feito no WHERE.

Joelton,

Então o meu SQL ficaria assim?

select SUM(tipo), ({campo1} + {campo2} + {campo3} + {campo4})
from frequencia
where
membros_celula_setor_idsetor = '{setor_idsetor}'AND membros_celula_idcelula = ‘{idcelula}’ AND CURDATE() BETWEEN DATE(data) AND DATE(data_fim)

Faça um teste, mas não esqueça das aspas simples ao colocar campos… exemplo ‘{meu campo}’

Joelton,

Coloquei essa query e não retornou nenhum resiltado:

select SUM(tipo), SUM(’{qtd_adulto_presente}’), SUM(’{qtd_crianca_presente}’) , SUM(’{qtd_visitantes}’), SUM(’{qtd_supervisores_presente}’)

Primeiras ponderações…

Se fez o “SUM(tipo)” ele irá calcular tudo e dará o resultado em uma linha, logo você não conseguirá prosseguir com o “({campo1} + {campo2} + {campo3} + {campo4})”, pois ele colocará o resultado na coluna ao lado do SUM… logo por sua vez a partir daqui o script nem será levado em consideração… pois o resultado do select será uma linha apenas.

Outra observação neste select é toda vez que fizer uma operação entre colunas no banco… terá que dar nome para aparecer o resultado…
Sua escrita…
“({campo1} + {campo2} + {campo3} + {campo4})”

Como deve ficar…
“({campo1} + {campo2} + {campo3} + {campo4}) as total”

Dei o nome como total, logo todo o valor aparecerá em uma coluna total, poderá ser qualquer nome…

A minha sugestão é que para ficar mais fácil para você, fizesse todo o cálculo diretamente no php, buscando informações do banco com a macro sc_lookup(https://suporte.scriptcase.com.br/pt-br/article/181-usando-a-macro-sc-lookup), quantas forem necessárias, e passando seus resultados um para cada variável, e depois fazer o cálculo desejado.

E dependendo do caso crie campos virtuais para facilitar sua manipulação de dados e acredito que em algumas situações terá que ocultar alguns campos que são provindos da tabela.

Sei que pode parecer embolado o que estou escrevendo, não sou muito bom com as palavras, mas a medida que for fazendo vai postando parte a parte de suas dúvidas para poder auxiliar no que eu poder.

Fique na paz meu irmão.

Joelton, em primeiro lugar agradecer profundamente pela sua ajuda e disponibilidade.

Eu criei o looukup ele retorna certinho, mas quando soma os campos virtuais traz resultados errados:

/* total sum*/
$sql ="
select SUM(tipo)
from frequencia
where
membros_celula_setor_idsetor = '{setor_idsetor}'AND membros_celula_idcelula = ‘{idcelula}’ AND CURDATE() BETWEEN DATE(data) AND DATE(data_fim)
";

sc_lookup(total, $sql);

$total_sum = {total[0][0]};

$qtd_presentes = {qtd_adulto_presente} + {qtd_crianca_presente} + {qtd_visitantes} + {qtd_supervisores_presente} + {qtd_pastor_presente} + $total_sum;

{total_presentes} = $qtd_presentes;

Obs: Peguei também todos as querys e coloquei nessa rotina e no final somando cada uma e mesmo assim retorna valores errados. Isso tudo porque o SC não totaliza correto campos virtuais não sei porque.

Analisei rapidamento, faço sugestões quanto aos campos, transforme os campos em variáveis e use assim dentro do sql…

… outra questão é a lógica desta parte, não está correta… “AND CURDATE() BETWEEN DATE(data) AND DATE(data_fim)”… veja os posts abaixo para entender melhor seu uso…

http://www.scriptcase.com.br/forum/index.php?topic=8658.0

https://forum.imasters.com.br/topic/562008-query-da-semana-de-quarta-a-terça/

https://stackoverflow.com/questions/2041575/mysql-query-records-between-today-and-last-30-days

http://www.guj.com.br/t/query-para-buscar-por-data-curdate-interval-resolvido/293942/5