P0001-ENAME is Wrong ?

I add new record of IT0002 on 09.07.2007 (Change name title) but valid begin date is 01.10.2007 , End date is 31.12.9999
BEGDA--ENDDATitle--
Name
01.01.1900--30.09.2007_____--
Jason
01.10.2007--31.12.9999Prof.--
Jason
Today (21.08.2007) IN P0001-ENAME is "Prof. Jason" (It' s wrong).
It should be "Jason" until 30.09.2007.
Is Standard wrong ?

and i want o add some more with manojs view
collected from precvious thread
did you check the following switch in T77S0:
PLOGI SPLIT Integration: New IT 0001 record at name change
The description (F1) states:
Integration: New Infotype 0001 Record When Description Is Changed
If the value entered is 'X' and you change the description of positions,
jobs or organizational units, new infotype 0001 records for the
personnel numbers concerned are created on the date of the change(s).
This means that the system will always display the up-to-date
descriptions of named objects, both in Personnel Administration
transactions and in reports on persons.
If the description of an object is changed on a particular date (as of
Release 4.5, this is done in Organizational Management by copying a
record from infotype 1000, "object"), the system first establishes which
personnel numbers are affected by this, and marks them internally. Then,
you should use report RHINTE30 (parameter "Open Personnel Numbers Only")
to create a batch input session. After this session has been processed,
new infotype 0001 records for the person(s) concerned are created.
If the field PLOGI SPLIT is blank, the system only creates new infotype
0001 records if the assignment itself (that is, the number of the
position, job or organizational unit) changes.
Seems to be just what you are looking for. However the downside is that this will increase the data in IT0001.

Similar Messages

  • HR Logical database PNP. OO to fill table dynamic table  from PNP  ?

    Hi all
    I want to get some stuff from the HR logical database into a dynamic table
    Here's a real simple example that writes info out to a normal list.
    (report is based on using Logical DB PNP)
    tables: pernr.
    INFOTYPES: 0001,                     "Organizational Assignment
               0002.                     "Personal Data
    SELECT-OPTIONS: language FOR p0002-sprsl.
    INITIALIZATION.
      pnptimed = 'D'.
    GET pernr.
      PROVIDE * FROM p0002 BETWEEN pn-begda AND pn-endda.
        CHECK language.
        WRITE: / p0002-pernr,
                 sy-vline,
                 p0001-ename,
                 sy-vline,
                 p0002-sprsl,
                 sy-vline,
                 p0002-gbdat.
      ENDPROVIDE.
    endform.
    Now what I want to do is replace the write stuff by appending the entries into a dynamic table which I will display as an ALV Grid.
    so I add my structure in the data declarations
    types:  begin of s_elements,
       pernr  type  p0002-pernr,
       ename  type p0001-ename,
       sprsl  type p0002-sprsl,
       gbdat   type p0002-gbdat.
      drop_down_handle  type int4.
    types: end of    s_elements.
    include zz_jimbo_incl.
    build the dynamic table
    create data dref type s_elements.
      assign dref->* to <fs>.
      i_routine = 'POPULATE_DYNAMIC_ITAB'.*
    i_names   = 'NAME_COLUMNS'.
      i_gridtitle = 'HR  TEST'.
    invoker = sy-repid.
    i_zebra = 'X '.
    i_edit = '  '.
    call function 'ZZ_CALL_SCREEN'
         exporting
              invoker     = invoker
              my_line     = <fs>
              i_gridtitle = i_gridtitle
              i_edit      = i_edit
              i_zebra     = i_zebra
              i_names     = i_names
              i_routine   = i_routine
         importing
              z_object    = z_object
              dy_table    = dy_table.
    Now to populate the dynamic Itab the routine below is entered.
    form populate_dynamic_itab changing dy_table.
      assign dy_table->* to <dyn_table>.
      create data dy_line like line of <dyn_table>.
      assign dy_line->* to <dyn_wa>.
    However I can't use GET / PROVIDE / ENDPROVIDE in a Form.
    Anyway round this ---seems HR has an aversion to OO.
    Cheers
    jimbo

    Hi,
    well, GET_PERNR is a so called event_statement. It has nothing to do with ABAP 00.
    Normally it will be like this:
    START-OF-SELECTION.
    GET_PERNR.
    PROVIDE ....
    END-OF-SELECTION.
    -> and here the CALL SCREEN NNNN for ALV-Display.
    Provide-statements you can use in forms of course, and as many times you want during GET and END-OF-SELECTION.
    But as I understood : you just want to save the write-statements?
    I always develop a DDIC-Structure, declarate the data objects in the programm, read the data via Provide into the infotypes, and then make a move-corresponding to my structure. and display it.
    Normally no problem.
    kind regards
    maik

  • Need help with provide statement in pnp progrm

    hi experts,
    i need to select all the records that :
    1. pa00014-sunty in so_subty.
    base on the records that he found' i need to select from pa0001:
    p0014-endda = > p0001-begda and
    p0014-begda = < p0001-endda and
    p0001-persk ne so_persk.
    what i did:
    provide * from p0001
    from p0014
    between pn-begda and pn-endda
    where p0014-subty = so_subty  and
    p0014-endda = > p0001-begda and
    p0014-begda = < p0001-endda and
    p0001-persk ne so_persk.
    check p0001_valid = 'X'.
    endprovide.
    i got 2 problems:
    1. i not recognize the syntax: check p0001_valid = 'X'.
    2. the syntax for the provide is not good.
    i new in pnp thing.
    i hope i was clear.
    thanks in advanced,
    Michal.

    Hi,
       May be this code will help you.
    infotypes: 0001,0002,0008,0000,1000,0021,0041,0587 .
    PROVIDE ename BTRTL PLANS STELL ORGEH ABKRS FROM P0001 BETWEEN PN-BEGDA AND PN-ENDDA  .
    if p0001-begda = '20070801' .
          IT_FINAL-ORGEH = P0001-ORGEH .
          IT_FINAL-STELL = P0001-STELL .                            "   JOB
          IT_FINAL-PLANS = P0001-PLANS .                            "   POSITION
          IT_FINAL-ename = P0001-ename .                            "   personnel name
          IT_FINAL-BTRTL = P0001-BTRTL .                            "   DEPARTMENT
          IT_FINAL-ABKRS = P0001-ABKRS .                            "   PAYROLL AREA
          APPEND IT_FINAL .
    endif .
    ENDPROVIDE.
    PROVIDE GBDAT GESCH FROM P0002 BETWEEN PN-BEGDA AND PN-ENDDA .
           IT_FINAL-GBDAT = P0002-GBDAT  .                            "   DOB
           IT_FINAL-GESCH = P0002-GESCH  .                            "   ***
         IF IT_FINAL-GESCH = 1   .
           IT_FINAL-GTXT  = 'M'  .
         ELSE.
           IT_FINAL-GTXT  = 'F'  .
         ENDIF .
           APPEND IT_FINAL .
    ENDPROVIDE .
    PROVIDE TRFST FROM P0008 BETWEEN PN-BEGDA AND PN-ENDDA.
            IT_FINAL-TRFST = P0008-TRFST .                          "   personnel level
            APPEND IT_FINAL .
    ENDPROVIDE.
    PROVIDE  FAVOR FANAM FROM P0021 BETWEEN PN-BEGDA AND PN-ENDDA where P0021-pernr = pernr-pernr
      and  p0021-SUBTY = '11' .
           IT_FINAL-FAVOR  = P0021-FAVOR .                          "   FATHER'S NAME
           IT_FINAL-FANAM  = P0021-FANAM .
           CONCATENATE IT_FINAL-FAVOR IT_FINAL-FANAM  INTO IT_FINAL-FNAME .
           APPEND IT_FINAL .
    ENDPROVIDE.
    Regards,
    Himanshu

  • HR - PA (Infotype 0009)

    Dear All,
    Wantu2019s to know if In Infotype 0002 that is Personeel data There area changes made to the Name, then how Infotype 0009 that is bank details name will get changed to the new as when change made to Infotype 0002, it is not getting reflected in Infotype 0009.
    Thanks

    Actually what happens is that when you are creating a new record in infotype 9, the field EMFTX is filled by field ENAME of infotype 1, as you can see in the screen logic of MP MP000900.
        IF Q0009-EMFTX EQ SPACE.
          IF EMFTX EQ SPACE.
    *       PERFORM FILL_EMFTX.                                 "QNUK60593
            MOVE P0001-ENAME TO EMFTX.                          "QNUK60593
          ENDIF.
          MOVE EMFTX TO Q0009-EMFTX.

  • Report using logical data base

    Hello friends,
    please give me a sample report program using logical database with explanation where logical databse used and how it works?

    See the program given below, it uses logical database PNP.
    DESCRIPTION : TO GENERATE SIMPLE REPORT USING HR ABAP
                   LOGICAl DATABASE- PNP .
    REPORT Zdemop_HR_prog_1
    LINE-SIZE 200 .
    *Database Table
    TABLES: PERNR,           " Pernr structure for Logical database
           PA0001,           " Actions
           PA0002.           " Personnel Info
    *Infotypes
    INFOTYPES: 0001,         " Actions
               0002.         " personnel info
    *Variable Declaration
    DATA: FORM_NAM LIKE P0001-ENAME,
          V_AGE(5) TYPE C,       "variable for calculating age in days
          V_CTR1 TYPE I VALUE 0, "counter
          V_CTR2 TYPE I VALUE 0, "counter
          VAR(5) TYPE C ,        " variable to store btrtl
          VAR1(5) TYPE C  .      " variable to store werks
    *Internal Table Decalartion
    DATA: BEGIN OF I_TAB1 OCCURS 0,
           WERKS LIKE PA0001-WERKS,  "personnel area
           BTRTL LIKE PA0001-BTRTL,  "personnel sub area
           PERNR LIKE PA0001-PERNR,  "employee number
           ENAME LIKE PA0001-ENAME,  "employee name
           BEGDA LIKE PA0002-BEGDA,  "employee join date
           PERSG LIKE PA0001-PERSG,  "employee group
           PERSK LIKE PA0001-PERSK,  "employee sub-group
           PLANS LIKE PA0001-PLANS,  "position
           GBDAT LIKE P0002-GBDAT,   "date of birth
         END OF I_TAB1.
    *START-OF-SELECTION
    START-OF-SELECTION .
    GET PERNR .                    
      RP-PROVIDE-FROM-LAST P0001 SPACE PN-BEGDA PN-ENDDA .   " Macro for IFT-0001
      RP-PROVIDE-FROM-LAST P0002 SPACE PN-BEGDA PN-ENDDA .   " Macro for IFT-0002
    **--> Populate internal table
      MOVE P0001-WERKS TO I_TAB1-WERKS .
      MOVE P0001-BTRTL TO I_TAB1-BTRTL .
      MOVE P0001-PERNR TO I_TAB1-PERNR .
      MOVE P0001-ENAME TO I_TAB1-ENAME .
      MOVE P0002-BEGDA TO I_TAB1-BEGDA .
      MOVE P0001-PERSG TO I_TAB1-PERSG .
      MOVE P0001-PERSK TO I_TAB1-PERSK .
      MOVE P0001-PLANS TO I_TAB1-PLANS .
      MOVE P0002-GBDAT TO I_TAB1-GBDAT .
    **--> Append data to internal table
      APPEND I_TAB1 .
      CLEAR I_TAB1 .                                       " Clear header I_TAB1
    *END-OF-SELECTION
    END-OF-SELECTION.
    *****sorting the internal table on Personnel Area & Personnel Sub-Area
      SORT I_TAB1 BY WERKS BTRTL.
    *TOP_OF_PAGE
      PERFORM TOP_OF_PAGE.
    *Output Display
      LOOP AT I_TAB1.
    *for calculating the age in days
        V_AGE = SY-DATUM - I_TAB1-GBDAT.
    *control break on Personal Sub Area
        AT NEW BTRTL .
          IF SY-TABIX NE 1.
            FORMAT COLOR COL_NORMAL ON.
            WRITE:/5 'Total Number of Employees for personnel Sub-Area:',
            VAR  , 'is ',
            V_CTR1.
            CLEAR V_CTR1.
            FORMAT COLOR OFF.
          ENDIF.
        ENDAT .
    **Control Break on personnel Area
        AT NEW WERKS.
          IF SY-TABIX NE 1.
            FORMAT COLOR COL_TOTAL ON.
            WRITE:/5 'Total Number of Employees for Personal Area: ',
             VAR1 ,'is    ', V_CTR2. "color col_total.
            CLEAR V_CTR2.
            SKIP 1.
            FORMAT COLOR OFF.
          ENDIF.
        ENDAT .
        WRITE:/5 I_TAB1-PERNR,   "personnel number
              16 I_TAB1-ENAME,   "emp name
              47 I_TAB1-BEGDA,   "join date
              60  V_AGE,         "age in days
              74  I_TAB1-WERKS,  "P area
              84  I_TAB1-BTRTL,  "P sub Area
              94  I_TAB1-PERSG,  "emp group
              104  I_TAB1-PERSK, "emp sub group
              114  I_TAB1-PLANS. "position
        V_CTR1 = V_CTR1 + 1.
        V_CTR2 = V_CTR2 + 1.
        VAR = I_TAB1-BTRTL .
        VAR1 = I_TAB1-WERKS .
      ENDLOOP.
    *&      Form  top_of_page
          Header Output
    FORM TOP_OF_PAGE.
      FORMAT COLOR COL_HEADING ON.
      WRITE:/5 'Employee',
            16 'Employee',
            47 'Join Date',
            62 'Age',
            74 'Personal',
            84 'Personal',
            94 'Employee',
            104 'Employee',
            114 'Position ',
          /5 'Number',
          16 'Name',
          60 '(In Days)',
          74 'Area',
          84 'Sub-Area',
          94 'Group',
          104 'Sub-Group'.
      FORMAT COLOR OFF.
      SKIP 1.
    ENDFORM.                    " top_of_page
    Regards,
    Joy.

  • How to Send Internal table to SAP Spool using Function Modules or Methods?

    Hi Experts,
    How to Send Internal table to SAP Spool using Function Modules or Methods?
    Thanks ,
    Kiran

    This is my code.
    I still get the no ABAP list data for the spool, even tho I can see it sp01?
    REPORT  Z_MAIL_PAYSLIP.
    * Declaration Part *
    tables: PERNR, PV000, T549Q, V_T514D, HRPY_RGDIR.
    infotypes: 0000, 0001, 0105, 0655.
    data: begin of ITAB occurs 0,
      MTEXT(25) type C,
      PERNR like PA0001-PERNR,
      ABKRS like PA0001-ABKRS,
      ENAME like PA0001-ENAME,
      USRID_LONG like PA0105-USRID_LONG,
    end of ITAB.
    data: W_BEGDA like HRPY_RGDIR-FPBEG,
          W_ENDDA like HRPY_RGDIR-FPEND.
    data: RETURN like BAPIRETURN1 occurs 0 with header line.
    data: P_INFO like PC407,
          P_FORM like PC408 occurs 0 with header line.
    data: P_IDX type I,
          MY_MONTH type T549Q-PABRP,
          STR_MY_MONTH(2) type C,
          MY_YEAR type T549Q-PABRJ,
          STR_MY_YEAR(4) type C,
          CRLF(2) type x value '0D0A'.
    data: W_CMONTH(10) type C.
    data: TAB_LINES type I,
          ATT_TYPE like SOODK-OBJTP.
    data: begin of P_INDEX occurs 0,
            INDEX type I,
    end of P_INDEX.
    constants: begin of F__LTYPE, "type of line
       CMD like PC408-LTYPE value '/:',  "command
       TXT like PC408-LTYPE value 's',   "textline
    end of F__LTYPE.
    constants: begin of F__CMD, "commands
      NEWPAGE like PC408-LINDA value '',
    end of F__CMD.
    data: P_LIST like ABAPLIST occurs 1 with header line.
    *data: OBJBIN like SOLISTI1 occurs 10 with header line,
    data: OBJBIN like  LVC_S_1022 occurs 10 with header line,
          DOCDATA like SODOCCHGI1,
          OBJTXT like SOLISTI1 occurs 10 with header line,
          OBJPACK like SOPCKLSTI1 occurs 1 with header line,
          RECLIST like SOMLRECI1 occurs 1 with header line,
          OBJHEAD like SOLISTI1 occurs 1 with header line,
          it_mess_att LIKE solisti1 OCCURS 0 WITH HEADER LINE,
          gd_buffer type string,
          l_no_of_bytes TYPE i,
          l_pdf_spoolid LIKE tsp01-rqident,
          l_jobname     LIKE tbtcjob-jobname.
    data: file_length  type int4,
          spool_id     type rspoid,
          line_cnt     type i.
    *-------------------------------------------------------------------* * INITIALIZATION *
    OBJBIN = ' | '.
    append OBJBIN.
    OBJPACK-HEAD_START = 1.
    data: S_ABKRS like PV000-ABKRS.
    data: S_PABRP like T549Q-PABRP.
    data: S_PABRJ like T549Q-PABRJ.
    * SELECTION SCREEN                                                  *
    selection-screen begin of block BL1.
    parameters: PAY_VAR like BAPI7004-PAYSLIP_VARIANT default 'ESS_PAYSLIPS' obligatory.
    selection-screen end of block BL1.
    START-OF-SELECTION.
      s_ABKRS = PNPXABKR.
      S_PABRP = PNPPABRP.
      s_pabrj = PNPPABRJ.
      w_begda = PN-BEGDA.
      w_endda = PN-ENDDA.
    get pernr.
    *                                 "Check active employees
      rp-provide-from-last p0000 space pn-begda  pn-endda.
      CHECK P0000-STAT2 IN PNPSTAT2.
    *                                 "Check Payslip Mail flag
      rp-provide-from-last p0655 space pn-begda  pn-endda.
      CHECK P0655-ESSONLY = 'X'.
      rp-provide-from-last p0001 space pn-begda  pn-endda.
    *                                 "Find email address
      RP-PROVIDE-FROM-LAST P0105 '0030' PN-BEGDA PN-ENDDA.
      if p0105-usrid_LONG ne ''.
        ITAB-PERNR      = P0001-PERNR.
        ITAB-ABKRS      = P0001-ABKRS.
        ITAB-ENAME      = P0001-ENAME.
        ITAB-USRID_LONG = P0105-USRID_LONG.
        append itab.
        clear itab.
      endif.
      "SY-UCOMM ='ONLI'
    END-OF-SELECTION.
    *------------------------------------------------------------------* start-of-selection.
      write : / 'Payroll Area        : ', S_ABKRS.
      write : / 'Payroll Period/Year : ',STR_MY_MONTH,'-',STR_MY_YEAR. write : / 'System Date : ', SY-DATUM.
      write : / 'System Time         : ', SY-UZEIT.
      write : / 'User Name           : ', SY-UNAME.
      write : / SY-ULINE.
      sort ITAB by PERNR.
      loop at ITAB.
        clear : P_INFO, P_FORM, P_INDEX, P_LIST, OBJBIN, DOCDATA, OBJTXT, OBJPACK, RECLIST, TAB_LINES.
        refresh : P_FORM, P_INDEX, P_LIST, OBJBIN, OBJTXT, OBJPACK, RECLIST.
    *                                                  Retrieve Payroll results sequence number for this run
        select single * from HRPY_RGDIR where PERNR eq ITAB-PERNR
                                        and FPBEG ge W_BEGDA
                                        and FPEND le W_ENDDA
                                        and SRTZA eq 'A'.
    *                                                  Produce payslip for those payroll results
        if SY-SUBRC = 0.
          call function 'GET_PAYSLIP'
            EXPORTING
              EMPLOYEE_NUMBER = ITAB-PERNR
              SEQUENCE_NUMBER = HRPY_RGDIR-SEQNR
              PAYSLIP_VARIANT = PAY_VAR
            IMPORTING
              RETURN          = RETURN
              P_INFO          = P_INFO
            TABLES
              P_FORM          = P_FORM.
          check RETURN is initial.
    *                                                 remove linetype from generated payslip
          loop at p_form.
            objbin = p_form-linda.
            append objbin.
            line_cnt = line_cnt + 1.
          endloop.
          file_length = line_cnt * 1022.
    *                                                 create spool file of paylsip
          CALL FUNCTION 'SLVC_TABLE_PS_TO_SPOOL'
            EXPORTING
              i_file_length = file_length
            IMPORTING
              e_spoolid     = spool_id
            TABLES
              it_textdata   = objbin.
          IF sy-subrc EQ 0.
            WRITE spool_id.
          ENDIF.
          DESCRIBE table objbin.
          DATA PDF LIKE TLINE OCCURS 100 WITH HEADER LINE.
          CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'
            EXPORTING
              SRC_SPOOLID                    = spool_id
              NO_DIALOG                      = ' '
              DST_DEVICE                     = 'MAIL'
    *      PDF_DESTINATION                =
    *    IMPORTING
    *      PDF_BYTECOUNT                  = l_no_of_bytes
    *      PDF_SPOOLID                    = l_pdf_spoolid
    *      LIST_PAGECOUNT                 =
    *      BTC_JOBNAME                    =
    *      BTC_JOBCOUNT                   =
            TABLES
              PDF                            = pdf
            EXCEPTIONS
              ERR_NO_ABAP_SPOOLJOB           = 1
              ERR_NO_SPOOLJOB                = 2
              ERR_NO_PERMISSION              = 3
              ERR_CONV_NOT_POSSIBLE          = 4
              ERR_BAD_DESTDEVICE             = 5
              USER_CANCELLED                 = 6
              ERR_SPOOLERROR                 = 7
              ERR_TEMSEERROR                 = 8
              ERR_BTCJOB_OPEN_FAILED         = 9
              ERR_BTCJOB_SUBMIT_FAILED       = 10
              ERR_BTCJOB_CLOSE_FAILED        = 11
              OTHERS                         = 12
          IF SY-SUBRC <> 0.
    * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    *         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
          ENDIF.
    *Download PDF file C Drive
      CALL FUNCTION 'GUI_DOWNLOAD'
        EXPORTING
          filename = 'C:\itab_to_pdf.pdf'
          filetype = 'BIN'
        TABLES
          data_tab = pdf.
    * Transfer the 132-long strings to 255-long strings
    *  LOOP AT pdf.
    *    TRANSLATE pdf USING ' ~'.
    *    CONCATENATE gd_buffer pdf INTO gd_buffer.
    *  ENDLOOP.
    *  TRANSLATE gd_buffer USING '~ '.
    *  DO.
    *    it_mess_att = gd_buffer.
    *    APPEND it_mess_att.
    *    SHIFT gd_buffer LEFT BY 255 PLACES.
    *    IF gd_buffer IS INITIAL.
    *      EXIT.
    *    ENDIF.
    *  ENDDO.
          OBJHEAD = 'Objhead'.
          append OBJHEAD.
    * preparing email subject
          concatenate W_ENDDA(6)
                    ' Payslip-'
                    ITAB-ENAME+0(28)
                    ITAB-PERNR+4(4) ')'
                 into DOCDATA-OBJ_DESCR.
          DOCDATA-OBJ_NAME = 'Pay Slip'.
          DOCDATA-OBJ_LANGU = SY-LANGU.
          OBJTXT = 'Pay Slip.'.
          append OBJTXT.
    *prepare email lines
          OBJTXT = DOCDATA-OBJ_DESCR.
          append OBJTXT.
          OBJTXT = 'Please find enclosed your current payslip.'.
          append OBJTXT.
    * Write Attachment(Main)
    * 3 has been fixed because OBJTXT has fix three lines
          read table OBJTXT index 3.
    *    DOCDATA-DOC_SIZE = ( 3 - 1 ) * 255 + strlen( OBJTXT ).
          clear OBJPACK-TRANSF_BIN.
          OBJPACK-HEAD_START = 1.
          OBJPACK-HEAD_NUM = 0.
          OBJPACK-BODY_START = 1.
          OBJPACK-BODY_NUM = 3.
          OBJPACK-DOC_TYPE = 'RAW'.
          append OBJPACK.
    * Create Message Attachment
          ATT_TYPE = 'PDF'.
          describe table OBJBIN lines TAB_LINES.
          read table OBJBIN index TAB_LINES.
    *    OBJPACK-DOC_SIZE = ( TAB_LINES - 1 ) * 255 + strlen( OBJBIN ).
          OBJPACK-TRANSF_BIN = 'X'.
          OBJPACK-HEAD_START = 1.
          OBJPACK-HEAD_NUM = 0.
          OBJPACK-BODY_START = 1.
          OBJPACK-BODY_NUM = TAB_LINES.
          OBJPACK-DOC_TYPE = ATT_TYPE.
          OBJPACK-OBJ_NAME = 'ATTACHMENT'.
          OBJPACK-OBJ_DESCR = 'Payslip'.
          append OBJPACK.
    * Create receiver list refresh RECLIST.
          clear RECLIST.
          RECLIST-RECEIVER = itab-USRID_long.
          translate RECLIST-RECEIVER to lower case.
          RECLIST-REC_TYPE = 'U'.
          append RECLIST.
    * Send the document
    *SO_NEW_DOCUMENT_ATT_SEND_API1
          call function 'SO_DOCUMENT_SEND_API1'
            exporting
              DOCUMENT_DATA = DOCDATA
              PUT_IN_OUTBOX = 'X'
              COMMIT_WORK = 'X'
    * IMPORTING
    *   SENT_TO_ALL =
    *   NEW_OBJECT_ID =
            tables
              PACKING_LIST  = OBJPACK
              OBJECT_HEADER = OBJHEAD
              CONTENTS_BIN  = pdf
              CONTENTS_TXT  = OBJTXT
    *   CONTENTS_HEX =
    *   OBJECT_PARA =
    *   OBJECT_PARB =
              RECEIVERS = RECLIST
            exceptions
              TOO_MANY_RECEIVERS = 1
              DOCUMENT_NOT_SENT = 2
              DOCUMENT_TYPE_NOT_EXIST = 3
              OPERATION_NO_AUTHORIZATION = 4
              PARAMETER_ERROR = 5
              X_ERROR = 6
              ENQUEUE_ERROR = 7
              others = 8.
          if SY-SUBRC NE 0.
            ITAB-MTEXT = 'Message Not Sent to : '.
          else.
            ITAB-MTEXT = 'Message Sent to : '.
          endif.
    *    else.
    *      ITAB-MTEXT = 'Message Not Sent to : '.
    *    endif.
        else.
          "SY-SUBRC Not = 0
          ITAB-MTEXT = 'Payroll data not found : '.
        endif.
        "end of SY-SUBRC = 0.
        modify ITAB.
      endloop. "end loop at ITAB
      sort ITAB by MTEXT PERNR.
      loop at ITAB.
        at new MTEXT.
          uline.
          write : / ITAB-MTEXT color 4 intensified on.
          write : / 'Emp. Code' color 2 intensified on,
                 12 'Emp. Name' color 2 intensified on,
                 54 'Email ID' color 2 intensified on.
        endat.
        write : / ITAB-PERNR, 12 ITAB-ENAME, 54 ITAB-USRID_LONG.
      endloop.

  • Sample code for sap hr program--pls treat this as urgent

    Hi ,
    This is the program on attendence incentive program, i have written
    REPORT  zhrpa0019    LINE-SIZE 270
                         LINE-COUNT  55(3)
                         NO STANDARD PAGE HEADING
                         MESSAGE-ID zm.
         T A B L E S                                                     *
    TABLES: pernr, pa2001, pa9002.
    *Type-pools
    TYPE-POOLS slis.
         I N F O T Y P E S                                               *
    INFOTYPES: 0008, 0001, 0002,2001,9002,0041.
         T Y P E S
    DATA:BEGIN OF t_data1 OCCURS 0,
           pernr LIKE pa0001-pernr,
           ename LIKE pa0001-ename,
           bukrs LIKE pa0001-bukrs,
           werks LIKE pa0001-werks,
           btrtl LIKE pa0001-btrtl,
           persg LIKE pa0001-persg,
           persk LIKE pa0001-persk,
           begda LIKE pa0001-begda,
           endda LIKE pa0001-endda,
           amount LIKE pa0008-bet01,
           cdate  LIKE pa0041-dat01,
        END OF t_data1.
         D A T A * Internal table and working area
    DATA: i_data1 LIKE   t_data1 OCCURS 0 WITH HEADER LINE.
        wa_data1 like line of t_data1 .
    DATA : BEGIN OF i_date OCCURS 0,
             pernr    LIKE   pa0041-pernr,
             cdate    LIKE   pa0041-dat01,
         END OF i_date.
    *Data : i_pa0041  like pa0041 occurs 0 with header line,
           wa_pa0041 like pa0041.
    *Data : i_p0001  like p0001 occurs 0 with header line.
    Constants
    CONSTANTS:  c_102007(6) VALUE '102007',
                c_25 TYPE p DECIMALS 1 VALUE '25.0',
                c_x VALUE 'X',
                c_a  value 'A',
                c_mcnp(4) value 'MCNP'.
    Variables
    DATA :   v_mvc  like pa0008-bet01,
           lv_bmonth    TYPE   char2,
           lv_byear     TYPE   char4,
           lv_date      TYPE   sy-datum.
    Parameters Selection
    SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-t01.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(31) text-001.
    *PARAMETERS:: p_bmonth LIKE pv000-pabrp OBLIGATORY,
                p_byear LIKE pv000-pabrj  OBLIGATORY.
    SELECTION-SCREEN COMMENT 45(10) text-002.
    SELECTION-SCREEN END OF LINE.
    PARAMETERS: p_mvc(2) TYPE p DECIMALS 1 DEFAULT c_25,
                p_mctype  TYPE pa2001-awart DEFAULT c_mcnp,
                p_ditype  TYPE c  DEFAULT c_a,
                rb_test RADIOBUTTON GROUP grp1 DEFAULT 'X',
                rb_prod RADIOBUTTON GROUP grp1.
    SELECTION-SCREEN END OF BLOCK b1.
    Initialization                                     *
    INITIALIZATION.
      pnpstat2-low = '3'.
      pnpstat2-sign = 'I'.
      pnpstat2-option = 'EQ'.
      APPEND pnpstat2.
      CLEAR pnpstat2.
      pnpbukrs-low = 'SATS'.
      pnpbukrs-sign = 'I'.
      pnpbukrs-option = 'EQ'.
      APPEND pnpbukrs.
      CLEAR pnpbukrs.
      pnppersg-low = 'N'.
      pnppersg-sign = 'I'.
      pnppersg-option = 'EQ'.
      APPEND pnppersg.
      CLEAR pnppersg.
      pnpbtrtl-low = '2010'.
      pnpbtrtl-high = '2050'.
      pnpbtrtl-sign = 'I'.
      pnpbtrtl-option = 'EQ'.
      APPEND pnpbtrtl.
      CLEAR pnpbtrtl.
    **Clearing the variables
    CLEAR : lv_byear, lv_bmonth,
             lv_date.
    Get previous month from current date
    CALL FUNCTION 'CCM_GO_BACK_MONTHS'
       EXPORTING
         currdate   = sy-datum
         backmonths = 1
       IMPORTING
         newdate    = lv_date.
    lv_byear = lv_date(4).
    lv_bmonth = lv_date+4(2).
    MOVE lv_bmonth TO p_bmonth.
    MOVE lv_byear TO p_byear.
    AT Selection-screen                          *
    AT SELECTION-SCREEN.
      IF rb_prod = 'X' .
        IF sy-uname NP 'HRBTCH*'.
          MESSAGE e223(zhpa).
       else.
         UPDATE  pa0015
                  SET  begda = sy-datum
                      lgart = '216D'
                       bertg = P_MVC
                WHERE pernr = p0001-pernr.
         IF SY-SUBRC EQ 0.
           message i224(zhpa).
         endif.
         COMMIT WORK.
        ENDIF.
      ENDIF.
    T O P  O F  P A G E                                          *
    TOP-OF-PAGE.
      PERFORM f_top_of_page.
    E N D  O F   P A G E                                          *
    END-OF-PAGE.
    B E G I N   S E L E C T I O N                                *
    START-OF-SELECTION.
    GET  pernr.
      pnp-sw-ignorelockedrecords = 'N'.
      PERFORM f_get_hr_data.
    E N D   S E L E C T I O N                                    *
    END-OF-SELECTION.
    sort i_data1 by werks ascending
                      btrtl ascending
                      persg ascending
                      persk ascending
                      pernr ascending.
    check for test mode.
      if rb_test = 'X'.
        clear: i_data1.
        loop at i_data1 .
         perform f_fill_bdc.
         perform f_bdc_transaction using c_pa30.
        endloop.
      endif.
      perform f_display_report.
    *&      Form  f_top_of_page
          text
    -->  p1        text
    <--  p2        text
    FORM f_top_of_page.
      WRITE: text-t11, sy-repid ,
             65 text-t12,
             150 text-t13,
             158 sy-datum.
      IF rb_test = c_x.
        WRITE:/ text-t21, sy-mandt,
               75 text-t22,
               150 text-t23,
               158 sy-uzeit.
      ELSE.
        WRITE:/ text-t21, sy-mandt,
               117 text-t24,
               150 text-t23,
               158 sy-uzeit.
      ENDIF.
      WRITE:/ text-t31, sy-uname,
             150 text-t32,
             158 sy-pagno.
      ULINE.
    ENDFORM.                    " f_top_of_page
    *&      Form  f_get_hr_data
          text
    -->  p1        text
    <--  p2        text
    FORM f_get_hr_data.
      rp-provide-from-last p0001 space pn-begda pn-endda.
      IF pnp-sw-found = 1.
        PERFORM f_get_data_pa0008.
      ENDIF.
    ENDFORM.                    " f_get_hr_data
    *&      Form  f_get_data_pa0008
          text
    -->  p1        text
    <--  p2        text
    FORM f_get_data_pa0008.
      PERFORM f_get_confirm_date.
      rp-provide-from-last p0008 space pn-begda pn-endda..
      v_mvc = p_mvc.
      IF pnp-sw-found = 1.
       i_data1-cdate = i_date-cdate.
        MOVE p0001-pernr TO i_data1-pernr.
        MOVE p0001-ename TO i_data1-ename.
        MOVE p0001-werks TO i_data1-werks.
        MOVE p0001-btrtl TO i_data1-btrtl.
        MOVE p0001-persg TO i_data1-persg.
        MOVE p0001-bukrs TO i_data1-bukrs.
        MOVE p0001-persk TO i_data1-persk.
        MOVE i_date-cdate TO i_data1-cdate.
        MOVE v_mvc   TO i_data1-amount.
        APPEND i_data1.
        CLEAR i_data1.
      ENDIF.
    ENDFORM.                    " f_get_data_pa0008
    *&      Form  f_display_report
          text
    -->  p1        text
    <--  p2        text
    FORM f_display_report.
    perform alv_display.
    *Output to a list
    data : lv_stotal(5)  type n,
             lv_utotal(5)  type n,
             lv_format.
      constants : c_l value '|'.
      clear: i_data1.
      format color col_total intensified on.
      write: /, / 'Successfully Updated to Database:'.
      write: /.
      format reset.
      uline (200).
      format color col_heading intensified off.
      write : /1 c_l no-gap, (8) 'Pnumber' no-gap,
              c_l no-gap, (35) 'Name' no-gap,
              c_l no-gap, (5) 'PA' no-gap,
              c_l no-gap, (5) 'PSA' no-gap,
              c_l no-gap, (6) 'EE Grp' no-gap,
              c_l no-gap, (9) 'EE Subgrp' no-gap,
               c_l no-gap, (12) 'Amount' no-gap,
              200 c_l.
      uline (200).
    format reset.
      loop at i_data1 .
       perform f_format_amount.
        if lv_format = 'X'.
          clear lv_format.
          format color col_normal intensified off.
        else.
          lv_format = 'X'.
          format color col_normal intensified on.
        endif.
        write :/1 c_l no-gap, (8) i_data1-pernr no-gap,
               c_l no-gap, (35) i_data1-ename no-gap,
               c_l no-gap, (5) i_data1-werks no-gap,
               c_l no-gap, (5) i_data1-btrtl no-gap,
               c_l no-gap, (6) i_data1-persg no-gap,
               c_l no-gap, (9) i_data1-persk no-gap,
               c_l no-gap , (12) i_data1-amount no-gap.
    endloop.
    ENDFORM .                    "f_display_report
    *&      Form  get_confirm_date
          text
    -->  p1        text
    <--  p2        text
    FORM f_get_confirm_date .
      rp-provide-from-last p0041  space pn-begda pn-endda.
      IF pnp-sw-found = 1.
        CLEAR i_date.
        i_date-pernr = p0041-pernr.
        APPEND i_date.
        PERFORM f_populate_date USING : p0041-pernr
                                          p0041-dar01 p0041-dat01,
                                          p0041-pernr
                                          p0041-dar02 p0041-dat02,
                                          p0041-pernr
                                          p0041-dar03 p0041-dat03,
                                          p0041-pernr
                                          p0041-dar04 p0041-dat04,
                                          p0041-pernr
                                          p0041-dar05 p0041-dat05,
                                          p0041-pernr
                                          p0041-dar06 p0041-dat06,
                                          p0041-pernr
                                          p0041-dar07 p0041-dat07,
                                          p0041-pernr
                                          p0041-dar08 p0041-dat08,
                                          p0041-pernr
                                          p0041-dar09 p0041-dat09,
                                          p0041-pernr
                                          p0041-dar10 p0041-dat10,
                                          p0041-pernr
                                          p0041-dar11 p0041-dat11,
                                          p0041-pernr
                                          p0041-dar12 p0041-dat12.
      ENDIF.
    ENDFORM.                    " get_confirm_date
    *&      Form  f_populate_date
          text
         -->P_PERNR    text
         -->P_DAR      text
         -->P_DAT      text
    FORM f_populate_date USING   p_pernr p_dar p_dat.
      CLEAR i_date.
      READ TABLE i_date WITH KEY pernr = p_pernr.
      IF sy-subrc = 0.
        IF p_dar = 'A3'.
          i_date-cdate = p_dat.
          MODIFY i_date INDEX sy-tabix.
        ENDIF.
      ENDIF.
      endform.
    i need to add the logic , could you pls help as this is very urgent.........
    IF test run = ‘X’     
         Display the report
    IF production run = ‘X’
         1. Batch user ID ‘HRBTCH*’ performed the execution.
         Create new record based on the following parameters:               
    -     PA0015-BEGDA = System Date  (date of origin)
    -     PA0015-LGART = 216D (wage type)
    -     PA0015-BETRG = IAP amount (25)
              Display the report.
         2. Program was not executed by Batch user ID ‘HRBTCH*’
              Display information message ‘Only batch user ID can run actual mode.
              Display the report
    No update will be done.
    ENDIF.
    how to addd in the above code.....

    REPORT  ZHR_ATTENDANCE_RPT MESSAGE-ID ZHR.
                     T Y P E    P O O L S                                *
    TYPE-POOLS : SLIS.
                          T A B L E                                     *
    TABLES : TEVEN,
             PA0000,
             PA0001,
             T503K,
             T500P.
              I N T E R N A L   T A B L E   D E C L A R A T I O N        *
    DATA : BEGIN OF IT_PA0001 OCCURS 0,
           PERNR TYPE PA0001-PERNR,
           ENDDA TYPE PA0001-ENDDA,
           WERKS TYPE PA0001-WERKS,
           BTRTL TYPE PA0001-BTRTL,
           ORGEH TYPE PA0001-ORGEH,
           PERSK TYPE T503T-PERSK,
           ENAME TYPE PA0001-ENAME,
           END OF IT_PA0001.
    DATA : BEGIN OF IT_PA0000 OCCURS 0,
           PERNR TYPE PA0000-PERNR,
           END OF IT_PA0000.
    DATA : BEGIN OF IT_TEVEN OCCURS 0,
           PERNR TYPE TEVEN-PERNR,
           LDATE TYPE TEVEN-LDATE,
           LTIME TYPE TEVEN-LTIME,
           SATZA TYPE TEVEN-SATZA,
           END OF IT_TEVEN.
    DATA : IT_TEVEN1 LIKE IT_TEVEN OCCURS 0 WITH HEADER LINE.
    DATA : BEGIN OF IT_T527X OCCURS 0,
           ORGEH LIKE T527X-ORGEH,
           ORGTX LIKE T527X-ORGTX,
           END OF IT_T527X.
    DATA : BEGIN OF IT_T503T OCCURS 0,
           PERSK TYPE T503T-PERSK,
           PTEXT TYPE T503T-PTEXT,
           END OF IT_T503T.
    DATA : BEGIN OF IT_FINAL OCCURS 0,
           PERNR LIKE PA0001-PERNR,
           ENAME LIKE PA0001-ENAME,
           LDATE LIKE TEVEN-LDATE,
           TPROG LIKE PTPSP-TPROG,
           LTIMEI LIKE TEVEN-LTIME,
           LTIMEO LIKE TEVEN-LTIME,
           ORGTX LIKE T527X-ORGTX,
           PTEXT TYPE T503T-PTEXT,
           ATEXT TYPE ABWTXT,
           END OF IT_FINAL.
    DATA : IT_PTPSP LIKE PTPSP OCCURS 0 WITH HEADER LINE.
    *Table to get Holiday
    DATA : IT_ISCAL_DAY LIKE ISCAL_DAY OCCURS 0 WITH HEADER LINE.
    DATA : IT_T554T TYPE T554T OCCURS 0 WITH HEADER LINE.
    *ALV data declarations
    DATA: FIELDCATALOG TYPE SLIS_T_FIELDCAT_ALV,
          X_FIELDCATALOG TYPE SLIS_FIELDCAT_ALV,
          GD_LAYOUT    TYPE SLIS_LAYOUT_ALV,
          GD_REPID     LIKE SY-REPID.
    *For ALV Events
    DATA : IT_EVENT1 TYPE SLIS_T_EVENT.
    *For ALV Events
    DATA : IT_EVENT TYPE SLIS_ALV_EVENT.
    *For ALV top of page
    DATA : IT_LIST_TOP_OF_PAGE TYPE SLIS_T_LISTHEADER.
    *For top of page heading
    DATA : IT_LINE TYPE SLIS_LISTHEADER.
    Variables declaration                                         *
    DATA : V_SHIFT LIKE PTPSP-TPROG,
           V_TEMP TYPE I,
           V_DATE TYPE DATUM,
           V_LDATE TYPE SY-DATUM,
           V_MODIF TYPE HIDENT,
           V_SUBTY TYPE PA2002-SUBTY,
           V_ENDDA TYPE CHAR10.
    SELECTION SCREEN                                              *
    SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
    SELECT-OPTIONS : S_PERNR FOR TEVEN-PERNR,
                     S_DATE  FOR TEVEN-LDATE no-extension,
                     S_ORGEH FOR PA0001-ORGEH,
                     S_WERKS FOR PA0001-WERKS,
                     S_BTRTL FOR PA0001-BTRTL,
                     S_PERSK FOR PA0001-PERSK,
                     S_STAT2 FOR PA0000-STAT2.
    SELECTION-SCREEN END OF BLOCK B1.
               A T   S E L E C T I O N   S C R E E N                     *
    *validatating Selection Screen
    AT SELECTION-SCREEN ON S_PERNR.
    *Validate the User entered year
      PERFORM VALIDATE_PERNR.
    AT SELECTION-SCREEN ON S_DATE.
    *Validate the User entered date
      PERFORM VALIDATE_DATE_LOW.
    AT SELECTION-SCREEN ON S_ORGEH.
    *Validate the User entered year
      PERFORM VALIDATE_ORGEH.
    AT SELECTION-SCREEN ON S_PERSK.
    *Validate the User entered year
      PERFORM VALIDATE_PERSK.
    AT SELECTION-SCREEN ON S_WERKS.
    *Validate the User entered Personnel area
      PERFORM VALIDATE_WERKS.
    START OF SELECTION                                             *
    START-OF-SELECTION.
    *Get data
      PERFORM GET_DATA.
    *Process data
      PERFORM PROCESS_DATA.
                  E N D    O F     S E L E C T I O N                    *
    END-OF-SELECTION.
      PERFORM BUILD_FIELDCATALOG.
      PERFORM BUILD_LAYOUT.
    *For ALV Events
      PERFORM ALV_EVENTS.
      PERFORM DISPLAY_ALV_REPORT.
    *&      Form  VALIDATE_YEAR
          Validating the year
    FORM VALIDATE_PERNR .
      IF NOT S_PERNR IS INITIAL.
        SELECT SINGLE * FROM PA0001 WHERE PERNR IN S_PERNR.     "#EC *
        IF SY-SUBRC <> 0.
          MESSAGE E000 WITH 'Enter valid Employee Number'(002).
        ENDIF.
      ENDIF.
    ENDFORM.                    " VALIDATE_pernr
    *&      Form  VALIDATE_YEAR
          Validating the year
    FORM VALIDATE_ORGEH .
      DATA: V_ORGEH LIKE T527X-ORGEH.
      IF NOT S_ORGEH IS INITIAL.
        SELECT SINGLE ORGEH FROM T527X INTO V_ORGEH WHERE ORGEH IN S_ORGEH.
        IF SY-SUBRC <> 0.
          MESSAGE E000 WITH 'Enter Valid Organization Unit'(003).
        ENDIF.
      ENDIF.
    ENDFORM.                    " VALIDATE_orgeh
    *&      Form  GET_DATA
          Get data
    FORM GET_DATA.
      SELECT PERNR
             FROM PA0000
             INTO TABLE IT_PA0000
             WHERE PERNR IN S_PERNR
             AND   ENDDA GE S_DATE-LOW
             AND   BEGDA LE S_DATE-HIGH
             AND   STAT2 IN S_STAT2.
      IF SY-SUBRC = 0.
        DELETE ADJACENT DUPLICATES FROM IT_PA0000 COMPARING PERNR.
        SORT IT_PA0000.
      ENDIF.
      IF NOT IT_PA0000[] IS INITIAL.
        SELECT PERNR
               ENDDA
               WERKS
               BTRTL
               ORGEH
               PERSK
               ENAME
               FROM PA0001
               INTO TABLE IT_PA0001
               FOR ALL ENTRIES IN IT_PA0000
               WHERE PERNR = IT_PA0000-PERNR
               AND   ENDDA GE S_DATE-LOW
               AND   BEGDA LE S_DATE-HIGH
               AND   ORGEH IN S_ORGEH
               AND   WERKS IN S_WERKS
               AND   PERSK IN S_PERSK
               AND   BTRTL IN S_BTRTL.
        IF SY-SUBRC = 0.
          SORT IT_PA0001 BY PERNR ENDDA DESCENDING.
          DELETE ADJACENT DUPLICATES FROM IT_PA0001 COMPARING PERNR.
          SORT IT_PA0001 BY PERNR.
        ENDIF.
      ENDIF.
      IF NOT IT_PA0001[] IS INITIAL.
        SELECT PERNR
               LDATE
               LTIME
               SATZA
               FROM TEVEN
               INTO TABLE IT_TEVEN
               FOR ALL ENTRIES IN IT_PA0001
               WHERE PERNR = IT_PA0001-PERNR
               AND   SATZA = 'P10'
               AND   LDATE IN S_DATE
               AND   STOKZ NE 'X'.
        IF SY-SUBRC = 0.
          SORT IT_TEVEN BY PERNR LDATE.
        ENDIF.
      ENDIF.
      IF NOT IT_PA0001[] IS INITIAL.
    v_date = s_date-high + 1.
        SELECT PERNR
               LDATE
               LTIME
               SATZA
               FROM TEVEN
               INTO TABLE IT_TEVEN1
               FOR ALL ENTRIES IN IT_PA0001
               WHERE PERNR = IT_PA0001-PERNR
               AND   SATZA = 'P20'
               AND  ( LDATE IN S_DATE or ldate = v_date )
               AND   STOKZ NE 'X'.
        IF SY-SUBRC = 0.
          SORT IT_TEVEN1 BY PERNR LDATE.
        ENDIF.
      ENDIF.
      IF NOT IT_PA0001[] IS INITIAL.
        SELECT ORGEH
               ORGTX
               FROM T527X
               INTO TABLE IT_T527X
               FOR ALL ENTRIES IN IT_PA0001
               WHERE ORGEH = IT_PA0001-ORGEH.
        IF SY-SUBRC = 0.
          SORT IT_T527X BY ORGEH.
        ENDIF.
      ENDIF.
      IF NOT IT_PA0001[] IS INITIAL.
        SELECT PERSK
               PTEXT
               FROM T503T
               INTO TABLE IT_T503T
               FOR ALL ENTRIES IN IT_PA0001
               WHERE PERSK = IT_PA0001-PERSK
               AND   SPRSL = 'E'.
        IF SY-SUBRC = 0.
          SORT IT_T503T BY PERSK.
        ENDIF.
      ENDIF.
      SELECT *
             FROM T554T
             INTO TABLE IT_T554T
             WHERE SPRSL = 'EN'
             AND   MOABW = '40'.
    ENDFORM.                    " GET_DATA
    *&      Form  PROCESS_DATA
          Process data
    FORM PROCESS_DATA .
      V_TEMP = S_DATE-HIGH - S_DATE-LOW.
      V_TEMP = V_TEMP + 1.
      LOOP AT IT_PA0001.
        V_DATE = S_DATE-LOW.
        DO V_TEMP TIMES.
    *Get employee work schedule
          IF IT_PTPSP[] IS INITIAL.
            PERFORM GET_SCHEDULE.
          ENDIF.
    *Get holiday calendar
          IF IT_ISCAL_DAY[] IS INITIAL.
            PERFORM GET_HOLIDAY.
          ENDIF.
          CLEAR : V_SUBTY.
          SELECT SINGLE SUBTY
                        FROM PA2001
                        INTO V_SUBTY
                        WHERE PERNR = IT_PA0001-PERNR
                        AND   ENDDA GE V_DATE
                        AND   BEGDA LE V_DATE.
          IF SY-SUBRC = 0.
            READ TABLE IT_T554T WITH KEY AWART = V_SUBTY.
            IT_FINAL-ATEXT = IT_T554T-ATEXT.
          ENDIF.
          IF V_SUBTY IS INITIAL.
            SELECT SINGLE SUBTY
                          FROM PA2002
                          INTO V_SUBTY
                          WHERE PERNR = IT_PA0001-PERNR
                          AND   ENDDA GE V_DATE
                          AND   BEGDA LE V_DATE.
            IF SY-SUBRC = 0.
              IF V_SUBTY = '1000' OR V_SUBTY = '2000'.
                IT_FINAL-ATEXT = 'Training'.
              ELSEIF V_SUBTY = '3000'.
                IT_FINAL-ATEXT = 'Tour'.
              ENDIF.
            ENDIF.
          ENDIF.
    *Get the employee shift schedule for that date
          CLEAR : V_SHIFT.
          READ TABLE IT_PTPSP WITH KEY DATUM = V_DATE.
          IF SY-SUBRC = 0.
            V_SHIFT = IT_PTPSP-TPROG.
            IF IT_PTPSP-TAGTY = '1'.
              V_SHIFT = 'NOFF'.
            ENDIF.
          ENDIF.
          IF V_SHIFT = ''.
            CLEAR IT_FINAL.
            CONTINUE.
          ENDIF.
    *Check for holiday
          IT_FINAL-TPROG = V_SHIFT.
          READ TABLE IT_ISCAL_DAY WITH KEY DATE = V_DATE.
          IF SY-SUBRC = 0.
            IT_FINAL-TPROG = 'H'.
          ENDIF.
          IT_FINAL-PERNR = IT_PA0001-PERNR.
          IT_FINAL-ENAME = IT_PA0001-ENAME.
          IT_FINAL-LDATE = V_DATE.
    *To get the organization unit
          READ TABLE IT_T527X WITH KEY ORGEH = IT_PA0001-ORGEH
                                       BINARY SEARCH.
          IF SY-SUBRC = 0.
            IT_FINAL-ORGTX = IT_T527X-ORGTX.
          ENDIF.
          CLEAR IT_T503T.
          READ TABLE IT_T503T WITH KEY PERSK = IT_PA0001-PERSK
                                       BINARY SEARCH.
          IF SY-SUBRC = 0.
            IT_FINAL-PTEXT = IT_T503T-PTEXT.
          ENDIF.
    V_LDATE = v_DATE + 1.
    *To get Punch-in.
          READ TABLE IT_TEVEN WITH KEY PERNR = IT_PA0001-PERNR
                                       LDATE = V_DATE
                                       BINARY SEARCH.
          IF SY-SUBRC = 0.
            IT_FINAL-LTIMEI = IT_TEVEN-LTIME.endif.
    *To get Punch-out
            READ TABLE IT_TEVEN1 WITH KEY PERNR = IT_PA0001-PERNR
                                          LDATE = v_DATE
                                          BINARY SEARCH.
            IF SY-SUBRC = 0.
              IF IT_TEVEN1-LTIME > IT_FINAL-LTIMEI.
                IT_FINAL-LTIMEO = IT_TEVEN1-LTIME.
              ELSE.
                SELECT SINGLE LTIME
                              FROM TEVEN
                              INTO IT_FINAL-LTIMEO
                              WHERE PERNR = IT_PA0001-PERNR
                              AND   LDATE = v_DATE
                              AND   LTIME > IT_TEVEN1-LTIME
                              AND   SATZA = 'P20'
                              AND   STOKZ NE 'X'.
              ENDIF.
            ENDIF.
            IF IT_FINAL-LTIMEO IS INITIAL.
              IF V_SHIFT = 'NNIG' OR V_SHIFT = 'NAFT'..
                READ TABLE IT_TEVEN1 WITH KEY PERNR = IT_PA0001-PERNR
                                              LDATE =  V_LDATE
                                              BINARY SEARCH.
                IF SY-SUBRC = 0.
                  IT_FINAL-LTIMEO = IT_TEVEN1-LTIME.
                ENDIF.
              ENDIF.
            ENDIF.
            if ( V_SHIFT = 'NOFF' OR IT_FINAL-TPROG = 'H' )
            and it_final-ltimei is initial and it_final-ltimeo is not initial.
            clear: it_final-ltimeo.endif.
           APPEND IT_FINAL.
         ELSE.
    *If holiday or OFF or Tour or Absent
            IF V_SHIFT = 'NOFF' OR IT_FINAL-TPROG = 'H'
            or it_final-atext is not initial or
            ( it_final-ltimei is not initial and it_final-ltimeo is not initial ).
             APPEND IT_FINAL.
           ELSEIF IT_FINAL-ATEXT IS NOT INITIAL.
             APPEND IT_FINAL.
            ELSE.
              IT_FINAL-ATEXT = 'Absent'.
             APPEND IT_FINAL.
            ENDIF.
        ENDIF.
              APPEND IT_FINAL.
          CLEAR : IT_FINAL.
          V_DATE = V_DATE + 1.
        ENDDO.
        CLEAR : IT_PTPSP[],
                IT_ISCAL_DAY[].
      ENDLOOP.
      SORT IT_FINAL BY PERNR LDATE.
      LOOP AT IT_FINAL.
        TRANSLATE IT_FINAL-ATEXT TO UPPER CASE.
        MODIFY IT_FINAL INDEX SY-TABIX.
      ENDLOOP.
    ENDFORM.                    " PROCESS_DATA
    *&      Form  GET_SCHEDULE
          Get employee work schedule
    FORM GET_SCHEDULE.
      CALL FUNCTION 'HR_PERSONAL_WORK_SCHEDULE'
        EXPORTING
          PERNR         = IT_PA0001-PERNR
          BEGDA         = S_DATE-LOW
          ENDDA         = S_DATE-HIGH
        TABLES
          PERWS         = IT_PTPSP
        EXCEPTIONS
          ERROR_OCCURED = 1
          ABORT_OCCURED = 2
          OTHERS        = 3.
      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.                    " GET_SCHEDULE
    *&      Form  build_fieldcatalog
    FORM BUILD_FIELDCATALOG .
      X_FIELDCATALOG-COL_POS     = 1.
      X_FIELDCATALOG-FIELDNAME   = 'PERNR'.
      X_FIELDCATALOG-SELTEXT_L   = 'Personnel No'(006).
      X_FIELDCATALOG-DDICTXT = 'L'.
      APPEND X_FIELDCATALOG TO FIELDCATALOG.
      CLEAR  X_FIELDCATALOG.
      X_FIELDCATALOG-COL_POS     = 2.
      X_FIELDCATALOG-FIELDNAME   = 'ENAME'.
      X_FIELDCATALOG-SELTEXT_L   = 'Employee Name'(007).
      X_FIELDCATALOG-DDICTXT = 'L'.
      APPEND X_FIELDCATALOG TO FIELDCATALOG.
      CLEAR  X_FIELDCATALOG.
      X_FIELDCATALOG-COL_POS     = 5.
      X_FIELDCATALOG-FIELDNAME   = 'LDATE'.
      X_FIELDCATALOG-SELTEXT_L   = 'Date'(008).
      X_FIELDCATALOG-DDICTXT = 'L'.
      APPEND X_FIELDCATALOG TO FIELDCATALOG.
      CLEAR  X_FIELDCATALOG.
      X_FIELDCATALOG-COL_POS     = 6.
      X_FIELDCATALOG-FIELDNAME   = 'TPROG'.
      X_FIELDCATALOG-SELTEXT_L   = 'Planned Shift'(009).
      X_FIELDCATALOG-DDICTXT = 'L'.
      APPEND X_FIELDCATALOG TO FIELDCATALOG.
      CLEAR  X_FIELDCATALOG.
      X_FIELDCATALOG-COL_POS     = 7.
      X_FIELDCATALOG-FIELDNAME   = 'LTIMEI'.
      X_FIELDCATALOG-SELTEXT_L   = 'Attended Time-In'(010).
      X_FIELDCATALOG-DDICTXT = 'L'.
      APPEND X_FIELDCATALOG TO FIELDCATALOG.
      CLEAR  X_FIELDCATALOG.
      X_FIELDCATALOG-COL_POS     = 8.
      X_FIELDCATALOG-FIELDNAME   = 'LTIMEO'.
      X_FIELDCATALOG-SELTEXT_L   = 'Attended Time-Out'(011).
      X_FIELDCATALOG-DDICTXT = 'L'.
      APPEND X_FIELDCATALOG TO FIELDCATALOG.
      CLEAR  X_FIELDCATALOG.
      X_FIELDCATALOG-COL_POS     = 3.
      X_FIELDCATALOG-FIELDNAME   = 'ORGTX'.
      X_FIELDCATALOG-SELTEXT_L   = 'Organization Unit'(005).
      X_FIELDCATALOG-DDICTXT = 'L'.
      APPEND X_FIELDCATALOG TO FIELDCATALOG.
      CLEAR  X_FIELDCATALOG.
      X_FIELDCATALOG-COL_POS     = 4.
      X_FIELDCATALOG-FIELDNAME   = 'PTEXT'.
      X_FIELDCATALOG-SELTEXT_L   = 'Emp Subgroup'(016).
      X_FIELDCATALOG-DDICTXT = 'L'.
      APPEND X_FIELDCATALOG TO FIELDCATALOG.
      CLEAR  X_FIELDCATALOG.
      X_FIELDCATALOG-COL_POS     = 9.
      X_FIELDCATALOG-FIELDNAME   = 'ATEXT'.
      X_FIELDCATALOG-SELTEXT_L   = 'Leaves/Tours'(015).
      X_FIELDCATALOG-DDICTXT = 'L'.
      X_FIELDCATALOG-OUTPUTLEN = '25'.
      APPEND X_FIELDCATALOG TO FIELDCATALOG.
      CLEAR  X_FIELDCATALOG.
    ENDFORM.                    " build_fieldcatalog
    *&      Form  build_layout
    FORM BUILD_LAYOUT.
      GD_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
      GD_LAYOUT-ZEBRA = 'X'.
    ENDFORM.                    " build_layout
    *&      Form  ALV_EVENTS
          For ALV Events
    FORM ALV_EVENTS .
      IT_EVENT-NAME = 'TOP_OF_PAGE'.
      IT_EVENT-FORM = 'TOP_OF_PAGE'.
      APPEND IT_EVENT TO IT_EVENT1.
    ENDFORM.                    " ALV_EVENTS
    *&      Form TOP_OF_PAGE
          ALV TOP-OF-PAGE
    FORM TOP_OF_PAGE.                                           "#EC CALLED
      REFRESH : IT_LIST_TOP_OF_PAGE.
      CLEAR : IT_LINE.
      IT_LINE-TYP  = 'H'.
      IT_LINE-INFO = 'Attendance Report for the Period'(013).
      APPEND IT_LINE TO IT_LIST_TOP_OF_PAGE.
      CONCATENATE S_DATE-LOW6(2) '.' S_DATE-LOW4(2) '.' S_DATE-LOW+0(4)
           INTO IT_LINE-INFO.
      CONCATENATE S_DATE-HIGH6(2) '.'  S_DATE-HIGH4(2) '.' S_DATE-HIGH+0(4) INTO V_ENDDA.
      CONCATENATE IT_LINE-INFO '-' V_ENDDA INTO IT_LINE-INFO SEPARATED BY SPACE.
      APPEND IT_LINE TO IT_LIST_TOP_OF_PAGE.
      CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
        EXPORTING
          IT_LIST_COMMENTARY = IT_LIST_TOP_OF_PAGE.
    ENDFORM.                               "TOP_OF_PAGE
    *&      Form  display_alv_report
    FORM DISPLAY_ALV_REPORT.
      GD_REPID = SY-REPID.
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
        EXPORTING
          I_CALLBACK_PROGRAM = GD_REPID
          IT_EVENTS          = IT_EVENT1
          IS_LAYOUT          = GD_LAYOUT
          IT_FIELDCAT        = FIELDCATALOG
        TABLES
          T_OUTTAB           = IT_FINAL
        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
    *&      Form  VALIDATE_PERSK
          text
    -->  p1        text
    <--  p2        text
    FORM VALIDATE_PERSK .
      IF NOT S_PERSK IS INITIAL.
        SELECT SINGLE * FROM T503K WHERE PERSK IN S_PERSK.      "#EC *
        IF SY-SUBRC <> 0.
          MESSAGE E000 WITH 'Enter valid Employee subgroup'(012).
        ENDIF.
      ENDIF.
    ENDFORM.                    " VALIDATE_PERSK
    *&      Form  VALIDATE_WERKS
          Validate user Entered Personnel area
    FORM VALIDATE_WERKS .
      IF S_WERKS[] IS NOT INITIAL.
        SELECT SINGLE * FROM T500P WHERE PERSA IN S_WERKS.
        IF SY-SUBRC <> 0.
          MESSAGE E000 WITH 'Enter valid Personnel Area'(014).
        ENDIF.
      ENDIF.
    ENDFORM.                    " VALIDATE_WERKS
    *&      Form  VALIDATE_DATE_LOW
          Validate user Entered Date
    FORM VALIDATE_DATE_LOW .
      IF S_DATE-LOW IS INITIAL.
        MESSAGE E000 WITH 'Enter Date'(004).
      ENDIF.
      IF S_DATE-HIGH IS INITIAL.
        MESSAGE E000 WITH 'Enter Date'(004).
      ENDIF.
    ENDFORM.                    " VALIDATE_DATE_LOW
    *&      Form  GET_HOLIDAY
            Get Holiday
    FORM GET_HOLIDAY .
      CLEAR V_MODIF.
      SELECT SINGLE MOFID
                    FROM T001P
                    INTO V_MODIF
                    WHERE WERKS = IT_PA0001-WERKS
                    AND   BTRTL = IT_PA0001-BTRTL.
      CALL FUNCTION 'HOLIDAY_GET'
        EXPORTING
          HOLIDAY_CALENDAR           = V_MODIF
          DATE_FROM                  = S_DATE-LOW
          DATE_TO                    = S_DATE-HIGH
        TABLES
          HOLIDAYS                   = IT_ISCAL_DAY
        EXCEPTIONS
          FACTORY_CALENDAR_NOT_FOUND = 1
          HOLIDAY_CALENDAR_NOT_FOUND = 2
          DATE_HAS_INVALID_FORMAT    = 3
          DATE_INCONSISTENCY         = 4
          OTHERS                     = 5.
      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.                    " GET_HOLIDAY
    <b>Reward Points if useful.</b>

  • Report on HR

    Hi Abapers,
    Requirement:
    Development Plan templates have been created for all active associates.  It is desired by HR to be able to extract certain data from these plans into an Excel spreadsheet.  They want to be able to gauge a composite of development needs.
    selection screen fields:
    1.  Appraisal template
         drop down of available templates(f4 help). 'Development Plan' has to be selected.
    2. criteria Group
        dropdown based on template chosen
        criteria group = 'step1: create Action Plan'
    3. Form status/substatus
        Allow Selection of sub statuses from form that are to be extracted to excel.
    4. personnel area(Allow blank for All)
        only forms for associates in the included personnel areas will be extracted.
    5. personnel subarea(Allow blank for All)
    6. payscale group(Allow blank for All)
    7. pernr(Allow blank for All or selected pernr's)
    logic:
         All templates selected above that are any of the selected statuses, should be selected.
         Only templates for associates in the Organizations selected above should be selected.
          There may be one or more rows of the selected criteria.  (When you are in the form you can click on the Create icon to create up to 7 rows of Action Steps.)  All rows should be included.
        For the chosen criteria (in this case Action Steps), there are multiple columns.
        There should be one row of output for each employee with all data selected strung out in columns.
         Columns need to be fixed, so that a given field, i.e. ‘Strengths’ would always show up in the same column.
    output:
         Appraisee Pernr
         Appraisee Name
          Division
          Job Grade
         Competency or Development Area - this is a drop down on the form.  Extract the text (not the code).
         Detailed Action Steps - This is a note field (essentially a text box)   and will have a non-fixed number of characters.  Just capture them all.
         Type of Solution - this is a drop down on the form.  Extract the chosen text (not the code)
         Target Date - Date
       If there are multiple criteria for a person, they should be on the same row as defined in the spreadsheet attached to this CR entitiled.’Sample P3 Development Plan Report’
       This should be output to an excel spreadsheet format.
    output will be in excel format:
    pernr  name  division  jobgrade   competency DetailedActionsteps solution targetdate competency DetailedActionsteps solution targetdate.......
    o/p will repeat...
    How can i code this? i'm new to abap-hr. I want processing logic. kindly help me....
    points are sure for helpfull answers.....
    Thanks in advance..........

    Hi
    see the sample HR report using the LDB PNP and design with your data
    report zporgr0030
           line-size 193
           line-count 60(1)
           no standard page heading
           message-id zndc.
    Database Tables
    tables:    pernr,    " Logical PNP
               t001p,    " Personnel Subarea
               t005t,    " Country Descriptions
               t500p,    " Personnel Area
               t501,     " Employee Group
               t503k,    " Employee Subgroup
               csks,     " Cost Centers
               cskt,     " Cost Center Texts
               t513c,    " Job (Previous) Texts
               t513s,    " Job Titles
               t517t,    " Edn Est.Text
               t518b,    " Discipline Text
               t519t,    " Certificate Text
               t528t,    " Positions Texts
               t538t,    " Unit Text
               pa0003.   " Payroll Status
    infotypes:
               0000,   " Actions
               0001,   " Organizational Assignment
               0002,   " Personal Data
               0007,   " Planned working time
               0008,   " Payroll Data
               0022,   " Education Data
               0023,   " Previous Employer data
               0025,   " Performance Appraisal Data
               0041,   " Date Spcifications
               2001.   " Absences
    Declaration of Internal Tables
    Internal Table for Personal Data
    data: begin of pers_tab occurs 0,
            pernr like pa0001-pernr,      " Personal Number
            ename like pa0001-ename,      " Employee Name
            trfgr like pa0008-trfgr,      " Grade
            natio like pa0002-natio,      " Nationality
            hdate like pa0041-dat01,      " Hire Date
            gbdat like pa0002-gbdat,      " Birth Date
            plans like pa0001-plans,      " Position
            werks like pa0001-werks,      " Pers.Area
            kostl like pa0001-kostl,      " Cost Center
            ctext(40),                    " Cost Center Text
            ptext(25),                    " Position Text
            ntext(15),                    " Nation Text
            name1(23),                    " Location
          end of pers_tab.
    Internal Table for Payroll Data
    data: begin of pay_tab occurs 0,
            pernr like pa0008-pernr,      " Personal Number
            waers like pbwla-waers,       " Grade
            basic like pa0008-bet01,      " Basic Pay
            hra_allow like pa0008-bet01,  " Housing Allowance
            sup_allow like pa0008-bet01,  " Supp. Allowance
            soc_allow like pa0008-bet01,  " Social Allowance
            chl_allow like pa0008-bet01,  " Child Allowance
            fix_allow like pa0008-bet01,  " Fixed Overtime
            ra_allow  like pa0008-bet01,  " RA Allowance
            per_allow like pa0008-bet01,  " Perform. Allowance
            pen_allow like pa0008-bet01,  " Pension Allowance
            oth_allow like pa0008-bet01,  " Other Allowances
            tot_allow like pa0008-bet01,  " Total Allowances
          end of pay_tab.
    Internal Table for Educational Data
    data: begin of edn_tab occurs 0,
            pernr like pa0022-pernr,      " Personal Number
            ausbi like pa0022-ausbi,      " Discipline Name
            slart like pa0022-slart,      " Edn Establishment
            insti like pa0022-insti,      " Institute
            sland like pa0022-sland,      " Country
            slabs like pa0022-slabs,      " Certificate
            anzkl like pa0022-anzkl,      " Duration
            anzeh like pa0022-anzeh,      " Unit for Duration
            atext like t518b-atext,       " Discipline Text
            stext like t517t-stext,       " Edn Est.Text
            landx like t005t-landx,       " Country Text
            ctext like t519t-stext,       " Certificate Text
            etext like t538t-etext,       " Unit Text
          end of edn_tab.
    Internal Table for Previous Employment Data
    data: begin of pemp_tab occurs 0,
            pernr like pa0023-pernr,      " Personal Number
            arbgb like pa0023-arbgb,      " Previous Employer
            begda like pa0023-begda,      " Start Date
            endda like pa0023-endda,      " End Date
            taete like pa0023-taete,      " Last Position
            land1 like pa0023-land1,      " Country
            stltx like t513s-stltx,       " Position Text
            landx like t005t-landx,       " Country Text
          end of pemp_tab.
    Internal Table for Job History Data
    data: begin of job_tab occurs 0,
            pernr like pa0001-pernr,      " Personal Number
            begda like pa0001-begda,      " Promotion Date
            plans like pa0001-plans,      " Position
            stell like pa0001-stell,      " Job Key
            stltx like t513s-stltx,       " Job Text
            ptext like t528t-plstx,       " Position Text
          end of job_tab.
    Internal Table for Performance Appraisal Data
    data: begin of app_tab occurs 0,
            pernr like pa0001-pernr,       " Personal Number
            year(4) type     c,            " Current Year
            appr(35) type    c,            " C Y Appraisal
           year1(4) type    c,            " Last Year
           appr1(35) type   c,            " Last Year Appraisal
           year2(4) type    c,
           appr2(35) type   c,
           year3(4) type    c,
           appr3(35) type   c,
           year4(4) type    c,
           appr4(35) type   c,
          end of app_tab.
    Internal Table for Performance Appraisal Data
    data: begin of app1_tab occurs 0,
            year(4) type     c,            " Year
            appr(35) type    c,            " Appraisal
          end of app1_tab.
    Internal Table to get the Payroll Amounts
    data  wage_tab like pbwla occurs 0 with header line.
    Internal table for retreiving Employee Appraisals
    data  app_in_tab  like hrsobid occurs 0 with header line .
    data  app_out_tab like hrpe_profa  occurs 0 with header line .
    Declaration of Variables
    data : v_year(4)  type c,
           v_ayear(4) type c,
           v_cyear(4) type c,
           v_year1(4) type c,
           v_year2(4) type c,
           v_year3(4) type c,
           v_year4(4) type c,
           v_year5(4) type c,
           v_year6(4) type c,
           v_mon(2)   type c,
           v_date2  like sy-datum,
           v_date3  like sy-datum,
           v_date   like sy-datum,
           v_date1  like sy-datum.
    Declaration of Constants
    constants : c_x       type c value 'X',              " Sign
                c_pernr(8) type n value '00000000',      " Pernr
                c_p   like hrp1007-otype  value 'P',     " Object Type
                c_01  like hrp1001-plvar  value '01',    " Version
                c_val1(2) type c value '31',             " Date Type
                c_val2(2) type c value '12',             " Date Type
                c_val    like p0041-dar01 value '01',    " Date Type
                c_1      like pernr-persg value '1',     " Emp Group
                c_type   like hrp1001-otype  value 'S',  " Object Type
                c_date1  like sy-datum value '18000101', " Date
                c_date2  like sy-datum value '99991231', " Date
                c_lga01 like pa0008-lga01 value '0101',  " Wage Type
                c_lga02 like pa0008-lga01 value '0102',  " Wage Type
                c_lga03 like pa0008-lga01 value '0103',  " Wage Type
                c_lga04 like pa0008-lga01 value '0105',  " Wage Type
                c_lga05 like pa0008-lga01 value '0109',  " Wage Type
                c_lga06 like pa0008-lga01 value '0110',  " Wage Type
                c_lga07 like pa0008-lga01 value '0114',  " Wage Type
                c_lga08 like pa0008-lga01 value '0116',  " Wage Type
                c_lga09 like pa0008-lga01 value '0267',  " Wage Type
                c_kokrs  like cskt-kokrs value '1000'.   " Controlling Area
    Selection Screen
    selection-screen begin of block b1 with frame title text-003.
    selection-screen begin of line.
    selection-screen comment 1(33)   text-060.
    parameters: r_all radiobutton group rb1.
    selection-screen end of line.
    selection-screen begin of line.
    selection-screen comment 1(33)   text-020.
    parameters: r_per radiobutton group rb1.
    selection-screen end of line.
    selection-screen begin of line.
    selection-screen comment 1(33)   text-021.
    parameters: r_pay radiobutton group rb1.
    selection-screen end of line.
    selection-screen begin of line.
    selection-screen comment 1(33)   text-022.
    parameters: r_edn radiobutton group rb1.
    selection-screen end of line.
    selection-screen begin of line.
    selection-screen comment 1(33)   text-023.
    parameters: r_pemp radiobutton group rb1.
    selection-screen end of line.
    selection-screen begin of line.
    selection-screen comment 1(33)   text-024.
    parameters: r_job radiobutton group rb1.
    selection-screen end of line.
    selection-screen begin of line.
    selection-screen comment 1(33)   text-025.
    parameters: r_app radiobutton group rb1.
    selection-screen end of line.
    selection-screen end of block b1.
    At selection-screen
    at selection-screen.
    Validate the Selection Screen fields
      perform validate_screen.
    Start-of-Selection
    start-of-selection.
    Selection of Period
      perform get_period.
    Get PERNR from LDB
    get pernr.
      if pernr-persg eq c_1 or pernr-pernr ne c_pernr.
        if r_all eq c_x.
    Get the Personal data from PA0001,PA0002, PA0008, PA0041
          perform get_pers_data.
    Get the Payroll data from PA0008
          perform get_pay_data.
    Get the Education data from PA0022
          perform get_edn_data.
    Get the Previous Employment data from PA0023
          perform get_pemp_data.
    Get the Job History data
          perform get_job_data.
    Get the Performance Appraisal data
          perform get_app_data.
        elseif r_per eq c_x.
    Get the Personal data from PA0001,PA0002, PA0008, PA0041
          perform get_pers_data.
        elseif r_pay eq c_x.
    Get the Payroll data from PA0008
          perform get_pay_data.
        elseif r_edn eq c_x.
    Get the Education data from PA0022
          perform get_edn_data.
        elseif r_pemp eq c_x.
    Get the Previous Employment data from PA0023
          perform get_pemp_data.
        elseif r_job eq c_x.
    Get the Job History data
          perform get_job_data.
        elseif r_app eq c_x.
    Get the Performance Appraisal data
          perform get_app_data.
        endif.
      endif.
    Top-of-page
    top-of-page.
    Write the Report and Column Headings
      perform top_of_page.
    End-of-Page
    end-of-page.
      perform end_of_page.
    End-of-Selection
    end-of-selection.
    Display the Output Report.
      perform display_report.
    Form-Routines
    *&      Form  validate_screen
    Validation of selection Screen fields
    form validate_screen.
    Validation of Personnel Number
      clear pa0003.
      if not pnppernr[] is initial.
        select pernr
        from pa0003 up to 1 rows
          into pa0003-pernr
          where pernr in pnppernr.
        endselect.
        if sy-subrc <> 0.
          message e999 with 'Incorrect Personnel Number Entered'(001).
        endif.
      endif.
    Validation of Cost Center
      clear csks.
      if not pnpkostl[] is initial.
        select single kostl
          into csks-kostl
          from csks
          where kostl in pnpkostl.
        if sy-subrc <> 0.
          message e999 with 'Invalid Cost Center'(002).
        endif.
      endif.
    Validation of Personnel Area
      clear t500p.
      if not pnpwerks[] is initial.
        select persa
        from t500p up to 1 rows
          into t500p-persa
          where persa in pnpwerks.
        endselect.
        if sy-subrc <> 0.
          message e999 with 'Incorrect Personnel Area Entered'(004).
        endif.
      endif.
    Validation of Personnel Sub Area
      clear t001p.
      if not pnpbtrtl[] is initial.
        select btrtl
        from t001p up to 1 rows
          into t001p-btrtl
          where btrtl in pnpbtrtl.
        endselect.
        if sy-subrc <> 0.
          message e999 with 'Incorrect Personnel Sub Area Entered'(005).
        endif.
      endif.
    Validation of Employee Group
      clear t501.
      if not pnppersg[] is initial.
        select persg
        from t501 up to 1 rows
          into t501-persg
          where persg in pnppersg.
        endselect.
        if sy-subrc <> 0.
          message e999 with 'Incorrect Employee Group Entered'(006).
        endif.
      endif.
    Validation of Employee Sub Group
      clear t503k.
      if not pnppersk[] is initial.
        select persk
        from t503k up to 1 rows
          into t503k-persk
          where persk in pnppersk.
        endselect.
        if sy-subrc <> 0.
          message e999 with 'Incorrect Employee Sub Group Entered'(007).
        endif.
      endif.
    endform.                  "validate_screen
    *&      Form  get_period
    Get the Correct Period based on Selection screen selection
    form get_period.
      clear: v_year,v_mon, v_date, v_date1.
      v_year = sy-datum+0(4).
      v_mon  = sy-datum+4(2).
      if pnptimr1 = c_x.      " Current Date
        pnpbegda = sy-datum.
        pnpendda = sy-datum.
      elseif pnptimr2 = c_x.  " Current Month
        concatenate v_year v_mon c_val into v_date.
        concatenate v_year v_mon c_val1 into v_date1.
        pnpbegda = v_date.
        pnpendda = v_date1.
      elseif pnptimr3 = c_x.  " Current Year
        concatenate v_year c_val c_val into v_date.
        concatenate v_year c_val2 c_val1 into v_date1.
        pnpbegda = v_date.
        pnpendda = v_date1.
      elseif pnptimr4 = c_x.  " Upto Today
        pnpbegda = c_date1.
        pnpendda = sy-datum.
      elseif pnptimr5 = c_x.  " From Today
        pnpbegda = sy-datum.
        pnpendda = c_date2.
      else.
        if ( pnpbegda is initial and pnpendda is initial ).
          pnpbegda = c_date1.
          pnpendda = c_date2.
        elseif pnpbegda is initial and not pnpendda is initial.
          pnpbegda = c_date1.
          pnpendda = pnpendda.
        elseif not ( pnpbegda is initial and pnpendda is initial ).
          pnpbegda = pnpbegda.
          pnpendda = pnpendda.
        endif.
      endif.
    endform.              "get_period
    *&      Form  get_pers_data
    Get the Personal Data from PA0001,PA0002,PA0008, PA0041
    form get_pers_data.
    Get data from Respective Infotypes
      rp_provide_from_last p0001 space pnpbegda pnpendda.
      rp_provide_from_last p0002 space pnpbegda pnpendda.
      rp_provide_from_last p0008 space pnpbegda pnpendda.
      rp_provide_from_last p0041 space pnpbegda pnpendda.
      pers_tab-pernr    = p0001-pernr.
      pers_tab-ename    = p0001-ename.
      pers_tab-werks    = p0001-werks.
      pers_tab-plans    = p0001-plans.
      pers_tab-kostl    = p0001-kostl.
      pers_tab-gbdat    = p0002-gbdat.
      pers_tab-trfgr    = p0008-trfgr.
    Get the Engaged Date
      read table p0041 with key dar01 = c_val.
      if sy-subrc = 0.
        pers_tab-hdate = p0041-dat01.
      endif.
    Get the Cost Center Text
      clear cskt-ltext.
      select single ltext into cskt-ltext from cskt
              where spras = sy-langu and
                    kokrs = c_kokrs and
                    kostl = p0001-kostl.
      if sy-subrc = 0.
        pers_tab-ctext = cskt-ltext.
      endif.
    Get the Position Text
      clear t528t-plstx.
      select single plstx into t528t-plstx from t528t
              where plans = p0001-plans and
                    otype = c_type and
                    sprsl = sy-langu.
      if sy-subrc = 0.
        pers_tab-ptext = t528t-plstx.
      endif.
    Get the Nationality
      clear t005t-natio.
      select single natio into t005t-natio from t005t
              where spras = sy-langu and
                    land1 = p0002-natio.
      if sy-subrc = 0.
        pers_tab-ntext = t005t-natio.
      endif.
    Get the Location (Personal Area) Text
      clear t500p-name1.
      select single name1 into t500p-name1 from t500p
              where persa = p0001-werks.
      if sy-subrc = 0.
        pers_tab-name1 = t500p-name1.
      endif.
      append pers_tab.
      clear pers_tab.
      sort pers_tab by pernr.
    endform.          "get_pers_data
    *&      Form  get_pay_data
    Get the Payroll Data from Infotype 0008
    form get_pay_data.
    Get the Payroll data from Respective Infotypes
      rp_provide_from_last p0008 space pnpbegda pnpendda.
      pay_tab-pernr    = pernr-pernr.
      call function 'RP_FILL_WAGE_TYPE_TABLE_EXT'
        exporting
         appli                              = 'E'
         begda                              = p0008-begda
         endda                              = p0008-endda
         infty                              = '0008'
         objps                              = '  '
         tclas                              = 'A'
         pernr                              = pernr-pernr
         seqnr                              = '   '
         subty                              = '0   '
         dlspl                              = 'X'
         msgflg                             = ''
         nordct                             = ''
        tables
          pp0001                             = p0001
          pp0007                             = p0007
          pp0008                             = p0008
          ppbwla                             = wage_tab
      PP0230                             =
      PP0014                             =
      PP0015                             =
      PP0052                             =
    EXCEPTIONS
      ERROR_AT_INDIRECT_EVALUATION       = 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.
      loop at wage_tab.
        pay_tab-waers = wage_tab-waers.
        case wage_tab-lgart.
          when c_lga01.
            pay_tab-basic = wage_tab-betrg.
          when c_lga02.
            pay_tab-sup_allow = wage_tab-betrg.
          when c_lga03.
            pay_tab-hra_allow = wage_tab-betrg.
          when c_lga04.
            pay_tab-chl_allow = wage_tab-betrg.
          when c_lga05.
            pay_tab-soc_allow = wage_tab-betrg.
          when c_lga06.
            pay_tab-fix_allow = wage_tab-betrg.
          when c_lga07.
            pay_tab-ra_allow = wage_tab-betrg.
          when c_lga08.
            pay_tab-per_allow = wage_tab-betrg.
          when c_lga09.
            pay_tab-pen_allow = wage_tab-betrg.
          when others.
            pay_tab-oth_allow = pay_tab-oth_allow + wage_tab-betrg.
        endcase.
        pay_tab-tot_allow = pay_tab-basic + pay_tab-sup_allow +
                            pay_tab-hra_allow + pay_tab-chl_allow +
                            pay_tab-soc_allow + pay_tab-fix_allow +
                            pay_tab-ra_allow + pay_tab-per_allow +
                            pay_tab-oth_allow - pay_tab-pen_allow.
      endloop.
      append pay_tab.
      clear  pay_tab.
    endform.          "get_pay_data
    *&      Form  get_edn_data
    Get the Education Data from Infotype 0022
    form get_edn_data.
    Get the Education data from Respective Infotypes
      loop at p0022 where pernr = pernr-pernr.
        edn_tab-pernr    = pernr-pernr.
        edn_tab-ausbi    = p0022-ausbi.
        edn_tab-slart    = p0022-slart.
        edn_tab-insti    = p0022-insti.
        edn_tab-sland    = p0022-sland.
        edn_tab-slabs    = p0022-slabs.
        edn_tab-anzkl    = p0022-anzkl.
        edn_tab-anzeh    = p0022-anzeh.
    Get the Discipline Text
        clear t518b-atext.
        select single atext into t518b-atext from t518b
                where langu = sy-langu and
                      ausbi = p0022-ausbi.
        if sy-subrc = 0.
          edn_tab-atext = t518b-atext.
        endif.
    Get the Edn Establishment Text
        clear t517t-stext.
        select single stext into t517t-stext from t517t
                where slart = p0022-slart and
                      sprsl = sy-langu.
        if sy-subrc = 0.
          edn_tab-stext = t517t-stext.
        endif.
    Get the Certificate Text
        clear t519t-stext.
        select single stext into t519t-stext from t519t
                where slabs = p0022-slabs and
                      sprsl = sy-langu.
        if sy-subrc = 0.
          edn_tab-ctext = t519t-stext.
        endif.
    Get the Unit Text
        clear t538t-etext.
        select single etext into t538t-etext from t538t
                where zeinh = p0022-anzeh and
                      sprsl = sy-langu.
        if sy-subrc = 0.
          edn_tab-etext = t538t-etext.
        endif.
    Get the Country Description
        clear t005t-landx.
        select single landx into t005t-landx from t005t
                where spras = sy-langu and
                      land1 = p0022-sland.
        if sy-subrc = 0.
          edn_tab-landx = t005t-landx.
        endif.
        append edn_tab.
        clear edn_tab.
      endloop.
    endform.              "edn_data
    *&      Form  get_pemp_data
    Get the Previous Employment Data from Infotype 0023
    form get_pemp_data.
    Get the Previous Employment data from Respective Infotypes
      loop at p0023 where pernr = pernr-pernr.
        pemp_tab-pernr    = pernr-pernr.
        pemp_tab-arbgb    = p0023-arbgb.
        pemp_tab-begda    = p0023-begda.
        pemp_tab-endda    = p0023-endda.
        pemp_tab-taete    = p0023-taete.
        pemp_tab-land1    = p0023-land1.
    Get the Last Job Text
        clear t513c-ltext.
        select single ltext into t513c-ltext from t513c
                where taete = pemp_tab-taete and
                      spras = sy-langu.
        if sy-subrc = 0.
          pemp_tab-stltx = t513c-ltext.
        endif.
    Get the Country Description
        clear t005t-landx.
        select single landx into t005t-landx from t005t
                where spras = sy-langu and
                      land1 = pemp_tab-land1.
        if sy-subrc = 0.
          pemp_tab-landx = t005t-landx.
        endif.
        append pemp_tab.
        clear pemp_tab.
      endloop.
      sort pemp_tab by pernr.
    endform.              "pemp_data
    *&      Form  get_job_data
    Get the Job History Data from Infotype
    form get_job_data.
    Get the Job History data from Respective Infotypes
      loop at p0001 where pernr = pernr-pernr.
        job_tab-pernr    = pernr-pernr.
        job_tab-begda    = p0001-begda.
        job_tab-plans    = p0001-plans.
        job_tab-stell    = p0001-stell.
    Get the Last Job Text
        clear t513s-stltx.
        select single stltx into t513s-stltx from t513s
                where stell = job_tab-stell and
                      sprsl = sy-langu.
        if sy-subrc = 0.
          job_tab-stltx = t513s-stltx.
        endif.
    Get the Position Text
        clear t528t-plstx.
        select single plstx into t528t-plstx from t528t
                where plans = job_tab-plans and
                      otype = c_type and
                      sprsl = sy-langu.
        if sy-subrc = 0.
          job_tab-ptext = t528t-plstx.
        endif.
        append job_tab.
        clear  job_tab.
      endloop.
      sort job_tab by pernr.
    endform.          "get_job_data
    *&      Form  get_app_data
    Get the Performance Appraisal Data from Infotype
    form get_app_data.
      clear: v_cyear, v_year1, v_year2, v_year3, v_year4,
             v_year5, v_year6, v_ayear, v_date2, v_date3.
      v_cyear = sy-datum+0(4) - 1.
      v_year1 = v_cyear - 1.
      v_year2 = v_cyear - 2.
      v_year3 = v_cyear - 3.
      v_year4 = v_cyear - 4.
      v_year5 = v_cyear - 5.
      v_year6 = v_cyear - 6.
      concatenate v_cyear c_date2+4(4) into v_date2.
      concatenate v_year6 c_date1+4(4) into v_date3.
      clear: app_in_tab, app_out_tab.
      refresh: app_in_tab, app_out_tab.
      app_in_tab-plvar = c_01.
      app_in_tab-otype = c_p.
      app_in_tab-sobid = pernr-pernr.
      append app_in_tab.
    Get Appraisals data from Respective Infotypes
      call function 'RHPA_APPRAISEES_APP_READ'
       exporting
         begda               =   v_date3
         endda               =   v_date2
      WITH_STEXT          = 'X'
      WITH_ADD_INFO       = 'X'
        tables
          appraisees          = app_in_tab
          appraisals          = app_out_tab
       exceptions
         no_authority        = 1
         undefined           = 2
         others              = 3
      if sy-subrc <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      endif.
      sort app_out_tab  by sobid vbegd vendd appraisal_adate descending .
      delete adjacent duplicates from app_out_tab
                comparing  sobid vbegd vendd.
      loop at app_out_tab where appraisal_histo = 'X' .
        condense app_out_tab-appraisal_result.
        app1_tab-year = app_out_tab-vendd+0(4).
        app1_tab-appr = app_out_tab-appraisal_result_text.
        append app1_tab.
        clear app1_tab.
      endloop.
      sort app1_tab by year descending.
      loop at app1_tab.
        app_tab-pernr    = pernr-pernr.
        move-corresponding  app1_tab to app_tab.
        append app_tab.
        clear: app1_tab, app_tab.
      endloop.
      refresh app1_tab.
      sort app_tab by pernr.
      delete app_tab where year = ' ' and appr = ' ' .
    endform.          "get_app_data
    *&      Form  top_of_page
    Write the Report and Column Headings
    form top_of_page.
      skip.
      format color col_heading on.
      if r_all eq c_x.
        write: /1(193) 'NATIONAL DRILLING COMPANY'(009) centered,
               /1(193) 'Employee Details Report'(066) centered.
      elseif r_per eq c_x.
        write: /1(193) 'NATIONAL DRILLING COMPANY'(009) centered,
               /1(193) 'Employee Details - Personal Data'(010)
                                                centered.
      elseif r_pay eq c_x.
        write: /1(172) 'NATIONAL DRILLING COMPANY'(009) centered,
               /1(172) 'Employee Details - Payroll Data'(027)
                                                centered.
      elseif r_edn eq c_x.
        write: /1(172) 'NATIONAL DRILLING COMPANY'(009) centered,
               /1(172) 'Employee Details - Education Data'(028)
                                                centered.
      elseif r_pemp eq c_x.
        write: /1(97) 'NATIONAL DRILLING COMPANY'(009) centered,
              /1(97) 'Employee Details - Previous Employment Data'(029)
                                                centered.
      elseif r_job eq c_x.
        write: /1(75) 'NATIONAL DRILLING COMPANY'(009) centered,
              /1(75) 'Employee Details - Job History Data'(030)
                                                centered.
      elseif r_app eq c_x.
        write: /1(192) 'NATIONAL DRILLING COMPANY'(009) centered,
              /1(192) 'Employee Details - Performance Appraisal Data'(031)
                                                centered.
      endif.
      format color off.
      if pnptimr1 = c_x.      " Current Date
        write: /2 'Period From     :'(008), sy-datum,
                         'To:'(019), sy-datum.
      elseif pnptimr2 = c_x.  " Current Month
        write: /2 'Period From     :'(008), v_date, 'To:'(019), v_date1.
      elseif pnptimr3 = c_x.  " Current Year
        write: /2 'Period From     :'(008), v_date, 'To:'(019), v_date1.
      elseif pnptimr4 = c_x.  " Upto Today
        write: /2 'Period From     :'(008), c_date1, 'To:'(019), sy-datum.
      elseif pnptimr5 = c_x.  " From Today
        write: /2 'Period From     :'(008), sy-datum, 'To:'(019), c_date2.
      else.
        if ( pnpbegda is initial and pnpendda is initial ).
          write: /2 'Period From     :'(008), c_date1, 'To:'(019), c_date2.
        elseif pnpbegda is initial and not pnpendda is initial.
          write: /2 'Period From     :'(008), c_date1, 'To:'(019), pnpendda.
        elseif not ( pnpbegda is initial and pnpendda is initial ).
          write: /2 'Period From     :'(008), pnpbegda,
                   'To:'(019), pnpendda.
        endif.
      endif.
      if not ( r_pemp eq c_x or r_job eq c_x ).
        write: 140 'Report Run Date:'(073), sy-datum.
        if not pnpkostl[] is initial.
          if pnpkostl-high is initial.
            write: /2 'Cost Center     :'(074), pnpkostl-low,
                  125 'Time           :'(075), sy-uzeit.
          else.
            write: /2 'Cost Center From:'(076), pnpkostl-low+7(3),
                                      'To:'(019), pnpkostl-high,
                  140 'Time           :'(075), sy-uzeit.
          endif.
        else.
          write: /140  'Time           :'(075), sy-uzeit.
        endif.
        if not pnppernr[] is initial.
          if pnppernr-high is initial.
            write: /2 'Personal Number :'(077), pnppernr-low,
                   140 'User           :'(078), sy-uname.
          else.
            write: /2 'Personal No.From:'(079),  pnppernr-low,
                                      'To:'(019), pnppernr-high,
                   140 'User           :'(078), sy-uname.
          endif.
        else.
          write: /140 'User           :'(078), sy-uname.
        endif.
        write: /140 'Page No        :'(080), sy-pagno.
      else.
        write: 48 'Report Run Date:'(073), sy-datum.
        if not pnpkostl[] is initial.
          if pnpkostl-high is initial.
            write: /2 'Cost Center     :'(074), pnpkostl-low,
                  48 'Time           :'(075), sy-uzeit.
          else.
            write: /2 'Cost Center From:'(076), pnpkostl-low+7(3),
                                      'To:'(019), pnpkostl-high,
                  48 'Time           :'(075), sy-uzeit.
          endif.
        else.
          write: /48  'Time           :'(075), sy-uzeit.
        endif.
        if not pnppernr[] is initial.
          if pnppernr-high is initial.
            write: /2 'Personal Number :'(077), pnppernr-low,
                   48 'User           :'(078), sy-uname.
          else.
            write: /2 'Personal No.From:'(079),  pnppernr-low,
                                      'To:'(019), pnppernr-high,
                   48 'User           :'(078), sy-uname.
          endif.
        else.
          write: /48 'User           :'(078), sy-uname.
        endif.
        write: /48 'Page No        :'(080), sy-pagno.
      endif.
      skip.
      if r_per eq c_x.
        write /1(193) sy-uline.
        format color col_heading on.
        write:/1 sy-vline,  2(10) 'Employee #'(011),
              12 sy-vline, 13(40) 'Name'(012) centered,
              53 sy-vline, 54(8)  'Grade'(013) centered,
              62 sy-vline, 63(15) 'Nationality'(017) centered,
              78 sy-vline, 79(10) 'Eng.Date'(014) centered,
              89 sy-vline, 90(10) 'Birth Date'(016) centered,
             100 sy-vline,101(25) 'Location'(026) centered,
             126 sy-vline,127(25) 'Position'(015) centered,
             152 sy-vline,153(40) 'Division'(018) centered,
             193 sy-vline.
        format color off.
        write /1(193) sy-uline.
      elseif r_pay eq c_x.
        write /1(188) sy-uline.
        format color col_heading on.
        write:/1 sy-vline,  2(10) 'Employee #'(011),
              12 sy-vline, 13(15) 'Basic'(033) centered,
              28 sy-vline, 29(15) 'Housing Allow.'(034) centered,
              44 sy-vline, 45(15) 'Sup.Allow.'(035) centered,
              60 sy-vline, 61(15) 'Social Allow.'(036) centered,
              76 sy-vline, 77(15) 'Child Allow.'(037) centered,
              92 sy-vline, 93(15) 'Fixed Overtime'(038) centered,
             108 sy-vline,109(15) 'R.A.Allow.'(041) centered,
             124 sy-vline,125(15) 'Perform.Allow.'(039) centered,
             140 sy-vline,141(15) 'Pension.Allow.'(059) centered,
             156 sy-vline,157(15) 'Others'(040) centered,
             172 sy-vline,173(15) 'Total'(042) centered,
             188 sy-vline.
        format color off.
        write /1(188) sy-uline.
      elseif r_edn eq c_x.
        write /1(172) sy-uline.
        format color col_heading on.
        write:/1 sy-vline,  2(10) 'Employee #'(011),
              12 sy-vline, 13(25) 'Discipline'(043) centered,
              38 sy-vline, 39(20) 'Edu.Establishment'(044) centered,
              59 sy-vline, 60(45) 'Institute'(045) centered,
             105 sy-vline,106(15) 'Country'(046) centered,
             121 sy-vline,122(30) 'Certificate'(047) centered,
             152 sy-vline,153(19) 'Duration of Course'(048) centered,
             172 sy-vline.
        format color off.
        write /1(172) sy-uline.
      elseif r_pemp eq c_x.
        write /1(97) sy-uline.
        format color col_heading on.
        write:/1 sy-vline, 12 sy-vline,
              33 sy-vline, 34(21) 'Employment Period'(055) centered,
              55 sy-vline, 81 sy-vline,
              97 sy-vline.
        write:/1 sy-vline,  2(10) 'Employee #'(011),
              12 sy-vline, 13(20) 'Employer'(049) centered,
              33 sy-vline, 34(10) 'From'(050) centered,
              44 sy-vline, 45(10) 'To'(051) centered,
              55 sy-vline, 56(25) 'Last Position'(052) centered,
              81 sy-vline, 82(15) 'Country'(053) centered,
              97 sy-vline.
        format color off.
        write /1(97) sy-uline.
      elseif r_job eq c_x.
        write /1(75) sy-uline.
        format color col_heading on.
        write:/1 sy-vline,
              12 sy-vline,13(10) 'Date of'(054) centered,
              23 sy-vline,49 sy-vline,
              75 sy-vline.
        write:/1 sy-vline,2(10)  'Employee #'(011),
              12 sy-vline,13(10) 'Upgrading/'(058) centered,
              23 sy-vline,24(25) 'Position'(015) centered,
              49 sy-vline,50(25) 'Job'(056) centered,
              75 sy-vline.
        write:/1 sy-vline, 12 sy-vline,
              13(10) 'Promotion'(057) centered,
              23 sy-vline, 49 sy-vline,
              75 sy-vline.
        format color off.
        write /1(75) sy-uline.
      elseif r_app eq c_x.
        format color col_heading on.
         write: /1 sy-vline,2(56) sy-uline, 58 sy-vline,
                /1 sy-vline, 2(56) text-025 centered color 3, 58 sy-vline.
         write /1(58) sy-uline.
         format color col_heading on.
         write:/1 sy-vline,  2(10) 'Employee #'(011),
               12 sy-vline, 13(4)  'Year'(067),
               17 sy-vline, 18(40) 'Appraisal Text'(068) centered,
               58 sy-vline.
        format color off.
        write /1(58) sy-uline.
      endif.
    endform.               "top_of_page
    *&      Form  end_of_page
    Write the Page footers
    form end_of_page.
      if r_per eq c_x.
        write : /(193) sy-uline.
      elseif r_pay eq c_x.
        write : /(188) sy-uline.
      elseif r_edn eq c_x.
        write : /(172) sy-uline.
      elseif r_pemp eq c_x.
        write /1(97) sy-uline.
      elseif r_job eq c_x.
        write /1(75) sy-uline.
      elseif r_app eq c_x.
        write /1(217) sy-uline.
      endif.
    endform.               "end_of_page
    *&      Form  Display_report
    Write the Report Output
    form display_report.
      if r_all eq c_x.
        if pers_tab[] is initial.
          message i999 with
           'No Personal Data found'(061).
        else.
          write: /1 sy-vline,2(51) sy-uline, 53 sy-vline,
                 /1 sy-vline, 2(50) text-020 centered color 3, 53 sy-vline.
          write /1(193) sy-uline.
          format color col_heading on.
          write:/1 sy-vline,  2(10) 'Employee #'(011),
                12 sy-vline, 13(40) 'Name'(012) centered,
                53 sy-vline, 54(8)  'Grade'(013) centered,
                62 sy-vline, 63(15) 'Nationality'(017) centered,
                78 sy-vline, 79(10) 'Eng.Date'(014) centered,
                89 sy-vline, 90(10) 'Birth Date'(016) centered,
               100 sy-vline,101(25) 'Location'(026) centered,
               126 sy-vline,127(25) 'Position'(015) centered,
               152 sy-vline,153(40) 'Division'(018) centered,
               193 sy-vline.
          format color off.
          write /1(193) sy-uline.
          sort pers_tab by pernr.
          loop at pers_tab.
            format color col_normal.
            write:/1 sy-vline,  2(10) pers_tab-pernr,
                  12 sy-vline, 13(40) pers_tab-ename,
                  53 sy-vline, 56(6)  pers_tab-trfgr,
                  62 sy-vline, 63(15) pers_tab-ntext,
                  78 sy-vline, 79(10) pers_tab-hdate,
                  89 sy-vline, 90(10) pers_tab-gbdat,
                 100 sy-vline,101(25) pers_tab-name1,
                 126 sy-vline,127(25) pers_tab-ptext,
                 152 sy-vline,153(40) pers_tab-ctext,
                 193 sy-vline.
          endloop.
          write /1(193) sy-uline.
        endif.
        skip 3.
        if pay_tab[] is initial.
          message i999 with
           'No Standard Pay Data found'(062).
        else.
          write: /1 sy-vline,2(42) sy-uline, 44 sy-vline,
                 /1 sy-vline, 2(42) text-021 centered color 3, 44 sy-vline.
          format color col_heading on.
          write /1(188) sy-uline.
          write:/1 sy-vline,  2(10) 'Employee #'(011),
                12 sy-vline, 13(15) 'Basic'(033) centered,
                28 sy-vline, 29(15) 'Housing Allow.'(034) centered,
                44 sy-vline, 45(15) 'Sup.Allow.'(035) centered,
                60 sy-vline, 61(15) 'Social Allow.'(036) centered,
                76 sy-vline, 77(15) 'Child Allow.'(037) centered,
                92 sy-vline, 93(15) 'Fixed Overtime'(038) centered,
               108 sy-vline,109(15) 'R.A.Allow.'(041) centered,
               124 sy-vline,125(15) 'Perform.Allow.'(039) centered,
               140 sy-vline,141(15) 'Pension.Allow.'(059) centered,
               156 sy-vline,157(15) 'Others'(040) centered,
               172 sy-vline,173(15) 'Total'(042) centered,
               188 sy-vline.
          format color off.
          write /1(188) sy-uline.
          sort pay_tab by pernr.
          loop at pay_tab.
            format color col_normal.
            write:/1 sy-vline,  2(10) pay_tab-pernr,
                  12 sy-vline,
                  13(15) pay_tab-basic currency pay_tab-waers no-zero,
                  28 sy-vline,
                  29(15) pay_tab-hra_allow currency pay_tab-waers no-zero,
                  44 sy-vline,
                  45(15) pay_tab-sup_allow currency pay_tab-waers no-zero,
                  60 sy-vline,
                  61(15) pay_tab-soc_allow currency pay_tab-waers no-zero,
                  76 sy-vline,
                  77(15) pay_tab-chl_allow currency pay_tab-waers no-zero,
                  92 sy-vline,
                  93(15) pay_tab-fix_allow currency pay_tab-waers no-zero,
                 108 sy-vline,
                 109(15) pay_tab-ra_allow currency pay_tab-waers no-zero,
                 124 sy-vline,
                 125(15) pay_tab-per_allow currency pay_tab-waers no-zero,
                 140 sy-vline.
            pay_tab-pen_allow = pay_tab-pen_allow * -1.
            write: 141(15) pay_tab-pen_allow currency pay_tab-waers no-zero,
                   156 sy-vline,
                   157(15) pay_tab-oth_allow currency pay_tab-waers no-zero,
                   172 sy-vline,
                   173(15) pay_tab-tot_allow currency pay_tab-waers no-zero,
                   188 sy-vline.
          endloop.
          write /1(188) sy-uline.
        endif.
        skip 3.
        if edn_tab

  • A FUNCTION MODULE FOR THE HR MODULE FOR PAYROLL OF EMPLOYEES

    hi,
    i want some a function module or code where i need to get the payroll details like the basic pay ,hra,special allowance,medical allowance,other allowance of an employee on the monthly basis.
    the data that i have on ot os not on the basis of months it contains datd of more than one month.like the baisc pay of an employee is given on a radom day basis of more than one month.
    but i need to bifercatethe data on monthly basis.
    waiting for the reply.
    thanks and regards

    Hi,
    Use the fun module
    RP_FILL_WAGE_TYPE_TABLE_EXT
    which willget PA0008 results.
    but to get the real payroll results you have to import data from clusters by writing the program. Data will be fetch from RT and CRT internal tables based on the Wage Types
    see the sample code:
    report zporgr0100
           line-size 252
           line-count 60(1)
           no standard page heading
           message-id zndc.
    Database Tables & Infotypes
    tables: pcl1,        " HR Cluster1
            pcl2,        " HR Cluster1
            pa0003,      " Master data - Payroll Status
            cskt,        " Cost Center Texts
            t528t,       " Positions Texts
            t513s,       " Job Titles
            pernr,       " Logical PNP
            t001p,       " Personnel Subarea
            t500p,       " Personnel Area
            t501,        " Employee Group
            t503k,       " Employee Subgroup
            csks.        " Cost Center
    infotypes:0000,0001.
    *include rpclst00.
    include rpc2rx00.
    include rpc2rxx0.
    include rpc2cd00.
    *include rpc2ps00.
    *include rpc2pt00.
    *include rpcfvp00.
    *include rpcfdc10.
    *include rpcfdc00.
    include rpppxd00.
    include rpppxd10.
    Declaration of Internal Tables
    Internal Table for Output Data
    data: begin of rep_tab occurs 0,
            kostl like pa0001-kostl,      " Cost Center
            pernr like pa0001-pernr,      " Personal Number
            ename like pa0001-ename,      " Employee Name
            ctext like cskt-ltext,        " Cost Center Text
            ptext like t528t-plstx,       " Position Text
            ot1   type p decimals 2,      " Jan OT Amount
            ot2   type p decimals 2,      " Feb OT Amount
            ot3   type p decimals 2,      " Mar OT Amount
            ot4   type p decimals 2,      " Apr OT Amount
            ot5   type p decimals 2,      " May OT Amount
            ot6   type p decimals 2,      " Jun OT Amount
            ot7   type p decimals 2,      " Jul OT Amount
            ot8   type p decimals 2,      " Aug OT Amount
            ot9   type p decimals 2,      " Sep OT Amount
            ot10  type p decimals 2,      " Oct OT Amount
            ot11  type p decimals 2,      " Nov OT Amount
            ot12  type p decimals 2,      " Dec OT Amount
            ott   type p decimals 2,      " Total OT Amount
          end of rep_tab.
    Declaration of Variables
    data: v_mon(2) type n,                   " Month
          v_no     type i,                   " Data Lines
          v_year(4)  type c,                 " Year
          v_date   like sy-datum,            " Date
          v_date1  like sy-datum,            " Date
          v_seqnr  like  pc261-seqnr.        " Sequence No.
    Declaration of Constants
    data: c_type   like hrp1001-otype  value 'S',  " Object Type
          c_kokrs  like cskt-kokrs value '1000',   " Controlling Area
          c_date1  like sy-datum value '18000101', " Date
          c_date2  like sy-datum value '99991231', " Date
          c_x       type c value 'X',              " Sign
         c_mon(2)  type c value '01',             " Month
          c_val1(2) type c value '31',             " Date
          c_val2(2) type c value '12',             " Month Type
          c_val    like p0041-dar01 value '01',    " Date Type
          c_lgart1 like p0008-lga01 value '0722',  " Wage Type
          c_lgart2 like p0008-lga01 value '0723',  " Wage Type
          c_1(2)   type n value '01',                           " Month1
          c_2(2)   type n value '02',                           " Month2
          c_3(2)   type n value '03',                           " Month3
          c_4(2)   type n value '04',                           " Month4
          c_5(2)   type n value '05',                           " Month5
          c_6(2)   type n value '06',                           " Month6
          c_7(2)   type n value '07',                           " Month7
          c_8(2)   type n value '08',                           " Month8
          c_9(2)   type n value '09',                           " Month9
          c_10(2)  type n value '10',                           " Month10
          c_11(2)  type n value '11',                           " Month11
          c_12(2)  type n value '12'.                           " Month12
    Selection-screen
    parameters:
      p_year like pc2b0-pabrj obligatory.       " Payroll Year
    At selection-screen
    at selection-screen.
    Validate the Selection Screen fields
      perform validate_screen.
    Start-of-Selection
    start-of-selection.
    Selection of Period
      perform get_period.
    Get PERNR from LDB
    get pernr.
    Get the Master data from infotype 0001
      perform get_master_data.
    Top-of-page
    top-of-page.
    Write the Report and Column Headings
      perform top_of_page.
    End-of-Page
    end-of-page.
      write /1(252) sy-uline.
    End-of-Selection
    end-of-selection.
    Display the Output Report.
      perform display_report.
    Form-Routines
    *&      Form  validate_screen
    Validation of selection Screen fields
    form validate_screen.
    Validation of Cost Center
      clear csks.
      if not pnpkostl[] is initial.
        select single kostl
          into csks-kostl
          from csks
          where kostl in pnpkostl.
        if sy-subrc <> 0.
          message e999 with 'Invalid Cost Center'(003).
        endif.
      endif.
    Validation of Personnel Number
      clear pa0003.
      if not pnppernr[] is initial.
        select pernr
        from pa0003 up to 1 rows
          into pa0003-pernr
          where pernr in pnppernr.
        endselect.
        if sy-subrc <> 0.
          message e999 with 'Incorrect Personal Number Entered'(002).
        endif.
      endif.
    Validation of Personnel Area
      clear t500p.
      if not pnpwerks[] is initial.
        select persa
        from t500p up to 1 rows
          into t500p-persa
          where persa in pnpwerks.
        endselect.
        if sy-subrc <> 0.
          message e999 with 'Incorrect Personnel Area Entered'(001).
        endif.
      endif.
    Validation of Personnel Sub Area
      clear t001p.
      if not pnpbtrtl[] is initial.
        select btrtl
        from t001p up to 1 rows
          into t001p-btrtl
          where btrtl in pnpbtrtl.
        endselect.
        if sy-subrc <> 0.
          message e999 with 'Incorrect Personnel Sub Area Entered'(037).
        endif.
      endif.
    Validation of Employee Group
      clear t501.
      if not pnppersg[] is initial.
        select persg
        from t501 up to 1 rows
          into t501-persg
          where persg in pnppersg.
        endselect.
        if sy-subrc <> 0.
          message e999 with 'Incorrect Employee Group Entered'(038).
        endif.
      endif.
    Validation of Employee Sub Group
      clear t503k.
      if not pnppersk[] is initial.
        select persk
        from t503k up to 1 rows
          into t503k-persk
          where persk in pnppersk.
        endselect.
        if sy-subrc <> 0.
          message e999 with 'Incorrect Employee Sub Group Entered'(039).
        endif.
      endif.
    endform.                  "validate_screen
    *&      Form  get_period
    Get the Correct Period based on Selection screen selection
    form get_period.
      clear: v_year,v_mon, v_date, v_date1.
      v_year = sy-datum+0(4).
      v_mon  = sy-datum+4(2).
      if pnptimr1 = c_x.      " Current Date
        pnpbegda = sy-datum.
        pnpendda = sy-datum.
      elseif pnptimr2 = c_x.  " Current Month
        concatenate v_year v_mon c_val into v_date.
        concatenate v_year v_mon c_val1 into v_date1.
        pnpbegda = v_date.
        pnpendda = v_date1.
      elseif pnptimr3 = c_x.  " Current Year
        concatenate v_year c_val c_val into v_date.
        concatenate v_year c_val2 c_val1 into v_date1.
        pnpbegda = v_date.
        pnpendda = v_date1.
      elseif pnptimr4 = c_x.  " Upto Today
        pnpbegda = c_date1.
        pnpendda = sy-datum.
      elseif pnptimr5 = c_x.  " From Today
        pnpbegda = sy-datum.
        pnpendda = c_date2.
      else.
        if ( pnpbegda is initial and pnpendda is initial ).
          pnpbegda = c_date1.
          pnpendda = c_date2.
        elseif pnpbegda is initial and not pnpendda is initial.
          pnpbegda = c_date1.
          pnpendda = pnpendda.
        elseif not ( pnpbegda is initial and pnpendda is initial ).
          pnpbegda = pnpbegda.
          pnpendda = pnpendda.
        endif.
      endif.
    endform.              "get_period
    *&      Form  get_master_data
    Get the Master Data from Database Tables PA0001,0002,0003
    form get_master_data.
    Get data from Respective Infotypes
      rp_provide_from_last p0001 space pnpbegda pnpendda.
      if p0001-kostl in pnpkostl.
        rep_tab-kostl = p0001-kostl.
        rep_tab-pernr = p0001-pernr.
        rep_tab-ename = p0001-ename.
    Get the Position Text
        clear t528t-plstx.
        select single plstx into t528t-plstx from t528t
                where plans = p0001-plans and
                      otype = c_type and
                      sprsl = sy-langu.
        if sy-subrc = 0.
          rep_tab-ptext = t528t-plstx.
        endif.
    Get the Cost Center Text
        clear cskt-ltext.
        select single ltext into cskt-ltext from cskt
                where spras = sy-langu and
                      kokrs = c_kokrs and
                      kostl = p0001-kostl.
        if sy-subrc = 0.
          rep_tab-ctext = cskt-ltext.
        endif.
    Get the Overtime Payment Data
        perform get_ot_data.
        rep_tab-ott = rep_tab-ot1 + rep_tab-ot2 + rep_tab-ot3 +
                      rep_tab-ot4 + rep_tab-ot5 + rep_tab-ot6 +
                      rep_tab-ot7 + rep_tab-ot8 + rep_tab-ot9 +
                      rep_tab-ot10 + rep_tab-ot11 + rep_tab-ot12.
        append rep_tab.
        clear  rep_tab.
      endif.
      sort rep_tab by kostl pernr.
      delete rep_tab where kostl = ' '.
      delete rep_tab where ott = 0.
    endform.                 "get_master_data
    *&      Form  get_ot_data
    Get the Overtime Payment Data
    form get_ot_data.
      cd-key = pernr-pernr.
      rp-imp-c2-cd.
      sort rgdir by seqnr.
    To get sequence number for the payroll period
      loop at rgdir where void     is initial
                        and reversal is initial
                        and outofseq is initial
                        and srtza    eq 'A'.
        if rgdir-fpper+0(4) = p_year.
    To consider offcycle run data
          if not rgdir-ocrsn is initial.
            v_seqnr = rgdir-seqnr.
            exit.
          endif.
          v_seqnr = rgdir-seqnr.
        endif.
        if not v_seqnr is initial.
          perform import_rx.
        endif.
        perform process_wagetypes.
      endloop.
    endform.                 "get_ot_data
    include rpppxm00.
    *&      Form  Import_rx
    Import the RX data from Clusters
    form import_rx.
      rx-key-pernr = cd-key-pernr.
      rx-key-seqno = v_seqnr.
      rp-init-buffer.
      rp-imp-c2-rx.
    endform.                    " Import_rx
    *&      Form  Process_wagetypes
    Calculate the Overtime Amount based on Wage types
    form process_wagetypes.
      loop at rt.
        if  rt-lgart = c_lgart1 or rt-lgart = c_lgart2.
          if rgdir-fpper+0(4) = p_year.
            v_mon = rgdir-fpper+4(2).
            case v_mon .
              when c_1.
                rep_tab-ot1 = rep_tab-ot1 + rt-betrg.
              when c_2.
                rep_tab-ot2 = rep_tab-ot2 + rt-betrg.
              when c_3.
                rep_tab-ot3 = rep_tab-ot3 + rt-betrg.
              when c_4.
                rep_tab-ot4 = rep_tab-ot4 + rt-betrg.
              when c_5.
                rep_tab-ot5 = rep_tab-ot5 + rt-betrg.
              when c_6.
                rep_tab-ot6 = rep_tab-ot6 + rt-betrg.
              when c_7.
                rep_tab-ot7 = rep_tab-ot7 + rt-betrg.
              when c_8.
                rep_tab-ot8 = rep_tab-ot8 + rt-betrg.
              when c_9.
                rep_tab-ot9 = rep_tab-ot9 + rt-betrg.
              when c_10.
                rep_tab-ot10 = rep_tab-ot10 + rt-betrg.
              when c_11.
                rep_tab-ot11 = rep_tab-ot11 + rt-betrg.
              when c_12.
                rep_tab-ot12 = rep_tab-ot12 + rt-betrg.
            endcase.
          endif.
        endif.
      endloop.
    endform.          "process_wagetypes
    *&      Form  top_of_page
    Write the Report and Column Headings
    form top_of_page.
      format color col_heading on.
      write: /1(252) 'NATIONAL DRILLING COMPANY'(010) centered,
             /1(252) 'Overtime Payments Details'(011) centered.
      format color off.
      if pnptimr1 = c_x.      " Current Date
        write: /2 'Period From     :'(036), sy-datum, 'To:'(006), sy-datum.
      elseif pnptimr2 = c_x.  " Current Month
        write: /2 'Period From     :'(036), v_date, 'To:'(006), v_date1.
      elseif pnptimr3 = c_x.  " Current Year
        write: /2 'Period From     :'(036), v_date, 'To:'(006), v_date1.
      elseif pnptimr4 = c_x.  " Upto Today
        write: /2 'Period From     :'(036), c_date1, 'To:'(006), sy-datum.
      elseif pnptimr5 = c_x.  " From Today
        write: /2 'Period From     :'(036), sy-datum, 'To:'(006), c_date2.
      else.
        if ( pnpbegda is initial and pnpendda is initial ).
          write: /2 'Period From     :'(036), c_date1, 'To:'(006), c_date2.
        elseif pnpbegda is initial and not pnpendda is initial.
          write: /2 'Period From     :'(036), c_date1, 'To:'(006), pnpendda.
        elseif not ( pnpbegda is initial and pnpendda is initial ).
          write: /2 'Period From     :'(036), pnpbegda,
                   'To:'(006), pnpendda.
        endif.
      endif.
      write: 219 'Report Run Date:'(018), sy-datum.
      if not pnpkostl[] is initial.
        if pnpkostl-high is initial.
          write: /2 'Cost Center     :'(004), pnpkostl-low,
                219 'Time           :'(020), sy-uzeit.
        else.
          write: /2 'Cost Center From:'(005), pnpkostl-low+7(3),
                                    'To:'(006), pnpkostl-high,
                219 'Time           :'(020), sy-uzeit.
        endif.
      else.
        write: /219  'Time           :'(020), sy-uzeit.
      endif.
      if not pnppernr[] is initial.
        if pnppernr-high is initial.
          write: /2 'Personal Number :'(007), pnppernr-low,
                 219 'User           :'(021), sy-uname.
        else.
          write: /2 'Personal No.From:'(008),  pnppernr-low,
                                    'To:'(006), pnppernr-high,
                 219 'User           :'(021), sy-uname.
        endif.
      else.
        write: /219 'User           :'(021), sy-uname.
      endif.
      write: /219 'Page No        :'(022), sy-pagno.
      format color col_heading.
      write /1(252) sy-uline.
      write:/1 sy-vline, 10 sy-vline,
            41 sy-vline,
            67 sy-vline, 68(167) 'Overtime Payments(Dirhams)'(013) centered,
           235 sy-vline,252 sy-vline.
      format color col_heading.
      write:/1 sy-vline,  2(8)  'Emp #'(019) centered,
            10 sy-vline, 11(30) 'Employee Name'(012) centered,
            41 sy-vline, 42(25) 'Position'(014) centered,
            67 sy-vline, 68(167)  sy-uline,
           235 sy-vline,236(16)  'Total'(017) centered,
           252 sy-vline.
      write:/1 sy-vline, 10 sy-vline,
            41 sy-vline,
            67 sy-vline, 68(13)  'JANUARY'(024) centered,
            81 sy-vline, 82(13)  'FEBRUARY'(025) centered,
            95 sy-vline, 96(13)  'MARCH'(026) centered,
           109 sy-vline,110(13)  'APRIL'(027) centered,
           123 sy-vline,124(13)  'MAY'(028) centered,
           137 sy-vline,138(13)  'JUNE'(029) centered,
           151 sy-vline,152(13)  'JULY'(030) centered,
           165 sy-vline,166(13)  'AUGUST'(031) centered,
           179 sy-vline,180(13)  'SEPTEMBER'(032) centered,
           193 sy-vline,194(13)  'OCTOBER'(033) centered,
           207 sy-vline,208(13)  'NOVEMBER'(034) centered,
           221 sy-vline,222(13)  'DECEMBER'(035) centered,
           235 sy-vline,252 sy-vline.
      format color off.
      write /1(252) sy-uline.
    endform.            "top_of_page
    *&      Form  Display_report
    Write the Report Output
    form display_report.
      clear v_no.
      describe table rep_tab lines v_no.
      if v_no = 0.
        message i999 with
         'No Data found for the entered Selection'(015).
      endif.
      loop at rep_tab.
        format color 3.
        at new kostl.
          read table rep_tab index sy-tabix.
          write:/1 sy-vline, 2(12) 'Cost Center:'(009),
                 14(10) rep_tab-kostl,
                 25(30) rep_tab-ctext,
                252 sy-vline.
          format color off.
          write /1(252) sy-uline.
        endat.
        format color col_normal.
        write: /1 sy-vline, 2(8)   rep_tab-pernr,
              10 sy-vline, 11(30)  rep_tab-ename,
              41 sy-vline, 42(25)  rep_tab-ptext,
              67 sy-vline, 68(13)  rep_tab-ot1 no-zero,
              81 sy-vline, 82(13)  rep_tab-ot2 no-zero,
              95 sy-vline, 96(13)  rep_tab-ot3 no-zero,
             109 sy-vline,110(13)  rep_tab-ot4 no-zero,
             123 sy-vline,124(13)  rep_tab-ot5 no-zero,
             137 sy-vline,138(13)  rep_tab-ot6 no-zero,
             151 sy-vline,152(13)  rep_tab-ot7 no-zero,
             165 sy-vline,166(13)  rep_tab-ot8 no-zero,
             179 sy-vline,180(13)  rep_tab-ot9 no-zero,
             193 sy-vline,194(13)  rep_tab-ot10 no-zero,
             207 sy-vline,208(13)  rep_tab-ot11 no-zero,
             221 sy-vline,222(13)  rep_tab-ot12 no-zero,
             235 sy-vline,236(16)  rep_tab-ott no-zero,
             252 sy-vline.
        at end of kostl.
          write /1(252) sy-uline.
        endat.
        format color off.
        at last.
          sum.
          format color 1.
          write: /1 sy-vline,
                10 sy-vline, 11(30) 'Total'(017) centered,
                41 sy-vline,
                67 sy-vline, 68(13)  rep_tab-ot1 no-zero,
                81 sy-vline, 82(13)  rep_tab-ot2 no-zero,
                95 sy-vline, 96(13)  rep_tab-ot3 no-zero,
               109 sy-vline,110(13)  rep_tab-ot4 no-zero,
               123 sy-vline,124(13)  rep_tab-ot5 no-zero,
               137 sy-vline,138(13)  rep_tab-ot6 no-zero,
               151 sy-vline,152(13)  rep_tab-ot7 no-zero,
               165 sy-vline,166(13)  rep_tab-ot8 no-zero,
               179 sy-vline,180(13)  rep_tab-ot9 no-zero,
               193 sy-vline,194(13)  rep_tab-ot10 no-zero,
               207 sy-vline,208(13)  rep_tab-ot11 no-zero,
               221 sy-vline,222(13)  rep_tab-ot12 no-zero,
               235 sy-vline,236(16)  rep_tab-ott no-zero,
               252 sy-vline.
          write /1(252) sy-uline.
        endat.
        format color off.
      endloop.
    endform.          "display_report
    reward points if useful
    regards,
    Anji

  • Calculation of working hours

    Hi all,
    I need a function module for the calculation of working hours. supose in the selection screen if i give 01.02.2007 to 01.10.2007 i need the calculation of working hours in that given range depending upon the personal number. Suppose if the employee is absent for 3 or 4 days within particular period of theat given range that days needs to be eliminated and should calculate for the rest of the days. Please find the below code iam finding a problem in this piece of code. Please this issue is very urgent please reply ASAP.
      gv_day = sy-datum - 7.
      CALL FUNCTION 'HRWPC_BL_DATES_WEEK_INTERVAL'
        EXPORTING
          datum    = gv_day
          week_pst = 0
          week_ftr = 0
        IMPORTING
          begda    = gv_begda
          endda    = gv_endda.
      IF sy-subrc <> 0.
      ENDIF.
    *AT SELECTION-SCREEN OUTPUT.
      pnpbegda = gv_begda.
      pnpendda = gv_endda.
    START-OF-SELECTION.
      SELECT sachn
             usrid
        FROM t526 INTO TABLE git_tmadmin
       WHERE sachn NE space
         AND usrid NE space.
      IF sy-subrc EQ 0.
        SORT git_tmadmin BY usrid.
      ENDIF.
    GET pernr.
      rp-provide-from-last p0001 space pn-begda pn-endda.
      IF pnp-sw-found <> 1.
        REJECT.
      ELSE.
        IF p0001-kostl NOT IN s_cctr.
          REJECT.
        ELSE.
          rp-provide-from-last p0007 space pn-begda  pn-endda.
          IF pnp-sw-found = 1.
            MOVE p0007-wostd TO gs_empdtls-wostd.
          ENDIF.
          MOVE :  p0001-pernr TO gs_empdtls-pernr,
                  p0001-kostl TO gs_empdtls-kostl,
                  p0001-ename TO gs_empdtls-ename,
                  p0001-sachz TO gs_empdtls-sachz.
        Employee Position from PA0001
          MOVE: p0001-plans TO gs_empdtls-plans.
          APPEND gs_empdtls TO git_empdtls.
          CLEAR gs_empdtls.
        ENDIF.
      ENDIF.
    Regards
    Mahesh

    What error are you getting?

  • Extraction from sap r/3 tables to flatfile

    hello Guru's
    i am new to this feild. we have a requirement that we need to extract data from hr feilds of different hr tables in sap to flat file. we have a flatfile structure. we don't have some of feilds in sap R/3 compared to flatfile. we need to fill those feilds also with logic.
    plz show me rigth direction with example code so that i can slove the problem.
    thanks
    rad

    Hi, 
    Check this sample program.
    REPORT  zdownempdata                                         .
    INFOTYPES: 0000, 0001, 0007, 0008, 0121, 0615.
    NODES: pernr.
    TABLES: t001p.
    TYPES: BEGIN OF t_employee,
           INCLUDE STRUCTURE hrms_biw_io_occupancy.
      begda     TYPE begda,
      endda     TYPE endda,
      pernr     TYPE pernr_d,
      rfpnr     TYPE rfpnr,
      bukrs     TYPE bukrs,
      werks     TYPE persa,
      btrtl     TYPE btrtl,
      persg     TYPE persg,
      persk     TYPE persk,
      orgeh     TYPE orgeh,
      stell     TYPE stell,
      plans     TYPE plans,
      kokrs     TYPE mast_coar,
      kostl     TYPE mast_cctr,
      abkrs     TYPE abkrs,
      molga     TYPE molga,
      trfar     TYPE trfar,
      trfgb     TYPE trfgb,
      trfkz     TYPE trfkz,
      trfgr     TYPE trfgr,
      trfst     TYPE trfst,
      bsgrd     TYPE bsgrd,
      ansal     TYPE ansal_15,
      ancur     TYPE ancur,
      empct     TYPE empct,
      stat2     TYPE stat2,
      ncsdate     TYPE hiredate,
      sltyp     TYPE p_sltyp,
      slreg     TYPE p_slreg,
      slgrp     TYPE p_slgrp,
      sllev     TYPE p_sllvl,
      ansvh     TYPE ansvh,
      vdsk1     TYPE vdsk1,
      sname     TYPE smnam,
    END OF t_employee.
    DATA: it_employee TYPE STANDARD TABLE OF t_employee INITIAL SIZE 0,
          wa_employee TYPE t_employee.
    TYPES: BEGIN OF t_emptexts,
           INCLUDE STRUCTURE hrms_bw_txt_employee.
      DATEFROM     TYPE RSDATEFROM,
      DATETO     TYPE RSDATETO,
      PERNR     TYPE PERSNO,
      TXTMD     TYPE EMNAM,
    END OF t_emptexts.
    DATA: it_emptexts TYPE STANDARD TABLE OF t_emptexts INITIAL SIZE 0,
          wa_emptexts TYPE t_emptexts.
    TYPES: BEGIN OF t_contract,
           INCLUDE STRUCTURE pa0615.
      pernr TYPE p0615-pernr,
      begda TYPE p0615-begda,
      endda TYPE p0615-endda,
      aedtm TYPE p0615-aedtm,
      ctype TYPE p0615-ctype,
      cbeg  TYPE p0615-cbeg,
      cend  TYPE p0615-cend,
    END OF t_contract.
    DATA: it_contract TYPE STANDARD TABLE OF t_contract INITIAL SIZE 0,
          wa_contract TYPE t_contract.
    DATA: it_tabemp TYPE filetable,
          gd_subrcemp TYPE i,
          it_tabempt TYPE filetable,
          gd_subrcempt TYPE i,
          it_tabcont TYPE filetable,
          gd_subrccont TYPE i.
    DATA: gd_downfile TYPE string.
    SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME TITLE text-001.
    PARAMETERS: p_emp   LIKE rlgrap-filename,
                p_empt  LIKE rlgrap-filename,
                p_cont LIKE rlgrap-filename.
    SELECTION-SCREEN END OF BLOCK block1.
    *at selection-screen
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_emp.
      REFRESH: it_tabemp.
      CALL METHOD cl_gui_frontend_services=>file_open_dialog
        EXPORTING
          window_title      = 'Select File'
          default_filename  = '*.xls'
          initial_directory = 'C:\'
          multiselection    = ' '  "No multiple selection
        CHANGING
          file_table        = it_tabemp
          rc                = gd_subrcemp.
      LOOP AT it_tabemp INTO p_emp.
      ENDLOOP.
    *at selection-screen
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_empt.
      REFRESH: it_tabemp.
      CALL METHOD cl_gui_frontend_services=>file_open_dialog
        EXPORTING
          window_title      = 'Select File'
          default_filename  = '*.xls'
          initial_directory = 'C:\'
          multiselection    = ' '  "No multiple selection
        CHANGING
          file_table        = it_tabempt
          rc                = gd_subrcempt.
      LOOP AT it_tabempt INTO p_empt.
      ENDLOOP.
    *at selection-screen
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_cont.
      REFRESH: it_tabcont.
      CALL METHOD cl_gui_frontend_services=>file_open_dialog
        EXPORTING
          window_title      = 'Select File'
          default_filename  = '*.xls'
          initial_directory = 'C:\'
          multiselection    = ' '  "No multiple selection
        CHANGING
          file_table        = it_tabcont
          rc                = gd_subrccont.
      LOOP AT it_tabcont INTO p_cont.
      ENDLOOP.
    *START-OF-SELECTION.
    START-OF-SELECTION.
    GET pernr.
    Selecting the latest infotype record
      rp_provide_from_last p0000 space pn-begda pn-endda.
      rp_provide_from_last p0001 space pn-begda pn-endda.
      rp_provide_from_last p0007 space pn-begda pn-endda.
      rp_provide_from_last p0008 space pn-begda pn-endda.
      rp_provide_from_last p0121 space pn-begda pn-endda.
      rp_provide_from_last p0615 space pn-begda pn-endda.
      MOVE-CORRESPONDING p0001 TO wa_employee.
      wa_employee-rfpnr = p0121-rfp01. "?????
      MOVE-CORRESPONDING p0007 TO wa_employee.
      MOVE-CORRESPONDING p0008 TO wa_employee.
      MOVE-CORRESPONDING p0000 TO wa_employee.
      SELECT SINGLE molga
        FROM t001p
        INTO wa_employee-molga
       WHERE werks EQ p0001-werks AND
             btrtl EQ p0001-btrtl.
      SELECT SINGLE trfkz
        FROM t503
        INTO wa_employee-trfkz
       WHERE persg EQ p0001-persg AND
             persk EQ p0001-persk.
      CALL FUNCTION 'HR_ENTRY_DATE'
        EXPORTING
          persnr                     = pernr-pernr
      RCLAS                      =
      BEGDA                      = '18000101'
      ENDDA                      = '99991231'
      VARKY                      =
       IMPORTING
          entrydate                  = wa_employee-ncsdate
    TABLES
      ENTRY_DATES                =
    EXCEPTIONS
       ENTRY_DATE_NOT_FOUND       = 1
       PERNR_NOT_ASSIGNED         = 2
       OTHERS                     = 3
      IF sy-subrc <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
    append employee data
      APPEND wa_employee TO it_employee.
      CLEAR: wa_employee.
      wa_emptexts-datefrom = p0001-begda.
      wa_emptexts-dateto   = p0001-endda.
      wa_emptexts-pernr    = p0001-pernr.
      wa_emptexts-txtmd    = p0001-ename.
    append employee texts data
      APPEND wa_emptexts TO it_emptexts.
      CLEAR: wa_emptexts.
      MOVE-CORRESPONDING p0615 TO wa_contract.
    append employee contract data
      APPEND wa_contract TO it_contract.
      CLEAR: wa_contract.
    *END-OF-SELECTION.
    END-OF-SELECTION.
    download employee data
      IF NOT p_emp IS INITIAL.
        gd_downfile = p_emp.
        CALL FUNCTION 'GUI_DOWNLOAD'
          EXPORTING
            filename              = gd_downfile
            filetype              = 'ASC'
            write_field_separator = 'X'
          TABLES
            data_tab              = it_employee.
        IF sy-subrc EQ 0.
          WRITE:/ 'Employee file downloaded to',
                  gd_downfile.
        ELSE.
          WRITE:/ 'There was an error downloading Employee file to',
                  gd_downfile.
        ENDIF.
      ENDIF.
    download employee texts data
      IF NOT p_empt IS INITIAL.
        gd_downfile = p_empt.
        CALL FUNCTION 'GUI_DOWNLOAD'
          EXPORTING
            filename              = gd_downfile
            filetype              = 'ASC'
            write_field_separator = 'X'
          TABLES
            data_tab              = it_emptexts.
        IF sy-subrc EQ 0.
          WRITE:/ 'Employee text file downloaded to',
                  gd_downfile.
        ELSE.
          WRITE:/ 'There was an error downloading Employee text file to',
                  gd_downfile.
        ENDIF.
      ENDIF.
    download contract data
      IF NOT p_cont IS INITIAL.
        gd_downfile = p_cont.
        CALL FUNCTION 'GUI_DOWNLOAD'
          EXPORTING
            filename              = gd_downfile
            filetype              = 'ASC'
            write_field_separator = 'X'
          TABLES
            data_tab              = it_contract.
        IF sy-subrc EQ 0.
          WRITE:/ 'Employee contract file downloaded to',
                  gd_downfile.
        ELSE.
          WRITE:/ 'There was an error downloading Employee contract file to',
                  gd_downfile.
        ENDIF.
      ENDIF.
    - Selvapandian Arunachalam

  • Regarding OM report

    hi techies.. im working on OM report. my requirement is to provide a list report showing the relationships between task and other organizational units.
    and The report selection criteria will include following:
    •Task or Position (which perspective should the report be based on)
    •Task or Position selection
    •Search Term (if searching by name is necessary)
    •Period selection criteria
    plz help me in doing this report. thank u in advance.

    REPORT demo_abap_objects.
    TABLES: objec, gdstr.
    INFOTYPES: 0002, 0006, 1003.
    DATA: stabs LIKE p1003-stabs,
    name LIKE p0001-ename.
    INITIALIZATION.
    pchotype = 'O'.
    pchwegid = 'O-S-P'.
    GET objec.
    IF objec-otype = 'S'.
    CLEAR stabs.
    LOOP AT p1003 WHERE begda LE pc-endda
    AND endda GE pc-begda.
    IF p1003-stabs = 'X'.
    stabs = 'X'.
    WRITE : / objec-objid, objec-short, objec-stext.
    ENDIF.
    ENDLOOP.
    ENDIF.

  • Hr programming - logical database - macro

    Hi everyone !
    I use pnp logical database.
    Now how the program familiar the macro RP-PROVIDE-FROM-FIRST
    from table trmac ? ?
    i know that macro can be familiar from the program between lines:
    define .......
    end-of-definition.
    someone can explain to me ?

    Hi
    See this sample program for using the LDB PNP and the MAcros
    report zporgr0030
           line-size 193
           line-count 60(1)
           no standard page heading
           message-id zndc.
    Database Tables
    tables:    pernr,    " Logical PNP
               t001p,    " Personnel Subarea
               t005t,    " Country Descriptions
               t500p,    " Personnel Area
               t501,     " Employee Group
               t503k,    " Employee Subgroup
               csks,     " Cost Centers
               cskt,     " Cost Center Texts
               t513c,    " Job (Previous) Texts
               t513s,    " Job Titles
               t517t,    " Edn Est.Text
               t518b,    " Discipline Text
               t519t,    " Certificate Text
               t528t,    " Positions Texts
               t538t,    " Unit Text
               pa0003.   " Payroll Status
    infotypes:
               0000,   " Actions
               0001,   " Organizational Assignment
               0002,   " Personal Data
               0007,   " Planned working time
               0008,   " Payroll Data
               0022,   " Education Data
               0023,   " Previous Employer data
               0025,   " Performance Appraisal Data
               0041,   " Date Spcifications
               2001.   " Absences
    Declaration of Internal Tables
    Internal Table for Personal Data
    data: begin of pers_tab occurs 0,
            pernr like pa0001-pernr,      " Personal Number
            ename like pa0001-ename,      " Employee Name
            trfgr like pa0008-trfgr,      " Grade
            natio like pa0002-natio,      " Nationality
            hdate like pa0041-dat01,      " Hire Date
            gbdat like pa0002-gbdat,      " Birth Date
            plans like pa0001-plans,      " Position
            werks like pa0001-werks,      " Pers.Area
            kostl like pa0001-kostl,      " Cost Center
            ctext(40),                    " Cost Center Text
            ptext(25),                    " Position Text
            ntext(15),                    " Nation Text
            name1(23),                    " Location
          end of pers_tab.
    Internal Table for Payroll Data
    data: begin of pay_tab occurs 0,
            pernr like pa0008-pernr,      " Personal Number
            waers like pbwla-waers,       " Grade
            basic like pa0008-bet01,      " Basic Pay
            hra_allow like pa0008-bet01,  " Housing Allowance
            sup_allow like pa0008-bet01,  " Supp. Allowance
            soc_allow like pa0008-bet01,  " Social Allowance
            chl_allow like pa0008-bet01,  " Child Allowance
            fix_allow like pa0008-bet01,  " Fixed Overtime
            ra_allow  like pa0008-bet01,  " RA Allowance
            per_allow like pa0008-bet01,  " Perform. Allowance
            pen_allow like pa0008-bet01,  " Pension Allowance
            oth_allow like pa0008-bet01,  " Other Allowances
            tot_allow like pa0008-bet01,  " Total Allowances
          end of pay_tab.
    Internal Table for Educational Data
    data: begin of edn_tab occurs 0,
            pernr like pa0022-pernr,      " Personal Number
            ausbi like pa0022-ausbi,      " Discipline Name
            slart like pa0022-slart,      " Edn Establishment
            insti like pa0022-insti,      " Institute
            sland like pa0022-sland,      " Country
            slabs like pa0022-slabs,      " Certificate
            anzkl like pa0022-anzkl,      " Duration
            anzeh like pa0022-anzeh,      " Unit for Duration
            atext like t518b-atext,       " Discipline Text
            stext like t517t-stext,       " Edn Est.Text
            landx like t005t-landx,       " Country Text
            ctext like t519t-stext,       " Certificate Text
            etext like t538t-etext,       " Unit Text
          end of edn_tab.
    Internal Table for Previous Employment Data
    data: begin of pemp_tab occurs 0,
            pernr like pa0023-pernr,      " Personal Number
            arbgb like pa0023-arbgb,      " Previous Employer
            begda like pa0023-begda,      " Start Date
            endda like pa0023-endda,      " End Date
            taete like pa0023-taete,      " Last Position
            land1 like pa0023-land1,      " Country
            stltx like t513s-stltx,       " Position Text
            landx like t005t-landx,       " Country Text
          end of pemp_tab.
    Internal Table for Job History Data
    data: begin of job_tab occurs 0,
            pernr like pa0001-pernr,      " Personal Number
            begda like pa0001-begda,      " Promotion Date
            plans like pa0001-plans,      " Position
            stell like pa0001-stell,      " Job Key
            stltx like t513s-stltx,       " Job Text
            ptext like t528t-plstx,       " Position Text
          end of job_tab.
    Internal Table for Performance Appraisal Data
    data: begin of app_tab occurs 0,
            pernr like pa0001-pernr,       " Personal Number
            year(4) type     c,            " Current Year
            appr(35) type    c,            " C Y Appraisal
           year1(4) type    c,            " Last Year
           appr1(35) type   c,            " Last Year Appraisal
           year2(4) type    c,
           appr2(35) type   c,
           year3(4) type    c,
           appr3(35) type   c,
           year4(4) type    c,
           appr4(35) type   c,
          end of app_tab.
    Internal Table for Performance Appraisal Data
    data: begin of app1_tab occurs 0,
            year(4) type     c,            " Year
            appr(35) type    c,            " Appraisal
          end of app1_tab.
    Internal Table to get the Payroll Amounts
    data  wage_tab like pbwla occurs 0 with header line.
    Internal table for retreiving Employee Appraisals
    data  app_in_tab  like hrsobid occurs 0 with header line .
    data  app_out_tab like hrpe_profa  occurs 0 with header line .
    Declaration of Variables
    data : v_year(4)  type c,
           v_ayear(4) type c,
           v_cyear(4) type c,
           v_year1(4) type c,
           v_year2(4) type c,
           v_year3(4) type c,
           v_year4(4) type c,
           v_year5(4) type c,
           v_year6(4) type c,
           v_mon(2)   type c,
           v_date2  like sy-datum,
           v_date3  like sy-datum,
           v_date   like sy-datum,
           v_date1  like sy-datum.
    Declaration of Constants
    constants : c_x       type c value 'X',              " Sign
                c_pernr(8) type n value '00000000',      " Pernr
                c_p   like hrp1007-otype  value 'P',     " Object Type
                c_01  like hrp1001-plvar  value '01',    " Version
                c_val1(2) type c value '31',             " Date Type
                c_val2(2) type c value '12',             " Date Type
                c_val    like p0041-dar01 value '01',    " Date Type
                c_1      like pernr-persg value '1',     " Emp Group
                c_type   like hrp1001-otype  value 'S',  " Object Type
                c_date1  like sy-datum value '18000101', " Date
                c_date2  like sy-datum value '99991231', " Date
                c_lga01 like pa0008-lga01 value '0101',  " Wage Type
                c_lga02 like pa0008-lga01 value '0102',  " Wage Type
                c_lga03 like pa0008-lga01 value '0103',  " Wage Type
                c_lga04 like pa0008-lga01 value '0105',  " Wage Type
                c_lga05 like pa0008-lga01 value '0109',  " Wage Type
                c_lga06 like pa0008-lga01 value '0110',  " Wage Type
                c_lga07 like pa0008-lga01 value '0114',  " Wage Type
                c_lga08 like pa0008-lga01 value '0116',  " Wage Type
                c_lga09 like pa0008-lga01 value '0267',  " Wage Type
                c_kokrs  like cskt-kokrs value '1000'.   " Controlling Area
    Selection Screen
    selection-screen begin of block b1 with frame title text-003.
    selection-screen begin of line.
    selection-screen comment 1(33)   text-060.
    parameters: r_all radiobutton group rb1.
    selection-screen end of line.
    selection-screen begin of line.
    selection-screen comment 1(33)   text-020.
    parameters: r_per radiobutton group rb1.
    selection-screen end of line.
    selection-screen begin of line.
    selection-screen comment 1(33)   text-021.
    parameters: r_pay radiobutton group rb1.
    selection-screen end of line.
    selection-screen begin of line.
    selection-screen comment 1(33)   text-022.
    parameters: r_edn radiobutton group rb1.
    selection-screen end of line.
    selection-screen begin of line.
    selection-screen comment 1(33)   text-023.
    parameters: r_pemp radiobutton group rb1.
    selection-screen end of line.
    selection-screen begin of line.
    selection-screen comment 1(33)   text-024.
    parameters: r_job radiobutton group rb1.
    selection-screen end of line.
    selection-screen begin of line.
    selection-screen comment 1(33)   text-025.
    parameters: r_app radiobutton group rb1.
    selection-screen end of line.
    selection-screen end of block b1.
    At selection-screen
    at selection-screen.
    Validate the Selection Screen fields
      perform validate_screen.
    Start-of-Selection
    start-of-selection.
    Selection of Period
      perform get_period.
    Get PERNR from LDB
    get pernr.
      if pernr-persg eq c_1 or pernr-pernr ne c_pernr.
        if r_all eq c_x.
    Get the Personal data from PA0001,PA0002, PA0008, PA0041
          perform get_pers_data.
    Get the Payroll data from PA0008
          perform get_pay_data.
    Get the Education data from PA0022
          perform get_edn_data.
    Get the Previous Employment data from PA0023
          perform get_pemp_data.
    Get the Job History data
          perform get_job_data.
    Get the Performance Appraisal data
          perform get_app_data.
        elseif r_per eq c_x.
    Get the Personal data from PA0001,PA0002, PA0008, PA0041
          perform get_pers_data.
        elseif r_pay eq c_x.
    Get the Payroll data from PA0008
          perform get_pay_data.
        elseif r_edn eq c_x.
    Get the Education data from PA0022
          perform get_edn_data.
        elseif r_pemp eq c_x.
    Get the Previous Employment data from PA0023
          perform get_pemp_data.
        elseif r_job eq c_x.
    Get the Job History data
          perform get_job_data.
        elseif r_app eq c_x.
    Get the Performance Appraisal data
          perform get_app_data.
        endif.
      endif.
    Top-of-page
    top-of-page.
    Write the Report and Column Headings
      perform top_of_page.
    End-of-Page
    end-of-page.
      perform end_of_page.
    End-of-Selection
    end-of-selection.
    Display the Output Report.
      perform display_report.
    Form-Routines
    *&      Form  validate_screen
    Validation of selection Screen fields
    form validate_screen.
    Validation of Personnel Number
      clear pa0003.
      if not pnppernr[] is initial.
        select pernr
        from pa0003 up to 1 rows
          into pa0003-pernr
          where pernr in pnppernr.
        endselect.
        if sy-subrc <> 0.
          message e999 with 'Incorrect Personnel Number Entered'(001).
        endif.
      endif.
    Validation of Cost Center
      clear csks.
      if not pnpkostl[] is initial.
        select single kostl
          into csks-kostl
          from csks
          where kostl in pnpkostl.
        if sy-subrc <> 0.
          message e999 with 'Invalid Cost Center'(002).
        endif.
      endif.
    Validation of Personnel Area
      clear t500p.
      if not pnpwerks[] is initial.
        select persa
        from t500p up to 1 rows
          into t500p-persa
          where persa in pnpwerks.
        endselect.
        if sy-subrc <> 0.
          message e999 with 'Incorrect Personnel Area Entered'(004).
        endif.
      endif.
    Validation of Personnel Sub Area
      clear t001p.
      if not pnpbtrtl[] is initial.
        select btrtl
        from t001p up to 1 rows
          into t001p-btrtl
          where btrtl in pnpbtrtl.
        endselect.
        if sy-subrc <> 0.
          message e999 with 'Incorrect Personnel Sub Area Entered'(005).
        endif.
      endif.
    Validation of Employee Group
      clear t501.
      if not pnppersg[] is initial.
        select persg
        from t501 up to 1 rows
          into t501-persg
          where persg in pnppersg.
        endselect.
        if sy-subrc <> 0.
          message e999 with 'Incorrect Employee Group Entered'(006).
        endif.
      endif.
    Validation of Employee Sub Group
      clear t503k.
      if not pnppersk[] is initial.
        select persk
        from t503k up to 1 rows
          into t503k-persk
          where persk in pnppersk.
        endselect.
        if sy-subrc <> 0.
          message e999 with 'Incorrect Employee Sub Group Entered'(007).
        endif.
      endif.
    endform.                  "validate_screen
    *&      Form  get_period
    Get the Correct Period based on Selection screen selection
    form get_period.
      clear: v_year,v_mon, v_date, v_date1.
      v_year = sy-datum+0(4).
      v_mon  = sy-datum+4(2).
      if pnptimr1 = c_x.      " Current Date
        pnpbegda = sy-datum.
        pnpendda = sy-datum.
      elseif pnptimr2 = c_x.  " Current Month
        concatenate v_year v_mon c_val into v_date.
        concatenate v_year v_mon c_val1 into v_date1.
        pnpbegda = v_date.
        pnpendda = v_date1.
      elseif pnptimr3 = c_x.  " Current Year
        concatenate v_year c_val c_val into v_date.
        concatenate v_year c_val2 c_val1 into v_date1.
        pnpbegda = v_date.
        pnpendda = v_date1.
      elseif pnptimr4 = c_x.  " Upto Today
        pnpbegda = c_date1.
        pnpendda = sy-datum.
      elseif pnptimr5 = c_x.  " From Today
        pnpbegda = sy-datum.
        pnpendda = c_date2.
      else.
        if ( pnpbegda is initial and pnpendda is initial ).
          pnpbegda = c_date1.
          pnpendda = c_date2.
        elseif pnpbegda is initial and not pnpendda is initial.
          pnpbegda = c_date1.
          pnpendda = pnpendda.
        elseif not ( pnpbegda is initial and pnpendda is initial ).
          pnpbegda = pnpbegda.
          pnpendda = pnpendda.
        endif.
      endif.
    endform.              "get_period
    *&      Form  get_pers_data
    Get the Personal Data from PA0001,PA0002,PA0008, PA0041
    form get_pers_data.
    Get data from Respective Infotypes
      rp_provide_from_last p0001 space pnpbegda pnpendda.
      rp_provide_from_last p0002 space pnpbegda pnpendda.
      rp_provide_from_last p0008 space pnpbegda pnpendda.
      rp_provide_from_last p0041 space pnpbegda pnpendda.
      pers_tab-pernr    = p0001-pernr.
      pers_tab-ename    = p0001-ename.
      pers_tab-werks    = p0001-werks.
      pers_tab-plans    = p0001-plans.
      pers_tab-kostl    = p0001-kostl.
      pers_tab-gbdat    = p0002-gbdat.
      pers_tab-trfgr    = p0008-trfgr.
    Get the Engaged Date
      read table p0041 with key dar01 = c_val.
      if sy-subrc = 0.
        pers_tab-hdate = p0041-dat01.
      endif.
    Get the Cost Center Text
      clear cskt-ltext.
      select single ltext into cskt-ltext from cskt
              where spras = sy-langu and
                    kokrs = c_kokrs and
                    kostl = p0001-kostl.
      if sy-subrc = 0.
        pers_tab-ctext = cskt-ltext.
      endif.
    Get the Position Text
      clear t528t-plstx.
      select single plstx into t528t-plstx from t528t
              where plans = p0001-plans and
                    otype = c_type and
                    sprsl = sy-langu.
      if sy-subrc = 0.
        pers_tab-ptext = t528t-plstx.
      endif.
    Get the Nationality
      clear t005t-natio.
      select single natio into t005t-natio from t005t
              where spras = sy-langu and
                    land1 = p0002-natio.
      if sy-subrc = 0.
        pers_tab-ntext = t005t-natio.
      endif.
    Get the Location (Personal Area) Text
      clear t500p-name1.
      select single name1 into t500p-name1 from t500p
              where persa = p0001-werks.
      if sy-subrc = 0.
        pers_tab-name1 = t500p-name1.
      endif.
      append pers_tab.
      clear pers_tab.
      sort pers_tab by pernr.
    endform.          "get_pers_data
    *&      Form  get_pay_data
    Get the Payroll Data from Infotype 0008
    form get_pay_data.
    Get the Payroll data from Respective Infotypes
      rp_provide_from_last p0008 space pnpbegda pnpendda.
      pay_tab-pernr    = pernr-pernr.
      call function 'RP_FILL_WAGE_TYPE_TABLE_EXT'
        exporting
         appli                              = 'E'
         begda                              = p0008-begda
         endda                              = p0008-endda
         infty                              = '0008'
         objps                              = '  '
         tclas                              = 'A'
         pernr                              = pernr-pernr
         seqnr                              = '   '
         subty                              = '0   '
         dlspl                              = 'X'
         msgflg                             = ''
         nordct                             = ''
        tables
          pp0001                             = p0001
          pp0007                             = p0007
          pp0008                             = p0008
          ppbwla                             = wage_tab
      PP0230                             =
      PP0014                             =
      PP0015                             =
      PP0052                             =
    EXCEPTIONS
      ERROR_AT_INDIRECT_EVALUATION       = 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.
      loop at wage_tab.
        pay_tab-waers = wage_tab-waers.
        case wage_tab-lgart.
          when c_lga01.
            pay_tab-basic = wage_tab-betrg.
          when c_lga02.
            pay_tab-sup_allow = wage_tab-betrg.
          when c_lga03.
            pay_tab-hra_allow = wage_tab-betrg.
          when c_lga04.
            pay_tab-chl_allow = wage_tab-betrg.
          when c_lga05.
            pay_tab-soc_allow = wage_tab-betrg.
          when c_lga06.
            pay_tab-fix_allow = wage_tab-betrg.
          when c_lga07.
            pay_tab-ra_allow = wage_tab-betrg.
          when c_lga08.
            pay_tab-per_allow = wage_tab-betrg.
          when c_lga09.
            pay_tab-pen_allow = wage_tab-betrg.
          when others.
            pay_tab-oth_allow = pay_tab-oth_allow + wage_tab-betrg.
        endcase.
        pay_tab-tot_allow = pay_tab-basic + pay_tab-sup_allow +
                            pay_tab-hra_allow + pay_tab-chl_allow +
                            pay_tab-soc_allow + pay_tab-fix_allow +
                            pay_tab-ra_allow + pay_tab-per_allow +
                            pay_tab-oth_allow - pay_tab-pen_allow.
      endloop.
      append pay_tab.
      clear  pay_tab.
    endform.          "get_pay_data
    *&      Form  get_edn_data
    Get the Education Data from Infotype 0022
    form get_edn_data.
    Get the Education data from Respective Infotypes
      loop at p0022 where pernr = pernr-pernr.
        edn_tab-pernr    = pernr-pernr.
        edn_tab-ausbi    = p0022-ausbi.
        edn_tab-slart    = p0022-slart.
        edn_tab-insti    = p0022-insti.
        edn_tab-sland    = p0022-sland.
        edn_tab-slabs    = p0022-slabs.
        edn_tab-anzkl    = p0022-anzkl.
        edn_tab-anzeh    = p0022-anzeh.
    Get the Discipline Text
        clear t518b-atext.
        select single atext into t518b-atext from t518b
                where langu = sy-langu and
                      ausbi = p0022-ausbi.
        if sy-subrc = 0.
          edn_tab-atext = t518b-atext.
        endif.
    Get the Edn Establishment Text
        clear t517t-stext.
        select single stext into t517t-stext from t517t
                where slart = p0022-slart and
                      sprsl = sy-langu.
        if sy-subrc = 0.
          edn_tab-stext = t517t-stext.
        endif.
    Get the Certificate Text
        clear t519t-stext.
        select single stext into t519t-stext from t519t
                where slabs = p0022-slabs and
                      sprsl = sy-langu.
        if sy-subrc = 0.
          edn_tab-ctext = t519t-stext.
        endif.
    Get the Unit Text
        clear t538t-etext.
        select single etext into t538t-etext from t538t
                where zeinh = p0022-anzeh and
                      sprsl = sy-langu.
        if sy-subrc = 0.
          edn_tab-etext = t538t-etext.
        endif.
    Get the Country Description
        clear t005t-landx.
        select single landx into t005t-landx from t005t
                where spras = sy-langu and
                      land1 = p0022-sland.
        if sy-subrc = 0.
          edn_tab-landx = t005t-landx.
        endif.
        append edn_tab.
        clear edn_tab.
      endloop.
    endform.              "edn_data
    *&      Form  get_pemp_data
    Get the Previous Employment Data from Infotype 0023
    form get_pemp_data.
    Get the Previous Employment data from Respective Infotypes
      loop at p0023 where pernr = pernr-pernr.
        pemp_tab-pernr    = pernr-pernr.
        pemp_tab-arbgb    = p0023-arbgb.
        pemp_tab-begda    = p0023-begda.
        pemp_tab-endda    = p0023-endda.
        pemp_tab-taete    = p0023-taete.
        pemp_tab-land1    = p0023-land1.
    Get the Last Job Text
        clear t513c-ltext.
        select single ltext into t513c-ltext from t513c
                where taete = pemp_tab-taete and
                      spras = sy-langu.
        if sy-subrc = 0.
          pemp_tab-stltx = t513c-ltext.
        endif.
    Get the Country Description
        clear t005t-landx.
        select single landx into t005t-landx from t005t
                where spras = sy-langu and
                      land1 = pemp_tab-land1.
        if sy-subrc = 0.
          pemp_tab-landx = t005t-landx.
        endif.
        append pemp_tab.
        clear pemp_tab.
      endloop.
      sort pemp_tab by pernr.
    endform.              "pemp_data
    *&      Form  get_job_data
    Get the Job History Data from Infotype
    form get_job_data.
    Get the Job History data from Respective Infotypes
      loop at p0001 where pernr = pernr-pernr.
        job_tab-pernr    = pernr-pernr.
        job_tab-begda    = p0001-begda.
        job_tab-plans    = p0001-plans.
        job_tab-stell    = p0001-stell.
    Get the Last Job Text
        clear t513s-stltx.
        select single stltx into t513s-stltx from t513s
                where stell = job_tab-stell and
                      sprsl = sy-langu.
        if sy-subrc = 0.
          job_tab-stltx = t513s-stltx.
        endif.
    Get the Position Text
        clear t528t-plstx.
        select single plstx into t528t-plstx from t528t
                where plans = job_tab-plans and
                      otype = c_type and
                      sprsl = sy-langu.
        if sy-subrc = 0.
          job_tab-ptext = t528t-plstx.
        endif.
        append job_tab.
        clear  job_tab.
      endloop.
      sort job_tab by pernr.
    endform.          "get_job_data
    *&      Form  get_app_data
    Get the Performance Appraisal Data from Infotype
    form get_app_data.
      clear: v_cyear, v_year1, v_year2, v_year3, v_year4,
             v_year5, v_year6, v_ayear, v_date2, v_date3.
      v_cyear = sy-datum+0(4) - 1.
      v_year1 = v_cyear - 1.
      v_year2 = v_cyear - 2.
      v_year3 = v_cyear - 3.
      v_year4 = v_cyear - 4.
      v_year5 = v_cyear - 5.
      v_year6 = v_cyear - 6.
      concatenate v_cyear c_date2+4(4) into v_date2.
      concatenate v_year6 c_date1+4(4) into v_date3.
      clear: app_in_tab, app_out_tab.
      refresh: app_in_tab, app_out_tab.
      app_in_tab-plvar = c_01.
      app_in_tab-otype = c_p.
      app_in_tab-sobid = pernr-pernr.
      append app_in_tab.
    Get Appraisals data from Respective Infotypes
      call function 'RHPA_APPRAISEES_APP_READ'
       exporting
         begda               =   v_date3
         endda               =   v_date2
      WITH_STEXT          = 'X'
      WITH_ADD_INFO       = 'X'
        tables
          appraisees          = app_in_tab
          appraisals          = app_out_tab
       exceptions
         no_authority        = 1
         undefined           = 2
         others              = 3
      if sy-subrc <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      endif.
      sort app_out_tab  by sobid vbegd vendd appraisal_adate descending .
      delete adjacent duplicates from app_out_tab
                comparing  sobid vbegd vendd.
      loop at app_out_tab where appraisal_histo = 'X' .
        condense app_out_tab-appraisal_result.
        app1_tab-year = app_out_tab-vendd+0(4).
        app1_tab-appr = app_out_tab-appraisal_result_text.
        append app1_tab.
        clear app1_tab.
      endloop.
      sort app1_tab by year descending.
      loop at app1_tab.
        app_tab-pernr    = pernr-pernr.
        move-corresponding  app1_tab to app_tab.
        append app_tab.
        clear: app1_tab, app_tab.
      endloop.
      refresh app1_tab.
      sort app_tab by pernr.
      delete app_tab where year = ' ' and appr = ' ' .
    endform.          "get_app_data
    *&      Form  top_of_page
    Write the Report and Column Headings
    form top_of_page.
      skip.
      format color col_heading on.
      if r_all eq c_x.
        write: /1(193) 'NATIONAL DRILLING COMPANY'(009) centered,
               /1(193) 'Employee Details Report'(066) centered.
      elseif r_per eq c_x.
        write: /1(193) 'NATIONAL DRILLING COMPANY'(009) centered,
               /1(193) 'Employee Details - Personal Data'(010)
                                                centered.
      elseif r_pay eq c_x.
        write: /1(172) 'NATIONAL DRILLING COMPANY'(009) centered,
               /1(172) 'Employee Details - Payroll Data'(027)
                                                centered.
      elseif r_edn eq c_x.
        write: /1(172) 'NATIONAL DRILLING COMPANY'(009) centered,
               /1(172) 'Employee Details - Education Data'(028)
                                                centered.
      elseif r_pemp eq c_x.
        write: /1(97) 'NATIONAL DRILLING COMPANY'(009) centered,
              /1(97) 'Employee Details - Previous Employment Data'(029)
                                                centered.
      elseif r_job eq c_x.
        write: /1(75) 'NATIONAL DRILLING COMPANY'(009) centered,
              /1(75) 'Employee Details - Job History Data'(030)
                                                centered.
      elseif r_app eq c_x.
        write: /1(192) 'NATIONAL DRILLING COMPANY'(009) centered,
              /1(192) 'Employee Details - Performance Appraisal Data'(031)
                                                centered.
      endif.
      format color off.
      if pnptimr1 = c_x.      " Current Date
        write: /2 'Period From     :'(008), sy-datum,
                         'To:'(019), sy-datum.
      elseif pnptimr2 = c_x.  " Current Month
        write: /2 'Period From     :'(008), v_date, 'To:'(019), v_date1.
      elseif pnptimr3 = c_x.  " Current Year
        write: /2 'Period From     :'(008), v_date, 'To:'(019), v_date1.
      elseif pnptimr4 = c_x.  " Upto Today
        write: /2 'Period From     :'(008), c_date1, 'To:'(019), sy-datum.
      elseif pnptimr5 = c_x.  " From Today
        write: /2 'Period From     :'(008), sy-datum, 'To:'(019), c_date2.
      else.
        if ( pnpbegda is initial and pnpendda is initial ).
          write: /2 'Period From     :'(008), c_date1, 'To:'(019), c_date2.
        elseif pnpbegda is initial and not pnpendda is initial.
          write: /2 'Period From     :'(008), c_date1, 'To:'(019), pnpendda.
        elseif not ( pnpbegda is initial and pnpendda is initial ).
          write: /2 'Period From     :'(008), pnpbegda,
                   'To:'(019), pnpendda.
        endif.
      endif.
      if not ( r_pemp eq c_x or r_job eq c_x ).
        write: 140 'Report Run Date:'(073), sy-datum.
        if not pnpkostl[] is initial.
          if pnpkostl-high is initial.
            write: /2 'Cost Center     :'(074), pnpkostl-low,
                  125 'Time           :'(075), sy-uzeit.
          else.
            write: /2 'Cost Center From:'(076), pnpkostl-low+7(3),
                                      'To:'(019), pnpkostl-high,
                  140 'Time           :'(075), sy-uzeit.
          endif.
        else.
          write: /140  'Time           :'(075), sy-uzeit.
        endif.
        if not pnppernr[] is initial.
          if pnppernr-high is initial.
            write: /2 'Personal Number :'(077), pnppernr-low,
                   140 'User           :'(078), sy-uname.
          else.
            write: /2 'Personal No.From:'(079),  pnppernr-low,
                                      'To:'(019), pnppernr-high,
                   140 'User           :'(078), sy-uname.
          endif.
        else.
          write: /140 'User           :'(078), sy-uname.
        endif.
        write: /140 'Page No        :'(080), sy-pagno.
      else.
        write: 48 'Report Run Date:'(073), sy-datum.
        if not pnpkostl[] is initial.
          if pnpkostl-high is initial.
            write: /2 'Cost Center     :'(074), pnpkostl-low,
                  48 'Time           :'(075), sy-uzeit.
          else.
            write: /2 'Cost Center From:'(076), pnpkostl-low+7(3),
                                      'To:'(019), pnpkostl-high,
                  48 'Time           :'(075), sy-uzeit.
          endif.
        else.
          write: /48  'Time           :'(075), sy-uzeit.
        endif.
        if not pnppernr[] is initial.
          if pnppernr-high is initial.
            write: /2 'Personal Number :'(077), pnppernr-low,
                   48 'User           :'(078), sy-uname.
          else.
            write: /2 'Personal No.From:'(079),  pnppernr-low,
                                      'To:'(019), pnppernr-high,
                   48 'User           :'(078), sy-uname.
          endif.
        else.
          write: /48 'User           :'(078), sy-uname.
        endif.
        write: /48 'Page No        :'(080), sy-pagno.
      endif.
      skip.
      if r_per eq c_x.
        write /1(193) sy-uline.
        format color col_heading on.
        write:/1 sy-vline,  2(10) 'Employee #'(011),
              12 sy-vline, 13(40) 'Name'(012) centered,
              53 sy-vline, 54(8)  'Grade'(013) centered,
              62 sy-vline, 63(15) 'Nationality'(017) centered,
              78 sy-vline, 79(10) 'Eng.Date'(014) centered,
              89 sy-vline, 90(10) 'Birth Date'(016) centered,
             100 sy-vline,101(25) 'Location'(026) centered,
             126 sy-vline,127(25) 'Position'(015) centered,
             152 sy-vline,153(40) 'Division'(018) centered,
             193 sy-vline.
        format color off.
        write /1(193) sy-uline.
      elseif r_pay eq c_x.
        write /1(188) sy-uline.
        format color col_heading on.
        write:/1 sy-vline,  2(10) 'Employee #'(011),
              12 sy-vline, 13(15) 'Basic'(033) centered,
              28 sy-vline, 29(15) 'Housing Allow.'(034) centered,
              44 sy-vline, 45(15) 'Sup.Allow.'(035) centered,
              60 sy-vline, 61(15) 'Social Allow.'(036) centered,
              76 sy-vline, 77(15) 'Child Allow.'(037) centered,
              92 sy-vline, 93(15) 'Fixed Overtime'(038) centered,
             108 sy-vline,109(15) 'R.A.Allow.'(041) centered,
             124 sy-vline,125(15) 'Perform.Allow.'(039) centered,
             140 sy-vline,141(15) 'Pension.Allow.'(059) centered,
             156 sy-vline,157(15) 'Others'(040) centered,
             172 sy-vline,173(15) 'Total'(042) centered,
             188 sy-vline.
        format color off.
        write /1(188) sy-uline.
      elseif r_edn eq c_x.
        write /1(172) sy-uline.
        format color col_heading on.
        write:/1 sy-vline,  2(10) 'Employee #'(011),
              12 sy-vline, 13(25) 'Discipline'(043) centered,
              38 sy-vline, 39(20) 'Edu.Establishment'(044) centered,
              59 sy-vline, 60(45) 'Institute'(045) centered,
             105 sy-vline,106(15) 'Country'(046) centered,
             121 sy-vline,122(30) 'Certificate'(047) centered,
             152 sy-vline,153(19) 'Duration of Course'(048) centered,
             172 sy-vline.
        format color off.
        write /1(172) sy-uline.
      elseif r_pemp eq c_x.
        write /1(97) sy-uline.
        format color col_heading on.
        write:/1 sy-vline, 12 sy-vline,
              33 sy-vline, 34(21) 'Employment Period'(055) centered,
              55 sy-vline, 81 sy-vline,
              97 sy-vline.
        write:/1 sy-vline,  2(10) 'Employee #'(011),
              12 sy-vline, 13(20) 'Employer'(049) centered,
              33 sy-vline, 34(10) 'From'(050) centered,
              44 sy-vline, 45(10) 'To'(051) centered,
              55 sy-vline, 56(25) 'Last Position'(052) centered,
              81 sy-vline, 82(15) 'Country'(053) centered,
              97 sy-vline.
        format color off.
        write /1(97) sy-uline.
      elseif r_job eq c_x.
        write /1(75) sy-uline.
        format color col_heading on.
        write:/1 sy-vline,
              12 sy-vline,13(10) 'Date of'(054) centered,
              23 sy-vline,49 sy-vline,
              75 sy-vline.
        write:/1 sy-vline,2(10)  'Employee #'(011),
              12 sy-vline,13(10) 'Upgrading/'(058) centered,
              23 sy-vline,24(25) 'Position'(015) centered,
              49 sy-vline,50(25) 'Job'(056) centered,
              75 sy-vline.
        write:/1 sy-vline, 12 sy-vline,
              13(10) 'Promotion'(057) centered,
              23 sy-vline, 49 sy-vline,
              75 sy-vline.
        format color off.
        write /1(75) sy-uline.
      elseif r_app eq c_x.
        format color col_heading on.
         write: /1 sy-vline,2(56) sy-uline, 58 sy-vline,
                /1 sy-vline, 2(56) text-025 centered color 3, 58 sy-vline.
         write /1(58) sy-uline.
         format color col_heading on.
         write:/1 sy-vline,  2(10) 'Employee #'(011),
               12 sy-vline, 13(4)  'Year'(067),
               17 sy-vline, 18(40) 'Appraisal Text'(068) centered,
               58 sy-vline.
        format color off.
        write /1(58) sy-uline.
      endif.
    endform.               "top_of_page
    *&      Form  end_of_page
    Write the Page footers
    form end_of_page.
      if r_per eq c_x.
        write : /(193) sy-uline.
      elseif r_pay eq c_x.
        write : /(188) sy-uline.
      elseif r_edn eq c_x.
        write : /(172) sy-uline.
      elseif r_pemp eq c_x.
        write /1(97) sy-uline.
      elseif r_job eq c_x.
        write /1(75) sy-uline.
      elseif r_app eq c_x.
        write /1(217) sy-uline.
      endif.
    endform.               "end_of_page
    *&      Form  Display_report
    Write the Report Output
    form display_report.
      if r_all eq c_x.
        if pers_tab[] is initial.
          message i999 with
           'No Personal Data found'(061).
        else.
          write: /1 sy-vline,2(51) sy-uline, 53 sy-vline,
                 /1 sy-vline, 2(50) text-020 centered color 3, 53 sy-vline.
          write /1(193) sy-uline.
          format color col_heading on.
          write:/1 sy-vline,  2(10) 'Employee #'(011),
                12 sy-vline, 13(40) 'Name'(012) centered,
                53 sy-vline, 54(8)  'Grade'(013) centered,
                62 sy-vline, 63(15) 'Nationality'(017) centered,
                78 sy-vline, 79(10) 'Eng.Date'(014) centered,
                89 sy-vline, 90(10) 'Birth Date'(016) centered,
               100 sy-vline,101(25) 'Location'(026) centered,
               126 sy-vline,127(25) 'Position'(015) centered,
               152 sy-vline,153(40) 'Division'(018) centered,
               193 sy-vline.
          format color off.
          write /1(193) sy-uline.
          sort pers_tab by pernr.
          loop at pers_tab.
            format color col_normal.
            write:/1 sy-vline,  2(10) pers_tab-pernr,
                  12 sy-vline, 13(40) pers_tab-ename,
                  53 sy-vline, 56(6)  pers_tab-trfgr,
                  62 sy-vline, 63(15) pers_tab-ntext,
                  78 sy-vline, 79(10) pers_tab-hdate,
                  89 sy-vline, 90(10) pers_tab-gbdat,
                 100 sy-vline,101(25) pers_tab-name1,
                 126 sy-vline,127(25) pers_tab-ptext,
                 152 sy-vline,153(40) pers_tab-ctext,
                 193 sy-vline.
          endloop.
          write /1(193) sy-uline.
        endif.
        skip 3.
        if pay_tab[] is initial.
          message i999 with
           'No Standard Pay Data found'(062).
        else.
          write: /1 sy-vline,2(42) sy-uline, 44 sy-vline,
                 /1 sy-vline, 2(42) text-021 centered color 3, 44 sy-vline.
          format color col_heading on.
          write /1(188) sy-uline.
          write:/1 sy-vline,  2(10) 'Employee #'(011),
                12 sy-vline, 13(15) 'Basic'(033) centered,
                28 sy-vline, 29(15) 'Housing Allow.'(034) centered,
                44 sy-vline, 45(15) 'Sup.Allow.'(035) centered,
                60 sy-vline, 61(15) 'Social Allow.'(036) centered,
                76 sy-vline, 77(15) 'Child Allow.'(037) centered,
                92 sy-vline, 93(15) 'Fixed Overtime'(038) centered,
               108 sy-vline,109(15) 'R.A.Allow.'(041) centered,
               124 sy-vline,125(15) 'Perform.Allow.'(039) centered,
               140 sy-vline,141(15) 'Pension.Allow.'(059) centered,
               156 sy-vline,157(15) 'Others'(040) centered,
               172 sy-vline,173(15) 'Total'(042) centered,
               188 sy-vline.
          format color off.
          write /1(188) sy-uline.
          sort pay_tab by pernr.
          loop at pay_tab.
            format color col_normal.
            write:/1 sy-vline,  2(10) pay_tab-pernr,
                  12 sy-vline,
                  13(15) pay_tab-basic currency pay_tab-waers no-zero,
                  28 sy-vline,
                  29(15) pay_tab-hra_allow currency pay_tab-waers no-zero,
                  44 sy-vline,
                  45(15) pay_tab-sup_allow currency pay_tab-waers no-zero,
                  60 sy-vline,
                  61(15) pay_tab-soc_allow currency pay_tab-waers no-zero,
                  76 sy-vline,
                  77(15) pay_tab-chl_allow currency pay_tab-waers no-zero,
                  92 sy-vline,
                  93(15) pay_tab-fix_allow currency pay_tab-waers no-zero,
                 108 sy-vline,
                 109(15) pay_tab-ra_allow currency pay_tab-waers no-zero,
                 124 sy-vline,
                 125(15) pay_tab-per_allow currency pay_tab-waers no-zero,
                 140 sy-vline.
            pay_tab-pen_allow = pay_tab-pen_allow * -1.
            write: 141(15) pay_tab-pen_allow currency pay_tab-waers no-zero,
                   156 sy-vline,
                   157(15) pay_tab-oth_allow currency pay_tab-waers no-zero,
                   172 sy-vline,
                   173(15) pay_tab-tot_allow currency pay_tab-waers no-zero,
                   188 sy-vline.
          endloop.
          write /1(188) sy-uline.
        endif.
        skip 3.
        if edn_tab[] is in

  • LDB   in abap hr

    Hi,
        I am new to Abap Hr.Can anyone plz provide me with a sample program for a logical database.
    Regards,
    Subha

    Hi
    See the sample report using PNP LDB
    LDB is attached in the attributes of the program
    report zporgr0100
           line-size 252
           line-count 60(1)
           no standard page heading
           message-id zx.
    Database Tables & Infotypes
    tables: pcl1,        " HR Cluster1
            pcl2,        " HR Cluster1
            pa0003,      " Master data - Payroll Status
            cskt,        " Cost Center Texts
            t528t,       " Positions Texts
            t513s,       " Job Titles
            pernr,       " Logical PNP
            t001p,       " Personnel Subarea
            t500p,       " Personnel Area
            t501,        " Employee Group
            t503k,       " Employee Subgroup
            csks.        " Cost Center
    infotypes:0000,0001.
    *include rpclst00.
    include rpc2rx00.
    include rpc2rxx0.
    include rpc2cd00.
    *include rpc2ps00.
    *include rpc2pt00.
    *include rpcfvp00.
    *include rpcfdc10.
    *include rpcfdc00.
    include rpppxd00.
    include rpppxd10.
    Declaration of Internal Tables
    Internal Table for Output Data
    data: begin of rep_tab occurs 0,
            kostl like pa0001-kostl,      " Cost Center
            pernr like pa0001-pernr,      " Personal Number
            ename like pa0001-ename,      " Employee Name
            ctext like cskt-ltext,        " Cost Center Text
            ptext like t528t-plstx,       " Position Text
            ot1   type p decimals 2,      " Jan OT Amount
            ot2   type p decimals 2,      " Feb OT Amount
            ot3   type p decimals 2,      " Mar OT Amount
            ot4   type p decimals 2,      " Apr OT Amount
            ot5   type p decimals 2,      " May OT Amount
            ot6   type p decimals 2,      " Jun OT Amount
            ot7   type p decimals 2,      " Jul OT Amount
            ot8   type p decimals 2,      " Aug OT Amount
            ot9   type p decimals 2,      " Sep OT Amount
            ot10  type p decimals 2,      " Oct OT Amount
            ot11  type p decimals 2,      " Nov OT Amount
            ot12  type p decimals 2,      " Dec OT Amount
            ott   type p decimals 2,      " Total OT Amount
          end of rep_tab.
    Declaration of Variables
    data: v_mon(2) type n,                   " Month
          v_no     type i,                   " Data Lines
          v_year(4)  type c,                 " Year
          v_date   like sy-datum,            " Date
          v_date1  like sy-datum,            " Date
          v_seqnr  like  pc261-seqnr.        " Sequence No.
    Declaration of Constants
    data: c_type   like hrp1001-otype  value 'S',  " Object Type
          c_kokrs  like cskt-kokrs value '1000',   " Controlling Area
          c_date1  like sy-datum value '18000101', " Date
          c_date2  like sy-datum value '99991231', " Date
          c_x       type c value 'X',              " Sign
         c_mon(2)  type c value '01',             " Month
          c_val1(2) type c value '31',             " Date
          c_val2(2) type c value '12',             " Month Type
          c_val    like p0041-dar01 value '01',    " Date Type
          c_lgart1 like p0008-lga01 value '0722',  " Wage Type
          c_lgart2 like p0008-lga01 value '0723',  " Wage Type
          c_1(2)   type n value '01',                           " Month1
          c_2(2)   type n value '02',                           " Month2
          c_3(2)   type n value '03',                           " Month3
          c_4(2)   type n value '04',                           " Month4
          c_5(2)   type n value '05',                           " Month5
          c_6(2)   type n value '06',                           " Month6
          c_7(2)   type n value '07',                           " Month7
          c_8(2)   type n value '08',                           " Month8
          c_9(2)   type n value '09',                           " Month9
          c_10(2)  type n value '10',                           " Month10
          c_11(2)  type n value '11',                           " Month11
          c_12(2)  type n value '12'.                           " Month12
    Selection-screen
    parameters:
      p_year like pc2b0-pabrj obligatory.       " Payroll Year
    At selection-screen
    at selection-screen.
    Validate the Selection Screen fields
      perform validate_screen.
    Start-of-Selection
    start-of-selection.
    Selection of Period
      perform get_period.
    Get PERNR from LDB
    get pernr.
    Get the Master data from infotype 0001
      perform get_master_data.
    Top-of-page
    top-of-page.
    Write the Report and Column Headings
      perform top_of_page.
    End-of-Page
    end-of-page.
      write /1(252) sy-uline.
    End-of-Selection
    end-of-selection.
    Display the Output Report.
      perform display_report.
    Form-Routines
    *&      Form  validate_screen
    Validation of selection Screen fields
    form validate_screen.
    Validation of Cost Center
      clear csks.
      if not pnpkostl[] is initial.
        select single kostl
          into csks-kostl
          from csks
          where kostl in pnpkostl.
        if sy-subrc <> 0.
          message e999 with 'Invalid Cost Center'(003).
        endif.
      endif.
    Validation of Personnel Number
      clear pa0003.
      if not pnppernr[] is initial.
        select pernr
        from pa0003 up to 1 rows
          into pa0003-pernr
          where pernr in pnppernr.
        endselect.
        if sy-subrc <> 0.
          message e999 with 'Incorrect Personal Number Entered'(002).
        endif.
      endif.
    Validation of Personnel Area
      clear t500p.
      if not pnpwerks[] is initial.
        select persa
        from t500p up to 1 rows
          into t500p-persa
          where persa in pnpwerks.
        endselect.
        if sy-subrc <> 0.
          message e999 with 'Incorrect Personnel Area Entered'(001).
        endif.
      endif.
    Validation of Personnel Sub Area
      clear t001p.
      if not pnpbtrtl[] is initial.
        select btrtl
        from t001p up to 1 rows
          into t001p-btrtl
          where btrtl in pnpbtrtl.
        endselect.
        if sy-subrc <> 0.
          message e999 with 'Incorrect Personnel Sub Area Entered'(037).
        endif.
      endif.
    Validation of Employee Group
      clear t501.
      if not pnppersg[] is initial.
        select persg
        from t501 up to 1 rows
          into t501-persg
          where persg in pnppersg.
        endselect.
        if sy-subrc <> 0.
          message e999 with 'Incorrect Employee Group Entered'(038).
        endif.
      endif.
    Validation of Employee Sub Group
      clear t503k.
      if not pnppersk[] is initial.
        select persk
        from t503k up to 1 rows
          into t503k-persk
          where persk in pnppersk.
        endselect.
        if sy-subrc <> 0.
          message e999 with 'Incorrect Employee Sub Group Entered'(039).
        endif.
      endif.
    endform.                  "validate_screen
    *&      Form  get_period
    Get the Correct Period based on Selection screen selection
    form get_period.
      clear: v_year,v_mon, v_date, v_date1.
      v_year = sy-datum+0(4).
      v_mon  = sy-datum+4(2).
      if pnptimr1 = c_x.      " Current Date
        pnpbegda = sy-datum.
        pnpendda = sy-datum.
      elseif pnptimr2 = c_x.  " Current Month
        concatenate v_year v_mon c_val into v_date.
        concatenate v_year v_mon c_val1 into v_date1.
        pnpbegda = v_date.
        pnpendda = v_date1.
      elseif pnptimr3 = c_x.  " Current Year
        concatenate v_year c_val c_val into v_date.
        concatenate v_year c_val2 c_val1 into v_date1.
        pnpbegda = v_date.
        pnpendda = v_date1.
      elseif pnptimr4 = c_x.  " Upto Today
        pnpbegda = c_date1.
        pnpendda = sy-datum.
      elseif pnptimr5 = c_x.  " From Today
        pnpbegda = sy-datum.
        pnpendda = c_date2.
      else.
        if ( pnpbegda is initial and pnpendda is initial ).
          pnpbegda = c_date1.
          pnpendda = c_date2.
        elseif pnpbegda is initial and not pnpendda is initial.
          pnpbegda = c_date1.
          pnpendda = pnpendda.
        elseif not ( pnpbegda is initial and pnpendda is initial ).
          pnpbegda = pnpbegda.
          pnpendda = pnpendda.
        endif.
      endif.
    endform.              "get_period
    *&      Form  get_master_data
    Get the Master Data from Database Tables PA0001,0002,0003
    form get_master_data.
    Get data from Respective Infotypes
      rp_provide_from_last p0001 space pnpbegda pnpendda.
      if p0001-kostl in pnpkostl.
        rep_tab-kostl = p0001-kostl.
        rep_tab-pernr = p0001-pernr.
        rep_tab-ename = p0001-ename.
    Get the Position Text
        clear t528t-plstx.
        select single plstx into t528t-plstx from t528t
                where plans = p0001-plans and
                      otype = c_type and
                      sprsl = sy-langu.
        if sy-subrc = 0.
          rep_tab-ptext = t528t-plstx.
        endif.
    Get the Cost Center Text
        clear cskt-ltext.
        select single ltext into cskt-ltext from cskt
                where spras = sy-langu and
                      kokrs = c_kokrs and
                      kostl = p0001-kostl.
        if sy-subrc = 0.
          rep_tab-ctext = cskt-ltext.
        endif.
    Get the Overtime Payment Data
        perform get_ot_data.
        rep_tab-ott = rep_tab-ot1 + rep_tab-ot2 + rep_tab-ot3 +
                      rep_tab-ot4 + rep_tab-ot5 + rep_tab-ot6 +
                      rep_tab-ot7 + rep_tab-ot8 + rep_tab-ot9 +
                      rep_tab-ot10 + rep_tab-ot11 + rep_tab-ot12.
        append rep_tab.
        clear  rep_tab.
      endif.
      sort rep_tab by kostl pernr.
      delete rep_tab where kostl = ' '.
      delete rep_tab where ott = 0.
    endform.                 "get_master_data
    *&      Form  get_ot_data
    Get the Overtime Payment Data
    form get_ot_data.
      cd-key = pernr-pernr.
      rp-imp-c2-cd.
      sort rgdir by seqnr.
    To get sequence number for the payroll period
      loop at rgdir where void     is initial
                        and reversal is initial
                        and outofseq is initial
                        and srtza    eq 'A'.
        if rgdir-fpper+0(4) = p_year.
    To consider offcycle run data
          if not rgdir-ocrsn is initial.
            v_seqnr = rgdir-seqnr.
            exit.
          endif.
          v_seqnr = rgdir-seqnr.
        endif.
        if not v_seqnr is initial.
          perform import_rx.
        endif.
        perform process_wagetypes.
      endloop.
    endform.                 "get_ot_data
    include rpppxm00.
    *&      Form  Import_rx
    Import the RX data from Clusters
    form import_rx.
      rx-key-pernr = cd-key-pernr.
      rx-key-seqno = v_seqnr.
      rp-init-buffer.
      rp-imp-c2-rx.
    endform.                    " Import_rx
    *&      Form  Process_wagetypes
    Calculate the Overtime Amount based on Wage types
    form process_wagetypes.
      loop at rt.
        if  rt-lgart = c_lgart1 or rt-lgart = c_lgart2.
          if rgdir-fpper+0(4) = p_year.
            v_mon = rgdir-fpper+4(2).
            case v_mon .
              when c_1.
                rep_tab-ot1 = rep_tab-ot1 + rt-betrg.
              when c_2.
                rep_tab-ot2 = rep_tab-ot2 + rt-betrg.
              when c_3.
                rep_tab-ot3 = rep_tab-ot3 + rt-betrg.
              when c_4.
                rep_tab-ot4 = rep_tab-ot4 + rt-betrg.
              when c_5.
                rep_tab-ot5 = rep_tab-ot5 + rt-betrg.
              when c_6.
                rep_tab-ot6 = rep_tab-ot6 + rt-betrg.
              when c_7.
                rep_tab-ot7 = rep_tab-ot7 + rt-betrg.
              when c_8.
                rep_tab-ot8 = rep_tab-ot8 + rt-betrg.
              when c_9.
                rep_tab-ot9 = rep_tab-ot9 + rt-betrg.
              when c_10.
                rep_tab-ot10 = rep_tab-ot10 + rt-betrg.
              when c_11.
                rep_tab-ot11 = rep_tab-ot11 + rt-betrg.
              when c_12.
                rep_tab-ot12 = rep_tab-ot12 + rt-betrg.
            endcase.
          endif.
        endif.
      endloop.
    endform.          "process_wagetypes
    *&      Form  top_of_page
    Write the Report and Column Headings
    form top_of_page.
      format color col_heading on.
      write: /1(252) 'NATIONAL DRILLING COMPANY'(010) centered,
             /1(252) 'Overtime Payments Details'(011) centered.
      format color off.
      if pnptimr1 = c_x.      " Current Date
        write: /2 'Period From     :'(036), sy-datum, 'To:'(006), sy-datum.
      elseif pnptimr2 = c_x.  " Current Month
        write: /2 'Period From     :'(036), v_date, 'To:'(006), v_date1.
      elseif pnptimr3 = c_x.  " Current Year
        write: /2 'Period From     :'(036), v_date, 'To:'(006), v_date1.
      elseif pnptimr4 = c_x.  " Upto Today
        write: /2 'Period From     :'(036), c_date1, 'To:'(006), sy-datum.
      elseif pnptimr5 = c_x.  " From Today
        write: /2 'Period From     :'(036), sy-datum, 'To:'(006), c_date2.
      else.
        if ( pnpbegda is initial and pnpendda is initial ).
          write: /2 'Period From     :'(036), c_date1, 'To:'(006), c_date2.
        elseif pnpbegda is initial and not pnpendda is initial.
          write: /2 'Period From     :'(036), c_date1, 'To:'(006), pnpendda.
        elseif not ( pnpbegda is initial and pnpendda is initial ).
          write: /2 'Period From     :'(036), pnpbegda,
                   'To:'(006), pnpendda.
        endif.
      endif.
      write: 219 'Report Run Date:'(018), sy-datum.
      if not pnpkostl[] is initial.
        if pnpkostl-high is initial.
          write: /2 'Cost Center     :'(004), pnpkostl-low,
                219 'Time           :'(020), sy-uzeit.
        else.
          write: /2 'Cost Center From:'(005), pnpkostl-low+7(3),
                                    'To:'(006), pnpkostl-high,
                219 'Time           :'(020), sy-uzeit.
        endif.
      else.
        write: /219  'Time           :'(020), sy-uzeit.
      endif.
      if not pnppernr[] is initial.
        if pnppernr-high is initial.
          write: /2 'Personal Number :'(007), pnppernr-low,
                 219 'User           :'(021), sy-uname.
        else.
          write: /2 'Personal No.From:'(008),  pnppernr-low,
                                    'To:'(006), pnppernr-high,
                 219 'User           :'(021), sy-uname.
        endif.
      else.
        write: /219 'User           :'(021), sy-uname.
      endif.
      write: /219 'Page No        :'(022), sy-pagno.
      format color col_heading.
      write /1(252) sy-uline.
      write:/1 sy-vline, 10 sy-vline,
            41 sy-vline,
            67 sy-vline, 68(167) 'Overtime Payments(Dirhams)'(013) centered,
           235 sy-vline,252 sy-vline.
      format color col_heading.
      write:/1 sy-vline,  2(8)  'Emp #'(019) centered,
            10 sy-vline, 11(30) 'Employee Name'(012) centered,
            41 sy-vline, 42(25) 'Position'(014) centered,
            67 sy-vline, 68(167)  sy-uline,
           235 sy-vline,236(16)  'Total'(017) centered,
           252 sy-vline.
      write:/1 sy-vline, 10 sy-vline,
            41 sy-vline,
            67 sy-vline, 68(13)  'JANUARY'(024) centered,
            81 sy-vline, 82(13)  'FEBRUARY'(025) centered,
            95 sy-vline, 96(13)  'MARCH'(026) centered,
           109 sy-vline,110(13)  'APRIL'(027) centered,
           123 sy-vline,124(13)  'MAY'(028) centered,
           137 sy-vline,138(13)  'JUNE'(029) centered,
           151 sy-vline,152(13)  'JULY'(030) centered,
           165 sy-vline,166(13)  'AUGUST'(031) centered,
           179 sy-vline,180(13)  'SEPTEMBER'(032) centered,
           193 sy-vline,194(13)  'OCTOBER'(033) centered,
           207 sy-vline,208(13)  'NOVEMBER'(034) centered,
           221 sy-vline,222(13)  'DECEMBER'(035) centered,
           235 sy-vline,252 sy-vline.
      format color off.
      write /1(252) sy-uline.
    endform.            "top_of_page
    *&      Form  Display_report
    Write the Report Output
    form display_report.
      clear v_no.
      describe table rep_tab lines v_no.
      if v_no = 0.
        message i999 with
         'No Data found for the entered Selection'(015).
      endif.
      loop at rep_tab.
        format color 3.
        at new kostl.
          read table rep_tab index sy-tabix.
          write:/1 sy-vline, 2(12) 'Cost Center:'(009),
                 14(10) rep_tab-kostl,
                 25(30) rep_tab-ctext,
                252 sy-vline.
          format color off.
          write /1(252) sy-uline.
        endat.
        format color col_normal.
        write: /1 sy-vline, 2(8)   rep_tab-pernr,
              10 sy-vline, 11(30)  rep_tab-ename,
              41 sy-vline, 42(25)  rep_tab-ptext,
              67 sy-vline, 68(13)  rep_tab-ot1 no-zero,
              81 sy-vline, 82(13)  rep_tab-ot2 no-zero,
              95 sy-vline, 96(13)  rep_tab-ot3 no-zero,
             109 sy-vline,110(13)  rep_tab-ot4 no-zero,
             123 sy-vline,124(13)  rep_tab-ot5 no-zero,
             137 sy-vline,138(13)  rep_tab-ot6 no-zero,
             151 sy-vline,152(13)  rep_tab-ot7 no-zero,
             165 sy-vline,166(13)  rep_tab-ot8 no-zero,
             179 sy-vline,180(13)  rep_tab-ot9 no-zero,
             193 sy-vline,194(13)  rep_tab-ot10 no-zero,
             207 sy-vline,208(13)  rep_tab-ot11 no-zero,
             221 sy-vline,222(13)  rep_tab-ot12 no-zero,
             235 sy-vline,236(16)  rep_tab-ott no-zero,
             252 sy-vline.
        at end of kostl.
          write /1(252) sy-uline.
        endat.
        format color off.
        at last.
          sum.
          format color 1.
          write: /1 sy-vline,
                10 sy-vline, 11(30) 'Total'(017) centered,
                41 sy-vline,
                67 sy-vline, 68(13)  rep_tab-ot1 no-zero,
                81 sy-vline, 82(13)  rep_tab-ot2 no-zero,
                95 sy-vline, 96(13)  rep_tab-ot3 no-zero,
               109 sy-vline,110(13)  rep_tab-ot4 no-zero,
               123 sy-vline,124(13)  rep_tab-ot5 no-zero,
               137 sy-vline,138(13)  rep_tab-ot6 no-zero,
               151 sy-vline,152(13)  rep_tab-ot7 no-zero,
               165 sy-vline,166(13)  rep_tab-ot8 no-zero,
               179 sy-vline,180(13)  rep_tab-ot9 no-zero,
               193 sy-vline,194(13)  rep_tab-ot10 no-zero,
               207 sy-vline,208(13)  rep_tab-ot11 no-zero,
               221 sy-vline,222(13)  rep_tab-ot12 no-zero,
               235 sy-vline,236(16)  rep_tab-ott no-zero,
               252 sy-vline.
          write /1(252) sy-uline.
        endat.
        format color off.
      endloop.
    endform.          "display_report
    Reward points if useful
    Regards
    Anji

  • Facing problem in Fetching Employee details

    Hello All,
    i need to write a abap coding to fetch the employee details from the corresponding table,i worte a code but its is not fetching the details of the employess in to the output,am sending my code along with this thread its great if any body help me out in ths regard,thanks in advance...
    NAME        : Chandeep Singh
    DESCRIPTION : TO GENERATE SIMPLE REPORT USING HR ABAP
                   LOGICAl DATABASE- PNP .
    REPORT zchandeep_hr_prog_1
    LINE-SIZE 200 .
    *Database Table
    TABLES: pernr,           " Pernr structure for Logical database
    pa0001,           " Actions
    pa0002.           " Personnel Info
    *Infotypes
    INFOTYPES: 0001,         " Actions
               0002.         " personnel info
    *Variable Declaration
    DATA: form_nam LIKE p0001-ename,
          v_age(5) TYPE c,       "variable for calculating age in days
          v_ctr1 TYPE i VALUE 0, "counter
          v_ctr2 TYPE i VALUE 0, "counter
          var(5) TYPE c ,        " variable to store btrtl
          var1(5) TYPE c  .      " variable to store werks
    *Internal Table Decalartion
    DATA: BEGIN OF i_tab1 OCCURS 0,
           pernr LIKE pa0001-pernr,  "employee number
           ename LIKE pa0001-ename,  "employee name
           begda LIKE pa0002-begda,  "employee join date
           werks LIKE pa0001-werks,  "personnel area
           btrtl LIKE pa0001-btrtl,  "personnel sub area
           persg LIKE pa0001-persg,  "employee group
           persk LIKE pa0001-persk,  "employee sub-group
           plans LIKE pa0001-plans,  "position
           gbdat LIKE p0002-gbdat,   "date of birth
         END OF i_tab1.
    *START-OF-SELECTION
    START-OF-SELECTION .
    GET pernr .
      rp-provide-from-last p0001 space pn-begda pn-endda .   " Macro for IFT-0001
      rp-provide-from-last p0002 space pn-begda pn-endda .   " Macro for IFT-0002
    **--> Populate internal table
      MOVE p0001-pernr TO i_tab1-pernr .
      MOVE p0001-ename TO i_tab1-ename .
      MOVE p0002-begda TO i_tab1-begda .
      MOVE p0001-werks TO i_tab1-werks .
      MOVE p0001-btrtl TO i_tab1-btrtl .
      MOVE p0001-persg TO i_tab1-persg .
      MOVE p0001-persk TO i_tab1-persk .
      MOVE p0001-plans TO i_tab1-plans .
      MOVE p0002-gbdat TO i_tab1-gbdat .
    **--> Append data to internal table
      APPEND i_tab1 .
      CLEAR i_tab1 .                                       " Clear header I_TAB1******************************
    *END-OF-SELECTION
    END-OF-SELECTION.
    *****sorting the internal table on personnel area & personnel sub-area
      SORT i_tab1 BY werks btrtl.
    *TOP_OF_PAGE
      PERFORM top_of_page.
    *Output Display
    LOOP AT I_TAB1.
    *for calculating the age in days
      v_age = sy-datum - i_tab1-gbdat.
    *control break on Personal Sub Area
      LOOP.
        AT NEW pnpbtrtl .
          IF sy-tabix NE 1.
            FORMAT COLOR COL_NORMAL ON.
            WRITE:/5 'Total Number of Employees for personnel Sub-Area:',
            var  , 'is ',
            v_ctr1.
            CLEAR v_ctr1.
            FORMAT COLOR OFF.
          ENDIF.
        ENDAT .
      ENDLOOP.
    **Control Break on personnel Area
      LOOP.
        AT NEW pnpwerks.
          IF sy-tabix NE 1.
            FORMAT COLOR COL_TOTAL ON.
            WRITE:/5 'Total Number of Employees for Personal Area: ',
             var1 ,'is    ', v_ctr2. "color col_total.        CLEAR V_CTR2.
            SKIP 1.
            FORMAT COLOR OFF.
          ENDIF.
        ENDAT .
        WRITE:/5
        i_tab1-pernr,   "personnel number
      16 i_tab1-ename,   "emp name
      47 i_tab1-begda,   "join date
      60  v_age,         "age in days
      74  i_tab1-werks,  "P area
      84  i_tab1-btrtl,  "P sub Area
      94  i_tab1-persg,  "emp group
      104  i_tab1-persk, "emp sub group
      114  i_tab1-plans. "position
        v_ctr1 = v_ctr1 + 1.
        v_ctr2 = v_ctr2 + 1.
        var = i_tab1-btrtl .
        var1 = i_tab1-werks .
      ENDLOOP.
    *&      Form  top_of_page
          Header Output
    FORM top_of_page.
      FORMAT COLOR COL_HEADING ON.
      WRITE:/5 'Employee',
            16 'Employee',
            47 'Join Date',
            62 'Age',
            74 'Personal',
            84 'Personal',
            94 'Employee',
            104 'Employee',
            114 'Position ',
          /5 'Number',
          16 'Name',
          60 '(In Days)',
          74 'Area',
          84 'Sub-Area',
          94 'Group',
          104 'Sub-Group'.
      FORMAT COLOR OFF.
      SKIP 1.
    ENDFORM.                    " top_of_page

    After tables pernr.
    write this code :
       GET PERNR.
    and check the program
    Regards,
    Srinivas

Maybe you are looking for

  • OWB on Oracle 10G Release 2

    Dear all, I planned to use an Oracle 10G Release 2 database for a new OWB project. Research on the web just told me that this new version of the database does not support OWB, because of a check for DBA privileges. The website advises to either use a

  • Vendor and Customer initial upload in SAP

    Dear All, When I upload vendor opening balance to SAP, my upload account and vendor accounts are updated correctly. Total no of vendor 450 But in vendor recon account (GL Account), its creating 450 line items for vendors. Can i bring it as one line i

  • Function module :amount _convert_string

    hi to all plz help me in this issue, when iam using this fm for EUR it is woking fine but when taking other country currencies it is run time error t0 203. our standrads are for ISK no decimals and for other correncies 2 decimal places.plz help me in

  • Support for Drag n Drop ?

    Hi, is there some Drag and Drop functionality in the SDK? Can objects be made draggable and can objects (e.g. a simple rectangle) recieve drops and send 'onDrop' events ? Thanks, Stan

  • What is wrong with my delete method in my binary tree

    code..okay so somehow everytime I delete a number that exist it says it has been deleted later when..I display the tree the node wasn' t really deleted at all here is the code..      public boolean delete(int numbers)           Node now = rootOrigin;