Wednesday, October 13, 2010

hr abap- macro

Q1] from what I'm understanding you are saying that rp_provide_from_last and rp_provide_from_frst are resulting in the same data being taken in. If it is not a reading problem I bet that the infotype that you are reading only has one record in it, meaning the first and last record would defintly be equal

ANS>

Instead of using the rp-provide from last you can use the provide statement only. See attached a program here using the rp-read-infotype macro you can have a better control.

************************************************************************

  • AUTHOR : shekhar s kulkarni
  • DATE : 18th july 2003
  • DESCRIPTION :

*

  • DEV REQUEST :

************************************************************************

  • MODIFICATION LOGS
  • VERSION
  • DATE
  • REQUEST NO
  • DESCRIPTION

************************************************************************
REPORT zpyr_overseasemplist.
*Declaration for type pool
TYPE-POOLS :slis.

*Declaration for tables
TABLES : pa0000,pa0008, zhrrole, zhrband, zhrrole_assg,t001p,t503t,t500p
,t005h,t591s.

*Declaration for infotypes
INFOTYPES : 0000,0001,9009,0008,9001,9015.

*Declaration data for alv list
DATA: lv_tmplt LIKE disvariant VALUE 'ZPYR_ELIGIBLESALARY',
lv_fieldcat TYPE slis_t_fieldcat_alv,
lv_ls_layout TYPE slis_layout_alv,
driver LIKE sy-repid,
wa_lv_fieldcat TYPE slis_fieldcat_main,
farben TYPE slis_specialcol_alv, "color display
it_events TYPE slis_t_event,
wa_events TYPE slis_alv_event,
gs_extract1 LIKE disextract.

DATA: BEGIN OF it_leavedate OCCURS 0.
INCLUDE STRUCTURE hida.
DATA: END OF it_leavedate.

*Declaration data for program zpyr_overseasemplist
DATA : BEGIN OF it_overseas OCCURS 0,
empno LIKE pa0008-pernr,
name LIKE pa0001-ename,
c_role_desc LIKE zhrrole-zrole_desc,
band LIKE zhrband-zband_desc,
perband LIKE pa0008-trfgr,
category LIKE pa0001-ename,
country LIKE t591s-stext,
currency LIKE pa0008-waers,
pu LIKE pa0001-btrtl,
du LIKE pa9009-du_cd,
location LIKE t500p-name1,
region LIKE t005h-bezei,
doj LIKE sy-datum,
start_period LIKE sy-datum,
end_period LIKE sy-datum,
basic LIKE pa0008-bet01,
hra LIKE pa0008-bet01,
insurance LIKE pa0008-bet01,
oda LIKE pa0008-bet01,
car_all LIKE pa0008-bet01,
gross_1 LIKE pa0008-bet01,
bonus LIKE pa0008-bet01,
cpi LIKE pa0008-bet01,
gross_2 LIKE pa0008-bet01,
provision LIKE pa0008-bet01,
tax LIKE pa0008-bet01,
total LIKE pa0008-bet01,
gross LIKE pa0008-bet01,
END OF it_overseas.

DATA : BEGIN OF it_empoverseas OCCURS 0,
empno LIKE pa0008-pernr,
name LIKE pa0001-ename,
category LIKE pa0001-ename,
country LIKE t591s-stext,
currency LIKE pa0008-waers,
gross LIKE pa0008-bet01,
END OF it_empoverseas.

*Declaration data for program
DATA : gc_startdate TYPE pa0008-begda,
gc_enddate TYPE pa0008-endda,
lc_dt TYPE sy-datum,
li_tdt TYPE i,
li_days TYPE i,
lf_mon_bonus TYPE pa0008-bet01,
gc_chkdate TYPE pa0000-begda,
lc_flag TYPE c.

DATA: BEGIN OF ppbwla OCCURS 10.
INCLUDE STRUCTURE pbwla.
DATA: END OF ppbwla.

***********************Selection screen *******************************
SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE text-001.
PARAMETERS: p_pabrp LIKE qppnp-pabrp,
p_pabrj LIKE qppnp-pabrj.
PARAMETERS: p_prcnt LIKE pa0008-bet01 DEFAULT '8',
p_bprcnt LIKE pa0008-bet01 DEFAULT '50'.
SELECTION-SCREEN END OF BLOCK blk1.
***********************************************************************

