기본적으로 테이블 컨트롤에서 F4를 이용하면 선택된 데이터 1개만 가지고 옵니다.
그런데,
테이블컨트롤에서 해당라인 자재코드 선택시 자재명도 동시에 변경하고 싶다면...
SCREEN 0100
...
*-POV -------------------
PROCESS ON VALUE-REQUEST.
FIELD gt_list-matnr MODULE value_matnr.
*-----------------------------------
module value_matnr input.
**
DATA: BEGIN OF lt_matnr OCCURS 0,
matnr LIKE makt-matnr,
matwa TYPE makt-maktx,
END OF lt_matnr.
CLEAR: lt_matnr, lt_matnr[].
LOOP AT gt_310.
MOVE-CORRESPONDING gt_310 TO lt_matnr.
APPEND lt_matnr.
CLEAR: lt_matnr.
ENDLOOP.
** 선택한 필드의 라인과 필드명을 구함
DATA: cs_field(30),
cs_line LIKE sy-tabix.
GET CURSOR FIELD cs_field LINE cs_line.
IF cs_field IS INITIAL.
g_cursor_field = g_cursor_field.
g_cursor_line = g_cursor_line.
ELSE.
g_cursor_field = cs_field. "선택한 필드명
g_cursor_line = cs_line. "선택한 라인
ENDIF.
**
DATA: f4_return LIKE ddshretval OCCURS 0 WITH HEADER LINE,
l_dynprofield TYPE help_info-dynprofld.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'MATNR' "F4에서 선택하면 가져오는 값
dynpprog = sy-cprog "프로그램명
dynpnr = sy-dynnr "화면명
dynprofield = 'MATNR' "테이블컨트롤에 복사되어 들어가는 값 필드
window_title = '자재선택' "화면 제목
value_org = 'S'
TABLES
value_tab = lt_matnr "possible entry로 띄워주는 table
return_tab = f4_return
EXCEPTIONS
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3 .
**
DATA: l_stepl LIKE sy-stepl.
* 이 부분 빠지면 테이블컨트롤에서 엄한 곳에 값이 뿌려지게 됩니다.
CALL FUNCTION 'DYNP_GET_STEPL'
IMPORTING
povstepl = l_stepl "화면에 적용될 라인 위치 구함
EXCEPTIONS
stepl_not_found = 0
OTHERS = 0.
** F4에서 선택한 자재코드로 자재명을 구하는 부분
DATA: dynpro_values TYPE TABLE OF dynpread,
field_value LIKE LINE OF dynpro_values.
CHECK f4_return IS NOT INITIAL.
CLEAR: f4_return.
READ TABLE f4_return INDEX 1.
READ TABLE lt_matnr WITH KEY matnr = f4_return-fieldval.
CLEAR: field_value, dynpro_values.
REFRESH dynpro_values.
field_value-fieldname = 'gt_list-MATNR'. "자재코드
field_value-fieldvalue = lt_matnr-matnr.
field_value-stepl = l_stepl.
APPEND field_value TO dynpro_values.
field_value-fieldname = 'gt_list-MAKTX'. "자재명
field_value-fieldvalue = lt_matnr-matwa.
field_value-stepl = l_stepl.
APPEND field_value TO dynpro_values.
CALL FUNCTION 'DYNP_VALUES_UPDATE' "테이블컨트롤 해당 라인에 반영
EXPORTING
dyname = sy-cprog
dynumb = sy-dynnr
TABLES
dynpfields = dynpro_values.
IF sy-subrc <> 0.
ENDIF.
endmodule. " value_matnr INPUT
좋은 자료 감사합니다.