Share |

Bespoke ABAP program (select staff by postcode)


Uses Logical database 'PNP'(entered in program attributes) to retrieve personnel data based on postcode. Data is then displayed as an ALV GRID report.

*...............................................................
*: Report:  ZP_POSTCODE                                        :
*:                                                             :
*: Author:  www.SAPDev.co.uk                                   :
*:                                                             :
*: Date  :  2004                                               :
*:                                                             :
*: Description: Displays report of employees by postcode area, :
*:              includes current travelling allowances (i.e.   :
*:              parking permit or transport card etc..)        :
*:                                                             :
*: Use:         Help encourage the use of car sharing and      :
*:              public transport where appropriate.            :
*:.............................................................:

REPORT  zp_postcode.

type-pools: slis.                                      "ALV Declarations

NODES: pernr.

INFOTYPES: 0000, 0001, 0002, 0006, 0008, 0014, 0105, 0121.

SELECTION-SCREEN BEGIN OF BLOCK pcode WITH FRAME TITLE text-s01.
SELECT-OPTIONS: so_pcode FOR p0006-pstlz.
SELECTION-SCREEN END OF BLOCK pcode.


TYPES: BEGIN OF t_output,
  pernr       TYPE p0001-pernr,   "personnel name
  anredtxt    TYPE t522t-atext,   "title (based on p0002-anred)
  fname       TYPE p0002-vorna,   "first name
  lname       TYPE p0002-nachn,   "last name
  orgtx       TYPE t527x-orgtx,   "dept
  fte         TYPE p0008-bsgrd,   "fte
  parking(20) TYPE c,
  payslip     TYPE t526-sachn,        "payslip address
  telno       TYPE p0105-usrid_long,  "tel number(p0105-usrty = 0020)
  email       TYPE p0105-usrid_long,  "email (p0105-usrty = MAIL)
  postcode    type p0006-pstlz,
 END OF t_output.
DATA: it_output TYPE STANDARD TABLE OF t_output INITIAL SIZE 0,
      wa_output TYPE t_output.

*ALV data declarations
data: fieldcatalog   type slis_t_fieldcat_alv with header line,
      gd_tab_group   type slis_t_sp_group_alv,
      gd_layout      type slis_layout_alv,
      gd_repid       like sy-repid,
      gt_events      type slis_t_event,
      gd_prntparams  type slis_print_alv,
      gd_count(6)    type n,
      gd_outtext(70) type c,
      gd_lines       type i.



************************************************************************
*START-OF-SELECTION.
START-OF-SELECTION.

clear: gd_count.

GET pernr.
* Infotype 0121 is used to store multiple contracts for personnel.
* Field p0121-hpern contains the personnel number for the main contract.
  PROVIDE * from p0121 between pn-begda and pn-endda.
*   Check if main contract
    if p0121-pernr ne p0121-hpern.
      reject.
    endif.
  ENDPROVIDE.

  add 1 to gd_count.
  concatenate 'Processing personnel data'(m10) gd_count into gd_outtext
            separated by ' '.

* Display indicator for employee count
  perform progress_indicator using gd_outtext.

* Retrieve datd from infotypes
  rp_provide_from_last p0000 space pn-begda pn-endda.
  rp_provide_from_last p0001 space pn-begda pn-endda.
  rp_provide_from_last p0002 space pn-begda pn-endda.
  rp_provide_from_last p0006 space pn-begda pn-endda.
  rp_provide_from_last p0008 space pn-begda pn-endda.
  rp_provide_from_last p0014 space pn-begda pn-endda.

* Check post code
  CHECK p0006-pstlz IN so_pcode.  "cp

* Post code
  wa_output-postcode = p0006-pstlz.

* Personnel number
  wa_output-pernr = pernr-pernr.

* Personnel title
  SELECT SINGLE atext
    FROM t522t
    INTO wa_output-anredtxt
   WHERE sprsl EQ sy-langu AND
         anred EQ p0002-anred.

* First name
  wa_output-fname = p0002-vorna.

* Last name
  wa_output-lname = p0002-nachn.

* Organizational Unit text (dept)
  SELECT SINGLE orgtx
    FROM t527x
    INTO wa_output-orgtx
   WHERE sprsl EQ sy-langu AND
         orgeh EQ p0001-orgeh AND
         endda GE sy-datum.

* FTE
  wa_output-fte = p0008-bsgrd.

* Parking / travel deducted?
  CASE p0014-lgart.
    WHEN '7180' OR '7181' OR '7182'.
      wa_output-parking = text-002.
    WHEN '7183'.
      wa_output-parking = text-001.
    WHEN '7171' OR '7172' or '7173' or '7174' or
         '7175' or '7176' or '7177' or '7178'.
      wa_output-parking = text-003.
  ENDCASE.

* Payslip Address
  SELECT SINGLE sachn
    FROM t526
    INTO wa_output-payslip
   WHERE werks EQ p0001-werks AND
         sachx EQ p0001-sacha.

  PROVIDE * from p0105 between pn-begda and pn-endda.
*   Telephone numbers
    if p0105-usrty = '0020'.
       wa_output-telno = p0105-usrid_long.
    endif.

*   Email address
    if p0105-usrty = 'MAIL'.
       wa_output-email = p0105-usrid_long.
    endif.
  ENDPROVIDE.

  append wa_output to it_output.
  clear: wa_output.