***********************Initialization**********************************
INITIALIZATION.
lv_ls_layout-group_change_edit = 'X'.
lv_ls_layout-get_selinfos = 'X'.
driver = 'ZPYR_OVERSEASEMPLIST'.
p_pabrp = sy-datum+4(2).
p_pabrj = sy-datum+0(4).

***********************************************************************

**********************Start of selection******************************
START-OF-SELECTION.
PERFORM data_selection. "Data selection from tables
PERFORM alv_listdisplay. "alv grid display

END-OF-SELECTION.

&---------------------------------------------------------------------
*& Form INIT_FIELDCAT
&---------------------------------------------------------------------

  • Intialization of text for columns in the internal table

----------------------------------------------------------------------
FORM init_fieldcat.
LOOP AT lv_fieldcat INTO wa_lv_fieldcat.
CASE wa_lv_fieldcat-fieldname.
WHEN 'EMPNO'.
wa_lv_fieldcat-seltext_l = 'Emp Number'.
wa_lv_fieldcat-ddictxt = 'L'.
wa_lv_fieldcat-ddic_outputlen = 13.
MODIFY lv_fieldcat FROM wa_lv_fieldcat.
WHEN 'DOJ'.
wa_lv_fieldcat-seltext_l = 'Join Date'.
wa_lv_fieldcat-ddictxt = 'L'.
wa_lv_fieldcat-ddic_outputlen = 13.
MODIFY lv_fieldcat FROM wa_lv_fieldcat.
WHEN 'NAME'.
wa_lv_fieldcat-seltext_l = 'Name'.
wa_lv_fieldcat-ddictxt = 'L'.
wa_lv_fieldcat-ddic_outputlen = 13.
MODIFY lv_fieldcat FROM wa_lv_fieldcat.
WHEN 'BAND'.
wa_lv_fieldcat-seltext_l = 'Job Band'.
wa_lv_fieldcat-ddictxt = 'L'.
wa_lv_fieldcat-ddic_outputlen = 13.
MODIFY lv_fieldcat FROM wa_lv_fieldcat.
WHEN 'PERBAND'.
wa_lv_fieldcat-seltext_l = 'Personal Band'.
wa_lv_fieldcat-ddictxt = 'L'.
wa_lv_fieldcat-ddic_outputlen = 13.
MODIFY lv_fieldcat FROM wa_lv_fieldcat.
WHEN 'COUNTRY'.
wa_lv_fieldcat-seltext_l = 'Country'.
wa_lv_fieldcat-ddictxt = 'L'.
wa_lv_fieldcat-ddic_outputlen = 13.
MODIFY lv_fieldcat FROM wa_lv_fieldcat.
WHEN 'CURRENCY'.
wa_lv_fieldcat-seltext_l = 'Currency'.
wa_lv_fieldcat-ddictxt = 'L'.
wa_lv_fieldcat-ddic_outputlen = 13.
MODIFY lv_fieldcat FROM wa_lv_fieldcat.
WHEN 'BASIC'.
wa_lv_fieldcat-seltext_l = 'Basic'.
wa_lv_fieldcat-ddictxt = 'L'.
wa_lv_fieldcat-ddic_outputlen = 13.
MODIFY lv_fieldcat FROM wa_lv_fieldcat.
WHEN 'HRA'.
wa_lv_fieldcat-seltext_l = 'HRA'.
wa_lv_fieldcat-ddictxt = 'L'.
wa_lv_fieldcat-ddic_outputlen = 13.
MODIFY lv_fieldcat FROM wa_lv_fieldcat.
WHEN 'INSURANCE'.
wa_lv_fieldcat-seltext_l = 'Insurance'.
wa_lv_fieldcat-ddictxt = 'L'.
wa_lv_fieldcat-ddic_outputlen = 13.
MODIFY lv_fieldcat FROM wa_lv_fieldcat.
WHEN 'ODA'.
wa_lv_fieldcat-seltext_l = 'ODA'.
wa_lv_fieldcat-ddictxt = 'L'.
wa_lv_fieldcat-ddic_outputlen = 13.
MODIFY lv_fieldcat FROM wa_lv_fieldcat.
WHEN 'CAR_ALL'.
wa_lv_fieldcat-seltext_l = 'Car Allow.'.
wa_lv_fieldcat-ddictxt = 'L'.
wa_lv_fieldcat-ddic_outputlen = 13.
MODIFY lv_fieldcat FROM wa_lv_fieldcat.
WHEN 'GROSS_1'.
wa_lv_fieldcat-seltext_l = 'Total excl. Bonus & CPI'.
wa_lv_fieldcat-ddictxt = 'L'.
wa_lv_fieldcat-ddic_outputlen = 13.
MODIFY lv_fieldcat FROM wa_lv_fieldcat.
WHEN 'BONUS'.
wa_lv_fieldcat-seltext_l = 'Bonus'.
wa_lv_fieldcat-ddictxt = 'L'.
wa_lv_fieldcat-ddic_outputlen = 13.
MODIFY lv_fieldcat FROM wa_lv_fieldcat.
WHEN 'CPI'.
wa_lv_fieldcat-seltext_l = 'CPI'.
wa_lv_fieldcat-ddictxt = 'L'.
wa_lv_fieldcat-ddic_outputlen = 13.
MODIFY lv_fieldcat FROM wa_lv_fieldcat.
WHEN 'GROSS_2'.
wa_lv_fieldcat-seltext_l = 'Total incl. Bonus & CPI'.
wa_lv_fieldcat-ddictxt = 'L'.
wa_lv_fieldcat-ddic_outputlen = 13.
MODIFY lv_fieldcat FROM wa_lv_fieldcat.
WHEN 'PU'.
wa_lv_fieldcat-seltext_l = 'PU'.
wa_lv_fieldcat-ddictxt = 'L'.
wa_lv_fieldcat-ddic_outputlen = 13.
MODIFY lv_fieldcat FROM wa_lv_fieldcat.
WHEN 'DU'.
wa_lv_fieldcat-seltext_l = 'DU'.
wa_lv_fieldcat-ddictxt = 'L'.
wa_lv_fieldcat-ddic_outputlen = 13.
MODIFY lv_fieldcat FROM wa_lv_fieldcat.
WHEN 'LOCATION'.
wa_lv_fieldcat-seltext_l = 'Location'.
wa_lv_fieldcat-ddictxt = 'L'.
wa_lv_fieldcat-ddic_outputlen = 13.
MODIFY lv_fieldcat FROM wa_lv_fieldcat.
WHEN 'REGION'.
wa_lv_fieldcat-seltext_l = 'Region'.
wa_lv_fieldcat-ddictxt = 'L'.
wa_lv_fieldcat-ddic_outputlen = 13.
MODIFY lv_fieldcat FROM wa_lv_fieldcat.
WHEN 'PROVISION'.
wa_lv_fieldcat-seltext_l = 'Bonus @ 100 %'.
wa_lv_fieldcat-ddictxt = 'L'.
wa_lv_fieldcat-ddic_outputlen = 13.
MODIFY lv_fieldcat FROM wa_lv_fieldcat.
WHEN 'TAX'.
wa_lv_fieldcat-seltext_l = 'Tax'.
wa_lv_fieldcat-ddictxt = 'L'.
wa_lv_fieldcat-ddic_outputlen = 13.
MODIFY lv_fieldcat FROM wa_lv_fieldcat.
WHEN 'TOTAL'.
wa_lv_fieldcat-seltext_l = 'Total Bonus Cost @ 100%'.
wa_lv_fieldcat-ddictxt = 'L'.
wa_lv_fieldcat-ddic_outputlen = 13.
MODIFY lv_fieldcat FROM wa_lv_fieldcat.
WHEN 'START_PERIOD'.
wa_lv_fieldcat-seltext_l = 'Start Period'.
wa_lv_fieldcat-ddictxt = 'L'.
wa_lv_fieldcat-ddic_outputlen = 13.
MODIFY lv_fieldcat FROM wa_lv_fieldcat.
WHEN 'END_PERIOD'.
wa_lv_fieldcat-seltext_l = 'End Period'.
wa_lv_fieldcat-ddictxt = 'L'.
wa_lv_fieldcat-ddic_outputlen = 13.
MODIFY lv_fieldcat FROM wa_lv_fieldcat.
WHEN 'CATEGORY'.
wa_lv_fieldcat-seltext_l = 'Category'.
wa_lv_fieldcat-ddictxt = 'L'.
wa_lv_fieldcat-ddic_outputlen = 13.
MODIFY lv_fieldcat FROM wa_lv_fieldcat.
WHEN 'GROSS'.
wa_lv_fieldcat-seltext_l = 'Expected Bonus Payout'.
wa_lv_fieldcat-ddictxt = 'L'.
wa_lv_fieldcat-ddic_outputlen = 13.
MODIFY lv_fieldcat FROM wa_lv_fieldcat.

