Question on GET PERNR.

Hi all,
when I using GET PERNR, this is a loop , right ?
currently, I have no idea about where the value comes from to get into this 'PERNR' structure, pa0000 or pa0001 or any other place?
Thanks!

Hi,
GET PERNR event fills the data structures of declared infotypes with all records that exists for a personnel number.
Data selection does not delimit the records that retrieved from the database.
Whenever GET PERNR statement is included in your program check the following two .
1.Have you included PNP for the logical database screen field in the program attributes.
2.Have you included PERNR structure in the tables declaration.
Below is a sample code, may help you understand the logic behing GET PERNR
tables: pernr.
infotypes: 0000,
            0001,
            0002,
            0019,
            0041,
            0396,
            9009.
start-of-selection.
get pernr.
   provide * from p0396 between pn-begda and pn-endda.
     perform refresh_tables.
     call function 'HR_READ_INFOTYPE'
       exporting
         pernr     = p0396-pernr
         infty     = '0396'
         begda     = pn-begda
         endda     = pn-endda
       tables
         infty_tab = i_p0396.
     sort i_p0396 by begda descending.
     read table i_p0396 index 1.
endprovide.
end-of-selection.
Check this as well:
[http://sapabap.iespana.es/sap/info/hr_overview.htm|http://sapabap.iespana.es/sap/info/hr_overview.htm]
Hope this help you.
Edited by: Lokesh Tarey on Jul 15, 2010 6:06 AM

Similar Messages

  • GET PERNR usage

    hello Abap Gurus:
    Can any one please clarify me a question on GET PERNR Key word.
    I know that get pernr statement gets all the infotype records for selected pernrs on the selection screen.
    But my questiosn is whether get pernr access the database for each pernr selected on selection screen and process them or it gets all the infotypes data for selected pernrs in one shot.
    if not then whether this is not a performance issue.
    Please clarify me as i am a newbie in hr programming.
    Thanks,
    Sravanthi.

    Hi Sravanthi,
    It reads all employee numbers and related infotypes at one shot.
    During debugging of the GET PERNR operation please check that SY-DBCNT value is always constant.
    "The logical database reads all columns from all nodes that are not designated for field selection in the logical database and are superior to node on the access path of the logical database. "
    Please check the link below:
    http://help.sap.com/saphelp_nw70/helpdata/en/9f/db9aa335c111d1829f0000e829fbfe/content.htm
    Regards,
    Dilek
    Edited by: Dilek Ersoz Adak on Jan 28, 2010 4:23 PM

  • Why the Orgunit from Orgstructure not beeing called in Get Pernr

    Dear Freinds
                 Iam using the logical database PNP for my payroll repot. So i have modified
    the selection screen and keppt only
    a) paroll area,
    b) otherperiod and current period
    c) organizational unit.
    My intention is to read all the orgunits throught function module RH_STRUC_GET
    So when i said f4 on orgunit field normall we will get the OrgStrucutre popup,
    from that popup i have select the topmost (i.e very first orgunit) .......when i executed
    for the other period 01 2007 (means april 2007 i.e 01.04.2007 to 30.04.2007)
    02 2007, 032007,04,2007,05,2007 & 062007 it is not even triggered GET PERNR.
    however from 072007 to 122007( october2007 to march2008)getpernr it is getting triggered,
    My question why is this happening iam not able to find in debugging , does the payroll area not in the periiod ?? or is this any thing like that please let me know iam not able to find ...........atleast give me some clue so that i can check in that aspect.
    Please help me freinds as this has been struc .......as this more imp for my FO
    Regards
    syamla

    Hi Syamala,
    I do not quite understand what you want to do.
    <i>My intention is to read all the orgunits throught function module RH_STRUC_GET
    </i>
    The normal flow is that PERNR are rtrieved based on selection criterias. THats what the selection part of a report is for.
    THe field ORGEH is the field stored in IT0001, no structural evaluation. If you want to process all PERNR under one Orgunit reachable with path O-S-P simply use the Pushbuton on top of the screen. If it is not shown, use a different report class showing it.
    Have a look at e.g. PAR2 transaction.
    Regards,
    Michael

  • Don't use GET PERNR error

    Hello Experts,
    I'm trying to write a code using GET PERNR statement for every first time but keeps getting the error when try to execute my code. Here is the error (Do not use the GET PERNR event).
    Can somebody please help me rectify this error. For reference here is my code.
    report  zad_hr_test 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 .
    i_tab1-pernr = pernr-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 .
       loop at i_tab1.
         write:/ i_tab1-werks,
                 i_tab1-btrtl,
                 i_tab1-pernr,
                 i_tab1-ename,
                 i_tab1-begda,
                 i_tab1-persg,
                 i_tab1-persk,
                 i_tab1-plans,
                 i_tab1-gbdat.
       endloop.
    Many thanks in advance.

    Hi,
    You're asking a different question now, so you should start a new thread...
    Anyway, in the 'Attributes' screen of your program you can specify which selection screens you want to display for a logical database.
    Alternatively you can hide all (or part) of a selection screen at the 'selection-screen output' event.
    For example:
    at selection-screen output.
      loop at screen.
       check screen-name = 'PNPABKRS-HIGH'
          or screen-name = 'PNPABKRS-LOW'.
       screen-input = '0'.
       screen-output = '0'.
       screen-invisible = '1'.
       screen-active = '0'.
       modify screen.
      endloop.
    cheers
    Paul

  • Get PERNR in Dynpro on ABAP

    Hi,
    I`am developing a custom service for ESS on ABAP Dynpro.
    How can I get current employee PERNR inside of my ABAP implementation?
    The only way I know getting PERNR from 0105 i.t. using current sy-uname, but I dont like this solution.
    Is where any other way of getting current employee PERNR?
    thanks to all,
    Evgeny

    Hi Evgeny,
    It's probably best to post these types of questions in the HR/ABAP forums in the future. In any case, the only link between the employee record and the user record is IT 0105 so I'm afraid you don't have much choice there. If you don't want to access the employee record using SQL, I believe there is a function module called something like BAPI_EMPLOYEE_GET_DETAILS (check in SE37).
    Cheers,
    Dion

  • ABAP HR : Restriction of data after GET PERNR

    Hi Folks,
    I am using LDP PNP and using get statement. I am using multiple Infotypes. So all the Pxxxx are getting field with each GET PERNR. I have to extract last record which I am getting using RP_PROVIDE_FROM_LAST.
    Can I avoid getting all the data of a PERNR after GET PERNR or is there any other way to get only the latest record.
    Thanks
    Rahul

    Hi ,
    In my opinion i can infer your questions as ..
    suppose p0000 has 3 records for pernr 5125.
    Get PERNR.
    rpprovidefrom last -> triggers last date ..
    Here usage of rp provide allows u to pick the latest entry . Now you are asking the loading of p0000 should happen only with 1 record( instead of 3 ) .
    Get PERNR.
    --> here  u need to see p0000 with 1 entry only ..
    **rpprovide*from last -> triggers last date ..
    May be a check from initialization to restrict based on date entry within the interval .. and if in that interval there are two records i suppose it cannot pick one.. thats my opinion .. lets see if someone has a better solution .
    BR,
    Vijay.

  • How to get PERNR from employee search(teamviewer) iView in to a WD-4-ABAP.

    Hello All,
    I had developed a new Web Dynpro for ABAP (WD4A) component for updating a custom Infotype. This application is meant for the manager to maintain some specific data through portal for his employees in the team.
    WD4A application is built based on the employee number it receives from the portal.
         How could I get PERNR from employee search(teamviewer) iView in to my WD4A component?
    In portal I had developed a test page by copying the standard page from MSS com.sap.pct.erp.mss.general_information, and added my WD4A application through an iView into this page.
    Then I hided all the other iVews in the page except (1) employee search and (2)my WD4A iVew. On the preview everything appears fine.
    During the preview of this page it triggers the WDDOINIT of WD4A component main view and then the WDDOMODIFYVIEW. When I select an employee from the employee search, then it triggers only WDDOMODIFYVIEW in the WD4A application and not the WDDOINIT anymore.
    In my  WDDOMODIFYVIEW I had inserted the following code:
      DATA lo_api_component TYPE REF TO if_wd_component.
      DATA lo_portal_manager TYPE REF TO if_wd_portal_integration.
      lo_api_component = wd_comp_controller->wd_get_api( ).
      lo_portal_manager = lo_api_component->get_portal_manager( ).
      DATA lo_api_controller TYPE REF TO if_wd_view_controller.
      lo_api_controller ?= wd_this->wd_get_api( ).
      CALL METHOD lo_portal_manager->subscribe_event
        EXPORTING
          portal_event_namespace = 'urn:com.sap.mss.employeesearch'
          portal_event_name      = 'selection_changed'
          view                   = lo_api_controller
          action                 = 'GET_SELECTED_PERNR'.
    And in the action: 'GET_SELECTED_PERNR'
    METHOD onactionget_selected_pernr .
      DATA lv_str_pernr TYPE string.
      DATA lv_strlen TYPE i.
      DATA lv_pernr TYPE pernr_d.
      DATA lv_offset TYPE i.
      wdevent->get_string(
      EXPORTING
      name = 'PORTAL_EVENT_PARAMETER'
      RECEIVING
      value = lv_str_pernr ).
      lv_strlen = STRLEN( lv_str_pernr ).
      lv_offset = lv_strlen - 8.
      lv_pernr = lv_str_pernr+lv_offset(8).
    ENDMETHOD.
    This is not functioning form me. The action is not getting trigged with the code in WDDOMODIFYVIEW.
    I had gone through several threads in u2018SDN say:
         Pass pernr to WebDynro
         MSS - General Information - Related Activities Links persnr.
         SAP Note: 1112733.
    Most of the threads are answered but incomplete. In some threads people shared document personally which had been helpful.
    I am stuck with this scenario of handling the employee number from employee search iView. Helpful suggestions will be rewarded for sure.
    Thanks in advance.

    Do i understand you correctly that you are not getting the portal event ?
    This can be several reasons ?
    Both portal system and WDA server has to be in same domain and same proptocol to communicate with Portal event.
    Please check in that direction and search posts on this topic.

  • Is there a way to use 'GET PERNR' without the selection screens?

    I would like to use the GET PERNR event in a batch program without using the default selection screens.  I would like to be able to use my own selection screen and parameters, but only get them along with the default selection options for payroll period.  I've tried removing the screen number from the attributes screen, but still get these options.  Is this possible?

    hi Kiran,
    report Category is a Pushbutton on the Attributes popup, it only appears if you use PNP logical DB.
    this is from SAPHelp: "Report Category
    Category used for HR reports that use the PNP logical database. It controls the type and number of fields that appear on the selection screen of an evaluation report."
    hope this helps
    ec

  • How to use the class CL_PT_EMPLOYEE with GET PERNR?

    Hi,
    I saw this sample code on the forum.
    Is it more performant than using the "RP-PROVIDE-..." macros?
    Does the employee instance needs to be killed after each pass? How does it affects memory?
    start-of-selection.
    GET pernr.
    <b>* Create employee instance</b>
      gif_employee = cl_pt_employee=>get_employee( pernr ).
      go_employee ?= gif_employee.
    <b>* Append all other required infotypes to itab</b>
      APPEND '0003' TO gt_infotypes.
      CALL METHOD go_employee->get_infotypes
        EXPORTING
          i_itlist      = gt_infotypes
          i_fromdate    = id_fromdate  " start date
          i_todate      = id_todate    " end date
    *      I_FILTER      =
          i_noauthcheck = 'X'
        IMPORTING
          e_result      = gt_infty_request
          e_retcd       = gd_retcd.

    I think it that way. You are trying to compare and analyse old (don't say bad) programming school with a new (OO one) approach. Although, I am OO enthusiast and in any case I will try to convice you that OO aproach is better than classical one, you should know what SE30 was designed for. If you want to stress on OO design, use the one you mentioned, otherwise stick what SAP recommmends (please note, that I am "middle" school pupil, so I tried to learn all courses with my own experience and feelings from OO).
    IMHO, OO aproach is a way of thinking, not something we can messure in sec. and compare to old school teaching. Some of your report should be desinged in classical way, some should be pure OO. Which one you choose, is up to you, your conclusions, your percives of ABAP language. For me OO was not injected in ABAP enough, to affect developers or to convince them using it in any case w/o doubts you have.
    Regards
    Marcin

  • Function Module to get pernr number based on first name and last name

    Hi All,
    What is the Function Module to get pernr number based on first name and last name.
    Could you please help me.
    T@R.
    Vidya

    hi Vidya,
    you can get perner from PA0002 based on firs name and last name.
    use select query and get perner.

  • Error return immediately using GET pernr (PNP logical db)

    I have a requirement to use HR PNP logical database for a report. The report should display the values from employee's infotypes. Should the user does not have authorisation on one or more infotype, the column field for that infotype should be left blank.
    I tried using 'Get Pernr' but system will return error immediately that user does not have authorisation on any of the infotypes. Please advice how should I code my report in order to fit into my requirement.

    There is afunction module to disable the infotype authorization check ( do a wildcard search in se37 for 'HRINFAUTH* ).. call that before the Get Pernr event & implement explicit authzn checks in your program..
    ~Suresh

  • Get Pernr

    Hi,
    I've written an abap program using the logical database PNP to select the employees record using the statement 'Get pernr'. I would like to know if there are ways to get the total number of records that can be selected.
    Thanks,
    Francis

    Thats not passible. Imagine having a select statement, there is no way of getting the number of resulting rows ahead the statement. you have tp process the select statement twice, first to get the amount, and then to ge tthe rows. in the first step you can optimize the select with count(*), but nevertheless, it is executed twice. So you have to execute the logical database in advance, there are funcion modules to do that. For performance reasons, thats not a good choice.
    On the other hand, when the get event is triggered and your program is getting the first rowm most work by the database is done and you're only fetching row by row.

  • Get pernr based on company code in logical databse

    Hi,
        When using the get pernr event, all the pernrs that I get are in the ascending order  I want them first grouped based on the company code and then on pernr.
    Any suggestions would be appreciated abd suitably rewarded.
    for ex: get pernr.
               write:/ pernr, bukrs.
             end-of-selection.
    result:   00000099 1001
              00000002 1003
    Regards
    Vick
    Message was edited by:
            vick vennav

    for ex: get pernr.
    write:/ pernr, bukrs.
    end-of-selection.
    result: 00000099 1001
    00000002 1003
    We are sending the payroll information to the 3rd party for pay check purposes, at my client side they have inserted a custom include in the standard program and populating the information in a flat file which needs to be sorted first based on company code and then on pernr. If I try to do it later,the code is becoming a mess, so I want to know is there a way to get pernr using logical database whose order is based on company code.
    Regards

  • How to read personal no's on selection in LDB without using GET PERNR

    Hi to all
    I am using Logical data base PNP and selection screen 900.
    Now my requirement is to retrieve personal no's which are entered at selection seperately without using GET PERNR.
    Ineed all the pernrwhich are entered in selection.
    How to do that.
    Please guide.
    Regards
    Anubhav

    Hi,
    You can do as SUJIT said or use GET PERNR and assign PERN-PERNR to Workarea and then append that to internal table.
    DATA:
       ITAB_PERNR like standard table of PA0000-pernr,
       wa_pernr like line of ITAB_PERNR.
    GET PERNR.
    wa_pernr-pernr  = pernr-pernr.
    append wa_pernr to ITAB_PERNR
    Hope this would help you.
    Regards
    Narin Nandivada.

  • Regarding the get pernr function

    Hi guys,
              Got to know that when we use get pernr it automatically checks for the autherization on pernrs to view data.
        Would like to know who all have access to see which pernrs? Can i get any ideas on this....
    Thanks in advance
    Abhi

    Triggers the associated events when data is read in an executable (type 1) program using a logical database.
    node is a node in the logical database that is assigned to the report (type 1 program) in the program attributes. You must declare the node in the report using the NODES statement (or the TABLES statement, if the node is of the type "table").
    The node node corresponds to a data object of the same name.
    node is available for processing during the flow of the logical database. Moreover, you can also make reference to the fields from the node that lie on the access path for node in the logical database associated with the report - unless the node is of the dynamic dictionary type.
    Notes
    You can use the event "GET dbtab." only once in the report.
    The GET events are implemented internally as FORM routines. This makes all data objects declared with DATA local, that is, they are only recognized and addressable within the event. This also applies to AT SELECTION-SCREEN ....
    The logic is somewhat different for nodes of the dynamic dictionary type. You must declare these nodes in the report using the NODES node TYPE type statement. In this case, type a dictionary type from the logical database for the node node - that is, the type of the data object node assigned to the node node can differ in different reports. In this case, the data object node is local to the -GET event and has the structure type. Outside the -GET event, a (global) data object node also exists and has the static type assigned to the node. The actual data is, however, returned in the local field node and is available only within the -GET event.
    Example
    The program uses the logical database F1S which has a structure where the table BOOKING appears below the table FLIGHT.
    NODES: SFLIGHT, SBOOK.
    GET SFLIGHT.
      WRITE: SFLIGHT-CARRID,
             SFLIGHT-CONNID,
             SLFIGHT-FLDATE,
             SFLIGHT-PLANETYPE.
    GET SBOOK.
      WRITE: SBOOK-BOOKID,
             SBOOK-CUSTOMID,
             SBOOK-ORDER_DATE.

Maybe you are looking for