************************************************************************
*END-OF-SELECTION.
 END-OF-SELECTION.

describe table it_output lines gd_lines.
if gd_lines gt 0.
  perform build_fieldcatalog.
  perform build_layout.
  perform display_alv_report.
else.
  message i003(zp) with 'No records found'.
endif.


*&---------------------------------------------------------------------*
*&      Form  PROGRESS_INDICATOR
*&---------------------------------------------------------------------*
*       Displays progress indicator on SAP screen
*----------------------------------------------------------------------*
form progress_indicator using p_text.
  call function 'SAPGUI_PROGRESS_INDICATOR'
      exporting
*         PERCENTAGE = 0
           text       = p_text.
endform.                    " PROGRESS_INDICATOR


*&---------------------------------------------------------------------*
*&      Form  BUILD_FIELDCATALOG
*&---------------------------------------------------------------------*
*       Build Fieldcatalog for ALV Report
*----------------------------------------------------------------------*
form build_fieldcatalog.
  fieldcatalog-fieldname   = 'PERNR'.
  fieldcatalog-seltext_m   = 'Personnel No.'.
  fieldcatalog-col_pos     = 0.
  fieldcatalog-outputlen   = 10.
*  fieldcatalog-emphasize   = 'X'.
*  fieldcatalog-key         = 'X'.
*  fieldcatalog-do_sum      = 'X'.
*  fieldcatalog-no_zero     = 'X'.
  append fieldcatalog to fieldcatalog.
  clear  fieldcatalog.

  fieldcatalog-fieldname   = 'ANREDTXT'.
  fieldcatalog-seltext_m   = 'Title'.
  fieldcatalog-col_pos     = 1.
  append fieldcatalog to fieldcatalog.
  clear  fieldcatalog.

  fieldcatalog-fieldname   = 'FNAME'.
  fieldcatalog-seltext_m   = 'First Name'.
  fieldcatalog-col_pos     = 2.
  append fieldcatalog to fieldcatalog.
  clear  fieldcatalog.

  fieldcatalog-fieldname   = 'LNAME'.
  fieldcatalog-seltext_m   = 'Last Name'.
  fieldcatalog-col_pos     = 3.
  append fieldcatalog to fieldcatalog.
  clear  fieldcatalog.

  fieldcatalog-fieldname   = 'ORGTX'.
  fieldcatalog-seltext_m   = 'Department'.
  fieldcatalog-col_pos     = 4.
  append fieldcatalog to fieldcatalog.
  clear  fieldcatalog.

  fieldcatalog-fieldname   = 'FTE'.
  fieldcatalog-seltext_m   = 'FTE'.
  fieldcatalog-col_pos     = 5.
  append fieldcatalog to fieldcatalog.
  clear  fieldcatalog.

  fieldcatalog-fieldname   = 'PARKING'.
  fieldcatalog-seltext_m   = 'Parking/Metrocard'.
  fieldcatalog-col_pos     = 6.
  append fieldcatalog to fieldcatalog.
  clear  fieldcatalog.

  fieldcatalog-fieldname   = 'PAYSLIP'.
  fieldcatalog-seltext_m   = 'Payslip Add.'.
  fieldcatalog-col_pos     = 7.
  append fieldcatalog to fieldcatalog.
  clear  fieldcatalog.

  fieldcatalog-fieldname   = 'TELNO'.
  fieldcatalog-seltext_m   = 'Telephone'.
  fieldcatalog-col_pos     = 8.
  append fieldcatalog to fieldcatalog.
  clear  fieldcatalog.

  fieldcatalog-fieldname   = 'EMAIL'.
  fieldcatalog-seltext_m   = 'E-mail'.
  fieldcatalog-col_pos     = 9.
  append fieldcatalog to fieldcatalog.
  clear  fieldcatalog.

  fieldcatalog-fieldname   = 'POSTCODE'.
  fieldcatalog-seltext_m   = 'Post code'.
  fieldcatalog-col_pos     = 10.
  append fieldcatalog to fieldcatalog.
  clear  fieldcatalog.
endform.                    " BUILD_FIELDCATALOG


*&---------------------------------------------------------------------*
*&      Form  BUILD_LAYOUT
*&---------------------------------------------------------------------*
*       Build layout for ALV grid report
*----------------------------------------------------------------------*
form build_layout.
  gd_layout-no_input          = 'X'.
  gd_layout-colwidth_optimize = 'X'.
  gd_layout-totals_text       = 'Totals'(201).
  gd_layout-zebra             = 'X'.
endform.                    " BUILD_LAYOUT


*&---------------------------------------------------------------------*
*&      Form  DISPLAY_ALV_REPORT
*&---------------------------------------------------------------------*
*       Display report using ALV grid
*----------------------------------------------------------------------*
form display_alv_report.
  gd_repid = sy-repid.
  call function 'REUSE_ALV_GRID_DISPLAY'
       exporting
            i_callback_program      = gd_repid
            is_layout               = gd_layout
            it_fieldcat             = fieldcatalog[]
            i_save                  = 'X'
       tables
            t_outtab                = it_output
       exceptions
            program_error           = 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.                    " DISPLAY_ALV_REPORT

Return to bespoke ABAP programs