ENDCASE.
ENDLOOP.
ENDFORM. " INIT_FIELDCAT

&---------------------------------------------------------------------
*& Form ALV_LISTDISPLAY
&---------------------------------------------------------------------

  • Use the function to display the alv list

----------------------------------------------------------------------
FORM alv_listdisplay.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = driver
i_internal_tabname = 'IT_OVERSEAS'
i_client_never_display = 'X'
i_inclname = driver
CHANGING
ct_fieldcat = lv_fieldcat[]
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
IF sy-subrc 0.
ENDIF.

*Add correct column names..
PERFORM init_fieldcat.

*Display the list.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_callback_program = driver
it_fieldcat = lv_fieldcat[]
i_default = 'X'
i_save = 'A'
is_variant = lv_tmplt
is_layout = lv_ls_layout
i_callback_user_command = 'USER_COMMAND'
TABLES
t_outtab = it_overseas
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc 0.
ENDIF.

ENDFORM. " ALV_LISTDISPLAY

&---------------------------------------------------------------------
*& Form DATA_SELECTION
&---------------------------------------------------------------------

  • Select the data from various tables and logical database

----------------------------------------------------------------------
FORM data_selection.
CONCATENATE p_pabrj p_pabrp '01' INTO lc_dt.

*Get the last date of the month
CALL FUNCTION 'RP_LAST_DAY_OF_MONTHS'
EXPORTING
day_in = lc_dt
IMPORTING
last_day_of_month = gc_enddate
EXCEPTIONS
day_in_no_date = 1.
IF sy-subrc 0.
WRITE : / 'Error in date entry'.
ENDIF.

