Share |


Retrieve multiple contracts for HR personnel


The following SAP ABAP code demonstrates how to retrieve multiple contracts of a personnel number entered onto a selection screen of a HR report.

**********
*DATA declarations for multiple contracts

SELECT-OPTIONS r_ppernr for pernr-pernr no-display.

TYPES: BEGIN OF t_pa0121.
        INCLUDE STRUCTURE pa0121.
TYPES: END OF t_pa0121.

DATA: it_pa0121 TYPE STANDARD TABLE OF t_pa0121 INITIAL SIZE 0,
      wa_pa0121 TYPE t_pa0121.
**********



************************************************************************
*AT SELECTION-SCREEN ON PNPPERN

AT SELECTION-SCREEN ON pnppernr.
  r_ppernr[] = pnppernr[].
  r_objid[] = pnpobjid[].

  READ TABLE pnppernr INDEX 1.
  IF NOT pnppernr IS INITIAL.
    READ TABLE pnpobjid INDEX 1.
    IF sy-subrc EQ 0 AND NOT pnpobjid-low IS INITIAL.
      REFRESH pnpobjid.
      MESSAGE i999(za) WITH 'Org unit refreshed'.
    ENDIF.

*   Retrieve all personnel with multiple contracts
    SELECT * FROM pa0121
      INTO TABLE it_pa0121.

    CLEAR:   pnppernr.
    REFRESH: pnppernr.

*   Re-build personnel number select option to include all contracts
*   relating to original user selection
    LOOP AT it_pa0121 INTO wa_pa0121 WHERE pernr IN r_ppernr.
      pnppernr-low    = wa_pa0121-pernr.
      pnppernr-sign   = 'I'.
      pnppernr-option = 'EQ'.
      APPEND pnppernr.
      pnppernr-low    = wa_pa0121-hpern.
      pnppernr-sign   = 'I'.
      pnppernr-option = 'EQ'.
      APPEND pnppernr.
    ENDLOOP.

*   Re-build personell number select option to include all contracts
    LOOP AT it_pa0121 INTO wa_pa0121 WHERE hpern IN pnppernr.
      pnppernr-low    = wa_pa0121-pernr.
      pnppernr-sign   = 'I'.
      pnppernr-option = 'EQ'.
      APPEND pnppernr.
    ENDLOOP.
    SORT pnppernr.
    DELETE ADJACENT DUPLICATES FROM pnppernr COMPARING low.

   endif.