2014 Jun 09 8:48 AM
hi,
I have a table in which a dynamic fieldcatlogue is generated for eg. annual report for each month amount is generated. For those each month actual amount i want to have corressponding planned amount.hence the planned amount column will be the editable column for each month column. How can i achieve this? its a drill down report.
Thanks
2014 Jun 09 9:09 AM
Hi Friend,
Please execute this code and debugg it.
TYPES: BEGIN OF TY_MARA,
MATNR TYPE MARA-MATNR,
MTART TYPE MARA-MTART,
MBRSH TYPE MARA-MBRSH,
MATKL TYPE MARA-MATKL,
MEINS TYPE MARA-MEINS,
LABOR TYPE MARA-LABOR,
END OF TY_MARA.
DATA : IT_MARA TYPE TABLE OF TY_MARA,
WA_MARA TYPE TY_MARA.
DATA : IT_MARACP TYPE STANDARD TABLE OF TY_MARA, "temparary table for MARA
IT_CHANGES TYPE STANDARD TABLE OF TY_MARA. "changes on grid
DATA : WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV, "Field catalog work area
IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV, "field catalog internal table
IT_LAYOUT TYPE SLIS_LAYOUT_ALV, "ALV layout settings
FORM_TOP_OF_PAGE TYPE SLIS_FORMNAME VALUE 'FORM_TOP_OF_PAGE', "for avl header.
FORM_CALLBACK TYPE SLIS_FORMNAME VALUE 'USER_COMMAND'. "For user command
SELECT-OPTIONS: S_MATNR FOR WA_MARA-MATNR. "material no input
START-OF-SELECTION.
SELECT MATNR
MTART
MBRSH
MATKL
MEINS
LABOR FROM MARA INTO TABLE IT_MARA WHERE MATNR IN S_MATNR.
PERFORM BUILD_FCAT.
PERFORM DISPLAY_ALV.
FORM BUILD_FCAT .
WA_FIELDCAT-FIELDNAME = 'MATNR'.
WA_FIELDCAT-SELTEXT_M = 'Material Value'.
WA_FIELDCAT-COL_POS = 1.
WA_FIELDCAT-KEY = 'X'.
WA_FIELDCAT-HOTSPOT = 'X'.
APPEND WA_FIELDCAT TO IT_FIELDCAT.
CLEAR WA_FIELDCAT.
WA_FIELDCAT-FIELDNAME = 'MTART'.
WA_FIELDCAT-SELTEXT_M = 'Material Type'.
WA_FIELDCAT-EDIT = 'X'.
WA_FIELDCAT-COL_POS = 2.
APPEND WA_FIELDCAT TO IT_FIELDCAT.
CLEAR WA_FIELDCAT.
WA_FIELDCAT-FIELDNAME = 'MBRSH'.
WA_FIELDCAT-SELTEXT_M = 'Industry Sector'.
WA_FIELDCAT-EDIT = 'X'.
WA_FIELDCAT-COL_POS = 3.
APPEND WA_FIELDCAT TO IT_FIELDCAT.
CLEAR WA_FIELDCAT.
WA_FIELDCAT-FIELDNAME = 'MATKL'.
WA_FIELDCAT-SELTEXT_M = 'Material Group'.
WA_FIELDCAT-EDIT = 'X'.
WA_FIELDCAT-COL_POS = 4.
APPEND WA_FIELDCAT TO IT_FIELDCAT.
CLEAR WA_FIELDCAT.
WA_FIELDCAT-FIELDNAME = 'MEINS'.
WA_FIELDCAT-SELTEXT_M = 'Base UOM'.
WA_FIELDCAT-ICON = 'X'. " Display the field as ICON
WA_FIELDCAT-COL_POS = 5.
APPEND WA_FIELDCAT TO IT_FIELDCAT.
CLEAR WA_FIELDCAT.
WA_FIELDCAT-FIELDNAME = 'LABOR'.
WA_FIELDCAT-SELTEXT_M = 'Lab Office'.
WA_FIELDCAT-ICON = 'X'. " Display the field as ICON
WA_FIELDCAT-COL_POS = 6.
APPEND WA_FIELDCAT TO IT_FIELDCAT.
CLEAR WA_FIELDCAT.
ENDFORM. " BUILD_FCAT
FORM DISPLAY_ALV .
IT_MARACP[] = IT_MARA[].
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID "program name
I_CALLBACK_USER_COMMAND = FORM_CALLBACK "user command subroutine name
I_CALLBACK_TOP_OF_PAGE = FORM_TOP_OF_PAGE "sub routine for top of page
IS_LAYOUT = IT_LAYOUT
IT_FIELDCAT = IT_FIELDCAT
TABLES
T_OUTTAB = IT_MARA
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.
ENDFORM. " DISPLAY_ALV
FORM FORM_TOP_OF_PAGE.
DATA: IT_HEADER TYPE SLIS_T_LISTHEADER,
WA_HEADER TYPE SLIS_LISTHEADER,
LV_LINE LIKE WA_HEADER-INFO,
LD_LINES TYPE I,
LD_LINESC(10) TYPE C.
* Title
WA_HEADER-TYP = 'H'.
WA_HEADER-INFO = 'MARA Master Report'.
APPEND WA_HEADER TO IT_HEADER.
CLEAR WA_HEADER.
* Date
WA_HEADER-TYP = 'S'.
WA_HEADER-KEY = 'Date: '.
CONCATENATE SY-DATUM+6(2) '.'
SY-DATUM+4(2) '.'
SY-DATUM(4) INTO WA_HEADER-INFO. "todays date
APPEND WA_HEADER TO IT_HEADER.
CLEAR: WA_HEADER.
* Date
WA_HEADER-TYP = 'S'.
WA_HEADER-KEY = 'User: '.
CONCATENATE SY-UNAME ' ' INTO WA_HEADER-INFO. "Logged in user
APPEND WA_HEADER TO IT_HEADER.
CLEAR: WA_HEADER.
* Total No. of Records Selected
DESCRIBE TABLE IT_MARA LINES LD_LINES.
LD_LINESC = LD_LINES.
CONCATENATE 'Total No. of Records Selected: ' LD_LINESC
INTO LV_LINE SEPARATED BY SPACE.
WA_HEADER-TYP = 'A'.
WA_HEADER-INFO = LV_LINE.
APPEND WA_HEADER TO IT_HEADER.
CLEAR: WA_HEADER, LV_LINE.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY = IT_HEADER.
.
CLEAR IT_HEADER.
ENDFORM. "TOP-OF-PAGE
FORM F_SAVE_DATA.
DATA : WA_MARACP TYPE TY_MARA.
DATA : WA_MARA_TMP TYPE MARA.
CLEAR IT_CHANGES[].
LOOP AT IT_MARA INTO WA_MARA.
READ TABLE IT_MARACP INTO WA_MARACP INDEX SY-TABIX.
IF WA_MARACP NE WA_MARA.
APPEND WA_MARA TO IT_CHANGES.
MOVE-CORRESPONDING WA_MARA TO WA_MARA_TMP.
MODIFY MARA FROM WA_MARA_TMP .
IF SY-SUBRC EQ 0.
MESSAGE 'Data Updated' TYPE 'I'.
ENDIF.
ENDIF.
CLEAR WA_MARACP.
ENDLOOP.
ENDFORM. "f_save_data
FORM USER_COMMAND USING P_UCOMM LIKE SY-UCOMM
P_SELFIELD TYPE SLIS_SELFIELD.
"p_ucomm will hold user action like double click, save click
CASE P_UCOMM.
WHEN '&IC1'. " SAP standard code for double-clicking
READ TABLE IT_MARA INTO WA_MARA INDEX P_SELFIELD-TABINDEX. " Getting Row data
CASE P_SELFIELD-FIELDNAME.
WHEN 'MATNR'. " Column data
SET PARAMETER ID: 'MAT' FIELD P_SELFIELD-VALUE.
CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.
WHEN 'MTART'.
MESSAGE P_SELFIELD-VALUE TYPE 'S'.
ENDCASE.
WHEN '&DATA_SAVE'.
MESSAGE 'Trying to save' TYPE 'S'.
PERFORM F_SAVE_DATA.
"It_changes hold all the change made in the ALV
ENDCASE.
ENDFORM.
2014 Jun 09 9:10 AM
You can use this this code is working and easy to understand..
TYPE-POOLS : slis.
DATA : ok_code TYPE sy-ucomm.
TYPES : BEGIN OF ty_sflight,
carrid TYPE sflight-carrid,
connid TYPE sflight-connid,
fldate TYPE sflight-fldate,
price TYPE sflight-price,
END OF ty_sflight.
DATA : it_sflight TYPE TABLE OF ty_sflight,
wa_sflight TYPE ty_sflight.
DATA : wa_sflight1 TYPE sflight.
DATA : it_fieldcat TYPE slis_t_fieldcat_alv,
wa_fieldcat TYPE slis_fieldcat_alv.
SELECT-OPTIONS s_carrid FOR wa_sflight-carrid.
SELECT carrid connid fldate price FROM sflight INTO TABLE it_sflight
WHERE carrid IN s_carrid.
wa_fieldcat-col_pos = 1.
wa_fieldcat-fieldname = 'CARRID'.
wa_fieldcat-tabname = 'IT_SFLIGHT'.
wa_fieldcat-emphasize = 'C100'.
wa_fieldcat-key = 'X'.
wa_fieldcat-seltext_m = 'CARRID NO.'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-col_pos = 2.
wa_fieldcat-fieldname = 'CONNID'.
wa_fieldcat-tabname = 'IT_SFLIGHT'.
wa_fieldcat-emphasize = 'C100'.
wa_fieldcat-key = 'X'.
wa_fieldcat-seltext_m = 'FLIGHT NO.'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-col_pos = 3.
wa_fieldcat-fieldname = 'FLDATE'.
wa_fieldcat-tabname = 'IT_SFLIGHT'.
wa_fieldcat-emphasize = 'C100'.
wa_fieldcat-key = 'X'.
wa_fieldcat-seltext_m = 'FLIGHT DATE.'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-col_pos = 4.
wa_fieldcat-fieldname = 'PRICE'.
wa_fieldcat-tabname = 'IT_SFLIGHT'.
wa_fieldcat-DO_SUM = 'X'.
wa_fieldcat-edit = 'X'.
wa_fieldcat-seltext_m = 'PRICE'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-cprog
i_callback_user_command = 'VALIDATE_COMMAND'
it_fieldcat = it_fieldcat
TABLES
t_outtab = it_sflight .
*&--------------------------------------------------------------------*
*& Form VALIDATE_COMMAND
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
* -->R_UCOMM text
* -->SEL_FIELD text
*---------------------------------------------------------------------*
FORM validate_command USING r_ucomm TYPE sy-ucomm
sel_field TYPE slis_selfield.
DATA :it_grid TYPE REF TO cl_gui_alv_grid.
DATA : is_valid.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = it_grid.
CALL METHOD it_grid->check_changed_data
IMPORTING
e_valid = is_valid .
CASE r_ucomm.
WHEN '&DATA_SAVE'.
IF is_valid = 'X'.
LOOP AT it_sflight INTO wa_sflight.
MOVE-CORRESPONDING wa_sflight TO wa_sflight1.
MODIFY sflight FROM wa_sflight1.
ENDLOOP.
ENDIF.
ENDCASE.
ENDFORM.