09-13-2007 9:29 AM
Hi all
i am developing ALV report in which i have to give two fields editable. Now user can change that fields and able to save the data in database tables. I want to know how can i take values from screen in internal table or is there any other logic? please help me.
Hopeful answer will be rewarded.
Thanks.
09-13-2007 9:31 AM
Hello,
Do like this:
*&---------------------------------------------------------------------*
*& Form ALV_DISPLAY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM ALV_DISPLAY.
DATA: IT_EVENTS TYPE SLIS_T_EVENT,
WA_EVENTS LIKE LINE OF IT_EVENTS.
REFRESH: IT_EVENTS.
CLEAR: WA_EVENTS,IT_EVENTS.
WA_EVENTS-NAME = 'PF_STATUS_SET'.
WA_EVENTS-FORM = 'STATUS'.
APPEND WA_EVENTS TO IT_EVENTS .
*--- ALV List Display
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = G_PROGNAME
I_CALLBACK_USER_COMMAND = G_CALLBACK_USER_COMMAND
IT_FIELDCAT = GT_FIELDCAT
IT_EVENTS = IT_EVENTS
TABLES
T_OUTTAB = G_T_EKPO
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. " ALV_DISPLAY
*&---------------------------------------------------------------------*
*& Form USER_COMMAND_ALV
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM ALV_USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
DATA: LR_EKKN LIKE EKKN,
LR_OHNEBEW LIKE Z48M_MATOHNEBEW.
CASE R_UCOMM.
WHEN '&IC1'.
*--- Hotspot selektion
CASE RS_SELFIELD-FIELDNAME.
WHEN 'NOTE'.
READ TABLE G_T_EKPO INDEX RS_SELFIELD-TABINDEX.
IF G_T_EKPO-MTART NE 'DIEN'.
SELECT SINGLE * FROM Z48M_MATOHNEBEW INTO LR_OHNEBEW
WHERE MATNR = G_T_EKPO-MATNR.
IF SY-SUBRC NE 0.
SELECT * FROM Z48M_NOTE_LIST INTO TABLE IT_TC01.
CONCATENATE G_T_EKPO-EBELN G_T_EKPO-EBELP INTO TEXT1
SEPARATED BY '/'.
SELECT SINGLE * FROM Z48M_LIEF_NOTE
WHERE EBELN = G_T_EKPO-EBELN
AND EBELP = G_T_EKPO-EBELP.
IF SY-SUBRC = 0.
LOOP AT IT_TC01.
IF IT_TC01-KRITER = 'QUALITÄT'.
IT_TC01-NOTE = Z48M_LIEF_NOTE-QUALI.
ENDIF.
IF IT_TC01-KRITER = 'KOSTEN'.
IT_TC01-NOTE = Z48M_LIEF_NOTE-KOSTE.
ENDIF.
IF IT_TC01-KRITER = 'LIEFERTERMIN'.
IT_TC01-NOTE = Z48M_LIEF_NOTE-LIEFE.
ENDIF.
IF IT_TC01-KRITER = 'FLEXIBILITÄT'.
IT_TC01-NOTE = Z48M_LIEF_NOTE-FLEXI.
ENDIF.
IF IT_TC01-KRITER = 'ZUSAMMENARBEIT'.
IT_TC01-NOTE = Z48M_LIEF_NOTE-ZUSAM.
ENDIF.
IF IT_TC01-KRITER = 'SCHWIERIGKEITSGRAD'.
IT_TC01-NOTE = Z48M_LIEF_NOTE-SCHWI.
ENDIF.
MODIFY IT_TC01.
ENDLOOP.
* MESSAGE I999(Z48MM) WITH TEXT-004 G_T_EKPO-EBELN
* G_T_EKPO-EBELP.
CALL SCREEN 0100 STARTING AT 20 05 ENDING AT 80 14.
G_T_EKPO-NOTE = G_F_AVG.
G_T_EKPO-FLAG = 'X'.
MODIFY G_T_EKPO INDEX RS_SELFIELD-TABINDEX.
RS_SELFIELD-REFRESH = 'X'.
ELSE.
CALL SCREEN 0100 STARTING AT 20 05 ENDING AT 80 14.
G_T_EKPO-NOTE = G_F_AVG.
G_T_EKPO-FLAG = 'X'.
MODIFY G_T_EKPO INDEX RS_SELFIELD-TABINDEX.
RS_SELFIELD-REFRESH = 'X'.
ENDIF.
ELSE.
MESSAGE E105(Z48MM).
ENDIF.
ELSE.
* This check is done in order to avoid the valuation for the the
* Materials with type DIEN.
SELECT SINGLE * FROM Z48M_MATOHNEBEW INTO LR_OHNEBEW
WHERE MATNR = G_T_EKPO-MATNR.
IF SY-SUBRC NE 0.
SELECT * FROM Z48M_NOTE_LIST INTO TABLE IT_TC01.
CONCATENATE G_T_EKPO-EBELN G_T_EKPO-EBELP INTO TEXT1
SEPARATED BY '/'.
SELECT SINGLE * FROM Z48M_LIEF_NOTE
WHERE EBELN = G_T_EKPO-EBELN
AND EBELP = G_T_EKPO-EBELP.
IF SY-SUBRC = 0.
LOOP AT IT_TC01.
IF IT_TC01-KRITER = 'QUALITÄT'.
IT_TC01-NOTE = Z48M_LIEF_NOTE-QUALI.
ENDIF.
IF IT_TC01-KRITER = 'KOSTEN'.
IT_TC01-NOTE = Z48M_LIEF_NOTE-KOSTE.
ENDIF.
IF IT_TC01-KRITER = 'LIEFERTERMIN'.
IT_TC01-NOTE = Z48M_LIEF_NOTE-LIEFE.
ENDIF.
IF IT_TC01-KRITER = 'FLEXIBILITÄT'.
IT_TC01-NOTE = Z48M_LIEF_NOTE-FLEXI.
ENDIF.
IF IT_TC01-KRITER = 'ZUSAMMENARBEIT'.
IT_TC01-NOTE = Z48M_LIEF_NOTE-ZUSAM.
ENDIF.
IF IT_TC01-KRITER = 'SCHWIERIGKEITSGRAD'.
IT_TC01-NOTE = Z48M_LIEF_NOTE-SCHWI.
ENDIF.
MODIFY IT_TC01.
ENDLOOP.
* MESSAGE I999(Z48MM) WITH TEXT-004 G_T_EKPO-EBELN
* G_T_EKPO-EBELP.
CALL SCREEN 0100 STARTING AT 20 05 ENDING AT 80 14.
G_T_EKPO-NOTE = G_F_AVG.
G_T_EKPO-FLAG = 'X'.
MODIFY G_T_EKPO INDEX RS_SELFIELD-TABINDEX.
RS_SELFIELD-REFRESH = 'X'.
ELSE.
CALL SCREEN 0100 STARTING AT 20 05 ENDING AT 80 14.
G_T_EKPO-NOTE = G_F_AVG.
G_T_EKPO-FLAG = 'X'.
MODIFY G_T_EKPO INDEX RS_SELFIELD-TABINDEX.
RS_SELFIELD-REFRESH = 'X'.
ENDIF.
ELSE.
MESSAGE E105(Z48MM).
ENDIF.
ENDIF.
ENDCASE.
WHEN '&EMAIL'.
PERFORM BUILD_XLS_DATA_TABLE.
IF NOT IT_ATTACH[] IS INITIAL.
PERFORM MAIL_SEND.
ELSE.
MESSAGE S375(VN).
ENDIF.
ENDCASE.
ENDFORM. "USER_COMMAND_ALV
Regards,
Vasanth