Alguém já precisou exibir no resumo totais no formato hh:mm ?
Estou precisando fazer um resumo somando as horas, mas, no formato hh:mm .
utilizo totailizacoes calculando direto no BD
SELECT
cartaoID, emissao, data_mov, hs_in, hs_out, hs_brk_in,
hs_brk_out, obs, funcID, status, loja_intervalo,tp_lanche,tp_atraso,
@t_hs := SUBTIME(hs_out,hs_in) as t_horas,
@t_int:= SUBTIME(hs_brk_in,hs_brk_out) as t_intervalo,
@dif_i:= IF(tp_lanche=‘S’,@t_int, if(@t_int>loja_intervalo,SEC_TO_TIME(TIME_TO_SEC(@t_int) - TIME_TO_SEC(loja_intervalo)),0) ) as dif_intervalo,
@dif_hs := SEC_TO_TIME(TIME_TO_SEC(@t_hs) - TIME_TO_SEC(@dif_i)) as dif_horas
FROM cartao_ponto
No Scriptcase na Grid consulta você não vai conseguir somar diretamente o tempo.
Ai pode fazer essa dica; exemplo o tempo na sua tabela seja ‘time’ MySQL / MariaDB, transformar tudo em segundos, somar e converter em horas para apresentar o Total Geral.
Na SQL da Consulta:
SELECT
LancamentoID,
HoraInicial,
HoraFinal,
TIMEDIFF(HoraFinal, HoraInicial) AS TempoDecorridoHoras
FROM
teste
Habilitar em Layotus o Rodapé:
No campo Valor no Layout do Rodapé:
Total Tempo Horas = [glo_TotalTempoHoras]
No Evento OnFooter:
/* Macro sc_lookup */
if (empty({sc_where_atual})){
$sql ="
SELECT
TIME_FORMAT(SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF(HoraFinal, HoraInicial)))),'%H:%i:%s') AS Tempo_Soma
FROM
teste
";
} else{
$sql ="
SELECT
TIME_FORMAT(SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF(HoraFinal, HoraInicial)))),'%H:%i:%s') AS Tempo_Soma
FROM
teste
{sc_where_atual}
";
}
sc_lookup(chk_soma, $sql);
if (empty({chk_soma[0][0]})) {
[glo_TotalTempoHoras] = '00:00:00';
} else {
[glo_TotalTempoHoras] = {chk_soma[0][0]};
}
Marcar a Variável global para ficar como saída:
Resultado Final:
Obrigado pela resposta.
Eu consigo fazer o calculo.
O que eu não consigo é no resumo mostrar os valores no formato de hh:mm.
Mas os valores em formato decimal fica correto.
Exemplo: 16 horas e 30 minutos fica 16,5, mas, o cliente quer ver-> 16:30
Obrigado pela resposta.
Eu consigo fazer o calculo.
O que eu não consigo é no resumo mostrar os valores no formato de hh:mm.
Mas os valores em formato decimal fica correto.
Exemplo: 16 horas e 30 minutos fica 16,5, mas, o cliente quer ver-> 16:30
O Resumo de horas pela própria GRID ela não vai fazer, apenas se usar a rotina que passei:
/* Macro sc_lookup */
if (empty({sc_where_atual})){
$sql ="
SELECT
TIME_FORMAT(SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF(HoraFinal, HoraInicial)))),'%H:%i:%s') AS Tempo_Soma
FROM
teste
";
} else{
$sql ="
SELECT
TIME_FORMAT(SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF(HoraFinal, HoraInicial)))),'%H:%i:%s') AS Tempo_Soma
FROM
teste
{sc_where_atual}
";
}
sc_lookup(chk_soma, $sql);
if (empty({chk_soma[0][0]})) {
[glo_TotalTempoHoras] = '00:00:00';
} else {
[glo_TotalTempoHoras] = {chk_soma[0][0]};
}
Mas você pode usar o SELECT para criar um botão que vai passar a seleção como
variável global para outra consulta que você vai fazer usando o SELECT de resumo
para transformar em horas:
SELECT
TIME_FORMAT(SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF(HoraFinal, HoraInicial)))),’%H:%i:%s’) AS Tempo_Soma
FROM
teste
Com isso você vai ter a consulta principal detalhada e uma consulta somente para exibir os resumos do jeito que o cliente pediu, mas o Scriptcase sozinho não vai fazer a soma, mas você fazendo uma segunda consulta resumida e linkando ela com a primeira da certo.
Tem outra opção também criar uma tabela temporária e limpar e popular ela através de um app controle ou no evento OnValidate da grid usando a tabela temporária, com
os campos desejados e as horas acumuladas ao lado do tempo de cada linha, ai a linha
final de cada grupo ficaria com o total de horas acumuladas das linhas anteriores.
SET @TempoAcumuladoSegundos = 0;
SELECT
LancamentoID,
HoraInicial,
HoraFinal,
TIMEDIFF(HoraFinal, HoraInicial) AS TempoDecorridoHoras,
@TempoSegundos := TIME_TO_SEC(TIMEDIFF(HoraFinal, HoraInicial)) AS TempoSegundos,
@TempoAcumuladoSegundos := @TempoAcumuladoSegundos + @TempoSegundos AS SegundosAcumulado,
SEC_TO_TIME(@TempoAcumuladoSegundos) AS HorasAcumuladas
FROM
teste
Entendi. Muito obrigado pelas respostas.
Eu vou acrescentar estas opções nas que estou testando para implementar.
A que estou tentando fazer neste momento é apenas via javascript converter o resultado decimal em formato de hora, já depois de todos os calculos em decimal.
Para isto eu preciso substituir o código do botão “atualizar” na seleção da quebra de forma a acrescentar meu código para reformatar os valores.
Caso eu consiga eu posto por aqui, senão vou tentar utilizar uma das duas opções que você me mandou.
Consegui fazer o que eu queria, mas, precisei criar um botão e executar o código abaixo no botão:
function atu(){
//var table = document.getElementById(“tb01”);
$(’#tb01 tr’).each(function(){
$(this).find(‘td’).each(function(){
console.log("\n");
console.log($(this));
var celula = $(this).text();
var cmin = ‘’;
if(celula.indexOf(",") != -1){
console.log(celula);
var aCel = celula.split(’,’);
var hora = aCel[0];
var min = aCel[1] * 60 / 100 ;
console.log(min.length);
min = min.toFixed(0);
if(min.length == 1){
cmin = “0” + min;
}else{
cmin = min;
}
$(this).text(hora + ‘:’ + cmin );
}
//do your stuff, you can use $(this) to get current cell
})
})
}