2008 Jun 10 6:53 AM
Hi,
plz. check my code ...in that 1st select statement for LTA taken employees records are coming correct..
But in 2nd statement, all employees records come..here i want, only Not Taken LTA employees...
Code.....
***********************
REPORT ZHR_LTA NO STANDARD PAGE HEADING LINE-SIZE 100 .
TABLES : PA0015, "HR Master Record: Infotype 0008 (Basic Pay)
PA0001 , "HR Master Record: Infotype 0001 (Org. Assignment)
PA0002 , "HR Master Record: Infotype 0002 (Personal Data)
T001P . "Personnel Area/Subarea
TYPE-POOLS : SLIS .
DATA : BEGIN OF ITAB OCCURS 0 ,
PERNR LIKE PA0001-PERNR , "Personel no.
ENAME LIKE PA0001-ENAME , "Employee name
Z_DESIGNATION LIKE PA0001-Z_DESIGNATION , "Designation
BEGDA LIKE PA0015-BEGDA , "LTA VALID DATE
ENDDA LIKE PA0015-ENDDA , " LTA VALID DATE
BETRG LIKE PA0015-BETRG , " LTA Amount
END OF ITAB .
DATA : BEGIN OF ITAB1 OCCURS 0 ,
PERNR LIKE PA0001-PERNR , "Personel no.
ENAME LIKE PA0001-ENAME , "Employee name
Z_DESIGNATION LIKE PA0001-Z_DESIGNATION , "Designation
END OF ITAB1 .
************************************************************************
DATA : W_CONTAINER TYPE SCRFNAME VALUE 'CL_GRID',
W_CPROG TYPE LVC_S_LAYO,
G_REPID LIKE SY-REPID,
W_SAVE TYPE C,
W_EXIT TYPE C,
CL_GRID TYPE REF TO CL_GUI_ALV_GRID,
CL_CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
IT_FLD_CATALOG TYPE SLIS_T_FIELDCAT_ALV,
WA_FLD_CATALOG TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE ,
LAYOUT TYPE SLIS_LAYOUT_ALV,
COL_POS LIKE SY-CUCOL ,
ALVFC TYPE SLIS_T_FIELDCAT_ALV.
************************************************************************
SELECTION-SCREEN : BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001 .
SELECT-OPTIONS : PERNR FOR PA0001-PERNR .
SELECT-OPTIONS : ENDDA FOR PA0015-ENDDA . "OBLIGATORY.
SELECTION-SCREEN : END OF BLOCK B1 .
PARAMETER : TKN RADIOBUTTON GROUP A,
NTKN RADIOBUTTON GROUP A.
************************************************************************
IF TKN = 'X'.
PERFORM FILL_CATALOG1 USING:
'PERNR' 'ITAB' 'Personal No.',
'ENAME' 'ITAB' 'Emp Name',
'Z_DESIGNATION' 'ITAB' 'Designation',
'BEGDA' 'ITAB' 'Valid from',
'ENDDA' 'ITAB' 'End Date',
'BETRG' 'ITAB' 'Amount'.
ELSE.
PERFORM FILL_CATALOG1 USING:
'PERNR' 'ITAB1' 'Personal No.',
'ENAME' 'ITAB1' 'Emp Name',
'Z_DESIGNATION' 'ITAB1' 'Designation'.
ENDIF.
*************************************************************************************
IF TKN = 'X'.
SELECT M1PERNR M1ENDDA M1BEGDA M1BETRG M2ENAME M2Z_DESIGNATION INTO CORRESPONDING FIELDS OF TABLE ITAB
FROM PA0015 AS M1 INNER JOIN PA0001 AS M2 ON M1PERNR = M2PERNR
WHERE M1PERNR IN PERNR AND M1SUBTY EQ '4004' AND M2~ENDDA EQ '99991231'
AND M1BEGDA GE ENDDA-LOW AND M1ENDDA LE ENDDA-HIGH .
IF SY-SUBRC <> 0 .
MESSAGE 'DATA NOT FOUND.' TYPE 'I' .
ELSE.
SORT ITAB BY PERNR ASCENDING.
DELETE ADJACENT DUPLICATES FROM ITAB COMPARING PERNR.
ENDIF.
ELSEIF NTKN = 'X'.
SELECT M1PERNR M2ENAME M2~Z_DESIGNATION INTO CORRESPONDING FIELDS OF TABLE ITAB1
FROM PA0015 AS M1 INNER JOIN PA0001 AS M2 ON M1PERNR = M2PERNR
WHERE M1PERNR IN PERNR AND M1SUBTY NE '4004' AND M2~ENDDA EQ '99991231'
AND M1BEGDA GE ENDDA-LOW AND M1ENDDA LE ENDDA-HIGH .
SORT ITAB BY PERNR ASCENDING.
DELETE ADJACENT DUPLICATES FROM ITAB1 COMPARING PERNR.
LOOP AT ITAB.
SELECT DISTINCT PERNR ENAME Z_DESIGNATION INTO CORRESPONDING FIELDS OF ITAB1
FROM PA0001
WHERE PERNR IN PERNR AND ENDDA EQ '99991231' AND PERSG = '1' .
IF ITAB1-PERNR = ITAB-PERNR.
DELETE ITAB WHERE PERNR = ITAB-PERNR.
CLEAR ITAB1.
ELSE.
APPEND ITAB1.
CLEAR ITAB.
ENDIF .
ENDSELECT.
ENDLOOP.
ENDIF.
**********************************************
IF TKN = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = 'ZHR_LTA'
IS_LAYOUT = LAYOUT
IT_FIELDCAT = IT_FLD_CATALOG
I_DEFAULT = 'X'
I_SAVE = 'A'
TABLES
T_OUTTAB = ITAB
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
********************
ELSE.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = 'ZHR_LTA'
IS_LAYOUT = LAYOUT
IT_FIELDCAT = IT_FLD_CATALOG
I_DEFAULT = 'X'
I_SAVE = 'A'
TABLES
T_OUTTAB = ITAB1
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDIF.
*ENDFORM.
FORM FILL_CATALOG1 USING P_FIELDNAME TYPE ANY
P_REF_TABLE TYPE ANY
P_SCRTEXT TYPE ANY.
CLEAR : WA_FLD_CATALOG.
WA_FLD_CATALOG-FIELDNAME = P_FIELDNAME.
WA_FLD_CATALOG-TABNAME = P_REF_TABLE.
WA_FLD_CATALOG-SELTEXT_S = P_SCRTEXT.
WA_FLD_CATALOG-SELTEXT_M = P_SCRTEXT.
WA_FLD_CATALOG-SELTEXT_L = P_SCRTEXT.
APPEND WA_FLD_CATALOG TO IT_FLD_CATALOG.
ENDFORM. " fill_catalog1
******************************
Plz. check it and tell me, where the statement goes wrong...
Plz. it's very URGENT.
Thanks...
2008 Jun 10 7:03 AM
Hi,
Make this modification to your second select query. This might solve your problem.
ELSEIF NTKN = 'X'.
SELECT M1~PERNR
M2~ENAME
M2~Z_DESIGNATION
INTO CORRESPONDING FIELDS OF TABLE ITAB1
FROM PA0015 AS M1 INNER JOIN PA0001 AS M2
ON M1~PERNR = M2~PERNR
WHERE M1~PERNR IN PERNR
AND M1~SUBTY NE '4004'
AND M2~ENDDA EQ '99991231'
AND M1~BEGDA GE ENDDA-LOW
AND M1~ENDDA LE ENDDA-HIGH
AND M1~BETRG LE '0'.
SORT ITAB BY PERNR ASCENDING.
DELETE ADJACENT DUPLICATES FROM ITAB1 COMPARING PERNR.
Reward points if this helps,
Kiran
2008 Jun 10 7:03 AM
Hi,
Make this modification to your second select query. This might solve your problem.
ELSEIF NTKN = 'X'.
SELECT M1~PERNR
M2~ENAME
M2~Z_DESIGNATION
INTO CORRESPONDING FIELDS OF TABLE ITAB1
FROM PA0015 AS M1 INNER JOIN PA0001 AS M2
ON M1~PERNR = M2~PERNR
WHERE M1~PERNR IN PERNR
AND M1~SUBTY NE '4004'
AND M2~ENDDA EQ '99991231'
AND M1~BEGDA GE ENDDA-LOW
AND M1~ENDDA LE ENDDA-HIGH
AND M1~BETRG LE '0'.
SORT ITAB BY PERNR ASCENDING.
DELETE ADJACENT DUPLICATES FROM ITAB1 COMPARING PERNR.
Reward points if this helps,
Kiran
2008 Jun 25 7:59 AM
Hi,
That time report was giving right output according to my testing parameters...i was test it by few personel no's, but there r many number that r repeated till now...
your condition was perfect, but one more condition will be there..
plz help...
2008 Jun 10 7:13 AM
HI ,
for Employees who are not taken LTA .......select the employees from PA0001 and for all employees select the LTA amount from PA0015.....................and loop the PA0001 and read the PA0015 data if the record was not found then the employee is not taken the LTA..........
suggetion....amounts entered in the Additional Payments are Processed in the Payroll driver...........after exicuting the payroll amount will store in the RT table T_CODE 'PC_PAYRESULT'............it is recomended to read the data from RT table.......
Regards,
Vamshidhar Naini.
2008 Jun 25 7:59 AM