CONCATENATE p_pabrj p_pabrp '01' INTO gc_startdate. "startdate

SELECT * FROM pa0008
WHERE (
( begda BETWEEN gc_startdate and gc_enddate )
OR ( endda BETWEEN gc_startdate AND gc_enddate )
OR ( begda >= gc_startdate AND endda >= gc_enddate )
OR ( begda <= gc_startdate AND endda = '99991231' ) ) AND subty NE '0' AND subty NE '11'. it_overseas-empno = pa0008-pernr. IF sy-subrc = 0. *Check whether employee has left.


CALL FUNCTION 'HR_LEAVING_DATE'
EXPORTING
persnr = pa0008-pernr
IMPORTING
leavingdate = gc_chkdate
TABLES
leaving_dates = it_leavedate
EXCEPTIONS
leaving_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.

IF sy-subrc = 0.
IF gc_chkdate BETWEEN gc_startdate AND gc_enddate
OR gc_chkdate >= gc_startdate.
ELSE.
CONTINUE.
ENDIF.
ENDIF.

*Check whether the start date is less than the enddate of the month
*If it is less than the enddate of the month then only take that record.
IF pa0008-begda <= gc_enddate.

  • Getting the name of the employees

CALL FUNCTION 'CATS_GET_EMPLOYEE_NAME'
EXPORTING
pernr = it_overseas-empno
IMPORTING
name = it_overseas-name
EXCEPTIONS
pernr_not_found = 1.

IF sy-subrc <> 0.
ENDIF.
*Get the joining date of the employees
CALL FUNCTION 'RP_GET_HIRE_DATE'
EXPORTING
persnr = it_overseas-empno
check_infotypes = '0000'
IMPORTING
hiredate = it_overseas-doj.

*Get the role information for the employee
rp-read-infotype pa0008-pernr 9001 p9001 gc_startdate gc_enddate.
PROVIDE * FROM p9001 BETWEEN gc_startdate AND gc_enddate.
*Get the role description for that particular period.
SELECT SINGLE zrole_desc INTO (it_overseas-c_role_desc)
FROM zhrrole WHERE zrole_cd = p9001-zrole_cd.
*Get the job Band for that employee
SELECT SINGLE * FROM zhrrole_assg WHERE zrole_cd = p9001-zrole_cd.
SELECT SINGLE zband_desc INTO it_overseas-band
FROM zhrband
WHERE zband_cd = zhrrole_assg-zband_cd.
ENDPROVIDE.
*Get Personal Sub Band
it_overseas-perband = pa0008-trfgr.

