6 Replies Latest reply: Apr 17, 2017 12:44 PM by Marcos Santos RSS

    Horas paradas

    Marcos Santos

      Boa tarde! Preciso desenvolver um aplicativo que apresente a informação de horas em que as maquinas da produção ficaram paradas por motivo de manutenção. A principio utilizei a função Interval entre a data de parada e a data de retorno, porém preciso levar em consideração que essas maquinas trabalham de segunda-feira até sexta-feira e apenas 17 horas por dia, além de descontar os feriados. Alguém teria uma solução para esse caso? Grato desde já.

        • Re: Horas paradas
          Emerson Gonçalves

          Ola Marcos,

           

          Tem como mostrar como são esses números com uma tabela de exemplo e a expressão que esta tentando usar?

            • Re: Horas paradas
              Marcos Santos

              Bom dia! Segue em anexo um aplicativo de exemplo do que estou precisando fazer, nesse estou trazendo o intervalo entre a data de parada e a de retorno, o que falta é descontar os sábados, domingo, feriados e levar em consideração que as maquinas trabalham apenas 17 horas por dia. Qualquer duvida estou a disposição.

            • Re: Horas paradas
              MARIO SOARES

              Já te retorno com a solução...

              Favor, me passa o horário de funcionamento da máquina do dia.

                • Re: Horas paradas
                  Marcos Santos

                  Boa tarde Mario!

                  1º turno: Inicio: 7:30, parada: 12:00 para almoço, retorno do almoço 13:30, termino: 17:48. O outro turno não iremos utilizar por enquanto.

                    • Re: Horas paradas
                      MARIO SOARES

                      Amigo, segue script com os dados de exemplo:

                       

                      TAB_DATA:
                      Load
                        MAQUINA,
                          Date(Floor(Date#(PARADA,'YYYYMMDDhhmm'))) As 'DATA_PARADA',
                          Time(Frac(Date#(PARADA,'YYYYMMDDhhmm')),'hh:mm') As 'TEMPO_PARADA' ,  
                          Date(Floor(Date#(RETORNO,'YYYYMMDDhhmm'))) As 'DATA_RETORNO',
                          Time(Frac(Date#(RETORNO,'YYYYMMDDhhmm')),'hh:mm') As 'TEMPO_RETORNO';  
                      LOAD * INLINE [
                        MAQUINA|PARADA|RETORNO
                        MAQ1|201703211020|201703241130
                        MAQ2|201704020830|201704031520
                        MAQ3|201704120830|201704130830
                        MAQ4|201704130600|201704170600
                        MAQ5|201704130800|201704180800
                        MAQ6|201704131200|201704171200
                        MAQ7|201704131330|201704171330
                        MAQ8|201704131430|201704171430
                        MAQ9|201704131900|201704171900  
                        MAQ10|201703130600|201703130600
                        MAQ11|201703130600|201703130800
                        MAQ12|201703130600|201703131200
                        MAQ13|201703130600|201703131500
                        MAQ14|201703130600|201703132000
                        MAQ15|201703130600|201703130600
                        MAQ16|201703130800|201703130800
                        MAQ17|201703131200|201703131330
                        MAQ18|201703131200|201703131430
                        MAQ19|201703132000|201703132300
                        MAQ20|201703132000|201705132300    
                      ](delimiter is '|');
                      
                      TAB_FERIADOS:
                      Mapping LOAD
                        Num(DATA) As DATA,
                          FERIADO;
                      Load * INLINE [
                      DATA|DIA DA SEMANA|FERIADO
                      01/01/2017|domingo|Confraternização Universal
                      27/02/2017|segunda-feira|Carnaval
                      28/02/2017|terça-feira|Carnaval
                      14/04/2017|sexta-feira|Paixão de Cristo
                      21/04/2017|sexta-feira|Tiradentes
                      01/05/2017|segunda-feira|Dia do Trabalho
                      15/06/2017|quinta-feira|Corpus Christi
                      07/09/2017|quinta-feira|Independência do Brasil
                      12/10/2017|quinta-feira|Nossa Sr.a Aparecida - Padroeira do Brasil
                      02/11/2017|quinta-feira|Finados
                      15/11/2017|quarta-feira|Proclamação da República
                      25/12/2017|segunda-feira|Natal
                      ](delimiter is '|');
                      
                      Let vJORNADA_INI = Time#('07:30','hh:mm');
                      Let vJORNADA_FIM = Time#('17:48','hh:mm');
                      Let vJORNADA_ALM_INI = Time#('12:00','hh:mm');
                      Let vJORNADA_ALM_FIM = Time#('13:30','hh:mm');
                      Let vJORNADA_ALM = Time('$(vJORNADA_ALM_FIM)'-'$(vJORNADA_ALM_INI)','hh:mm');
                      Let vJORNADA_TOTAL = Time('$(vJORNADA_FIM)'-'$(vJORNADA_INI)'-'$(vJORNADA_ALM)','hh:mm') ;
                      
                      TAB_TEMPO_MANUT:
                      Load
                        MAQUINA,
                          Sum(HORAS_PARADA) As 'TOTAL_HORAS_PARADA',
                          Count(DIAS_PARADA) As 'QTD_DIAS_OCORRÊNCIA'
                      Group By MAQUINA;
                      Load
                        MAQUINA,
                          (WeekDay(DATA_PARADA + IterNo() -1)) as 'DIASEMANA?',
                          ApplyMap('TAB_FERIADOS',(DATA_PARADA + IterNo() -1),null()) As 'FERIADO?',
                          TEMPO_PARADA As 'TEMPO_PARADA?',
                          TEMPO_RETORNO As 'TEMPO_RETORNO?',
                          IF(Match(Num(WeekDay(DATA_PARADA + IterNo() -1)),6), 'SÁBADO',
                          IF(Match(Num(WeekDay(DATA_PARADA + IterNo() -1)),0), 'DOMINGO',
                              IF(Not IsNull(ApplyMap('TAB_FERIADOS',(DATA_PARADA + IterNo() -1),null())), 'FERIADO',
                          IF(DATA_PARADA=DATA_RETORNO,'MESMO DIA',IF(IterNo()=1,'PRIMEIRO DIA',IF(DATA_RETORNO = Date(DATA_PARADA + IterNo() -1),'ÚLTIMO DIA','DIA CORRENTE')))
                        ))) As 'STATUS',
                        
                          Time(
                          IF( Not Match(Num(WeekDay(DATA_PARADA + IterNo() -1)),0,6) and //not sab e dom?
                          Not Len(ApplyMap('TAB_FERIADOS',(DATA_PARADA + IterNo() -1),null())) //not feriado?
                            
                              ,IF(DATA_PARADA=DATA_RETORNO, //mesmo dia?
                      
                      
                                  IF(TEMPO_RETORNO<'$(vJORNADA_INI)','$(vJORNADA_INI)', //antes do período de trabalho?
                                    IF(TEMPO_RETORNO>'$(vJORNADA_FIM)','$(vJORNADA_FIM)', //depois do período de trabalho?
                                          IF(TEMPO_RETORNO>='$(vJORNADA_ALM_INI)' AND TEMPO_RETORNO<='$(vJORNADA_ALM_FIM)', '$(vJORNADA_ALM_FIM)', //período de almoço?
                                                TEMPO_RETORNO
                                            )
                                    )
                                )      
                                -
                        IF(TEMPO_PARADA<'$(vJORNADA_INI)','$(vJORNADA_INI)', //antes do período de trabalho?
                        IF(TEMPO_PARADA>'$(vJORNADA_FIM)','$(vJORNADA_FIM)', //depois do período de trabalho?
                                          IF(TEMPO_PARADA>='$(vJORNADA_ALM_INI)' AND TEMPO_PARADA<='$(vJORNADA_ALM_FIM)', '$(vJORNADA_ALM_FIM)', //período de almoço?
                                                TEMPO_PARADA
                                            )
                                      )
                                  )
                                  -
                                  IF(TEMPO_PARADA<'$(vJORNADA_ALM_INI)' AND TEMPO_RETORNO>='$(vJORNADA_ALM_INI)', '$(vJORNADA_ALM)',0)      
                      
                      
                                ,IF(IterNo()=1, //primeiro dia?
                        IF(TEMPO_PARADA<'$(vJORNADA_INI)','$(vJORNADA_TOTAL)', //antes do período de trabalho?
                        IF(TEMPO_PARADA>'$(vJORNADA_FIM)',NULL(), //depois do período de trabalho?
                                        IF(TEMPO_PARADA<'$(vJORNADA_ALM_INI)', '$(vJORNADA_FIM)'-TEMPO_PARADA-'$(vJORNADA_ALM)', //antes de meio dia?
                                            IF(TEMPO_PARADA>='$(vJORNADA_ALM_INI)' AND TEMPO_PARADA<='$(vJORNADA_ALM_FIM)', '$(vJORNADA_FIM)'-'$(vJORNADA_ALM_FIM)', //período de almoço?
                                                '$(vJORNADA_FIM)'-TEMPO_PARADA
                                              )
                                          )
                                      )
                                  )
                                
                                  ,IF(DATA_RETORNO = Date(DATA_PARADA + IterNo() -1), //último dia?
                                    IF(TEMPO_RETORNO<'$(vJORNADA_INI)',Null(), //antes do período de trabalho?
                                    IF(TEMPO_RETORNO>'$(vJORNADA_FIM)','$(vJORNADA_TOTAL)', //depois do período de trabalho?
                                        IF(TEMPO_RETORNO<'$(vJORNADA_ALM_INI)', TEMPO_RETORNO-'$(vJORNADA_INI)', //antes de meio dia?
                                          IF(TEMPO_RETORNO>='$(vJORNADA_ALM_INI)' AND TEMPO_RETORNO<='$(vJORNADA_ALM_FIM)', '$(vJORNADA_ALM_INI)'-'$(vJORNADA_INI)', //período de almoço?
                                                TEMPO_RETORNO-'$(vJORNADA_INI)'-'$(vJORNADA_ALM)'
                                            )
                                        )
                                    )
                                )
                                ,'$(vJORNADA_TOTAL)'
                                )
                              )
                            )
                          ),'hh:mm') As 'HORAS_PARADA',    
                      
                      
                          Date(DATA_PARADA + IterNo() -1)  As 'DIAS_PARADA',
                          DATA_RETORNO As 'DIAS_RETORNO'
                      Resident TAB_DATA
                      While DATA_PARADA + IterNo() -1 <= DATA_RETORNO;
                      
                      

                       

                      No frond-end:

                      Para aparecer a duração, segue:

                      Capturar.JPG

                       

                      Fiz vários testes, e aparentemente ok, caso encontre alguma contabilização errada, poderá documentar o primeiro load da TAB_TEMPO_MANUT e carregar, assim poderá depurar com os atributos que deixei esquematizado para te ajudar a realizar ajustes nos IF() caso necessário.

                       

                      Boa sorte.

                      Sou consultor independente, precisando de apoio avançado... Adicione meu perfil mario.sergio.ti e entre em contato comigo.

                       

                      Abraço.