Página 1 de 1

Relatorio filtrado por periodo de horas

Enviado: 05 Set 2016 16:53
por EduardoSPno
Ola amigos tudo bem!?!
Preciso de uma ajuda, precisava gerar um relatório onde exiba a data, valor e hora em que foram feitas as vendas, o problema que eh um restaurante e funciona ate de madrugada, ai fica o problemas

dia 01/09 a partir das 18:00 ate o dia 02/09 as 04:00

Alguém já fez isso, obrigaduuuu

Relatorio filtrado por periodo de horas

Enviado: 05 Set 2016 18:08
por JoséQuintas
Não entendi.
Vai exibir as vendas de determinada data?

Código: Selecionar todos

dData := Date()
CalculaPeriodo( dData, @dDatIni, @cHorIni, @dDatFim, @cHorFim )

SEEK Dtos( dDatIni ) + cHorIni SOFTSEEK
DO WHILE .NOT. Eof()
   IF vendas->Data > dDatFim
      IF vendas->Hora > cHorFim
          EXIT
     ENDIF
   ENDIF
   ? "ddd"
   SKIP
ENDDO

FUNCTION CalculaPeriodo( dData, dDatIni, cHorIni, dDatFim, cHorFim )

   dDatIni := dData
   cHorIni := "10:00:00"
   dDatFim := dData + 1
   cHorFim := "05:00:00"

   RETURN NIL

Relatorio filtrado por periodo de horas

Enviado: 05 Set 2016 19:26
por Toledo
JoséQuintas escreveu:Não entendi.
Se eu entendi direito, então o código do JoséQuintas teria a seguinte modificação:

Código: Selecionar todos

DO WHILE .NOT. Eof()
   IF vendas->Data > dDatFim
      EXIT
   ENDIF
   IF vendas->Data == dDatFim
      IF vendas->Hora > cHorFim
          EXIT
     ENDIF
   ENDIF
Abraços,

Relatorio filtrado por periodo de horas

Enviado: 05 Set 2016 20:29
por EduardoSPno
Exatamente isso .... data inicial, hora inicial, data final, hora final ...
Tentei fazer mas esbarrei nas horas, pois inicia em uma data e hora, ex: 01/09 as 18:00 e finaliza em outro dia e hora ex: 02/09 as 03:00

Vou testar e posto, muito obrigado pela ajuda !!

Relatorio filtrado por periodo de horas

Enviado: 06 Set 2016 00:38
por JoséQuintas
E com a correção do Toledo.
Acabei errando na comparação.

Relatorio filtrado por periodo de horas

Enviado: 06 Set 2016 21:56
por EduardoSPno
Ola amigos, deu certinho, segue código

Código: Selecionar todos


cHH1="20:00:00"
cHH2="04:00:00"
cDA1=CTOD("01/09/2016")
cDA2=CTOD("02/09/2016")

SELECT FLUXO
INDEX ON DTOS(DATA)+HORA TO INDFLUX
SET INDEX TO INDFLUX
GO TOP

SEEK Dtos( cDA1 ) + cHH1 SOFTSEEK

set devi to print
set print to C:\SISTEMA\1.TXT
SETPRC(0,0)

DO WHILE .NOT. Eof()
   IF FLUXO->Data > cDA2
      EXIT
   ENDIF
   IF FLUXO->Data == cDA2
      IF FLUXO->Hora > cHH2
          EXIT
     ENDIF
   ENDIF
   @PROW()+1,01 SAY DTOC(DATA)+" - "+STR(VALOR)+" - "+HORA+" - "+STR(NVENDA)+" - "
  SKIP
ENDDO

Relatorio filtrado por periodo de horas

Enviado: 06 Set 2016 22:00
por EduardoSPno
Só pra dificultar um pouco aos mestres Jose Quintas e Toledo, será que conseguiriamos gerar esse código utilizando a função INDEX/WHILE, por exemplo:
INDEX ON (campo) to INDICE WHILE (variavel=>variavel)

Mas antes disto gostaria muito de agradecer a dica dos mestres Jose Quintas e Toledo.

Relatorio filtrado por periodo de horas

Enviado: 06 Set 2016 22:43
por JoséQuintas
Pra garantir:

Código: Selecionar todos

INDEX ON ... TO TEMP WHILE ( Data == dataIni .AND. Hora >= HoraIni ) .OR. ( Data == datafim .AND. Hora <= Horafim )