*Get pay data
CALL FUNCTION 'RP_FILL_WAGE_TYPE_TABLE'
EXPORTING
appli = 'E'
begda = pa0008-begda
endda = pa0008-endda
infty = '0008'
pernr = pa0008-pernr
subty = pa0008-subty
TABLES
ppbwla = ppbwla "output
EXCEPTIONS
error_at_indirect_evaluation = 1.

IF sy-subrc 0.
REFRESH ppbwla.
CLEAR ppbwla.
ELSE.
LOOP AT ppbwla.
it_overseas-currency = ppbwla-waers.
IF ppbwla-lgart = '8101'
OR ppbwla-lgart = '6001' OR ppbwla-lgart = '6002'
OR ppbwla-lgart = '6003' OR ppbwla-lgart = '6004'
OR ppbwla-lgart = '7151' OR ppbwla-lgart = '6005'
OR ppbwla-lgart = '6006' OR ppbwla-lgart = '6007'
OR ppbwla-lgart = '6008' OR ppbwla-lgart = '6009'
OR ppbwla-lgart = '6010' OR ppbwla-lgart = '6011'
OR ppbwla-lgart = '6012' OR ppbwla-lgart = '6013'
OR ppbwla-lgart = '6014' OR ppbwla-lgart = '6015'.
it_overseas-basic = ppbwla-betrg.
ELSEIF ppbwla-lgart = '8301'.
it_overseas-hra = ppbwla-betrg.
ELSEIF ppbwla-lgart = '7801'.
it_overseas-insurance = ppbwla-betrg.
ELSEIF ppbwla-lgart = '8302' OR ppbwla-lgart = '7802'
OR ppbwla-lgart = '6301' OR ppbwla-lgart = '6303'
OR ppbwla-lgart = '6302' OR ppbwla-lgart = '6304'
OR ppbwla-lgart = '6305' OR ppbwla-lgart = '6306'
OR ppbwla-lgart = '6307' OR ppbwla-lgart = '6308'
OR ppbwla-lgart = '6309' OR ppbwla-lgart = '6310'
OR ppbwla-lgart = '6311' OR ppbwla-lgart = '6312'
OR ppbwla-lgart = '6313' OR ppbwla-lgart = '6314'.
it_overseas-oda = ppbwla-betrg.
ELSEIF ppbwla-lgart = '6409'
OR ppbwla-lgart = '6410' OR ppbwla-lgart = '6411'
OR ppbwla-lgart = '6412' OR ppbwla-lgart = '6413'
OR ppbwla-lgart = '6414' OR ppbwla-lgart = '8303'
OR ppbwla-lgart = '6401' OR ppbwla-lgart = '6402'
OR ppbwla-lgart = '6403' OR ppbwla-lgart = '6404'
OR ppbwla-lgart = '6405' OR ppbwla-lgart = '6406'
OR ppbwla-lgart = '6407' OR ppbwla-lgart = '6408'
OR ppbwla-lgart = '7803' OR ppbwla-lgart = '6415'.
it_overseas-car_all = ppbwla-betrg.
ELSEIF ppbwla-lgart = '8945'
OR ppbwla-lgart = '6101' OR ppbwla-lgart = '6102'
OR ppbwla-lgart = '6103' OR ppbwla-lgart = '6104'
OR ppbwla-lgart = '7945' OR ppbwla-lgart = '6105'
OR ppbwla-lgart = '6106' OR ppbwla-lgart = '6107'
OR ppbwla-lgart = '6108' OR ppbwla-lgart = '6109'
OR ppbwla-lgart = '6110' OR ppbwla-lgart = '6111'
OR ppbwla-lgart = '6112' OR ppbwla-lgart = '6113'
OR ppbwla-lgart = '6114' OR ppbwla-lgart = '6115'.
it_overseas-bonus = ppbwla-betrg.
ELSEIF ppbwla-lgart = '8975'
OR ppbwla-lgart = '6201' OR ppbwla-lgart = '6202'
OR ppbwla-lgart = '6203' OR ppbwla-lgart = '6204'
OR ppbwla-lgart = '7975' OR ppbwla-lgart = '6205'
OR ppbwla-lgart = '6206' OR ppbwla-lgart = '6207'
OR ppbwla-lgart = '6208' OR ppbwla-lgart = '6209'
OR ppbwla-lgart = '6210' OR ppbwla-lgart = '6211'
OR ppbwla-lgart = '6212' OR ppbwla-lgart = '6213'
OR ppbwla-lgart = '6214' OR ppbwla-lgart = '6215'.
it_overseas-cpi = ppbwla-betrg.
ENDIF.
ENDLOOP.
REFRESH ppbwla.
ENDIF.

