Ejemplos desarrollo HR-SAP

download Ejemplos desarrollo HR-SAP

of 37

Transcript of Ejemplos desarrollo HR-SAP

  • 8/10/2019 Ejemplos desarrollo HR-SAP

    1/37

    1

    Programacin

    en

    Modulo HR

    Transacciones HR (Pag 2)

    Programacin en HR

    o Ejemplo HR_INFOTYPE_OPERATION (Pag 5)

    o Ejemplo de lectura de cluster (Pag 10)

    o Ejemplo Lectura IT0008 (Pag 12)

    o Ejemplo lectura de infotipo con funcion HR_READ_INFOTYPE (Pag

    15)

    o Ejemplos Estructura Organizacional (Pag 20)

    o Como leer cluster de tiempos (Pag 21)

    o Como leer Acumuladores (Pag 23)

    Funciones utiles ABAP HR Prestamos (Pag 24)

    Tablas e Infotipos en HR (Pag 26)

    Ejemplos de Performance (Pag 33)

    Simulacion en driver de nomina (Pag 37)

    HR NOTAS (Pag 38)

    HR FAQ (Pag 39)

    WebSite:http://globalsap.cl/globalwiki/index.php/HR

    http://globalsap.cl/globalwiki/index.php/HR#Programaci.C3.B3n_en_HR#Programaci.C3.B3n_en_HRhttp://globalsap.cl/globalwiki/index.php/HRhttp://globalsap.cl/globalwiki/index.php/HRhttp://globalsap.cl/globalwiki/index.php/HRhttp://globalsap.cl/globalwiki/index.php/HRhttp://globalsap.cl/globalwiki/index.php/HR#Programaci.C3.B3n_en_HR#Programaci.C3.B3n_en_HR
  • 8/10/2019 Ejemplos desarrollo HR-SAP

    2/37

    2

    Transacciones en HR

    Master Data

    PA10 Personnel FilePA20 Display HR Master DataPA30 Maintain HR Master DataPA40 Personnel EventsPA41 Change Hiring DataPA42 Fast Data Entry for EventsPRMD Maintain HR Master DataPRMF Travel Expenses: Feature TRVFDPRML Set Country Grouping via PopupPRMM Personnel EventsPRMO Travel Expenses: Feature TRVCOPRMP Travel Expenses: Feature TRVPAPRMS Display HR Master Data

    PRMT Update MatchcodePSO3 Infotype overviewPSO4 Individual maintenance of infotypes

    Time Management

    PA51 Display Time DataPA53 Display Time DataPA61 Maintain Time DataPA62 List Entry of Additional DataPA63 Maintain Time DataPA64 Calendar EntryPA70 Fast Data Entry

    PA71 Fast Entry of Time DataPBAB Maintain vacancy assignmentsPT01 Create Work SchedulePT02 Change Work SchedulePT03 Display Work Schedules

    Payroll

    PC_PAYRESULT visualizar resultados de nminaPC00 Run PayrollPC10 Payroll menu USAPE00 Starts Transactions PE01,PE02,PE03

    PE01 SchemasPE02 Calculation RulesPE03 FeaturesPE04 Create functions and operationsPE51 HR form editorPRCA Payroll calendarPRCT Current SettingsPRCU Printing Checks USAPRD1 Create DMESM31 Maintain TablesSM12 Locked SecessionsTSTC Table lookupSPR0 IMG

    SE16 Data Browser (Table reports)PP03 PD TablesPP0M Change Org Unit

  • 8/10/2019 Ejemplos desarrollo HR-SAP

    3/37

    3

    P013 Maintain PositionsPO03 Maintain Jobs

    Benefits

    PA85 Benefits - Call RPLBEN11PA86 Benefits - Call RPLBEN07PA87 Benefits - Call RPLBEN09PA89 COBRA AdministrationPA90 Benefits Enrollment IndividualPA91 Benefits - FormsPA92 Benefits Tables - MaintainPA93 Benefits Tables - DisplayPA94 Benefits - Access Reporting TreePA95 Benefits IMG - Jump to ViewsPA96 Benefits reportingPA97 Salary Administration - MatrixPA98 Salary AdministrationPA99 Compensation Admin. - rel.changes

    PACP HR-CH: Pension fund, interface

    General/Reporting

    PM00 Menu for HR ReportsPM01 Dialogs in HR - Create custom infotypesPRF0 Standard FormPSVT Dynamic Tools MenuPAR1 Flexible employee dataPAR2 Employee listH99CWTR0: Reporte de CCNominash99_display_payresult: Ver resultados nomina

    PD - Organizational Management

    PP0M Change Org UnitPO03 Maintain JobsPO13 Maintain PositionPO10 Maintain Organizational UnitPP01 Maintain Plan Data (menu-guided)PP02 Maintain Plan Data (Open)PP03 Maintain Plan Data (event-guided)PP05 Number RangesPP06 Number Range Maintenance: HRADATAPP07 Tasks/DescriptionsPP69 Choose Text for Organizational UnitPP90 Set Up OrganizationPPO1 Change Cost Center AssignmentPPO2 Display Cost Center AssignmentPPO3 Change Reporting StructurePPO4 Display Reporting StructurePPO5 Change Object Indicators (O/S)PPO6 Change Object Indicators O/SPPOA Display Menu Interface (with dyn.)PPOC Create Organizational UnitPPOM Maintain Organizational PlanPPOS Display Organizational PlanPQ01 Events for Work Center

    PQ02 Events for Training ProgramPQ03 Events for Job

  • 8/10/2019 Ejemplos desarrollo HR-SAP

    4/37

    4

    PQ04 Events for Business Event TypePQ06 Location EventsPQ07 Resource EventsPQ08 Events for External PersonPQ09 Events for Business Event GroupPQ10 Events for Organizational Unit

    PQ11 Events for QualificationPQ12 Resource Type EventsPQ13 Events for PositionPQ14 Events for TaskPQ15 Events for CompanyPSO5 PD: Administration ToolsPSOA Work Center ReportingPSOC Job ReportingPSOG OrgManagement General ReportingPSOI Tools Integration PA-PDPSOO Organizational Unit ReportingPSOS Position ReportingPSOT Task Reporting

    Recruitment

    PB10 Init.entry of applicant master dataPB20 Display applicant master dataPB30 Maintain applicant master dataPB40 Applicant eventsPB50 Display applicant actionsPB60 Maintain applicant actionsPB80 Evaluate vacanciesPBA0 Evaluate advertisementsPBA1 Applicant indexPBA2 List of applications

    PBA3 Applicant vacancy assignment listPBA4 Receipt of application

  • 8/10/2019 Ejemplos desarrollo HR-SAP

    5/37

    5

    SAP HR HR INFOTYPE OPERATION

    Funcion para crear modificar borrar infotipos

    *---------------------------------------------------------------------*

    * FORM insert_0014 *

    *---------------------------------------------------------------------** ........ *

    *---------------------------------------------------------------------*

    FORM insert_0014.

    DATA r_p0014 LIKE p0014.

    DATA l_bapireturn LIKE bapireturn1.DATA: bapipakey_tab LIKE bapipakey OCCURS 0 WITH HEADER LINE.

    DATA : s_importe(20) TYPE c.

    DATA: m_text LIKE l_bapireturn-message_v1.

    DATA: m_text2 LIKE l_bapireturn-message_v1.

    DATA m_len TYPE i.DATA: importe_avo LIKE p0014-betrg.DATA importe_avo_e LIKE bapicurr-bapicurr.

    DATA importe_avo2 LIKE p0014-betrg.

    DATA: num_meses(2) TYPE n.

    DATA aux_date_begda TYPE d.

    DATA aux_date_endda TYPE d.* Create the IT0014 records

    LOOP AT tb_bonus INTO wa_bonus.

    * enqueue the employye

    CALL FUNCTION 'BAPI_EMPLOYEE_ENQUEUE'

    EXPORTING

    number = wa_bonus-pernrIMPORTING

    return = l_bapireturn.

    IF l_bapireturn-id NE space.

    WRITE: / wa_bonus-pernr, 'Enqueue failed'(003).

    PERFORM applog_msg_add USING '1'wa_bonus-pernr

    'E'

    '5A'

    '198'

    wa_bonus-pernr

    .

    CONTINUE.

    ENDIF.

    IF wa_bonus-fecha_alta > wa_bonus-begda.* si fecha alta > inicio de IT0014, se asume begda = fecha de alta

    * empleado

    r_p0014-begda = wa_bonus-fecha_alta.

    * wa_bonus-begda = wa_bonus-fecha_alta.

    ELSE.r_p0014-begda = wa_bonus-begda.

    ENDIF.

    IF flag_flag 'X'.

    IF pa_rbp1 = 'X'.

    * num_meses = wa_bonus-endda+4(2) - wa_bonus-begda+4(2) + 1.* num_meses = so_febon-high+4(2) - so_febon-low+4(2) + 1.

    PERFORM months_between_dates USING so_febon-low

    so_febon-high

    CHANGING num_meses.ELSE.

  • 8/10/2019 Ejemplos desarrollo HR-SAP

    6/37

    6

    * if wa_bonus-fecha_alta > wa_bonus-begda.

    * num_meses = wa_bonus-endda+4(2) - wa_bonus-fecha_alta+4(2) + 1.

    * else.

    * num_meses = wa_bonus-endda+4(2) - wa_bonus-begda+4(2) + 1.

    * endif.

    IF wa_bonus-fecha_alta > so_febon-low.* num_meses = so_febon-high+4(2) -

    * wa_bonus-fecha_alta+4(2) + 1.PERFORM months_between_dates USING wa_bonus-fecha_alta

    so_febon-high

    CHANGING num_meses.ELSE.

    * num_meses = so_febon-high+4(2) - so_febon-low+4(2) + 1.

    PERFORM months_between_dates USING so_febon-low

    so_febon-high

    CHANGING num_meses.

    ENDIF.

    ENDIF.

    IF num_meses = 0.

    num_meses = 1.

    ENDIF.

    CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_EXTERNAL'EXPORTING

    currency = wa_bonus-waers

    amount_internal = wa_bonus-betrg

    IMPORTING

    amount_external = importe_avo_e.importe_avo_e = importe_avo_e / num_meses.

    importe_avo_e = floor( importe_avo_e ).

    CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_INTERNAL'

    EXPORTING

    currency = wa_bonus-waers

    amount_external = importe_avo_emax_number_of_digits = '17'

    IMPORTING

    amount_internal = importe_avo* RETURN =

    .importe_avo2 = wa_bonus-betrg - ( importe_avo * num_meses ).

    wa_bonus-betrg = importe_avo.

    ENDIF.

    IF importe_avo2 > 0.

    aux_date_endda = wa_bonus-endda.

    PERFORM add_month_to_date USING wa_bonus-endda'-'

    '1'

    CHANGING aux_date_begda.

    r_p0014-endda = aux_date_begda.

    wa_bonus-endda = aux_date_begda.

    importe_avo2 = importe_avo2 + importe_avo.ENDIF.

    DO.

    IF sy-index > 2.

    EXIT.

    ENDIF.

    CHECK wa_bonus-betrg > 0

    OR flag_flag = 'X'

    OR NOT pa_infty IS INITIAL.

    * fill the IT0014 dataIF flag_flag = 'X'.

    * tratamiento special

    r_p0014-infty = '0014'.

    r_p0014-pernr = wa_bonus-pernr.r_p0014-subty = wa_bonus-lgart.

    r_p0014-anzhl = '1'.

  • 8/10/2019 Ejemplos desarrollo HR-SAP

    7/37

    7

    r_p0014-zeinh = cod_unidad_flag.

    r_p0014-endda = wa_bonus-endda.

    r_p0014-lgart = wa_bonus-lgart.

    ELSEIF NOT pa_infty IS INITIAL.

    r_p0014-infty = '0014'.

    r_p0014-pernr = wa_bonus-pernr.r_p0014-subty = pa_lgart.

    r_p0014-endda = wa_bonus-endda.r_p0014-anzhl = wa_bonus-anzhl.

    r_p0014-zeinh = wa_bonus-zeinh.

    r_p0014-betrg = wa_bonus-betrg.r_p0014-waers = wa_bonus-waers.

    ELSE.

    r_p0014-infty = '0014'.

    r_p0014-pernr = wa_bonus-pernr.

    r_p0014-subty = wa_bonus-lgart.

    * r_p0014-begda = wa_bonus-begda.

    * r_p0014-begda = wa_bonus-fecha_alta.

    r_p0014-endda = wa_bonus-endda.

    r_p0014-lgart = wa_bonus-lgart.

    r_p0014-betrg = wa_bonus-betrg.

    r_p0014-waers = wa_bonus-waers.ENDIF.

    * create the IT0014 record

    CALL FUNCTION 'HR_INFOTYPE_OPERATION'

    EXPORTING

    infty = r_p0014-inftynumber = r_p0014-pernr

    subtype = r_p0014-subty

    * OBJECTID = OBJECTID

    * LOCKINDICATOR = LOCKINDICATOR

    validityend = r_p0014-endda

    validitybegin = r_p0014-begda* RECORDNUMBER = RECORDNUMBER

    record = r_p0014

    operation = 'INS'nocommit = pa_test

    IMPORTINGreturn = l_bapireturn

    key = bapipakey_tab

    EXCEPTIONS

    OTHERS = 0.

    IF NOT l_bapireturn IS INITIAL.

    * errorWRITE:/ wa_bonus-pernr,

    'Error crear IT0014'(004),

    l_bapireturn-message+0(120).

    PERFORM applog_msg_add USING '1'

    wa_bonus-pernr

    l_bapireturn-typel_bapireturn-id

    l_bapireturn-number

    l_bapireturn-message_v1

    l_bapireturn-message_v2

    l_bapireturn-message_v3

    l_bapireturn-message_v4.

    ELSE.

    WRITE wa_bonus-betrg TO s_importe CURRENCY wa_bonus-waers.

    CONDENSE s_importe NO-GAPS.

    CONCATENATE s_importe wa_bonus-waers INTO s_importe SEPARATED BYspace.

    m_text = 'IT0014 creado con exito.'.

    m_text2 = 'CCNom: &1 Monto: &2'.

    REPLACE '&1' WITH pa_lgart INTO m_text2.REPLACE '&2' WITH s_importe INTO m_text2.

    m_len = strlen( m_text ).

  • 8/10/2019 Ejemplos desarrollo HR-SAP

    8/37

    8

    WRITE:/ wa_bonus-pernr,

    m_text(m_len),

    m_text2.

    PERFORM applog_msg_add USING '4'

    wa_bonus-pernr

    'S''ZPPY_INT'

    '000'wa_bonus-pernr

    m_text

    m_text2.

    ENDIF.

    IF flag_flag = 'X'

    OR NOT pa_infty IS INITIAL.

    EXIT.

    ENDIF.

    * asignamos importe 2 para siguiente "vuelta" del Do

    wa_bonus-betrg = importe_avo2.

    r_p0014-begda = aux_date_begda + 1.

    wa_bonus-endda = aux_date_endda.

    * wa_bonus-begda = wa_bonus-endda.* wa_bonus-begda+6(2) = '01'.

    ENDDO.

    * Use 'BAPI_EMPLOYEE_DEQUEUE' to un-lock the employee before updating

    CALL FUNCTION 'BAPI_EMPLOYEE_DEQUEUE'

    EXPORTINGnumber = wa_bonus-pernr

    IMPORTING

    return = l_bapireturn.

    ENDLOOP.

    ENDFORM.

    Ejemplo 2 carga Infotipo 0171

    *---------------------------------------------------------------------*

    * FORM carga_it0171 *

    *---------------------------------------------------------------------*

    * ........ *

    *---------------------------------------------------------------------*FORM carga_it0171.

    DATA: BEGIN OF entry_dates OCCURS 5.

    INCLUDE STRUCTURE hida.

    DATA: END OF entry_dates.

    DATA: "JPMSSL0K002845

    lv_barea TYPE p0171-barea, "JPMSSL0K002845lv_bengr TYPE p0171-bengr, "JPMSSL0K002845

    lv_bstat TYPE p0171-bstat, "JPMSSL0K002845

    ld_begda TYPE d.

    DATA ls_p0171 LIKE p0171.

    DATA ls_bapireturn LIKE bapireturn1.

    DATA:lt_bapipakey_tab LIKE bapipakey OCCURS 0 WITH HEADER LINE.

    * REFRESH bdcdata.

    * CLEAR bdcdata.

    * enqueue the employye

    CALL FUNCTION 'BAPI_EMPLOYEE_ENQUEUE'EXPORTING

    number = current_sapno

    IMPORTING

    return = ls_bapireturn.

    IF ls_bapireturn-id NE space.

    WRITE: / current_sapno, 'Enqueue failed'(003).EXIT.

  • 8/10/2019 Ejemplos desarrollo HR-SAP

    9/37

    9

    ENDIF.

    ld_begda(4) = data_in-from_date+6(4).

    ld_begda+4(2) = data_in-from_date+3(2).

    ld_begda+6(2) = data_in-from_date(2).

    CALL FUNCTION 'HR_ENTRY_DATE'

    EXPORTINGpersnr = current_sapno

    IMPORTING

    entrydate = ld_begdaTABLES

    entry_dates = entry_dates

    EXCEPTIONS

    entry_date_not_found = 1

    pernr_not_assigned = 2.

    IF sy-subrc 0.

    MESSAGE i016(pn) WITH text-028 current_sapno text-026.

    EXIT.

    ENDIF.

    PERFORM get_default_values_for_p0171 "JPMSSL0K002845

    USING "JPMSSL0K002845current_sapno "JPMSSL0K002845

    ld_begda "JPMSSL0K002845

    CHANGING "JPMSSL0K002845

    lv_barea "JPMSSL0K002845

    lv_bengr "JPMSSL0K002845lv_bstat. "JPMSSL0K002845

    ls_p0171-infty = '0171'.

    ls_p0171-pernr = current_sapno.

    ls_p0171-begda = ld_begda.

    ls_p0171-endda = '99991231'.ls_p0171-barea = lv_barea.

    ls_p0171-bengr = lv_bengr.

    ls_p0171-bstat = lv_bstat.CALL FUNCTION 'HR_INFOTYPE_OPERATION'

    EXPORTINGinfty = ls_p0171-infty

    number = ls_p0171-pernr

    subtype = ls_p0171-subty

    * OBJECTID = OBJECTID

    * LOCKINDICATOR = LOCKINDICATOR

    validityend = ls_p0171-enddavaliditybegin = ls_p0171-begda

    * RECORDNUMBER = RECORDNUMBER

    record = ls_p0171

    operation = 'INS'

    nocommit = testrun

    IMPORTINGreturn = ls_bapireturn

    key = lt_bapipakey_tab

    EXCEPTIONS

    OTHERS = 0.

    IF NOT ls_bapireturn IS INITIAL.

    * error

    WRITE:/ ls_p0171-pernr,

    'Error crear IT0171'(004),

    ls_bapireturn-message+0(120).

    ELSE.WRITE:/ ls_p0171-pernr, 'Registro creado con exito'(001).

    ENDIF.

    * Use 'BAPI_EMPLOYEE_DEQUEUE' to un-lock the employee before updating

    CALL FUNCTION 'BAPI_EMPLOYEE_DEQUEUE'EXPORTING

    number = current_sapno

  • 8/10/2019 Ejemplos desarrollo HR-SAP

    10/37

    10

    IMPORTING

    return = ls_bapireturn.

    ENDFORM.

  • 8/10/2019 Ejemplos desarrollo HR-SAP

    11/37

    11

    SAP HR ABAP LECTURA CLUSTER

    Ejemplo 1 lectura de estructura ARRS

    *&---------------------------------------------------------------------*

    *& Form get_pay_data

    *&---------------------------------------------------------------------** text

    *----------------------------------------------------------------------*

    * --> p1 text

    *

  • 8/10/2019 Ejemplos desarrollo HR-SAP

    12/37

    12

    no_record_found = 6

    versions_do_not_match = 7

    OTHERS = 8.

    IF sy-subrc 0.

    IF sy-subrc = 5.

    p_subrc = 4.ENDIF.

    EXIT.ENDIF.

    gt_alv_data-fpper = gs_rgdir-fpper.

    gt_alv_data-waers = gt_result-inter-versc-waers.LOOP AT gt_result-inter-arrrs INTO ls_arrrs.

    MOVE-CORRESPONDING ls_arrrs TO gt_alv_data.

    APPEND gt_alv_data.

    ENDLOOP.

    ENDLOOP.

    ENDFORM. " get_pay_data

  • 8/10/2019 Ejemplos desarrollo HR-SAP

    13/37

    13

    SAP HR ABAP BAPI BASICPAY GETDETAIL

    Ejemplo de BAPI 'BAPI_BASICPAY_GETDETAIL' para leerel IT0008

    Ojo que esta BAPI calcula los conceptos indirectos :-)

    *---------------------------------------------------------------------*

    * FORM get_p0008_detail *

    *---------------------------------------------------------------------*

    * ........ **---------------------------------------------------------------------*

    * --> GT_BAPI_WAGETYPES *

    * --> P0008 *

    *---------------------------------------------------------------------*FORM get_p0008_detail TABLES gt_bapi_wagetypes STRUCTURE bapip0008p

    USING p0008 LIKE p0008.DATA ld_amount_external LIKE bapicurr-bapicurr.

    DATA lt_return LIKE TABLE OF bapireturn1 WITH HEADER LINE.

    CLEAR gt_bapi_wagetypes[].

    CALL FUNCTION 'BAPI_BASICPAY_GETDETAIL'

    EXPORTINGemployeenumber = p0008-pernr

    subtype = p0008-subty

    objectid = p0008-objps

    lockindicator = p0008-sprps

    validitybegin = p0008-begda

    validityend = p0008-endda

    recordnumber = p0008-seqnrIMPORTING

    return = lt_return

    TABLES

    wagetypes = gt_bapi_wagetypes.ENDFORM.

    Ejemplo 2, Aca soluciona problema con autorizacion en IT0008

    *&---------------------------------------------------------------------*

    *& Form get_basicpay_detail

    *&---------------------------------------------------------------------** copied from BAPI_BASICPAY_GETDETAIL

    *----------------------------------------------------------------------*

    * -->GT_BAPI_WAGETYPES text

    * -->VALUE(P0008) text

    * -->P_SUMBB text*----------------------------------------------------------------------*

    FORM get_basicpay_detail TABLES gt_bapi_wagetypes STRUCTURE bapip0008p

    USING value(p0008) LIKE p0008

    CHANGING p_sumbb.

    DATA ld_amount_external LIKE bapicurr-bapicurr.

    DATA lt_return LIKE TABLE OF bapireturn1 WITH HEADER LINE.DATA lt_p0008 LIKE TABLE OF p0008 WITH HEADER LINE.

    DATA ld_number_of_lgart_in_p0008 TYPE i.

  • 8/10/2019 Ejemplos desarrollo HR-SAP

    14/37

    14

    DATA fname LIKE pprop-fname.

    FIELD-SYMBOLS .

    DATA: molga LIKE t001p-molga,

    * WAGETYPENO LIKE T539S-LGANR, "N0334353

    wagetypeno(2) TYPE n, "N0334353

    amount LIKE gt_bapi_wagetypes-amount,number LIKE gt_bapi_wagetypes-number,

    indvaluation LIKE gt_bapi_wagetypes-indvaluat,addtotalamount LIKE gt_bapi_wagetypes-addtotamnt,

    number_of_lgart_in_p0008 TYPE i VALUE 20, "HCMOPS2737

    currencyexpstring LIKE sy-msgv1.CLEAR gt_bapi_wagetypes[].

    CLEAR p_sumbb.

    CHECK p0008 IS NOT INITIAL.

    CALL FUNCTION 'RP_NUMBER_OF_WAGETYPES_0008' "HCMOPS2737

    IMPORTING wt_count = ld_number_of_lgart_in_p0008. "HCMOPS2737

    REFRESH gt_bapi_wagetypes.

    * DO 20 TIMES. "HCMOPS2737

    DO number_of_lgart_in_p0008 TIMES. "HCMOPS2737

    CLEAR gt_bapi_wagetypes.

    MOVE sy-index TO wagetypeno.

    CONCATENATE 'P0008-LGA' wagetypeno INTO fname.ASSIGN (fname) TO .

    MOVE TO gt_bapi_wagetypes-wagetype.

    CONCATENATE 'P0008-IND' wagetypeno INTO fname.

    ASSIGN (fname) TO .

    MOVE TO gt_bapi_wagetypes-indvaluat.CONCATENATE 'P0008-BET' wagetypeno INTO fname.

    ASSIGN (fname) TO .

    * move to wagetypes-amount.

    CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_EXTERNAL'

    EXPORTING

    currency = p0008-waersamount_internal =

    IMPORTING

    amount_external = gt_bapi_wagetypes-amountEXCEPTIONS

    OTHERS = 0.IF sy-subrc NE 0.

    * write p0008-waers to currencyexpstring.

    * call function 'BALW_BAPIRETURN_GET1'

    * exporting

    * type = 'E'

    * cl = 'RP'* number = '042'

    * par1 = currencyexpstring

    ** par2 = ' '

    ** PAR3 = ' '

    ** PAR4 = ' '

    ** LOG_NO = ' '** LOG_MSG_NO = ' '

    * importing

    * bapireturn = return

    * exceptions

    * others = 0.

    ** EXIT.

    ENDIF.

    CONCATENATE 'P0008-ANZ' wagetypeno INTO fname.

    ASSIGN (fname) TO .

    MOVE TO gt_bapi_wagetypes-number.CONCATENATE 'P0008-EIN' wagetypeno INTO fname.

    ASSIGN (fname) TO .

    MOVE TO gt_bapi_wagetypes-timeunit.

    CONCATENATE 'P0008-OPK' wagetypeno INTO fname.ASSIGN (fname) TO .

    MOVE TO gt_bapi_wagetypes-operindic.

  • 8/10/2019 Ejemplos desarrollo HR-SAP

    15/37

    15

    * PERFORM get_addtotalamount USING molga

    * wagetypes-wagetype

    * validityend

    * CHANGING wagetypes-addtotamnt

    * return.

    *** wird in BAPI_BASICPAYEVALUATEWAGETYPES geflltPERFORM re512t USING gt_bapi_wagetypes-wagetype

    '99'CHANGING gt_bapi_wagetypes-nameofwagetype.

    IF NOT gt_bapi_wagetypes-wagetype IS INITIAL. "no wagetype, no entry

    APPEND gt_bapi_wagetypes.ENDIF.

    ENDDO.

    CALL FUNCTION 'HR_READ_INFOTYPE_AUTHC_DISABLE'

    EXCEPTIONS

    OTHERS = 1.

    CALL FUNCTION 'BAPI_BASICPAYEVALUATEWAGETYPES'

    EXPORTING

    employeenumber = pernr-pernr

    startindvaluation = pn-endda

    countrygrouping = '99'payscaletype = p0008-trfar

    payscalearea = p0008-trfgb

    payscalegroup = p0008-trfgr

    payscalelevel = p0008-trfst

    currencyimp = p0008-waerscapacityutilization = p0008-bsgrd

    hoursworked = p0008-divgv

    IMPORTING

    * CURRENCYEXP =

    return = lt_return

    TABLESwagetypes = gt_bapi_wagetypes

    EXCEPTIONS

    OTHERS = 0.IF NOT lt_return IS INITIAL.

    IF lt_return-type = 'S'. "SuccessCLEAR lt_return.

    ENDIF.

    ENDIF.

    * calculate agreed salary

    LOOP AT gt_bapi_wagetypes WHERE addtotamnt = 'X'.

    ADD gt_bapi_wagetypes-amount TO ld_amount_external.ENDLOOP.

    IF p0008-waers IS INITIAL.

    p0008-waers = 'CLP'.

    ENDIF.

    CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_INTERNAL'

    EXPORTINGcurrency = p0008-waers

    amount_external = ld_amount_external

    max_number_of_digits = 15

    IMPORTING

    amount_internal = p_sumbb

    * RETURN =

    .

    ENDFORM. "get_basicpay_detail

  • 8/10/2019 Ejemplos desarrollo HR-SAP

    16/37

    16

    SAP HR ABAP HR READ INFOTYPE

    FUNCION HR_READ_INFOTYPE PARA LEER DATOS

    INFOTIPO

    FUNCTION z_rfc_zhrcbbrp051.

    *"----------------------------------------------------------------------

    *"*"Interfase local

    *" IMPORTING

    *" VALUE(PERNR) TYPE PERNR-PERNR*" VALUE(FPPER) TYPE FPPER

    *" EXPORTING

    *" VALUE(E_PERDATA) LIKE ZST_CERT_RENTA STRUCTURE ZST_CERT_RENTA

    *" VALUE(RETORNO1) LIKE SY-MSGTY

    *" VALUE(RETORNO2) LIKE T100-TEXT

    *" VALUE(RETORNO3) LIKE SY-MSGV1

    *" TABLES

    *" WAGETYPES STRUCTURE BAPIP0008P

    *"----------------------------------------------------------------------

    DATA ld_subrc LIKE sy-subrc.

    DATA lt_0001 LIKE TABLE OF p0001 WITH HEADER LINE.DATA lt_0002 LIKE TABLE OF p0002 WITH HEADER LINE.

    DATA lt_0041 LIKE TABLE OF p0041 WITH HEADER LINE.

    DATA lt_9003 LIKE TABLE OF p9003 WITH HEADER LINE.

    DATA lt_9007 LIKE TABLE OF p9007 WITH HEADER LINE.

    DATA lt_0008 LIKE TABLE OF p0008 WITH HEADER LINE.

    DATA lt_0014 LIKE TABLE OF p0014 WITH HEADER LINE.DATA ld_fec_con TYPE d.

    DATA ld_molga LIKE t500p-molga.

    DATA ld_auxtabix LIKE sy-tabix.

    DATA: ld_begda TYPE d,

    ld_endda TYPE d.* cc nominas de infotipo 0008

    PERFORM init_lgart_0008.

    *

    * cc nominas de infotipo 0014

    PERFORM init_lgart_0014.

    ** fecha de certificado

    * perform spell_fecha using fecha

    * changing e_perdata-FECer_TXT.

    e_perdata-pernr = pernr.

    e_perdata-fecer = sy-datlo.*CALL FUNCTION 'HR_READ_INFOTYPE_AUTHC_DISABLE'

    ld_begda = fpper.ld_begda+6(2) = '01'.

    PERFORM last_day_in_month(sapfp500) USING ld_begda

    ld_endda.

    *----------------------------------------------------------------------*

    * leer datos infotipo 0001

    *----------------------------------------------------------------------*

    CALL FUNCTION 'HR_READ_INFOTYPE'

    EXPORTING

    * TCLAS = 'A'pernr = pernr

    infty = '0001'

    begda = ld_begda

    endda = ld_endda

    IMPORTINGsubrc = ld_subrc

  • 8/10/2019 Ejemplos desarrollo HR-SAP

    17/37

    17

    TABLES

    infty_tab = lt_0001.

    LOOP AT lt_0001.

    ENDLOOP.

    IF sy-subrc = 0.

    SELECT SINGLE butxt INTO e_perdata-butxt FROM t001WHERE bukrs = lt_0001-bukrs.

    SELECT SINGLE ptext INTO e_perdata-ptextFROM t501t WHERE sprsl = sy-langu AND

    persg = lt_0001-persg .

    IF sy-subrc NE 0.SELECT SINGLE ptext INTO e_perdata-ptext

    FROM t501t WHERE sprsl = 'S' AND

    persg = lt_0001-persg .

    ENDIF.

    ELSE.

    * sin datos

    MOVE:

    'E' TO retorno1,

    'SIN DATOS' TO retorno2,

    TO retorno3.

    EXIT.ENDIF.

    *----------------------------------------------------------------------*

    * Leer datos Infotipo 0002

    *----------------------------------------------------------------------*

    CALL FUNCTION 'HR_READ_INFOTYPE'EXPORTING

    * TCLAS = 'A'

    pernr = pernr

    infty = '0002'

    begda = ld_begda

    endda = ld_enddaIMPORTING

    subrc = ld_subrc

    TABLESinfty_tab = lt_0002.

    LOOP AT lt_0002.ENDLOOP.

    IF sy-subrc = 0.

    * tratamiento

    SELECT SINGLE atext INTO e_perdata-atext FROM t522t

    WHERE sprsl = sy-langu

    AND anred = lt_0002-anred.IF sy-subrc NE 0.

    SELECT SINGLE atext INTO e_perdata-atext FROM t522t

    WHERE sprsl = 'S'

    AND anred = lt_0002-anred.

    ENDIF.

    e_perdata-vorna = lt_0002-vorna. "Nombrese_perdata-nachn = lt_0002-nachn. "1er apellido

    e_perdata-name2 = lt_0002-name2. "2do apellido

    e_perdata-zzhr_rut = lt_0002-zzhr_rut. "rut

    ENDIF.

    *----------------------------------------------------------------------*

    * Leer datos Infotipo 0041

    *----------------------------------------------------------------------*

    CALL FUNCTION 'HR_READ_INFOTYPE'

    EXPORTING

    * TCLAS = 'A'pernr = pernr

    infty = '0041'

    begda = ld_begda

    endda = ld_enddaIMPORTING

    subrc = ld_subrc

  • 8/10/2019 Ejemplos desarrollo HR-SAP

    18/37

    18

    TABLES

    infty_tab = lt_0041.

    LOOP AT lt_0041.

    ENDLOOP.

    IF sy-subrc EQ 0.

    * leer fecha de contratacionPERFORM leer_fecha_i0041 USING lt_0041

    '02'CHANGING ld_fec_con.

    e_perdata-fecon = ld_fec_con.

    * perform spell_fecha using ld_fec_con* changing e_perdata-FECON_TXT.

    ENDIF.

    *--------------------------------------------------------------------*

    * leer datos afp

    *--------------------------------------------------------------------*

    CALL FUNCTION 'HR_READ_INFOTYPE'

    EXPORTING

    * TCLAS = 'A'

    pernr = pernr

    infty = '9003'

    begda = ld_begdaendda = ld_endda

    IMPORTING

    subrc = ld_subrc

    TABLES

    infty_tab = lt_9003.LOOP AT lt_9003.

    ENDLOOP.

    IF sy-subrc = 0.

    DATA ld_f_pens LIKE z7cl_afp0-f_pens.

    DATA ld_seg_inval LIKE z7cl_afp0-seg_inval.

    SELECT SINGLE glosa_afp f_pens seg_inval INTO(e_perdata-glosa_afp,ld_f_pens, ld_seg_inval)

    FROM z7cl_afp0

    WHERE cod_afp = lt_9003-cod_afp ANDendda >= ld_begda AND

    begda

  • 8/10/2019 Ejemplos desarrollo HR-SAP

    19/37

    19

    molga = ld_molga AND

    hasta >= ld_begda AND

    desde

  • 8/10/2019 Ejemplos desarrollo HR-SAP

    20/37

    20

    AND molga = ld_molga

    AND lgart = lt_0014-lgart.

    APPEND gt_bapi_wagetypes.

    ENDIF.

    ENDLOOP.

    LOOP AT gt_bapi_wagetypes.IF gt_bapi_wagetypes-amount = 0.

    DELETE gt_bapi_wagetypes.ELSE.

    ADD gt_bapi_wagetypes-amount TO e_perdata-total_bruto.

    ENDIF.ENDLOOP.

    wagetypes[] = gt_bapi_wagetypes[].

    ENDFUNCTION.

    *&---------------------------------------------------------------------*

    *& Form leer_fecha_i0041

    *&---------------------------------------------------------------------*

    *

    *----------------------------------------------------------------------*

    * -->P0041 I0041 record

    * -->id_date class of date*

  • 8/10/2019 Ejemplos desarrollo HR-SAP

    21/37

    21

    TABLES

    wagetypes = gt_bapi_wagetypes.

    ENDFORM.

  • 8/10/2019 Ejemplos desarrollo HR-SAP

    22/37

    22

    SAP HR ABAP ORG

    Ejemplo 1

    Obtiene estructura organizacional de "arriba hacia abajo", dado un codigo de organizacion inicial. Ojo

    que es recursiva.

    REPORT ytes_hr_org.

    TABLES hrp1001.DATA: BEGIN OF gt_org OCCURS 0,

    orgid_sup LIKE hrp1001-objid, "Org superior

    orgid LIKE hrp1001-objid, "Org

    pos TYPE i, "jerarquia dentro de Org.

    END OF gt_org.

    PARAMETERS p_orgid LIKE hrp1001-objid.

    START-OF-SELECTION.PERFORM get_org USING space

    p_orgid0.

    *&---------------------------------------------------------------------*

    *& Form get_org

    *&---------------------------------------------------------------------*

    FORM get_org USING p_orgid_supp_orgid

    value(p_pos).

    DATA: BEGIN OF lt_org OCCURS 0,

    sobid LIKE hrp1001-sobid,

    END OF lt_org.

    DATA ld_objid LIKE hrp1001-objid.gt_org-orgid_sup = p_orgid_sup.

    gt_org-orgid = p_orgid.

    gt_org-pos = p_pos.

    APPEND gt_org.

    ADD 1 TO p_pos.SELECT sobid INTO TABLE lt_org FROM hrp1001

    WHERE otype = 'O'

    AND objid = p_orgid

    AND plvar = '01'

    AND rsign = 'B'AND relat = '002'

    AND sclas = 'O'

    AND istat EQ '1'

    AND begda LE sy-datumAND endda GE sy-datum.

    IF sy-subrc NE 0.EXIT.

    ELSE.

    LOOP AT lt_org.

    MOVE lt_org-sobid TO ld_objid.

    PERFORM get_org USING p_orgidld_objid

    p_pos.

    ENDLOOP.

    ENDIF.

    ENDFORM. "get_org

  • 8/10/2019 Ejemplos desarrollo HR-SAP

    23/37

    23

    SAP HR ABAP CLUSTER TIEMPO

    Ejemplo 1

    OJO usar base de datos PNP

    TABLES: pernr.

    INFOTYPES : 0001,

    0002,0007,

    0008,

    2001.

    *&---------------------------------------------------------------------*

    * time managment related

    *&---------------------------------------------------------------------*

    TABLES: pcl1,

    pcl2.

    INCLUDE rpppxd00. "data for PCL1/2 buffer*include rpppxm00. "standard routines for buffering the data inmacros

    data: begin of common part buffer.

    INCLUDE rpppxd10.

    DATA: END OF COMMON PART.

    INCLUDE rpc2b200.

    START-OF-SELECTION.

    GET pernr.

    PERFORM read_time.

    END-OF-SELECTION.

    INCLUDE rpppxm00.*&---------------------------------------------------------------------*

    *& Form read_time

    *&---------------------------------------------------------------------*

    * text*----------------------------------------------------------------------*

    FORM read_time.

    b2-key-pernr = pernr-pernr. "Personnel number

    b2-key-pabrp = pn-begda+4(2). "payroll period

    b2-key-pabrj = pn-begda(4). "payroll yearb2-key-cltyp = '1'. "original

    rp-imp-c2-b2.

    IF sy-subrc = 0.

    * theorically bonus by time concept

    LOOP AT zl WHERE lgart IN rt_lgart_bonoAND lgart IN so_lgart.ADD zl-anzhl TO gs_rec-ntubo.

    ENDLOOP.

    LOOP AT so_lgart.

    LOOP AT zl WHERE lgart = so_lgart-low.

    gs_rec-cctpo = zl-lgart.ADD 1 TO gs_rec-nutpo.

    ENDLOOP.

    ENDLOOP.

    ENDIF.

    ENDFORM. "read_time

    Ejemplo 2

  • 8/10/2019 Ejemplos desarrollo HR-SAP

    24/37

    24

    usar funcion 'HR_TIME_RESULTS_IN_INTERVAL' ejemplo

    CALL FUNCTION 'HR_TIME_RESULTS_IN_INTERVAL'

    EXPORTING

    int_pernr = work_pernr

    int_begda = levp-fpbeg

    int_endda = in_period_endTABLES

    int_time_results = time_results

    EXCEPTIONS

    wrong_cluster_version = 1no_read_authority = 2

    cluster_archived = 3

    technical_error = 4

    OTHERS = 5.

    REFRESH complete_zl.

    REFRESH summary_zl.LOOP AT time_results INTO time_result.

    APPEND LINES OF time_result-zl TO complete_zl.

    APPEND LINES OF time_result-qtacc TO qtacctab.

    APPEND LINES OF time_result-psp TO psptab.APPEND LINES OF time_result-qttrans TO qttranstab.* Build up a ZL table that is based on the date and wagetype

    * Everything else is cleared. This will achieve a hour total

    * on a day by day basis per wagetype.

    LOOP AT time_result-zl INTO zl.

    CLEAR zl-beguz.

    CLEAR zl-enduz.CLEAR zl-alznr.

    CLEAR zl-c1znr.

    CLEAR zl-abznr.

    CLEAR zl-iftyp.

    CLEAR zl-prznr.COLLECT zl INTO summary_zl.

    ENDLOOP.

    ENDLOOP.

  • 8/10/2019 Ejemplos desarrollo HR-SAP

    25/37

    25

    SAP HR ABAP LEER ACUMULADORES

    DATA:

    char96(96), "char-feld fuer 96 char 0/1hexin(12) TYPE x, "hex feld fuer 96 bit 0/1

    x128 TYPE x VALUE '80',

    hex TYPE x, hextm TYPE x,

    ps TYPE p, pc TYPE p.

    DATA: pack TYPE p,pack1 TYPE p,pack2 TYPE p.DATA gd_num TYPE i.

    DATA gd_res(1) TYPE c.

    gd_num = '85'. "acummulates in /185

    PERFORM get_kumul USING gd_num

    gs_t512w-lgart

    gs_t512w-kumulCHANGING gd_res.

    IF gd_res EQ 'X'.

    * acumula => do something

    ENDIF.

    *---------------------------------------------------------------------*

    * FORM HEXINCHAR *

    *---------------------------------------------------------------------*

    FORM hexinchar USING anzahl. "und Feld HEXIN.

    IF NOT hexin IS INITIAL.

    * maximale Laenge HEXINPUT ist 12 = L'HEXIN bzw. L'CHAR96/8 s. a. MAXdo anzahl times

    varying hex from hexin(1) next hexin+1(1) range hexin."UC XMS

    SHIFT char96 BY 8 PLACES.

    ps = 0. "set sum

    pc = 10000000. "set charhextm = x128. "set hex

    DO 8 TIMES.IF hex O hextm. ps = ps + pc. ENDIF.

    hextm = hextm / 2. pc = pc / 10.

    ENDDO.

    UNPACK ps TO char96+88(8).ENDDO.

    ps = ( 12 - anzahl ) * 8. "MAX = 12, maximale Laenge HEXINPUT

    SHIFT char96 BY ps PLACES. "linksbuendig nach CHAR96

    ENDIF.

    ENDFORM. "END OF HEXINCHAR*---------------------------------------------------------------------*

    * FORM GET_KUMUL *

    *---------------------------------------------------------------------*

    FORM get_kumul USING gc_num TYPE i

    gc_lgart TYPE lgartp_kumul

    CHANGING gc_acum TYPE c.

    DATA gc_kumula LIKE char96.

    CLEAR: char96, hexin.

    CLEAR gc_acum.

    hexin = p_kumul.PERFORM hexinchar USING 12.

    gc_kumula = char96.

    IF gc_kumula IS NOT INITIAL.

    pack = gc_num - 1. "vklas-kl - 1.

    SHIFT gc_kumula BY pack PLACES.

    IF gc_kumula(1) EQ '1'.gc_acum = 'X'.

    ELSE.gc_acum = space.

    ENDIF.

  • 8/10/2019 Ejemplos desarrollo HR-SAP

    26/37

    26

    ENDIF.

    ENDFORM. "get_kumul

  • 8/10/2019 Ejemplos desarrollo HR-SAP

    27/37

    27

    SAP HR PRESTAMOS ABAP

    FUNCIONES UTILES MODULO PRESTAMOS

    cl_hrpa_loan_computations=>compute_estimated_end_of_loan

    cl_hrpa_loan_computations=>read_payments_for_loan_id

    cl_hrpa_loan_computations=>compute_repayment_plan

    EJEMPLO

    *&---------------------------------------------------------------------*

    *& Report Y_TEST_LOAN*&

    *&---------------------------------------------------------------------**&

    *&

    *&---------------------------------------------------------------------*

    REPORT y_test_loan.

    TABLES pernr.

    INFOTYPES: 0045.

    DATA instance TYPE REF TO cl_hrpa_loan_computations.

    DATA gd_pclo_id TYPE pclo_id.

    DATA gd_estimated_end_of_loan TYPE d.DATA data_ref TYPE REF TO data.

    DATA gd_message_handler TYPE REF TO if_hrpa_message_handler.

    DATA gt_pagos TYPE pclo_payments_tab.

    DATA gt_p0078_tab TYPE p0078_tab.

    DATA: gt_pclo_repay_tab TYPE pclo_repay_tab,gt_pclo_loan_changes_tab TYPE pclo_loan_changes_tab.

    * create dummy message handler

    DATA dummy_handler TYPE REF TO cl_hrpa_dummy_message_handler.

    CREATE OBJECT dummy_handler.

    message_handler = dummy_handler.

    START-OF-SELECTION.

    GET pernr.

    PROVIDE * FROM p0045 BETWEEN pn-begda AND pn-endda.

    CALL METHOD cl_hrpa_loan_computations=>get_loan_id_from_p0045

    EXPORTINGp0045 = p0045

    RECEIVINGloan_id = gd_pclo_id.

    * CALCULO DE FECHA FINAL PRESTAMO

    try.CALL METHOD cl_hrpa_loan_computations=>compute_estimated_end_of_loan

    EXPORTING

    tclas = 'A'

    loan_id = gd_pclo_id

    message_handler = dummy_handler

    RECEIVING

    estimated_end_of_loan = gd_estimated_end_of_loan.

    endtry.

    * PAGOS DE PRESTAMO

    try.

    CALL METHOD cl_hrpa_loan_computations=>read_payments_for_loan_idEXPORTING

    tclas = 'A'

  • 8/10/2019 Ejemplos desarrollo HR-SAP

    28/37

    28

    loan_id = gd_pclo_id

    * ZAHLA = '*'

    * SPRPS = '*'

    * BEGDA = LOW_DATE

    * ENDDA = HIGH_DATE

    * NO_AUTH_CHECK = FALSEIMPORTING

    payments_tab = gt_pagos* DATA_EXISTS =

    * MISSING_AUTH =

    .catch cx_hrpa_violated_assertion .

    endtry.

    try.

    CALL METHOD cl_hrpa_loan_computations=>read_p0078_for_loan_id

    EXPORTING

    tclas = 'A'

    loan_id = gd_pclo_id

    * ZAHLA = '*'

    * SPRPS = '*'

    * BEGDA = LOW_DATE* ENDDA = HIGH_DATE

    * NO_AUTH_CHECK = FALSE

    IMPORTING

    p0078_tab = gt_p0078_tab

    * DATA_EXISTS =* MISSING_AUTH =

    .

    catch cx_hrpa_violated_assertion .

    endtry.

    * GENERAR PLAN DE AMORTIZACION

    try.CALL METHOD cl_hrpa_loan_computations=>compute_repayment_plan

    EXPORTING

    tclas = 'A'loan_id = gd_pclo_id

    * NEW_CURRENCY =message_handler = dummy_handler

    IMPORTING

    repayment_plan = gt_pclo_repay_tab

    loan_changes = gt_pclo_loan_changes_tab

    * IS_OK =

    .catch cx_hrpa_violated_assertion .

    endtry.

    ENDPROVIDE.

    END-OF-SELECTION.

  • 8/10/2019 Ejemplos desarrollo HR-SAP

    29/37

    29

    SAP HR ABAP PERFORMANCE

    Ejemplo lectura tablas HRP1001 y HRP1000

    En vez de utilizar select * from HRP1001, etc., usar funcion 'RH_READ_INFTY_1001' ,

    ejemplo

    CALL FUNCTION 'RH_READ_INFTY_1001'EXPORTING

    plvar = cc_plvar

    otype = 'O'

    objid = i_orgid

    istat = '1'subty = 'B002'

    begda = pn-begda

    endda = pn-endda

    TABLES

    i1001 = gtb_1001

    EXCEPTIONSnothing_found = 1

    wrong_condition = 2

    wrong_parameters = 3

    OTHERS = 4.

    LOOP AT gtb_1001 WHERE sclas = 'O'.ltb_org-sobid = gtb_1001-sobid.

    APPEND ltb_org.

    ENDLOOP.

    IF sy-subrc NE 0.

    ENDIF.

    PARA HRP1000 usar 'RH_READ_INFTY_1000'

    *---------------------------------------------------------------------*

    * FORM is_tech *

    *---------------------------------------------------------------------*

    * ........ *

    *---------------------------------------------------------------------** --> I_POS *

    * --> I_ORG *

    * --> O_TECH **---------------------------------------------------------------------*

    FORM is_tech USING i_pos

    i_org

    CHANGING o_tech.

    CLEAR o_tech.

    CALL FUNCTION 'RH_READ_INFTY_1001'

    EXPORTING

    plvar = cc_plvarotype = 'S'

    objid = i_pos

    istat = '1'

    subty = 'B007'

    begda = p0001-begda

    endda = p0001-enddaTABLES

    i1001 = gtb_1001

  • 8/10/2019 Ejemplos desarrollo HR-SAP

    30/37

    30

    EXCEPTIONS

    nothing_found = 1

    wrong_condition = 2

    wrong_parameters = 3

    OTHERS = 4.

    LOOP AT gtb_1001 TRANSPORTING NO FIELDSWHERE sclas = '1S'.

    ENDLOOP.IF sy-subrc = 0.

    CALL FUNCTION 'RH_READ_INFTY_1000'

    EXPORTINGplvar = cc_plvar

    otype = '1S'

    objid = gtb_1001-objid

    istat = '1'

    begda = gtb_1001-begda

    endda = gtb_1001-endda

    TABLES

    i1000 = gtb_1000

    EXCEPTIONS

    nothing_found = 1

    wrong_condition = 2wrong_parameters = 3

    OTHERS = 4.

    IF sy-subrc = 0.

    LOOP AT gtb_1000 WHERE langu = sy-langu.

    ENDLOOP.IF sy-subrc NE 0.

    LOOP AT gtb_1000.

    ENDLOOP.

    ENDIF.

    IF gtb_1000-short = 'PT US TECHNI'.

    o_tech = 'T'.ELSEIF gtb_1000-short = 'PT US NON-TE'.

    o_tech = 'N'.

    ELSE.o_tech = space.

    ENDIF.ENDIF.

    ENDIF.

    ENDFORM. "read_p1051

    EJEMPLO HR_READ_INFOTYPE

    si tenemos el siguiente reporte HR

    INFOTYPES: 0001,

    0008,2001.

    START-OF-SELECTION.

    GET pernr.

    * basic pay data

    rp_provide_from_last p0008 space pn-begda pn-endda.

    CHECK p0008-trfar IN so_trfar .

    CHECK p0008-trfgb IN so_trfgb .CHECK p0008-trfgr IN so_trfgr .

    CHECK p0008-trfst IN so_trfst .

    LOOP AT p2001.

    PERFORM do_something.

    ENDLOOP.

    END-OF-SELECTION.

  • 8/10/2019 Ejemplos desarrollo HR-SAP

    31/37

    31

    es mas optimo de la siguiente forma

    INFOTYPES: 0001,0008,

    2001 MODE n.

    START-OF-SELECTION.

    GET pernr.

    * Basic Pay Data

    rp_provide_from_last p0008 space pn-begda pn-endda.

    CHECK p0008-trfar IN so_trfar .

    CHECK p0008-trfgb IN so_trfgb .

    CHECK p0008-trfgr IN so_trfgr .CHECK p0008-trfst IN so_trfst .

    PERFORM leer_2001.

    LOOP AT p2001.

    PERFORM do_something.

    ENDLOOP.

    END-OF-SELECTION.

    *---------------------------------------------------------------------*

    * FORM leer_2001 *

    *---------------------------------------------------------------------** ........ *

    *---------------------------------------------------------------------*

    FORM leer_2001.

    CLEAR p2001.

    REFRESH p2001.CALL FUNCTION 'HR_READ_INFOTYPE'

    EXPORTING

    * TCLAS = 'A'pernr = pernr-pernr

    infty = '2001'

    TABLES

    infty_tab = p2001

    EXCEPTIONS

    infty_not_found = 1

    OTHERS = 2

    .IF sy-subrc 0.

    * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

    * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

    ENDIF.

    ENDFORM.

  • 8/10/2019 Ejemplos desarrollo HR-SAP

    32/37

    32

    SAP HR DRIVER SIMULACION

    Simular existencia de Infotipos en driver nomina RPCALCX0

    * Tables for intermediate memory mngmt.

    TYPES: BEGIN OF hroct_iprel,

    pernr LIKE p0001-pernr,

    infty LIKE p0001-infty,

    idata LIKE prelp OCCURS 0,

    END OF hroct_iprel.

    DATA: BEGIN OF mem_id_iprel, "Memory ID for infotypes

    pernr LIKE p0001-pernr,

    value(5) VALUE 'IPREL',END OF mem_id_iprel.

    DATA: obj_iprel TYPE REF TO cl_hrpay99_fill_infotypes.

    * objects for infotype simulation

    DATA: send_it TYPE REF TO cl_hrpay99_send_infotypes,iprel TYPE hrpay99_iprel_table.

    *............

    *............

    *............

    IF p_flag = 'X'.

    * read & send infotype 0014 to memory for the process of simulation* of the payroll driver RPCALCX0

    PERFORM fill_iperl_i0014.

    ELSE. "M19

    CLEAR retro_date. "M19

    ENDIF.IF NOT obj_iprel IS INITIAL.

    * create object for infotype simulation

    CREATE OBJECT send_it.* fill iprel from importing parameter

    iprel = obj_iprel->get_iprel( ).

    * fill send_it from table iprelCALL METHOD send_it->set_iprel( iprel ).

    * send infotype object to memory

    CALL METHOD send_it->send_all.

    ENDIF.

    *...*...

    *...

    SUBMIT rpcalcx0

    USING SELECTION-SET variant_calc

    * using selection-sets of program 'HARCALC0'* using selection-sets of program 'RPCALCX0'

    USING SELECTION-SETS OF PROGRAM 'ZPPY_INT_RPCALCX0'

    WITH pnppernr eq fired_employees_line-pernr

    WITH pnpxabkr eq fired_employees_line-abkrs

    WITH pnpabkrs eq fired_employees_line-abkrsWITH pnptimr9 eq space

    WITH pnptimra eq 'X'

    * WITH pnppabrp EQ fired_employees_line-pabrp "M29

    * WITH pnppabrj EQ fired_employees_line-pabrj "M29

    WITH pnppabrp eq gd_pabrp "M29

    WITH pnppabrj eq gd_pabrj "M29WITH payty eq fired_employees_line-payty

    * WITH bondt EQ fired_employees_line-bondt "M29

    * WITH ocrsn EQ fired_employees_line-ocrsn "M29WITH bondt eq gd_bondt "M29

    WITH ocrsn eq gd_ocrsn "M29

  • 8/10/2019 Ejemplos desarrollo HR-SAP

    33/37

    33

    * with test_on eq ' '

    WITH tst_on eq 'X'

    WITH prt_prot eq 'X'

    WITH sw_spool eq space " Print to spool

    * with edt_vari eq variant_cedt " Show payslip

    WITH edt_vari eq variant_cedt " Show payslipWITH ecalled eq 'X'

    WITH set_nib eq 'X'WITH set_odc eq 'X'

    WITH upd_ps eq space

    WITH exp_buff eq 'X'WITH imp_buff eq space

    * with brk_on eq ' '

    * with brk_sc eq ' '

    * with brk_off eq 'X'

    WITH plgmemky eq memo_key

    WITH rueck-ab = retro_date "M19

    EXPORTING LIST TO MEMORY AND RETURN.

    *---------------------------------------------------------------------*

    * FORM fill_iperl_i0014 **---------------------------------------------------------------------*

    * ........ *

    *---------------------------------------------------------------------*

    FORM fill_iperl_i0014.

    DATA: BEGIN OF help_i0014 OCCURS 5.INCLUDE STRUCTURE p0014.

    DATA: END OF help_i0014.

    * fill iprel with all infotypes

    CLEAR iprel.

    * refresh iprel.

    IF p9902-zzbasetri > 0.****************************************

    * RP-READ-INFOTYPE *

    ***************************************** PARAMETERS: *

    * PERNR REQUESTED PERSONALNUMBER** INFTY REQUESTED INFOTYPNUMBER *

    * INFTY-TABLE OUTPUT-TABLE LIKE PNNNN*

    * BEGDA REQUESTED INTERVAL-BEGIN*

    * ENDDA REQUESTED INTERVAL-END *

    ****************************************

    * read all the 0014 records for put in memoryPERFORM read-infotype(sapdbpnp)

    TABLES help_i0014

    USING p9902-pernr '0014' '18000101' '99991231'.

    * distribution of the p9902-zzbasetri ammount in IT0014 records

    PERFORM create_i0014 TABLES help_i0014

    USING p9902p9902-zzbasetri

    p9902-waers.

    * Put the IT0014 records in internal object for send it

    * to memory

    CALL METHOD obj_iprel->insert( help_i0014[] ).

    ENDIF.

    ENDFORM. "fill_iperl_i0014

    ojo en driver rpcalcx0 los infotipos simulados se procesan en

    include rpchrt09get pernr.

    IF ecalled = 'X'. "XAIAHRK001447

    * read infotypes from memory (for infotype simulation)

    PERFORM get_iprel USING pernr-pernr. "XAIAHRK001447

  • 8/10/2019 Ejemplos desarrollo HR-SAP

    34/37

    34

    HR NOTAS

    DUMP CX_HRPA_INVALID_PARAMETER

    Si se topan con este dump(>= 4.7), aca va nota ad-hoc

    Solution consists in calling the subroutine DO_NOTHING in order to initialize theold masterdata framework. To apply this note manually, follow the instructions listed in thenextsection.

    Ejemplo,

    *--- load-of-program -------------------------------------------------*

    * The load-of-program event is useful for the time of transition

    * from the old to the new master data frame work.LOAD-OF-PROGRAM.* to initialise the old master data framework

    PERFORM do_nothing(sapfp50p). "

    INITIALIZATION.

    * select only active employees

    rp-sel-ein-aus-init.

    Weird!!!, pero me paso un par de veces.

    Obtenido de

    "http://globalsap.cl/globalwiki/index.php/CX_HRPA_INVALID_PARAMETER_DUMP"

    http://globalsap.cl/globalwiki/index.php/CX_HRPA_INVALID_PARAMETER_DUMPhttp://globalsap.cl/globalwiki/index.php/CX_HRPA_INVALID_PARAMETER_DUMPhttp://globalsap.cl/globalwiki/index.php/CX_HRPA_INVALID_PARAMETER_DUMPhttp://globalsap.cl/globalwiki/index.php/CX_HRPA_INVALID_PARAMETER_DUMP
  • 8/10/2019 Ejemplos desarrollo HR-SAP

    35/37

    35

    SAP HR FAQ

    *1) como leer el molga de un empleado

    CALL FUNCTION 'HR_COUNTRYGROUPING_GET'

    EXPORTING

    pernr = gd_pernr

    begda = datum

    endda = datumIMPORTING

    molga = gd_molga

    EXCEPTIONS

    not_found = 1

    OTHERS = 2.

    *2) detalle compaia ( campo bukrs )

    CALL FUNCTION 'FI_COMPANYCODE_GETDETAIL'

    EXPORTINGbukrs_int = pnpbukrs-lowauthority_check = space

    IMPORTING

    t001_int = comp_det

    TABLES

    t001z_int = appendix

    EXCEPTIONSbukrs_not_found = 1

    no_authority_display_bukrs = 2

    OTHERS = 3.

    *3) nombres de mes ( util en formularios )

    CALL FUNCTION 'MONTH_NAMES_GET'* EXPORTING

    * LANGUAGE = SY-LANGU

    * IMPORTING

    * RETURN_CODE =TABLES

    month_names = names

    EXCEPTIONS

    month_names_not_found = 1

    OTHERS = 2.

    *4) sumar / restar meses a fecha

    CALL FUNCTION 'HR_BR_ADD_MONTH_TO_DATE'

    EXPORTINGdmm_datin = first_daydmm_count = '1'

    dmm_oper = '-'

    dmm_pos = ' '

    IMPORTING

    dmm_daout = aux_date.

    *5) ultimo dia del mes

    CALL FUNCTION 'LAST_DAY_OF_MONTHS'

    EXPORTING

    day_in = pnpbegdaIMPORTING

    last_day_of_month = pnpenddaEXCEPTIONS

    day_in_no_date = 1

  • 8/10/2019 Ejemplos desarrollo HR-SAP

    36/37

    36

    OTHERS = 2.

    *6) leer horario de trabajo de empleado

    wa_pernr-pernr = p_pernr.

    APPEND wa_pernr TO tb_pernr.CALL FUNCTION 'HR_PERSON_READ_WORK_SCHEDULE'

    EXPORTINGbegin_date = p_begda

    end_date = p_endda

    * GROUPING_DWS =* GROUPING_ATTENDENCE =

    * GROUPING_SUBSTITUTE =

    * READ_FROM_DATABASE = ' '

    TABLES

    pernr_tab = tb_pernr

    psp = tb_psp

    day_psp = tb_day_psp

    EXCEPTIONS

    error_in_build_psp = 1

    OTHERS = 2

    .*7) leer caracteristica ( feature ) hr , transaccion pe03

    DATA pben0 LIKE zben0.

    DATA l_back(5).

    * fill feature structureCLEAR pben0.

    pben0-barea = p_barea.

    pben0-bplan = p_bplan.

    pben0-depcv = 'DEP0'. "Dummy

    CLEAR p_val.

    * get value of from feature (PE03 transaction)CALL FUNCTION 'HR_FEATURE_BACKFIELD'

    EXPORTING

    feature = 'ZBEN0'struc_content = pben0

    IMPORTINGback = l_back

    EXCEPTIONS

    dummy = 1

    error_operation = 2

    no_backvalue = 3

    feature_not_generated = 4invalid_sign_in_funid = 5

    field_in_report_tab_in_pe03 = 6

    OTHERS = 7.

    IF sy-subrc NE 0.

    p_val = space.

    ELSE.IF l_back space.

    p_val = 'X'.

    ELSE.

    p_val = space.

    ENDIF.

    ENDIF.

    *8) verificar nif ( rut )

    CALL FUNCTION 'TAX_NUMBER_CHECK'EXPORTING

    country = p_land1

    tax_code_1 = p_stcd1.

    *9) leer clase de fecha de infotipo p0041

  • 8/10/2019 Ejemplos desarrollo HR-SAP

    37/37

    FORM get_fecha USING p0041 LIKE p0041

    p_dar LIKE p0041-dar01

    CHANGING p_fecha.

    DATA ld_dat LIKE p0041-dat01.

    DATA ld_dar LIKE p0041-dar01.

    CLEAR p_fecha.DO 12 TIMES VARYING ld_dat FROM p0041-dat01 NEXT p0041-dat02

    VARYING ld_dar FROM p0041-dar01 NEXT p0041-dar02.IF ld_dar = p_dar.

    p_fecha = ld_dat.

    ENDIF.ENDDO.

    ENDFORM.