Regarding rp_provide_from_last

hi experts,
PERNR    INFTY SUBTY OBJPS SPRPS  ENDDA    BEGDA   SEQNR PUNCHTIME  EMPLOYEECARDNO
00000001|9777 |P20  |     |     |20080804|20080804|000  |130000      |12345678 
00000001|9777 |P20  |     |     |20080804|20080804|001  |190000      |12345678
here the data in my internal table is in this format i need to pick the last row
for this i use " rp_provide_from_frst P9777 'P20' s_date s_date."but this
macro is picking the first row not the last row which i want..
plz help me to sort out this problem,i want to pick up the last punch out i.e punchtime-190000
i.e P20 for the employees not punchtime-1300000.

Have a look at this link. This will describe almost every macro in HR with examples.
http://help.sap.com/saphelp_45b/helpdata/en/60/d8bc0a576311d189270000e8322f96/frameset.htm
The one which is of interest to you is
[RP_PROVIDE_FROM_FRST|http://help.sap.com/saphelp_45b/helpdata/en/60/d8bc0a576311d189270000e8322f96/content.htm]
[RP_PROVIDE_FROM_LAST|http://help.sap.com/saphelp_45b/helpdata/en/60/d8bc17576311d189270000e8322f96/content.htm]
Amandeep

Similar Messages

  • Rp_provide_from_last   regarding doubts

    Dear All,
                    I am using rp_provide_from_last to fetch a record from the  infotype.
    I am getting only the last record  from the infotype by  i need all the record between the valid date range.
    my date range is      01.04.2005  to 31.03.2006.
    empno    begda               endda
    01          01.04.2005       30.10.2005
    01          01.11.2005       30.12.2005
    <b>01          01.01.2006       30.02.2006</b>
    I am getting the last record but i need all the three record what macro i should use.
    with regards,
    Prince Elvis

    You can use the Provide statement which is specifically meant for this purpose in this fashion:
    PROVIDE * FROM p0001 BETWEEN r_begda AND r_endda.
    Do your processing here
    For example
      WRITE / p0001-pernr, p0001-plans.
    ENDPROVIDE.
    Note: Here you dont need to check for pernr because in the LDB, only one PERNR data is available in each pass of the GET PERNR event. So we dont need to bother abt that at all.
    Please dont forget to award points if this helped.

  • Regarding hr-abap

    hi all,
    how to retrieve the data using logical database PCH.we cant use rp-provide here.
    so can any one of you give suggestions on this it will be good to have an example prgm using pch,so can any one send me.
    i have used select stmts to retrieve the data but while taking data its not taking.

    Hi
    HR:
    HR deals with the INFOTYPES which are similar to Tables in General ABAP.
    There are different ways of fetching data from these infotypes.
    There are different areas in HR LIKE Personal Admn, Orgn Management, Benefits, Time amangement, Event Management, Payroll etc
    Infotypes for these areas are different from one another area.
    storing of records data in each type of area is different
    LDBS like PNP are used in HR programing.
    Instead of Select.. we use some ROUTINES and PROVIDE..ENDPROVIDE.. etc
    and in the case of Pay roll we use Clusters and we Import and Export them for data fetching.
    On the whole Normal ABAP is different from HR abap.
    For Personal Admn the Infotypes start with PA0000 to PA1999
    Time Related Infotypes start with PA2000 to PA2999.
    Orgn related Infotypes start with HRP1000 to HRP1999.
    All custom developed infotypes stsrat with PA9000 onwards.
    In payroll processing we use Clusters like PCL1,2,3 and 4.
    Instead of Select query we use PROVIDE and ENDPROVIDE..
    You have to assign a Logical Database in the attributes PNP.
    Go through the SAp doc for HR programming and start doing.
    http://www.sapdevelopment.co.uk/hr/hrhome.htm
    See:
    http://help.sap.com/saphelp_46c/helpdata/en/4f/d5268a575e11d189270000e8322f96/content.htm
    sites regarding hr-abap:
    http://www.sapdevelopment.co.uk/hr/hrhome.htm
    http://help.sap.com/printdocu/core/Print46c/en/data/pdf/PAPA/PAPA.pdf
    http://help.sap.com/printdocu/core/Print46c/en/data/pdf/PAPD/PAPD.pdf
    http://help.sap.com/printdocu/core/Print46c/en/data/pdf/PYINT/PYINT_BASICS.pdf
    http://www.atomhr.com/training/Technical_Topics_in_HR.htm
    http://www.planetsap.com/hr_abap_main_page.htm
    You can see some Standard Program examples in this one ...
    http://www.sapdevelopment.co.uk/programs/programshr.htm
    http://searchsap.techtarget.com/originalContent/0,289142,sid21_gci1030179,00.html?Offer=SAlgwn12604#Certification
    http://www.erpgenie.com/faq/hr.htm.
    http://www.planetsap.com/hr_abap_main_page.htm
    http://www.sapbrain.com/TUTORIALS/FUNCTIONAL/HR_tutorial.html
    These are the FAQ's that might helps you as well.
    http://www.sap-img.com/human/hr-faq.htm
    http://www.sapgenie.com/faq/hr.htm
    http://www.planetsap.com/hr_abap_main_page.htm
    http://www.atomhr.com/library_full.htm
    HR Long texts Upload
    Look at the below link
    BDC - hr maintain text
    sample code
    START-OF-SELECTION.
    GET pernr.
      rp_provide_from_frst p0000 space pn-begda pn-endda.
      if pnp-sw-found EQ '1'.
          READ TABLE p0001 WITH KEY pernr = p0000-pernr.
         if sy-subrc = 0.
         write : p0001-plans. " earliest.
        endif.
      endif.
      rp_provide_from_last p0014 space pn-begda pn-endda.
      if pnp-sw-found EQ '1'.
       READ TABLE p0014 WITH KEY pernr = p0000-pernr.
         if sy-subrc = 0.
         write : p0014-LGART. .
        endif.
      endif.
    <b>Reward points for useful Answers</b>
    Regards
    Anji

  • Use of RP_PROVIDE_FROM_LAST

    Hi experts ,
    I need to fatch the record base on PERNR  in RFC . as well i need fatch data from othere info type . but my requirement is i need last record .
    there is some thread to use RP_PROVIDE_FROM_LAST  , but i am not confident to how can use this .
    Please if any body have sample program please send me . so i can refeer the same .
    Regards
    Ajay Pandey

    GET PERNR.
      RP_PROVIDE_FROM_LAST P0002 SPACE PN-BEGDA PN-ENDDA.
        LOOP AT P0002.
        MOVE: P0002-VORNA TO GW_0002-VORNA,
              P0002-NACHN TO GW_0002-NACHN.
        MODIFY GT_0002 FROM GW_0002
        TRANSPORTING BEGDA WHERE PERNR = P0002-PERNR.
      ENDLOOP.
    I used this code but i not know how i will make this with my import parameters . and i am getting two records

  • RP_PROVIDE_FROM_FRST & RP_PROVIDE_FROM_LAST

    Dear friends
    Coul any1 of u tel me th exact diff bet th macros RP_PROVIDE_FROM_FRST & RP_PROVIDE_FROM_LAST which r used for HR application.
    regards
    sakthi

    Hi Sakthi vel,
    Check the program.
    REPORT ztest1.
    TABLES: pernr.
    INFOTYPES: 0001.
    GET pernr.
      rp_provide_from_frst p0001 space pn-begda pn-endda.
      IF pnp-sw-found EQ '1'.
        WRITE: / pernr-pernr, p0001-stell, pn-begda, pn-endda.
      ELSE.
        REJECT.
      ENDIF.
    "After GET PERNR event p0001 internal table is filled up with 
    "data for one employee. If you have multiple records in the
    "internal table, If use rp_provide_from_frst macro along with
    "parameters dates , It gets the first record from the body of
    "the internal table and puts on the header of the internal table
    "in the given period pn-begda and pn-endda. It does not get
    "from database table.
    REPORT ztest1.
    TABLES: pernr.
    INFOTYPES: 0001.
    GET pernr.
      rp_provide_from_last p0001 space pn-begda pn-endda.
      IF pnp-sw-found EQ '1'.
        WRITE: / pernr-pernr, p0001-stell, pn-begda, pn-endda.
      ELSE.
        REJECT.
      ENDIF.
    "After GET PERNR event p0001 internal table is filled up with 
    "data for one employee. If you have multiple records in the
    "internal table, If use rp_provide_from_last macro along with
    "parameters dates , It gets the last record from the body of
    "the internal table and puts on the header of the internal table
    "in the given period pn-begda and pn-endda. It does not get
    "from database table.
    I hope that it helps u .
    Regards,
    Venkat.O

  • Rp_provide_from_last

    hi friends,
    What is the proper use of RP_PROIVDE_FROM_LAST.
    thanks,
    SK

    Hi
    The RP_PROVIDE_FROM_LAST macro retrieves the last valid data record in the data selection period.
    The parameters for RP_PROVIDE_FROM_LAST are: infotype, subtype, start date, and end date. If you do not want to specify a particular subtype, enter SPACE.
    You can process not only the last valid data record in the data selection period, but also the first valid data record using the RP_PROVIDE_FROM_FRST macro.
    Regards Lokesh

  • Rp_provide_from_last p2001 space pn-begda pn-endda

    Hi Guru's,
    I  am  using  PNP as LDB and after ,
    My  requirement  is to  fetch  the records from p2001 for a specific time period mentioned in the selection screen.
    Code :
    Get  Perner.
    rp_provide_from_last p2001 space pn-begda pn-endda.
    the output   of the above is  giving  all  the data from  P2001 irrespective of the dates (Pn-begda & pn-endda.)
    But  i want  the data with in the dates (Pn-begda & pn-endda.).
    Plz suggest.
    Thanks.

    Hi,
      PROVIDE * FROM P2001
      BETWEEN Pnpbegda AND Pnpendda.
       write: p2001-pernr,p2001-begda.
      ENDPROVIDE.
    use this code..........
    Regards,
    vamshidhar .
    Edited by: vamshi naini on Apr 23, 2008 2:06 PM

  • Rp_provide_from_last p9003

    Hi
    I am working on a HR report using the custom infotype,  I am using following code
    rp_provide_from_last p9003 space pn-begda pn-endda.
    IF pnp-sw-found = 1 .
        MOVE-CORRESPONDING p9003 TO i_pa9003.
        APPEND i_pa9003.
      ENDIF.
    pernr  endda            begda
    01    31.12.2009    19.05.1990
    01    31.12.9999    01.01.2010
    after executing I am not getting the second record, only getting the first record. 
    Please let me know what is problem,  in my uderstanding rp_provide_from_last will give the last record.
    Regards
    Sebastian John
    Edited by: Sebastian John on Mar 21, 2010 1:04 PM
    Edited by: Sebastian John on Mar 21, 2010 1:06 PM

    Hi John,
    <li> You are correct. When you use rp_provide_from_last, it gives you the last record in the given period pn-begda and pn-endda.
    <li>Instead of that macro, you can use PROVIDE-ENDPROVIDE. Its like LOOP-ENDDLOOP. for more info.. Use F1 help on PROVIDE.
    PROVIDE * FROM p9003 BETWEEN pn-begda AND pn-endda.
      MOVE-CORRESPONDING p9003 TO i_pa9003.
      APPEND i_pa9003.
    ENDPROVIDE
    Thanks
    Venkat.O

  • RP_provide_from_last  selecting wrong value ???

    Hi experts..
    In my report i had used statement ..
    RP_provide_from_last P0027 SPACE PN-BEGDA PN-ENDA...
    Now on selction secreen i am giving any random pernr no. 5656 along with
    begda-->01011800
    enda--->31129999
    Although there no such data peresent for perner 5656 in the TABLE PA0027 but the rp_provide stmt is selecting the record.
    i tried with clear and refresh stmt but nothing is working.
    how stmt can select records if specified  pernr is not peresent .
    Please help.
    I will reward points.
    Thanks.

    Hi,
    Refer to my code as follows:
    at selection-screen.
      SELECT SINGLE * FROM MSEG WHERE
           MBLNR = IMBLNR.
      IF SY-SUBRC <> 0.
        MESSAGE S000(ZMM) WITH 'Please select a valid Material Number'.
      ENDIF.
    Modify it according to your requirement.
    Hope this helps.
    Reward if helpful.
    Regards,
    Sipra

  • RP_PROVIDE_FROM_LAST AND PROVIDE AND ENDPROVIDE

    hi all,
        When to use RP_PROVIDE_FROM_LAST and Provide and EndProvide?
    which scenario we go for RP_PROVIDE_FROM_LAST and Provide?
    both will do the same purpose?
      RP_PROVIDE_FROM_LAST  will read recent records.
      Provide will read sequentially data.
    other than this...difference
        can anyone clear my doubt?

    Hi,
    For PROVIDE-ENDPROVIDE : 
    1) You can fetch individual fields of the infotypes.
    2) You can also use the JOIN and PROJECTION of infotypes. Based on the criteria, datas can be fetched from two or more infotypes.
    3) It is similar to the SELECT STATEMENT of normal ABAP.
    4) You can do processing within the Block of PROVIDE -  ENDPROVIDE
    For RP_PROVIDE_FROM_LAST:
    1) You fetch only the recent record of the Infotype.
    2) This is a MACRO delivered by SAP and not a statement. You can also create something similar to this.
    Regards,
    Anirban

  • Rp_provide_from_last returns incorrect result

    Hi
    When issuing rp_provide_from_last  for IT2001, we get incorrect result.
    rp-provide-from-last p2001 space '19000101' '99991231'
    This macro does not return the latest record.  Instead it returns the record with the highest subtype #.  (It actually returns the last record shown in a SE16N listing of PA2001).
    Has anyone seen this problem?
    We are on SAP 4.7., SP 85.
    Best regards
    Kirsten

    Pleas Try this
    Usage:
    Only in PNP database reports under GET PERNR, because the personnel number for which data is being read comes from field PERNR-PERNR, while the field being used is PNP-SW-AUTH-SKIPPED-RECORD.
    (RP_READ_ALL_TIME_ITY beg end)
       DATA: BEGDA LIKE P2001-BEGDA, ENDDA LIKE P2001-ENDDA.
       INFOTYPES:  0000, 0001, 0002, ...
                         2001 MODE N, 2002 MODE N, ...
         GET PERNR.
       BEGDA = '19900101'. ENDDA = '19900131'.
       RP_READ_ALL_TIME_ITY BEGDA ENDDA.
       IF PNP-SW-AUTH-SKIPPED-RECORD NE '0'.
          WRITE: / 'Authorization for time data missing'.
          WRITE: / 'for personnel number', PERNR-PERNR. REJECT.
       ENDIF.
    Remarks
    This RMAC module can be used when, for example, the time infotypes were originally defined in MODE N. This was done because the time data (from LOW-DATE to HIGH-DATE) might not all have fitted into the buffer. Now, however, they are read with shorter intervals (for example, in RPCALCx0 with payroll periods).
    -Due to the large amount of data in HR, the infotypes 2000 u2013 2999 should not be read when GET PERNR occurs. Therefore, these infotypes are declared with the enhancement MODE N.
    -As a result, the infotype tables under GET PERNR are not filled. The time infotype tables are filled subsequently using the macro RP_READ_ALL_TIME_ITY, but only for the time interval specified by PN-BEGDA and PN-ENDDA.
    http://help.sap.com/saphelp_45b/helpdata/en/60/d8bb88576311d189270000e8322f96/content.htm
    Best Regards

  • Rp_provide_from_last for hrp1001

    Hi Friends,
    Im tryin to use rp_provide_from_last for infotype p1001 ie for table hrp1001, but im gettin error.
    ldb im using is PNP
    Pl help me solvin dis.
    Pts ll be rewarded.
    Regards,
    Dilip.

    Hi Dilip,
    I believe u can use PCH LDB and then use this code to read last record from   P1001
    GET OBJEC.
      PROVIDE * FROM P1001
                BETWEEN pc-begda
                    AND pc-endda
    WHERE p1001-begda LE sy-datum
            and p1001-endda GE sy-datum.
      ENDPROVIDE.

  • Regarding Time management in HR

    Hi Experts,
                     I am new to HR-Abap, Can any body give brief idea about time management in hr in Techincal point of view .
    Thanks and regards,
    Sravanthi.

    Hi
    In time related infotypes records are multiple  for a single pernr
    say for example LEAVES
    within a time  for PERNR you will find different types of leaves
    go and see the infotypes data practically PA2001 and PA2005, r etc
    see the sample report on time related data
    REPORT zh_absence_quota
           NO STANDARD PAGE HEADING
           MESSAGE-ID zh_msg
           LINE-SIZE 169
           LINE-COUNT 60(1).
                   T A B L E S  D E C L A R A T I O N S
    TABLES:    pernr,    " Logical PNP
               t001p,    " Personnel Subarea
               t529u,    " Employment Status
               t500p,    " Personnel Area
               t501,     " Employee Group
               t503k,    " Employee Subgroup
               t549a,    " Payroll Area
               t554s,    " Absence Type
               t554t,    " Absence Type Texts
               t556a,    " Quota Type
               t527x,    " Orgn. Unit
               t556b,    " Quota Type Text
               pa0003.   " Payroll Status
    INFOTYPES:
               0000,   " Actions
               0001,   " Organizational Assignment
               2006,   " Absence Quota
               2001.   " Absences
                   T Y P E S  D E C L A R A T I O N S
    Employee Absence Structure
    TYPES: BEGIN OF s_2001,
             pernr TYPE persno,       " Personal Number
             awart TYPE awart,        " Absence Type
             subty TYPE subty,        " Sub Type
             endda TYPE endda,        " End date
             begda TYPE begda,        " Begin date
             abrtg TYPE abrtg,        " Absence days
             ename TYPE emnam,        " employee Name
             atext TYPE abwtxt,       " Absence Type Text
           END OF s_2001.
    Employee Absence Quota Structure
    TYPES: BEGIN OF s_2006,
             pernr TYPE persno,       " Personal Number
             ktart TYPE abwko,        " Absence Quota Type
             year(4) TYPE n,          " Year
             subty TYPE subty,        " Sub Type
             endda TYPE endda,        " End date
             begda TYPE begda,        " Begin date
             anzhl TYPE ptm_quonum,   " Absence Entitlement days
             ename TYPE emnam,        " employee Name
             ktext TYPE kotxt,        " Absence Type Text
             kverb TYPE kverb,        " Deduction Quota days
             anzhb TYPE ptm_quonum,   " Balance days
           END OF s_2006.
    Combined Employee Absence and Quota Structure
    TYPES: BEGIN OF s_rep,
             pernr TYPE persno,       " Personal Number
             ktart TYPE abwko,        " Absence Quota Type
             year(4) TYPE n,          " Year
             anzhl TYPE ptm_quonum,   " Absence Entitlement days
             kverb TYPE kverb,        " Deduction Quota days
             anzhb TYPE ptm_quonum,   " Balance days
             ktext TYPE kotxt,        " Quota Type Text
             awart TYPE awart,        " Absence Type
             abrtg TYPE abrtg,        " Absence days
             ename TYPE emnam,        " employee Name
             atext TYPE abwtxt,       " Absence Type Text
             endda TYPE endda,        " End date
             begda TYPE begda,        " Begin date
           END OF s_rep.
    Declaration of Variables
    DATA : gv_atext TYPE abwtxt,              " Absence Type Text
           gv_ktext TYPE kotxt,               " Absence Type Text
           gv_title1   TYPE sylisel,          " Report title
           gv_year(4)  TYPE c,                " Year
           gv_mon(2)   TYPE c,                " Month
           gv_hrs    TYPE abwtg,              " Hours
           gv_date   TYPE sydatum,            " Date
           gv_date1  TYPE sydatum,            " Date
           gv_dial.                           " Color flag
    Declaration of Constants
    CONSTANTS :
      c_x      TYPE c VALUE 'X',               " Sign
      c_1      TYPE persg   VALUE '1',         " Emp Group
      c_pernr(8) TYPE n VALUE '00000000',      " Pernr
      c_moabw  TYPE moabw   VALUE '01',        " Per SA Grouping
      c_mozko  TYPE mozko   VALUE '01',        " Per SA Grouping
      c_mopgk  TYPE mopgk   VALUE '1',         " Emp SGrp Grouping
      c_endda  TYPE sydatum VALUE '99991231',  " End Date
      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_date1  LIKE sy-datum VALUE '18000101'. " Date
         I N T E R N A L  T A B L E S  D E C L A R A T I O N S
    DATA: i_2001 TYPE STANDARD TABLE OF s_2001 WITH HEADER LINE,
          i_2006 TYPE STANDARD TABLE OF s_2006 WITH HEADER LINE,
          i_rep1 TYPE STANDARD TABLE OF s_2006 WITH HEADER LINE,
          i_rep  TYPE STANDARD TABLE OF s_rep WITH HEADER LINE.
                     S E L E C T I O N  S C R E E N
    SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
    SELECT-OPTIONS: s_ktart FOR t556a-ktart,  " Absence Quota Type
                    s_awart FOR t554s-subty.  " Absence Type
    SELECTION-SCREEN END OF BLOCK b1.
    SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(33) text-003.   " Quota & Absence
    PARAMETERS: p_qa RADIOBUTTON GROUP rb1.
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(33) text-004.   " Quota
    PARAMETERS: p_q RADIOBUTTON GROUP rb1.
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(33) text-005.   " Absence
    PARAMETERS: p_a RADIOBUTTON GROUP rb1.
    SELECTION-SCREEN END OF LINE.SELECTION-SCREEN END OF BLOCK b2.
                      I N I T I A L I Z A T I O N                        *
    INITIALIZATION.
                  A T  S E L E C T I O N - S C R E E N                   *
    AT SELECTION-SCREEN.
    Validate the screen fields
      PERFORM validate_screen.
                   S T A R T - O F - S E L E C T I O N                   *
    START-OF-SELECTION.
    Selection of Period
      PERFORM get_period.
    Get PERNR from LDB
    GET pernr.
      IF p0000-stat2 <> '0'.
    Get the data from PA0001,PA2001, PA2006
        PERFORM get_pers_data.
      ENDIF.
                   T O P - O F - P A G E                                 *
    TOP-OF-PAGE.
    Header of the List
      PERFORM header.
                   E N D - O F - P A G E                                 *
    Footer
    END-OF-PAGE.
      IF p_qa = c_x.
    Display both Absence and Quota Data
        WRITE /1(188) sy-uline.
      ELSEIF p_q = c_x.
    Display only Quota Data
        WRITE /1(114) sy-uline.
      ELSEIF p_a = c_x.
    Display only Absence Data
        WRITE /1(125) sy-uline.
      ENDIF.
                   E N D - O F - S E L E C T I O N                       *
    END-OF-SELECTION.
    Combine the Absence and Quota Data
      PERFORM append_data.
      IF p_qa = c_x.
    Display both Absence and Quota Data
        PERFORM display_qa_data.
      ELSEIF p_q = c_x.
    Display only Quota Data
        PERFORM display_q_data.
      ELSEIF p_a = c_x.
    Display only Absence Data
        PERFORM display_a_data.
      ENDIF.
    *&      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'(006).
        ENDIF.
      ENDIF.
    Validation of Employee Status
      CLEAR t529u.
      IF NOT pnpstat2[] IS INITIAL.
        SELECT SINGLE statv
          INTO t529u-statv
          FROM t529u
          WHERE statv IN pnpstat2 AND
                statn = '2' AND
                sprsl = sy-langu.
        IF sy-subrc <> 0.
          MESSAGE e999 WITH 'Invalid Employee Status'(007).
        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'(008).
        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'(009).
        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'(010).
        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'(011).
        ENDIF.
      ENDIF.
    Validation of Payroll Area
      CLEAR t549a.
      IF NOT pnpabkrs[] IS INITIAL.
        SELECT abkrs
        FROM t549a UP TO 1 ROWS
          INTO t549a-abkrs
          WHERE abkrs IN pnpabkrs.
        ENDSELECT.
        IF sy-subrc <> 0.
          MESSAGE e999 WITH 'Incorrect Employee Payroll Area'(026).
        ENDIF.
      ENDIF.
    Validation of Absence Type
      CLEAR t554s.
      IF NOT s_awart[] IS INITIAL.
        SELECT subty
        FROM t554s UP TO 1 ROWS
          INTO t554s-subty
          WHERE subty IN s_awart AND
                moabw EQ c_moabw AND
                endda EQ c_endda.
        ENDSELECT.
        IF sy-subrc <> 0.
          MESSAGE e999 WITH 'Incorrect Employee Absence Type'(012).
        ENDIF.
      ENDIF.
    Validation of Absence Quota Type
      CLEAR t556a.
      IF NOT s_ktart[] IS INITIAL.
        SELECT ktart
        FROM t556a UP TO 1 ROWS
          INTO t556a-ktart
          WHERE ktart IN s_ktart AND
                mopgk EQ c_mopgk AND
                mozko EQ c_mozko AND
                endda EQ c_endda.
        ENDSELECT.
        IF sy-subrc <> 0.
          MESSAGE e999 WITH 'Incorrect Employee Quota Type'(013).
        ENDIF.
      ENDIF.
    ENDFORM.                  "validate_screen
    *&      Form  get_period
    Get the Correct Period based on Selection screen selection
    FORM get_period.
      CLEAR: gv_year,gv_mon, gv_date, gv_date1.
      gv_year = sy-datum+0(4).
      gv_mon  = sy-datum+4(2).
      IF pnptimr1 = c_x.      " Current Date
        pnpbegda = sy-datum.
        pnpendda = sy-datum.
      ELSEIF pnptimr2 = c_x.  " Current Month
        CONCATENATE gv_year gv_mon c_val INTO gv_date.
        CONCATENATE gv_year gv_mon c_val1 INTO gv_date1.
        pnpbegda = gv_date.
        pnpendda = gv_date1.
      ELSEIF pnptimr3 = c_x.  " Current Year
        CONCATENATE gv_year c_val c_val INTO gv_date.
        CONCATENATE gv_year c_val2 c_val1 INTO gv_date1.
        pnpbegda = gv_date.
        pnpendda = gv_date1.
      ELSEIF pnptimr4 = c_x.  " Upto Today
        pnpbegda = c_date1.
        pnpendda = sy-datum.
      ELSEIF pnptimr5 = c_x.  " From Today
        pnpbegda = sy-datum.
        pnpendda = c_endda.
      ELSE.
        IF ( pnpbegda IS INITIAL AND pnpendda IS INITIAL ).
          pnpbegda = c_date1.
          pnpendda = c_endda.
        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 Absence and Quota Data from PA0001,PA2001,PA2006
    FORM get_pers_data.
      DATA: lv_year1(4) TYPE n,
            lv_year2(4) TYPE n,
            lv_date1 TYPE sydatum,
            lv_date2 TYPE sydatum,
            lv_anzhb TYPE ptm_quonum.   " Last Year Balance days
    Get data from Respective Infotypes
      rp_provide_from_last p0001 space pnpbegda pnpendda.
    Absence Data
      LOOP AT p2001 WHERE pernr = pernr-pernr AND
                          begda GE pnpbegda   AND
                          endda LE pnpendda.
        IF p2001-awart IN s_awart.
          i_2001-pernr    = pernr-pernr.
          i_2001-subty    = p2001-subty.
          i_2001-awart    = p2001-awart.
          i_2001-abrtg    = p2001-abrtg.
          i_2001-begda    = p2001-begda.
          i_2001-endda    = p2001-endda.
          READ TABLE p0001 WITH KEY pernr = p2001-pernr.
          i_2001-ename    = p0001-ename.
    Get the Absence Type Text
          CLEAR gv_atext.
          SELECT SINGLE atext INTO gv_atext FROM t554t
                  WHERE sprsl = sy-langu AND
                        moabw = c_moabw  AND
                        awart = p2001-awart.
          IF sy-subrc = 0.
            i_2001-atext = gv_atext.
          ENDIF.
          APPEND i_2001.
          CLEAR i_2001.
        ENDIF.
      ENDLOOP.
    Quota Data
      LOOP AT p2006 WHERE pernr = pernr-pernr AND
                          begda GE pnpbegda   AND
                          endda LE pnpendda.
        IF p2006-ktart IN s_ktart.
          i_2006-pernr    = pernr-pernr.
          i_2006-subty    = p2006-subty.
          i_2006-begda    = p2006-begda.
          i_2006-endda    = p2006-endda.
          i_2006-year     = p2006-endda+0(4).
          i_2006-ktart    = p2006-ktart.
          i_2006-anzhl    = p2006-anzhl.
          i_2006-kverb    = p2006-kverb.
          i_2006-anzhb    = p2006-anzhl - p2006-kverb.
          READ TABLE p0001 WITH KEY pernr = p2001-pernr.
          i_2006-ename    = p0001-ename.
    Get the Quota Type Text
          CLEAR gv_ktext.
          SELECT SINGLE ktext INTO gv_ktext FROM t556b
                  WHERE sprsl = sy-langu AND
                        mopgk = c_mopgk  AND
                        mozko = c_mozko  AND
                        ktart = p2006-ktart.
          IF sy-subrc = 0.
            i_2006-ktext = gv_ktext.
          ENDIF.
          APPEND i_2006.
          CLEAR i_2006.
        ENDIF.
      ENDLOOP.
    For Vacation Quota (80) get the Balance of the Last Year and
    add to the Current Year Quota
      LOOP AT i_2006.
        IF i_2006-ktart = '80'.
          lv_year1 = i_2006-endda+0(4).
          lv_year2 = lv_year1 - 1.
          CONCATENATE lv_year2 '01' '01' INTO lv_date1.
          CONCATENATE lv_year2 '12' '31' INTO lv_date2.
          LOOP AT p2006 WHERE pernr = i_2006-pernr AND
                              begda GE lv_date1    AND
                              endda LE lv_date2    AND
                              ktart = '80'.
            lv_anzhb = p2006-anzhl - p2006-kverb.
            i_rep1-pernr = i_2006-pernr.
            i_rep1-ktext = i_2006-ktext.
            i_rep1-anzhl = p2006-anzhl.
            i_rep1-kverb = p2006-kverb.
            i_rep1-ename = i_2006-ename.
            i_rep1-begda = p2006-begda.
            i_rep1-endda = p2006-endda.
            i_rep1-anzhb = lv_anzhb.
            i_rep1-ktart = '80'.
            i_rep1-year = lv_year2.
            APPEND i_rep1.
            CLEAR: i_rep1.
          ENDLOOP.
        ENDIF.
        CLEAR: lv_year1, lv_year2,
               lv_date1, lv_date2,lv_anzhb.
      ENDLOOP.
      SORT i_rep1 BY pernr ktart.
    ENDFORM.          "get_pers_data
    *&      Form  append_data
    Put the Absence and Quota Data into one Report Int Table
    FORM append_data.
      CLEAR:   i_rep.
      REFRESH: i_rep.
      SORT i_2001 BY pernr awart.
      SORT i_2006 BY pernr ktart year.
    Move I_REP1 data into i_2006
      LOOP AT i_rep1.
        MOVE-CORRESPONDING i_rep1 TO i_2006.
        APPEND i_2006.
        CLEAR  i_2006.
      ENDLOOP.
    Move the Absence and Quota Data into a final Int Table
      LOOP AT i_2006.
        i_rep-pernr = i_2006-pernr.
        i_rep-ename = i_2006-ename.
        i_rep-ktart = i_2006-ktart.
        i_rep-anzhl = i_2006-anzhl.
        i_rep-kverb = i_2006-kverb.
        i_rep-ktext = i_2006-ktext.
        i_rep-anzhb = i_2006-anzhb.
        i_rep-year  = i_2006-year.
        CLEAR i_2001.
        CASE i_2006-ktart.
          WHEN '81'.
            PERFORM get_2001 USING i_2006-pernr '1000' i_2006-year.
          WHEN '50'.
            PERFORM get_2001 USING i_2006-pernr '1002' i_2006-year.
          WHEN '80'.
            PERFORM get_2001 USING i_2006-pernr '1001' i_2006-year.
          WHEN '56'.
            PERFORM get_2001 USING i_2006-pernr '1003' i_2006-year.
          WHEN '51'.
            PERFORM get_2001 USING i_2006-pernr '1004' i_2006-year.
          WHEN '52'.
            PERFORM get_2001 USING i_2006-pernr '1005' i_2006-year.
          WHEN '54'.
            PERFORM get_2001 USING i_2006-pernr '1006' i_2006-year.
          WHEN '53'.
            PERFORM get_2001 USING i_2006-pernr '1007' i_2006-year.
          WHEN '55'.
            PERFORM get_2001 USING i_2006-pernr '1008' i_2006-year.
          WHEN '57'.
            PERFORM get_2001 USING i_2006-pernr '1009' i_2006-year.
          WHEN '90'.
            PERFORM get_2001 USING i_2006-pernr '2000' i_2006-year.
          WHEN '58'.
            PERFORM get_2001 USING i_2006-pernr '2001' i_2006-year.
          WHEN '59'.
            PERFORM get_2001 USING i_2006-pernr '2002' i_2006-year.
          WHEN '91'.
            PERFORM get_2001 USING i_2006-pernr '2003' i_2006-year.
        ENDCASE.
        IF sy-subrc <> 0.
          APPEND i_rep.
        ENDIF.
        CLEAR i_rep.
      ENDLOOP.
      SORT i_rep BY pernr ktart year.
      DELETE i_rep WHERE pernr = ' '.
    ENDFORM.              " append_data
    *&      Form  display_qa_data
    Display the Absence and Quota Data
    FORM display_qa_data.
      DATA: lv_flag,                   " New Flag
            lv_tot2 TYPE ptm_quonum.   " Absence Balance days
      IF i_rep[] IS INITIAL.
        MESSAGE i000 WITH 'No Data found'(014).
      ELSE.
        LOOP AT i_rep.
    toggle color
          PERFORM toggle_color.
          IF lv_flag <> space.
            NEW-LINE.
          ENDIF.
          AT NEW pernr.
            READ TABLE i_rep INDEX sy-tabix.
            WRITE:/1 sy-vline,2(8) i_rep-pernr,
              10 sy-vline,11(40)   i_rep-ename.
          ENDAT.
          AT NEW ktart.
            READ TABLE i_rep INDEX sy-tabix.
            WRITE: 1 sy-vline, 10 sy-vline,
              51 sy-vline,52(25)   i_rep-ktext.
          ENDAT.
          AT NEW year.
            READ TABLE i_rep INDEX sy-tabix.
            WRITE: 1 sy-vline, 10 sy-vline,
                  51 sy-vline,
                  77 sy-vline, 78(4)  i_rep-year,
                  82 sy-vline, 83(11) i_rep-anzhl,
                  94 sy-vline, 95(25) i_rep-atext,
                 120 sy-vline,133 sy-vline,
                 144 sy-vline,
                 155 sy-vline,156(13)  i_rep-anzhb,
                 169 sy-vline.
          lv_tot2 = lv_tot2 + i_rep-anzhb.
          ENDAT.
          WRITE: 1 sy-vline,  10 sy-vline,
                51 sy-vline,  77 sy-vline,
                82 sy-vline,  94 sy-vline,
               120 sy-vline,121(12)  i_rep-abrtg NO-ZERO,
               133 sy-vline,134(10)  i_rep-begda NO-ZERO,
               144 sy-vline,145(10)  i_rep-endda NO-ZERO,
               155 sy-vline,169 sy-vline.
          NEW-LINE.
          AT END OF pernr.
            WRITE  : /1(169) sy-uline.
            SUM.
            FORMAT COLOR 3.
            WRITE:/1 sy-vline,   10 sy-vline,
                  51 sy-vline,   77 sy-vline,
                  82 sy-vline,   94 sy-vline,
                 120 sy-vline,121(12) i_rep-abrtg,
                 133 sy-vline,144 sy-vline,
                 155 sy-vline, 156(13) lv_tot2,
                 169 sy-vline.
            FORMAT COLOR OFF.
            WRITE  : /1(169) sy-uline.
            CLEAR lv_tot2.
          ENDAT.
        ENDLOOP.
      ENDIF.
    ENDFORM.              " display_qa_data
    *&      Form  display_q_data
    Display only the Quota Data
    FORM display_q_data.
      DATA: lv_flag.               " New Flag
      SORT i_2006 BY pernr ktart year.
      IF i_2006[] IS INITIAL.
        MESSAGE i000 WITH 'No Data found'(014).
      ELSE.
        LOOP AT i_2006.
    Toggle Color
          PERFORM toggle_color.
          IF lv_flag <> space.
            NEW-LINE.
          ENDIF.
          AT NEW pernr.
            READ TABLE i_2006 INDEX sy-tabix.
            WRITE: /1 sy-vline,  2(8)  i_2006-pernr,
                   10 sy-vline,11(40)  i_2006-ename.
          ENDAT.
          AT NEW ktart.
            READ TABLE i_2006 INDEX sy-tabix.
            WRITE: 1 sy-vline,10 sy-vline,
                  51 sy-vline,52(25)  i_2006-ktext.
          ENDAT.
          AT NEW year.
            READ TABLE i_2006 INDEX sy-tabix.
            WRITE: 1 sy-vline,  10 sy-vline,
                  51 sy-vline,
                  77 sy-vline,78(4)  i_2006-year,
                  82 sy-vline,83(11) i_2006-anzhl,
                  94 sy-vline,95(13) i_2006-anzhb,
                 108 sy-vline.
            NEW-LINE.
          ENDAT.
          AT END OF pernr.
            WRITE  : /1(108) sy-uline.
            SUM.
            FORMAT COLOR 3.
            WRITE: /1 sy-vline, 10 sy-vline,
                   51 sy-vline,
                   77 sy-vline, 82 sy-vline,
                   94 sy-vline, 95(13) i_2006-anzhb,
                  108 sy-vline.
            FORMAT COLOR OFF.
            WRITE  : /1(108) sy-uline.
          ENDAT.
        ENDLOOP.
      ENDIF.
    ENDFORM.              " display_q_data
    *&      Form  display_a_data
    Display Only the Absence Quota
    FORM display_a_data.
      DATA: lv_flag.               " New Flag
      SORT i_2001 BY pernr awart.
      IF i_2001[] IS INITIAL.
        MESSAGE i000 WITH 'No Data found'(014).
      ELSE.
        LOOP AT i_2001.
    Toggle Color
          PERFORM toggle_color.
          IF lv_flag <> space.
            NEW-LINE.
          ENDIF.
          AT NEW pernr.
            READ TABLE i_2001 INDEX sy-tabix.
            WRITE: /1 sy-vline, 2(10) i_2001-pernr,
                   10 sy-vline,11(40) i_2001-ename.
          ENDAT.
          WRITE:  1 sy-vline, 10 sy-vline,
                  51 sy-vline,52(25) i_2001-atext,
                  77 sy-vline,78(12) i_2001-abrtg,
                  90 sy-vline,91(10) i_2001-begda,
                 101 sy-vline,102(10) i_2001-endda,
                 112 sy-vline.
          NEW-LINE.
          AT END OF pernr.
            WRITE  : /1(112) sy-uline.
            SUM.
            FORMAT COLOR 3.
            WRITE: /1 sy-vline, 10 sy-vline,
                   51 sy-vline,
                   77 sy-vline,78(12) i_2001-abrtg,
                   90 sy-vline,101 sy-vline,
                  112 sy-vline.
            FORMAT COLOR OFF.
            WRITE  : /1(112) sy-uline.
          ENDAT.
        ENDLOOP.
      ENDIF.
    ENDFORM.              " display_a_data
    *&      Form  header
    Write the Report Header
    FORM header .
      data : lv_pers type pbtxt,
             lv_orgn type orgtx.
      gv_title1 = sy-title.              " Set List Header
      IF p_qa = c_x.
        NEW-PAGE LINE-SIZE 193.
      ELSEIF p_a = c_x.
        NEW-PAGE LINE-SIZE 125.
      ELSEIF p_q = c_x.
        NEW-PAGE LINE-SIZE 119.
      ENDIF.
    Standard header
      FORMAT RESET.
      CALL FUNCTION 'Z_STANDARD_HEADER'
        EXPORTING
          title1 = gv_title1.
    Get the Personal Area and Org.Unit Texts
      clear : lv_pers,lv_orgn.
      select single name1 into lv_pers
        from t500p where persa = pnpwerks-low.
      select single orgtx into lv_orgn
        from t527x where sprsl = sy-langu and
                         orgeh = pnporgeh-low and
                         endda = c_endda.
      if not lv_pers is initial.
        write : /2 'Personal Area:'(017), 17(25) lv_pers color 7.
      endif.
      if not lv_orgn is initial.
        write : /2 'Organization Unit:'(021), 20(25) lv_orgn color 3.
      endif.
      IF p_qa = c_x.
        FORMAT COLOR COL_HEADING.
        WRITE  : /1(169) sy-uline.
        WRITE:/1 sy-vline,2(8)    'Emp.No'(015) CENTERED,
              10 sy-vline,11(40)  'Employee Name'(016) CENTERED,
              51 sy-vline,52(25)  'Quota Description'(018) CENTERED,
              77 sy-vline,78(4)   'Year'(027),
              82 sy-vline,83(11)  'Entitlement'(019),
              94 sy-vline,95(25)  'Absence Description'(022) CENTERED,
             120 sy-vline,121(12) 'Absence days'(023),
             133 sy-vline,134(10) 'From Date'(024),
             144 sy-vline,145(10) 'To Date'(025),
             155 sy-vline,156(13) 'Quota Balance'(020),
             169 sy-vline.
        WRITE  : /1(169) sy-uline.
      ELSEIF p_q = c_x.
        FORMAT COLOR COL_HEADING.
        WRITE  : /1(108) sy-uline.
        WRITE:/1 sy-vline,2(8)   'Emp.No'(015) CENTERED,
              10 sy-vline,11(40) 'Employee Name'(016) CENTERED,
              51 sy-vline,52(25) 'Quota Description'(018) CENTERED,
              77 sy-vline,78(4)  'Year'(027),
              82 sy-vline,83(11) 'Entitlement'(019),
              94 sy-vline,95(13) 'Quota Balance'(020),
             108 sy-vline.
        WRITE  : /1(108) sy-uline.
      ELSEIF p_a = c_x.
        FORMAT COLOR COL_HEADING.
        WRITE  : /1(112) sy-uline.
        WRITE:/1 sy-vline,2(8)    'Emp.No'(015) CENTERED,
              10 sy-vline,11(40)  'Employee Name'(016) CENTERED,
              51 sy-vline,52(25)  'Absence Description'(022) CENTERED,
              77 sy-vline,78(12)  'Absence days'(023),
              90 sy-vline,91(10)  'From Date'(024),
             101 sy-vline,102(10) 'To Date'(025),
             112 sy-vline.
        WRITE  : /1(112) sy-uline.
      ENDIF.
    ENDFORM.                    " header
    *&      Form  toggle_color
    This routine alters the color of the records in the list
    FORM toggle_color.
      IF gv_dial = space.
        FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
        gv_dial = c_x.
      ELSE.
        FORMAT COLOR 1 INTENSIFIED OFF.
        CLEAR gv_dial.
      ENDIF.
    ENDFORM.                    " toggle_color
    *&      Form  get_2001
    Get the ABsence type for each Quota type
    FORM get_2001 USING p_pernr TYPE persno
                        p_value TYPE awart
                        p_year.
      LOOP AT i_2001 WHERE pernr = p_pernr AND
                           awart = p_value AND
                           endda+0(4) = p_year.
        i_rep-awart = i_2001-awart.
        i_rep-abrtg = i_2001-abrtg.
        i_rep-atext = i_2001-atext.
        i_rep-begda = i_2001-begda.
        i_rep-endda = i_2001-endda.
        APPEND i_rep.
      ENDLOOP.
    ENDFORM.                                                    " get_2001
    Regards
    anji

  • Regarding sending email with priority

    hi experts,
    how to send email to multiple email ids with priority

    Dear thomson,
    i have developed report like bellow its working fine but when i send mail to multiple email ids it is sent sorted form i dont want like tat i want 2 send as per my input sequience
    thanks
    REPORT  zhrr_res_email.
    Infotypes                                                            *
    INFOTYPES : 0000, "Actions
                0001, "Organizational Assignment
                0002, "Personal Details
                0009, "Bank Details
                0587, "Provident Fund Contribution
                0185, "Personal IDs
                0041, "Date Specifications
                0105. "Communication
    TABLES : pa0105, pernr.
    Internal Tables                                                      *
    DATA :
           BEGIN OF t_output OCCURS 0,
              pernr LIKE pernr-pernr, " Personnel No.
              ename TYPE emnam,       " Employee Name
              kostl TYPE kostl,       " Cost Center
              ptext TYPE pktxt,       " Grade Text
              btrtl TYPE btrtl,       " Sub Area
              btext TYPE btext,       " Sub Area Text
              jdate TYPE begda,       " Joing Date
              ldate TYPE begda,       " releaving date
              stext TYPE stext,       " Designation
              dept TYPE stext,         " Department
              comp_name TYPE butxt,    " Company
             e_mail TYPE stext,
              e_pernr TYPE pernr-pernr,
              e_pernr1 TYPE stext,
              e_name TYPE emnam,
              fax TYPE stext,
              tel_extens TYPE stext,
              email TYPE stext,
           END OF t_output,
           BEGIN OF t_pa0000 OCCURS 0,
             pernr TYPE pa0000-pernr,
             subty TYPE pa0000-subty,
             begda TYPE pa0000-begda,
             massn TYPE pa0000-massn,
             massg TYPE pa0000-massg,
          END OF t_pa0000,
          BEGIN OF to_hrp1001  OCCURS 0,
            otype TYPE hrp1001-otype,
            objid TYPE hrp1001-objid,
            plvar TYPE hrp1001-plvar,
            begda TYPE hrp1001-begda,
            endda TYPE hrp1001-endda,
            sclas TYPE hrp1001-sclas,
            sobid TYPE hrp1001-sobid,
        END OF to_hrp1001,
        BEGIN OF tt_pa0105 OCCURS 0,
           usrid_long TYPE pa0105-usrid_long,
        END OF tt_pa0105,
        BEGIN OF t_zhrt_res_email OCCURS 0,
           pernr TYPE zhrt_res_email-pernr,
           edate TYPE zhrt_res_email-edate,
           etime TYPE zhrt_res_email-etime,
        END OF t_zhrt_res_email.
    DATA: tt_zhrt_res_email1 LIKE zhrt_res_email OCCURS 0 WITH HEADER LINE .
    DATA: tt_zhrt_res_email LIKE zhrt_res_email OCCURS 0 WITH HEADER LINE .
    DATA: t_pa0105 LIKE pa0105 OCCURS 0 WITH HEADER LINE .
    DATA: t_pa0001 LIKE pa0001 OCCURS 0 WITH HEADER LINE .
    DATA: objtxt  LIKE solisti1   OCCURS 10 WITH HEADER LINE.
    DATA: objcont  LIKE solisti1   OCCURS 10 WITH HEADER LINE.
    DATA: reclist LIKE somlreci1  OCCURS  5 WITH HEADER LINE.
    DATA: reclist1 LIKE somlreci1  OCCURS  5 WITH HEADER LINE.
    DATA: doc_chng LIKE sodocchgi1.
    DATA : lines LIKE tline OCCURS 0 WITH HEADER LINE.
    Work Area                                                            *
    Working Variables                                                    *
    DATA :
          w_var TYPE i,
          w_no_days TYPE i,
          dt1(12) TYPE c,
          dt2(12) TYPE c,
          dt3(12) TYPE c,
          dt4(12) TYPE c.
    Selectin Screen                                                      *
    SELECTION-SCREEN COMMENT 1(20) ctxt.
    SELECTION-SCREEN COMMENT 23(5) ctxt1.
    SELECTION-SCREEN COMMENT 30(15) ctxt2.
    SELECTION-SCREEN COMMENT 48(10) ctxt3.
    SELECTION-SCREEN COMMENT 60(15) ctxt4.
    SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 5(19) text-004.
    PARAMETERS :rl_dt LIKE sy-datum .
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 5(19) text-007.
    PARAMETERS :rs_dt LIKE sy-datum .
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 5(19) text-005.
    PARAMETERS :sf_note(10) TYPE c .
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 5(19) text-009.
    PARAMETERS :rs_l(50) TYPE c .
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 5(19) text-008.
    PARAMETERS :fr_by(30) TYPE c .
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 5(19) text-015.
    PARAMETERS : ipc(3) TYPE c .
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 5(19) text-016.
    PARAMETERS :pce(30) TYPE c .
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 5(19) text-017.
    PARAMETERS :pcn(30) TYPE c .
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN END OF BLOCK b1.
    SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-100.
    DATA : w_name TYPE pa0105-usrid_long.
    SELECT-OPTIONS : s_name FOR w_name NO INTERVALS.
    SELECT-OPTIONS :s_name1 FOR w_name NO INTERVALS.
    SELECTION-SCREEN END OF BLOCK b2.
    AT SELECTION-SCREEN.                                                 *
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR ipc.
      DATA : BEGIN OF value1 OCCURS 0,
              status TYPE zhrt_res_email-status,
            END OF value1.
      DATA : value LIKE value1 OCCURS 0 WITH HEADER LINE.
      DATA  return_tab   LIKE ddshretval OCCURS 0 WITH HEADER LINE.
      DATA : val(3) TYPE c.
      DATA  retfield  TYPE  dfies-fieldname.
      retfield = 'STATUS'.
      value-status = 'YES'.
      APPEND value.
      value-status = 'NO'.
      APPEND value.
      DATA  dynpprog LIKE sy-repid.
      DATA  dynpnr   LIKE sy-dynnr.
      CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
        EXPORTING
         ddic_structure   = 'ZHRT_RES_EMAIL'
          retfield         =  'STATUS'
          dynpprog         = sy-repid
          dynpnr           = sy-dynnr
         dynprofield       = 'IPC'
          value_org        = 'S'
          callback_program = sy-repid
        TABLES
          value_tab        = value
          return_tab       = return_tab
        EXCEPTIONS
          parameter_error  = 1
          no_values_found  = 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.
      ELSE.
        READ TABLE return_tab INDEX 1.
        IF sy-subrc = 0.
          ipc = return_tab-fieldval.
        ENDIF.
      ENDIF.
    AT SELECTION-SCREEN.
      IF  rs_dt NE '00000000' AND rl_dt NE '00000000'.
        CALL FUNCTION 'HR_SGPBS_YRS_MTHS_DAYS'
          EXPORTING
            beg_da        = rl_dt
            end_da        = rs_dt
          IMPORTING
            no_cal_day    = w_no_days
          EXCEPTIONS
            dateint_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.
      ENDIF.
      w_var = w_no_days.
      sf_note = 30 - w_var.
      IF ipc EQ 'YES'.
        SELECT SINGLE ename FROM pa0001 INTO pcn WHERE pernr EQ pce.
      ENDIF.
    AT SELECTION-SCREEN OUTPUT.
      SELECT SINGLE * FROM pa0001 INTO t_pa0001 WHERE pernr = pnppernr-low AND
                                                       begda LE pn-endda AND
                                                       endda GE pn-endda.
      READ TABLE t_pa0001 WITH KEY  pernr = pernr-pernr.
      ctxt = t_pa0001-ename.
      SELECT SINGLE ptext FROM t503t INTO ctxt1 WHERE persk = t_pa0001-persk AND sprsl EQ 'EN'.
      SELECT SINGLE ptext FROM t501t INTO ctxt3 WHERE persg = t_pa0001-persg AND sprsl EQ 'EN'.
      SELECT SINGLE btext FROM t001p INTO ctxt2 WHERE btrtl = t_pa0001-btrtl.
      SELECT SINGLE butxt FROM t001 INTO ctxt4 WHERE bukrs = t_pa0001-bukrs AND spras EQ 'EN'.
    INITIALIZATION.                                                      *
    INITIALIZATION.
      SELECTION-SCREEN BEGIN OF SCREEN 500 TITLE title
                                         AS WINDOW.
      SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-011.
      SELECTION-SCREEN BEGIN OF LINE.
      PARAMETER : r1 RADIOBUTTON GROUP pr2 DEFAULT 'X'.
      SELECTION-SCREEN COMMENT 4(50) text-013.
      SELECTION-SCREEN END OF LINE.
      SELECTION-SCREEN BEGIN OF LINE.
      PARAMETER : r2 RADIOBUTTON GROUP pr2.
      SELECTION-SCREEN COMMENT 4(55) text-012.
      SELECTION-SCREEN END OF LINE.
      SELECTION-SCREEN END OF BLOCK b3.
      SELECTION-SCREEN END OF SCREEN 500.
      title = 'Selection'.
      CALL SELECTION-SCREEN '0500' STARTING AT 2 2.
      IF r1 IS INITIAL.
        CALL TRANSACTION 'ZHRR_RES_DELETE_EMIL'.
      ENDIF.
    Get Pernr                                                *
    GET pernr.
      IF pnppernr-low IS INITIAL.
        MESSAGE 'Enter Personal number' TYPE 'E'.
      ENDIF.
      SELECT * FROM zhrt_res_email INTO tt_zhrt_res_email1 WHERE pernr = pernr-pernr.
      ENDSELECT.
      READ TABLE tt_zhrt_res_email1 WITH KEY  pernr = pernr-pernr.
      IF pernr-pernr = tt_zhrt_res_email1-pernr.
        DATA: etxt(50) TYPE c,
              dt LIKE sy-datum.
        dt = tt_zhrt_res_email1-edate.
        CALL FUNCTION 'CONVERT_DATE_FORMAT'
          EXPORTING
            i_date      = dt
          IMPORTING
            e_calc_date = dt.
        CONCATENATE 'Already mail sent on- ' dt INTO etxt.
        MESSAGE etxt  TYPE 'E'.
      ELSE.
        PERFORM read_data. " Read Data
        PERFORM recepient.
        PERFORM send_mail.
        REFRESH t_output.
        PERFORM status_check.
      ENDIF.
    END-OF-SELECTION.                                                    *
    END-OF-SELECTION.
      MODIFY zhrt_res_email FROM TABLE tt_zhrt_res_email.
      DATA msg(200) TYPE c.
      LOOP AT reclist1.
        IF reclist-retrn_code = 0.
          CONCATENATE reclist1-receiver ': Sent Successfully'
            INTO msg SEPARATED BY space.
          IF reclist1-receiver IS NOT INITIAL.
            WRITE : msg.
          ENDIF.
          CLEAR msg.
        ELSE.
          WRITE : reclist1-receiver , 'Not sent'.
        ENDIF.
      ENDLOOP.
    *&      Form  send_mail
    FORM send_mail .
      REFRESH : objcont.
      LOOP AT t_output.
        CONCATENATE 'COMPANY NAME.....................:    't_output-comp_name INTO objcont.
        CONDENSE objcont.
        APPEND objcont.
        CLEAR objcont.
        APPEND objcont.
        CLEAR objcont.
        CONCATENATE 'RESIGNATION RECEIVED FROM:' '.' INTO objcont.
        CONDENSE objcont.
        APPEND objcont.
        CLEAR objcont.
        CONCATENATE '----
    ' '.' INTO objcont.
        CONDENSE objcont.
        APPEND objcont.
        CLEAR objcont.
        CONCATENATE '* Employee Code.......................:'t_output-pernr INTO objcont SEPARATED BY space.
        CONDENSE objcont.
        APPEND objcont.
        CLEAR objcont.
        CONCATENATE '* Name.....................................: 't_output-ename INTO objcont SEPARATED BY space.
        CONDENSE objcont.
        APPEND objcont.
        CLEAR objcont.
        CONCATENATE '* Designation.............................:'t_output-stext INTO objcont SEPARATED BY space.
        CONDENSE objcont.
        APPEND objcont.
        CLEAR objcont.
        CONCATENATE t_output-jdate0(2) '/' t_output-jdate2(2) '/' t_output-jdate+4(4) INTO dt1.
        CONCATENATE '* Date of Joining.........................:    'dt1 INTO objcont SEPARATED BY space.
        CONDENSE objcont.
        APPEND objcont.
        CLEAR objcont.
        CONCATENATE '* Grade......................................:    't_output-ptext INTO objcont SEPARATED BY space..
        CONDENSE objcont.
        APPEND objcont.
        CLEAR objcont.
        CONCATENATE '* Branch/Department...................:     't_output-dept '/' t_output-btext INTO objcont SEPARATED BY space.
        CONDENSE objcont.
        APPEND objcont.
        CLEAR objcont.
        CALL FUNCTION 'CONVERT_DATE_FORMAT'
          EXPORTING
            i_date      = rl_dt
          IMPORTING
            e_calc_date = rl_dt.
        CONCATENATE rl_dt0(2) '/' rl_dt2(2) '/' rl_dt+4(4) INTO dt2.
        CONCATENATE '* Resignation Submitted on......... :     'dt2 INTO objcont SEPARATED BY space.
        CONDENSE objcont.
        APPEND objcont.
        CLEAR objcont.
        CALL FUNCTION 'CONVERT_DATE_FORMAT'
          EXPORTING
            i_date      = rs_dt
          IMPORTING
            e_calc_date = rs_dt.
        CONCATENATE rs_dt0(2) '/' rs_dt2(2) '/' rs_dt+4(4) INTO dt3.
        CONCATENATE '* Asked Date of Release..............:     'dt3 INTO objcont SEPARATED BY space.
        CONDENSE objcont.
        APPEND objcont.
        CLEAR objcont.
        CONCATENATE '* Short Fall of Notice....................:     'sf_note INTO objcont SEPARATED BY space.
        CONDENSE objcont.
        APPEND objcont.
        CLEAR objcont.
        CONCATENATE '* Reason for leaving HCC..............:     'rs_l INTO objcont SEPARATED BY space.
        CONDENSE objcont.
        APPEND objcont.
        CLEAR objcont.
        CONCATENATE '* Forwarded by.............................:'fr_by INTO objcont SEPARATED BY space.
        CONDENSE objcont.
        APPEND objcont.
        CLEAR objcont.
        APPEND objcont.
        CLEAR objcont.
        CONCATENATE '----
    ' '.' INTO objcont.
        CONDENSE objcont.
        APPEND objcont.
        CLEAR objcont.
        APPEND objcont.
        CLEAR objcont.
        CONCATENATE 'This is Computer generated report' '.' INTO objcont.
        CONDENSE objcont.
        APPEND objcont.
        CLEAR objcont.
        APPEND objcont.
        CLEAR objcont.
        CONCATENATE 'With Regards,' '' INTO objcont.
        CONDENSE objcont.
        APPEND objcont.
        CLEAR objcont.
        APPEND objcont.
        CLEAR objcont.
        CONCATENATE t_output-e_name '' INTO objcont.
        CONDENSE objcont.
        APPEND objcont.
        CLEAR objcont.
        CONCATENATE 'Personnel Manager' '' INTO objcont.
        CONDENSE objcont.
        APPEND objcont.
        CLEAR objcont.
        CONCATENATE 'Hindustan Construction Company Ltd' '.' INTO objcont.
        CONDENSE objcont.
        APPEND objcont.
        CLEAR objcont.
        CONCATENATE 'Hincon House, LBS Marg' '' INTO objcont.
        CONDENSE objcont.
        APPEND objcont.
        CLEAR objcont.
        CONCATENATE 'Vikhroli (West)' '' INTO objcont.
        CONDENSE objcont.
        APPEND objcont.
        CLEAR objcont.
        CONCATENATE 'Mumbai 400083, India' '.' INTO objcont.
        CONDENSE objcont.
        APPEND objcont.
        CLEAR objcont.
        APPEND objcont.
        CLEAR objcont.
        CONCATENATE 'Tel:' t_output-tel_extens INTO objcont.
        CONDENSE objcont.
        APPEND objcont.
        CLEAR objcont.
        CONCATENATE 'Fax:'t_output-fax  INTO objcont.
        CONDENSE objcont.
        APPEND objcont.
        CLEAR objcont.
        CONCATENATE 'Email:' t_output-email  INTO objcont.
        CONDENSE objcont.
        APPEND objcont.
        CLEAR objcont.
        CONCATENATE 'Website: om' '.' INTO objcont.
        CONDENSE objcont.
        APPEND objcont.
        CLEAR objcont.
      ENDLOOP.
      doc_chng-obj_name = ''.
      doc_chng-obj_descr = 'Resignation'.
      doc_chng-priority   = 'X'.
      CALL FUNCTION 'SO_NEW_DOCUMENT_SEND_API1'
        EXPORTING
          document_data              = doc_chng
          document_type              = 'RAW'
          put_in_outbox              = 'X'
          commit_work                = 'X'
        TABLES
          object_content             = objcont
          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.
    DATA msg(200) TYPE c.
      CASE sy-subrc.
        WHEN 0.
          MESSAGE 'Mail has sent Succesfully' TYPE 'I'.
        WHEN 2.
          WRITE: / 'Document could not be sent to any of the recipients!'.
        WHEN 4.
          WRITE: / 'No authorization to send !'.
        WHEN OTHERS.
          WRITE: / 'Error occurred during sending !'.
      ENDCASE.
    ENDFORM.                    " send_mail
    *&      Form  recepient
    FORM recepient .
      LOOP AT s_name.
        TRANSLATE s_name-low TO UPPER CASE.
        reclist-receiver = s_name-low.
        reclist-rec_type = 'U'.
        APPEND reclist.
        CLEAR  reclist.
      ENDLOOP.
      LOOP AT s_name1.
        TRANSLATE s_name1-low TO UPPER CASE.
        reclist-receiver = s_name1-low.
        reclist-rec_type = 'U'.
        reclist-copy = 'X'.
        APPEND reclist.
        CLEAR  reclist.
      ENDLOOP.
      IF pce IS NOT INITIAL.
        SELECT SINGLE usrid_long FROM pa0105 INTO tt_pa0105-usrid_long WHERE usrty = '0010' AND
                                                                pernr = pce.
        APPEND tt_pa0105.
      ENDIF.
      LOOP AT tt_pa0105.
       CLEAR : reclist.
        TRANSLATE tt_pa0105-usrid_long TO UPPER CASE.
        reclist-receiver = tt_pa0105-usrid_long.
        reclist-rec_type = 'U'.
        reclist-copy = 'X'.
        APPEND reclist.
        CLEAR  reclist.
      ENDLOOP.
      reclist1[] = reclist[].
    ENDFORM.                    " recepient
    *&      Form  read_data
    FORM read_data .
    Actions
      PROVIDE * FROM p0000  BETWEEN pn-begda AND pn-endda.
        CASE p0000-massn.
          WHEN 'A1'.
            t_output-jdate = p0000-begda.
          WHEN 'B6'.
            t_output-jdate = p0000-begda.
          WHEN 'B3'.
            t_output-ldate = p0000-begda.
        ENDCASE.
      ENDPROVIDE.
      CALL FUNCTION 'CONVERT_DATE_FORMAT'
        EXPORTING
          i_date      = t_output-jdate
        IMPORTING
          e_calc_date = t_output-jdate.
    Organizational Assignment
      rp_provide_from_last p0001 space pn-begda pn-endda.
      IF pnp-sw-found EQ '1'.
        t_output-pernr = pernr-pernr.
        t_output-ename = p0001-ename.
    Company
        SELECT SINGLE butxt FROM t001
                      INTO t_output-comp_name
                      WHERE bukrs = p0001-bukrs.
    PSA
        SELECT SINGLE btext FROM t001p
                      INTO t_output-btext
                      WHERE btrtl = p0001-btrtl.
    Grade text
        SELECT SINGLE ptext FROM t503t
                      INTO t_output-ptext
                      WHERE persk = p0001-persk AND
                            sprsl = 'EN'.
    designation
        SELECT SINGLE stext
                    FROM hrp1000 INTO t_output-stext
                      WHERE otype = 'S' AND
                            objid =  p0001-plans AND
                            plvar  = '01' AND
                            langu = 'EN'.
    *Department text DEPT
        SELECT  otype
                objid
                plvar
                begda
                endda
                sclas
                sobid FROM hrp1001 INTO CORRESPONDING FIELDS OF
                TABLE to_hrp1001
                WHERE otype = 'O'    AND
                      plvar = '01'   AND
                      rsign = 'B'    AND
                      relat = '003'  AND
                      sclas = '94'   AND
                      begda LE pn-endda AND
                      endda GE pn-endda.
        READ TABLE to_hrp1001 WITH KEY objid = p0001-orgeh.
        IF sy-subrc NE 0.
          CLEAR : t_output-dept.
        ELSE.
          SELECT SINGLE stext FROM hrp1000 INTO t_output-dept
                        WHERE objid = to_hrp1001-sobid AND
                              otype = to_hrp1001-sclas AND
                              plvar = '01'  AND
                              langu = sy-langu AND
                              begda LE pn-endda AND
                              endda GE pn-endda.
        ENDIF.
      ENDIF.
      SELECT SINGLE usrid_long  FROM pa0105 INTO t_output-e_mail
                         WHERE pernr = pernr-pernr AND
                               subty = '0010'.
      SELECT SINGLE persnumber  FROM usr21 INTO t_output-e_pernr1
                         WHERE bname = sy-uname.
      SELECT SINGLE smtp_addr  FROM adr6 INTO t_output-email
                        WHERE persnumber = t_output-e_pernr1.
      TRANSLATE t_output-email TO UPPER CASE.
      SELECT SINGLE pernr  FROM pa0105 INTO t_output-e_pernr
                         WHERE usrid_long = t_output-email AND
                               subty = '0010'.
      SELECT SINGLE usrid  FROM pa0105 INTO t_output-fax
                         WHERE pernr = t_output-e_pernr AND
                               subty = '0005'.
      SELECT SINGLE usrid_long  FROM pa0105 INTO t_output-tel_extens
                      WHERE pernr = t_output-e_pernr AND
                            subty = '0020'.
      SELECT SINGLE ename  FROM pa0001 INTO t_output-e_name
                          WHERE pernr = t_output-e_pernr.
      APPEND t_output.
      CLEAR t_output.
    ENDFORM.                    " read_data
    *&      Form  status_check
    FORM status_check .
      tt_zhrt_res_email-pernr = pernr-pernr.
      tt_zhrt_res_email-edate = sy-datum.
      tt_zhrt_res_email-etime = sy-uzeit.
      APPEND tt_zhrt_res_email.
      CLEAR tt_zhrt_res_email.
    ENDFORM.                    " status_check
    Edited by: gopi sankuratri on Jun 26, 2008 10:44 AM

  • Regarding Documentation

    Hi Techies,
    we all are using different macro RP_PROVIDE_FROM_LAST etc. since long time,
    but where do we get documentation regarding particular macro.
    and Most of the functin module which we are using in HR ABAP are with out documentation in SE37.
    Is there any other way to get the documentations.
    Thanks in Adv.
    Raju Mummidi.

    Hi,
    Please find the documentation of macro in sap help...here the links are
    help.sap.com/saphelp_46c/helpdata/en/60/d8bc17576311d189270000e8322f96/content.htm
    help.sap.com/saphelp_45b/helpdata/en/60/d8bc17576311d189270000e8322f96/content.htm
    Regs
    Rani

Maybe you are looking for

  • Is it possible to viw the frame rate (fps) on the finder?

    I have always been interested to see what the frame rate of my iMac is, but I can't work out how. I've searched the built in help, I have tried to search through the previous discussions on the topic but all with very limited success. There has to be

  • Material document getting with mvt 552 during ticketing

    Hi, I am creating ticketing activities  for STO using movement scenario 16, with reference to the nomination i have posted two ticket documents, it had created the STO delivery in the back ground and material document also got created with movement t

  • Planning layout TEST cannot be used here

    Hi, When creating planning level in KEPM the following message displayed. "Planning layout 0-GEN01 cannot be used here". Thanks and regards Murugesan

  • Lost commitments in project system

    In our projects we have a lot of problems with lost commitments. The POs are still existing. GRs are posted but not valuated. We are getting an error during invoice posting because of exceeded budget. RKANBU01 solve this problem and the commitments a

  • Siri can't find Home

    I tried setting a reminder in Siri on my new iPhone 5, like "Remind me to put my pants on when I leave Home".  This used to work on my 4S, but now Siri responds with "Sorry, I don't see 'Home' in your contacts." or "I don't know who 'Home' is."  Howe