*Add which country according to the subtype of the record
SELECT SINGLE stext INTO it_overseas-country
FROM t591s WHERE subty = pa0008-subty
AND infty = '0008'
AND sprsl = sy-langu.

*Addition to gross components
it_overseas-gross_1 = it_overseas-basic + it_overseas-hra
+ it_overseas-insurance + it_overseas-oda
+ it_overseas-car_all.

it_overseas-gross_2 = it_overseas-bonus + it_overseas-cpi
+ it_overseas-gross_1.

*Get PU DU Location and Region for the employee
rp-read-infotype pa0008-pernr 0001 p0001 gc_startdate gc_enddate.
PROVIDE * FROM p0001 BETWEEN gc_startdate AND gc_enddate.
SELECT SINGLE * FROM t001p WHERE btrtl = p0001-btrtl.
SELECT SINGLE * FROM t503t WHERE persk = p0001-persk.
SELECT SINGLE * FROM t500p WHERE persa = p0001-werks.
SELECT SINGLE * FROM t005h WHERE land1 = t500p-land1 AND
regio = t500p-regio AND cityc = t500p-cityc.

it_overseas-pu = t001p-btext.
it_overseas-location = t500p-name1. "dev903953
it_overseas-region = t005h-bezei.
ENDPROVIDE.

*Get the DU Details from infotype 9009
rp-read-infotype pa0008-pernr 9009 p9009 gc_startdate gc_enddate.
PROVIDE * FROM p9009 BETWEEN gc_startdate AND gc_enddate.
it_overseas-du = p9009-du_cd.
ENDPROVIDE.*Decide the category
PERFORM get_category.

*Calculate the Provision
*Start and enddate of the period
IF pa0008-begda <= gc_startdate. it_overseas-start_period = gc_startdate. ELSE. it_overseas-start_period = pa0008-begda. ENDIF. IF gc_enddate <= pa0008-endda. it_overseas-end_period = gc_enddate. ELSE. it_overseas-end_period = pa0008-endda. ENDIF. *The monthly bonus is bonus / 12 lf_mon_bonus = it_overseas-bonus / 12. *Working days onsite. Add 1 to days to consider todays day.

  • If employee has resigned.

li_tdt = it_overseas-end_period - it_overseas-start_period + 1.
li_days = gc_enddate - gc_startdate + 1.
it_overseas-provision = ( lf_mon_bonus * li_tdt ) / li_days.

*Tax Calculation.
it_overseas-tax = it_overseas-provision * p_prcnt / 100.

*Total Provision
it_overseas-total = it_overseas-provision + it_overseas-tax.

*Gross Provision
it_overseas-gross = it_overseas-total * p_bprcnt / 100.

APPEND it_overseas.
CLEAR it_overseas.
CLEAR gc_chkdate.
CLEAR : zhrrole, zhrband, zhrrole_assg,t001p,t503t,t500p.
CLEAR : p0001,p9001,p9009.
ENDIF.
ENDIF.
ENDSELECT.
ENDFORM. " DATA_SELECTION

---------------------------------------------------------------------

  • FORM USER_COMMAND SK *

---------------------------------------------------------------------

  • USER COMMAND FOR DYNAMIC REPORTING -SHEKHAR KULKARNI *

---------------------------------------------------------------------

  • --> UCOMM *
  • --> SELFIELD *

---------------------------------------------------------------------
FORM user_command USING ucomm LIKE sy-ucomm
selfield TYPE slis_selfield.
READ TABLE it_overseas INDEX selfield-tabindex.
CHECK sy-subrc = 0.
CASE ucomm.
WHEN '&IC1'.
CASE selfield-sel_tab_field.
*If clicked on BAND.
WHEN 'IT_OVERSEAS-EMPNO' OR 'IT_OVERSEAS-NAME'.
PERFORM display_details USING it_overseas-empno.
*If clicked on Purchase order.
ENDCASE.
ENDCASE.
ENDFORM.

