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?
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.