1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

  2. Anuncie Aqui ! Entre em contato fdantas@4each.com.br

HCM Relatório de horas extras

Discussão em 'EMS , HCM e Totvs 11' iniciado por rbaselio, Outubro 30, 2019.

  1. rbaselio

    rbaselio Membro Participativo

    Alguém tem algum relatório que gere os dados de horas extras em Excel?
    Ou sabe em qual tabela/calculo é possível obter esses dados?
  2. rlfritz

    rlfritz Membro Ativo

    Bom dia @rbaselio

    Segue um exemplo de código que eu utilizava aqui na empresa quando tínhamos HCM.
    Vais ter que fazer algumas adaptações aí...


    Código:
    
    DEFINE TEMP-TABLE tt-resumo NO-UNDO
        FIELD empresa AS CHAR
        FIELD estab AS CHAR
        FIELD cod_func AS INTEGER
        FIELD lotac AS CHAR
        FIELD horas-na AS DECIMAL   /*horas nao autorizadas  */
        FIELD horas AS DECIMAL
        FIELD horas-ef AS DECIMAL
        INDEX tt-resumo empresa lotac cod_func.
    
    RUN gera-dados (INPUT "1", INPUT d-ini, INPUT d-fim).
    
    
    
    
    PROCEDURE gera-dados:
    
        DEFINE INPUT PARAMETER c-empresa AS CHAR.
        DEFINE INPUT PARAMETER dt-ini AS DATE.
        DEFINE INPUT PARAMETER dt-fim AS DATE.
    
        DEFINE VARIABLE d-percent AS DECIMAL     NO-UNDO.
        DEFINE VARIABLE i-ini-aut AS INTEGER     NO-UNDO.
        DEFINE VARIABLE i-fim-aut AS INTEGER     NO-UNDO.
        DEFINE VARIABLE i-ini-pto AS INTEGER     NO-UNDO.
        DEFINE VARIABLE i-fim-pto AS INTEGER     NO-UNDO.
    
        FOR EACH funcionario NO-LOCK WHERE funcionario.cdn_empresa = c-empresa ,
            each unid_lotac NO-LOCK where unid_lotac.cod_unid_lotac = funcionario.cod_unid_lotac
            :
                                           /*funcionario.cdn_plano_lotac = 1 AND
                                           funcionario.cod_unid_lotac >= c-lot-ini AND
                                           funcionario.cod_unid_lotac <= c-lot-fim USE-INDEX fncnr_undltcpl,*/
    
            FOR each autoriz_hora_extra_compens no-lock
                 where autoriz_hora_extra_compens.cdn_empresa = funcionario.cdn_empresa  AND
                       autoriz_hora_extra_compens.cdn_estab = funcionario.cdn_estab AND
                       autoriz_hora_extra_compens.cdn_funcionario = funcionario.cdn_funcionario AND
                       autoriz_hora_extra_compens.dat_inic_mpe /*dat_proces_mpe*/ >= dt-ini and
                       autoriz_hora_extra_compens.dat_inic_mpe /*dat_proces_mpe*/ <= dt-fim :
    
    
                    IF autoriz_hora_extra_compens.idi_autoriz_hext_compcao = 1 AND
                    /*autoriz_hora_extra_compens.log_autoriz_hext_compcao AND */
                    autoriz_hora_extra_compens.log_autoriz_aprov THEN DO:   
    
                    ASSIGN d-percent = 1.5 .
    
                    FIND tt-resumo WHERE tt-resumo.empresa = funcionario.cdn_empresa AND
                                         tt-resumo.lotac = unid_lotac.cod_unid_lotac  /* rh_ccusto.cod_rh_ccusto*/ AND
                                         tt-resumo.cod_func = funcionario.cdn_funcionario NO-ERROR.
                    IF NOT AVAIL tt-resumo THEN DO:
                        CREATE tt-resumo.
                        ASSIGN tt-resumo.empresa = funcionario.cdn_empresa
                               tt-resumo.lotac = unid_lotac.cod_unid_lotac /*rh_ccusto.cod_rh_ccusto*/
                               tt-resumo.cod_func = funcionario.cdn_funcionario
                               tt-resumo.estab = funcionario.cdn_estab.
                    END.
    
                    ASSIGN i-ini-aut = autoriz_hora_extra_compens.num_horar_inic_mpe  /* autoriz_hora_extra_compens.num_horar_inic_proces_mpe*/
                           i-fim-aut = autoriz_hora_extra_compens.num_horar_term_mpe  /*autoriz_hora_extra_compens.num_horar_fim_proces_mpe*/ .
    
    
                    IF i-fim-aut = 0 THEN
                        ASSIGN i-fim-aut = 86400.
                    IF i-fim-aut = 86340 THEN
                        ASSIGN i-fim-aut = 86400.
    
                    FOR EACH efp_par_marcac_ptoelet NO-LOCK WHERE efp_par_marcac_ptoelet.cdn_empresa = autoriz_hora_extra_compens.cdn_empresa AND
                                                      efp_par_marcac_ptoelet.cdn_estab =   autoriz_hora_extra_compens.cdn_estab AND
                                                      efp_par_marcac_ptoelet.cdn_funcionario = autoriz_hora_extra_compens.cdn_funcionario AND
                                                      (efp_par_marcac_ptoelet.dat_proces_mpe = autoriz_hora_extra_compens.dat_inic_mpe OR
                                                       efp_par_marcac_ptoelet.dat_proces_mpe = autoriz_hora_extra_compens.dat_proces_mpe)  /*dat_proces_mpe*/ /*AND
                                                      efp_par_marcac_ptoelet.num_horar_inic_proces_mpe = autoriz_hora_extra_compens.num_horar_inic_proces_mpe NO-LOCK NO-ERROR*/ :
                        /*IF AVAIL efp_par_marcac_ptoelet THEN DO:*/
    
                        IF efp_par_marcac_ptoelet.idi_tip_ocor_ptoelet = 1 THEN DO:
    
                            ASSIGN i-ini-pto  = efp_par_marcac_ptoelet.num_horar_inic_proces_mpe
                                   i-fim-pto  = efp_par_marcac_ptoelet.num_horar_fim_proces_mpe.
    
    
                           IF i-ini-pto > 86400 THEN
                               ASSIGN i-ini-pto = i-ini-pto - 86400.
    
                           IF i-ini-pto < 0 THEN
                               ASSIGN i-ini-pto = 86400 + i-ini-pto.
    
    
                           IF i-fim-pto > 86400 THEN
                               ASSIGN i-fim-pto = i-fim-pto - 86400.
    
                           IF i-fim-pto <= 0 THEN
                               ASSIGN i-fim-pto = 86400 + i-fim-pto.
    
                            FIND tt-ponto WHERE tt-ponto.registro = ROWID(efp_par_marcac_ptoelet) NO-ERROR.
                            IF NOT AVAIL tt-ponto THEN DO:
                                CREATE tt-ponto.
                                ASSIGN tt-ponto.registro = ROWID(efp_par_marcac_ptoelet).
                            END.
    
                                IF efp_par_marcac_ptoelet.cod_tip_dia = "RE" OR efp_par_marcac_ptoelet.cod_tip_dia = "FE" THEN
                                    ASSIGN d-percent = 2.
                                ELSE
                                    ASSIGN d-percent = 1.5 .
                        /*    END.*/
    
    
    
                            IF /*efp_par_marcac_ptoelet.num_horar_inic_proces_mpe*/  i-ini-pto >= i-ini-aut AND
                               /*efp_par_marcac_ptoelet.num_horar_fim_proces_mpe*/ i-fim-pto <= i-fim-aut and
                               NOT tt-ponto.tratado THEN
    
                                ASSIGN tt-resumo.horas = tt-resumo.horas + efp_par_marcac_ptoelet.qti_hrs_marcac_ptoelet * d-percent
                                       tt-resumo.horas-ef = tt-resumo.horas-ef + efp_par_marcac_ptoelet.qti_hrs_marcac_ptoelet
                                       tt-ponto.tratado = YES.
    
                        END.
                    END.                     
                END.
            END.
    
            /* horas extras n’o autorizadas  */
            FOR EACH par_marcac_ptoelet NO-LOCK WHERE par_marcac_ptoelet.cdn_empresa = funcionario.cdn_empresa AND
                                                      par_marcac_ptoelet.cdn_estab =  funcionario.cdn_estab AND
                                                      par_marcac_ptoelet.cdn_funcionario = funcionario.cdn_funcionario AND                                            
                                                      par_marcac_ptoelet.dat_proces_mpe >= dt-ini AND
                                                      par_marcac_ptoelet.dat_proces_mpe <= dt-fim  :
    
                IF par_marcac_ptoelet.idi_tip_ocor_mpe = 6 THEN DO:
    
    
                    FIND tt-resumo WHERE tt-resumo.empresa = funcionario.cdn_empresa AND
                                         tt-resumo.lotac = unid_lotac.cod_unid_lotac /*rh_ccusto.cod_rh_ccusto*/ AND
                                         tt-resumo.cod_func = funcionario.cdn_funcionario NO-ERROR.
                    IF NOT AVAIL tt-resumo THEN DO:
                        CREATE tt-resumo.
                        ASSIGN tt-resumo.empresa = funcionario.cdn_empresa
                               tt-resumo.lotac = unid_lotac.cod_unid_lotac /*rh_ccusto.cod_rh_ccusto*/
                               tt-resumo.cod_func = funcionario.cdn_funcionario
                               tt-resumo.estab = funcionario.cdn_estab.
                    END.
             /*      
                    IF par_marcac_ptoelet.cod_tip_dia = "RE" OR par_marcac_ptoelet.cod_tip_dia = "FE" THEN
                        ASSIGN d-percent = 2.
                    ELSE
                        ASSIGN d-percent = 1.5 .
               */
                    ASSIGN tt-resumo.horas-na = tt-resumo.horas-na + (par_marcac_ptoelet.qti_hrs_diurno + par_marcac_ptoelet.qti_hrs_notur) .
    
                    /*DISP par_marcac_ptoelet EXCEPT idi_sit_mpe idi_sit_origin_mpe idi_tip_ocor_mpe idi_tip_ocor_origin_mpe   WITH 1 COL WIDTH 400.*/
                END.
    
    
            END.
    
    
        END.
    
    
    END PROCEDURE.
    
    
    

Compartilhe esta Página