&---------------------------------------------------------------------
*& Form DISPLAY_DETAILS
&---------------------------------------------------------------------

  • Display the selected employee details.

----------------------------------------------------------------------

  • -->P_IT_OVERSEAS_EMPNO text

----------------------------------------------------------------------
FORM display_details USING p_it_overseas_empno.

  • READ TABLE IT_OVERSEAS WITH KEY EMPNO = P_IT_OVERSEAS_EMPNO
  • BINARY SEARCH.


*transporting empno total.

IF sy-subrc = 0.
LOOP AT it_overseas.
it_empoverseas-empno = it_overseas-empno.
it_empoverseas-country = it_overseas-country.
it_empoverseas-currency = it_overseas-currency.
it_empoverseas-category = it_overseas-category.
it_empoverseas-name = it_overseas-name.
it_empoverseas-gross = it_overseas-gross.
APPEND it_empoverseas.
ENDLOOP.
SORT it_empoverseas BY category currency empno.
REFRESH lv_fieldcat[].
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = driver
i_internal_tabname = 'IT_EMPOVERSEAS'
i_client_never_display = 'X'
i_inclname = driver
CHANGING
ct_fieldcat = lv_fieldcat[]
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
ENDIF.

PERFORM init_fieldcat.

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_callback_program = driver
it_fieldcat = lv_fieldcat[]
i_default = 'X'
i_save = 'A'
is_variant = lv_tmplt
is_layout = lv_ls_layout
TABLES
t_outtab = it_empoverseas
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
ENDIF.
ENDIF.
REFRESH it_empoverseas.
ENDFORM. " DISPLAY_DETAILS

&---------------------------------------------------------------------
*& Form GET_CATEGORY
&---------------------------------------------------------------------

  • Find out the category of the person.

----------------------------------------------------------------------
FORM get_category.
CASE p0001-btrtl.
WHEN '30' OR '31' OR '35' OR '36' OR '39' OR '45' OR '47' OR '48'
OR '49' OR '65' OR '71' OR '74'.
it_overseas-category = 'Sales'.
WHEN '63'.
it_overseas-category = 'IBCS'.
WHEN '54' OR '18' OR '19' OR '20'.
it_overseas-category = 'Banking Bonus'.
WHEN OTHERS.
it_overseas-category = 'Others'.
ENDCASE.

IF ( p9001-zrole_cd = 'BM'
OR p9001-zrole_cd = 'GEM'
OR p9001-zrole_cd = 'KEYACMGR'
OR p9001-zrole_cd = 'AM'
OR p9001-zrole_cd = 'BSM'
OR p9001-zrole_cd = 'ENGMGR' ).
it_overseas-category = 'AM/BM/EM'.
ENDIF.

IF ( p9001-zrole_cd = 'PRINCIPAL'
OR p9001-zrole_cd = 'SRPRIN' ).
it_overseas-category = 'IBCS'.
ENDIF.

ENDFORM. " GET_CATEGORY

Q2] when i am using these macro in the the program i am getting the same result and the internal table has more that one record which i have checked for as u have told, if possible can u just provide me the sample code using the macro statements, it will be very much helful.

ANS>

Here's an example:
rp_provide_from_last p0032 space from-date to-date will return the last record of infty 32 valid between from-date and to-date, rp_provide_from_frst the first.
You might want to check whether reading was successful, to do so use pnp-sw-found (pnp-sw-found = '1' means reading was successful.)
Please note, that the macros will only provide data, that has been selected by the logical database pnp before, so if you make restrictions regarding validity date on the selection-screen of pnp, these apply for the infotypes and the rp_provide macros won't be able to read data valid before or after.

The syntax is

rp_provide_from_last p .
[/code]

The result will be at the header line of p.

e.g.

rp_provide_from_last p0001 space '18000101' '99991231' .
rp_provide_from_first p0185 '03' '18000101' '99991231' .

Check out date inputs (last two parameters) you pass to the macro.

No comments:

Tutorials on SAP-ABAP

Adobe Interactive Forms Tutorials

Business Server Pages (BSP)

Userexits/BADIs

Web Dynpro for ABAP (Step by step procedure for web dynpro,Tutorials on Web Dynpro,)

ALV Tutorials

Blog Archive

goodsites