Ajuda com horas em relatório

Bom Dia

Estou com um problema no campo horas maior que 24 Horas no relatório

Segui este exemplo http://kb.elipse.com.br/pt-br/questions/5057/KB-64893%3A+Relatório+que+mostre+valores+que+excedam+24+horas.

só que preciso somar estas horas, e quando coloco a opção sumary type para ddSMGrandTotal esta função não funciona e me retorna 0 se eu deixar em ddsNome ele só pega o ultimo valor

Ronaldo,

Creio que você esteja tentando utilizar no DataField dos Campos do GroupFooter a mesma expressão sugerida no KB, o que parece ser o mais lógico, mas não funciona assim. Nesse caso, você terá que fazer esse cálculo por script.

Uma alternativa seria criar outra Consulta (pode ser dentro do próprio Relatório) que já retorne os valores totais. Por exemplo:

SELECT SUM(Campo) as Campo, SUM(Campo2) as Campo2, SUM(Campo3) as Campo3
FROM Reports
WHERE (E3TimeStamp  >= #<%DataInicial%>#  AND E3TimeStamp <= #<%DataFinal%>#)

O script para passar os valores da Consulta para os Campos do GroupFooter tem que ser feito no evento “OnFormat” do Relatório. Por exemplo:

Sub OnFormat

dim DataIni, DataFim, Campo, CampoFormat

DataIni = Application.GetFrame().Screen.Item("spDataInicial").Value
DataFim = Application.GetFrame().Screen.Item("spDataFinal").Value

Set Relatorio = Application.LoadReport("Relatorio1")
Set Consulta = Relatorio.Item("Consulta2") 'Consulta que retorna os valores totais
Consulta.SetVariableValue "DataInicial", DataIni
Consulta.SetVariableValue "DataFinal", DataFim
Set RS = Consulta.GetADORecordset()

Campo = RS.Fields("Campo").Value
CampoFormat = CStr((Campo*24*60*60)\(60*60)) &":"& Cstr(((Campo*24*60*60)\60) mod 60) &":"& Cstr((Campo*24*60*60) mod 60)
Report.Sections("GroupFooter1").Controls("Field7").text = CampoFormat

End Sub

Gustavo Boa Tarde

Eu ja tinha este script em um botão na tela

            ELSEIF Tela_Hist_Geral.Fonte_Historicos.HistHorimetroHDPD = true then
                    
                    Set Report = Application.LoadReport("RelHorimetro")
                    Set Consulta = Report.Item("Consulta1")
                    
                    Table = Tela_Hist_Geral.Fonte_Horimetros.Item("Hist_HD").TableName
                    Consulta.DataSource = "BD"
                        
                    Consulta.SQL = "SELECT E3TimeStamp,Estacao,NomeEquip,HorasD,ParadasD FROM " &Table& _
                                   " WHERE  E3TimeStamp >= #<%DataInicial%># AND E3TimeStamp <= #<%DataFinal%>#" & _
                                   " ORDER BY E3TimeStamp  ASC" 
                    
                    Consulta.SetVariableValue "DataInicial", Tela_Hist_Geral.Item("dp_inicial").Value
                    Consulta.SetVariableValue "DataFinal", Tela_Hist_Geral.Item("dp_final").Value
             
                    Report.Item("Consulta1").Execute() 
                    Report.Print()	 

o que eu fiz foi fazer o seguinte:

coloquei este código no Before print do ReportFooter

Sub OnBeforePrint

dim Campo, CampoFormat

Campo = Report.Sections(“ReportFooter”).Controls(“Field43”).text
CampoFormat = CStr((Campo246060)(6060)) &":"& Cstr(((Campo246060)\60) mod 60) &":"& Cstr((Campo246060) mod 60)

Report.Sections(“ReportFooter”).Controls(“Field43”).text = CampoFormat

End Sub

o field43 é o campo que recebe o valor que preciso converter para horas. eu deixei a opção Summary Type dele em dddSGrandTotal. ele soma todos os valores e na hora de imprimi converte.

Funcionou perfeitamente. assim.

1 Like

Melhor ainda, Ronaldo!