Subscribe

RSS Feed (xml)



Powered By

Skin Design:
Free Blogger Skins

Powered by Blogger

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:

Blog Archive