TABLE CONTROL 을 BDC 뜰려고 합니다.
다른 T-CODE 는 화면단에 + 버튼이 있어서
데이터 한건 입력하고 + 버튼 누르고
다시 데이터 입력하고 + 버튼 누르고 데이터를 입력하잖아요
그런데 KPF6은 화면단에 + 버튼이 없어요.
그래서 인터넷 검색을 해보니 아리 FUCTION 이 나오는데
이 FUNCTION 은 입력화면이 바로 나와야 한다고 하네요.
여러 단계를 거쳐서 이동을 하면 아래 FUNCTION 을 사용을 못한다고 합니다.
FUNCTION z_get_loopc.
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" VALUE(FIELDNAME)
*" VALUE(TCODE) LIKE SY-TCODE
*" EXPORTING
*" VALUE(LOOPC) LIKE SY-LOOPC
*" TABLES
*" ITAB_BDC STRUCTURE BDCDATA
*" EXCEPTIONS
*" INVALID_BATCH_DATA
*" INVALID_FIELD_NAME
*" CANNOT_GET_LOOPC
*"----------------------------------------------------------------------
DATA : BEGIN OF itab_message OCCURS 0.
INCLUDE STRUCTURE bdcmsgcoll.
DATA : END OF itab_message.
DATA : field LIKE bdcdata-fnam,
c(2) TYPE n,
msgv2 LIKE sy-msgv2,
bdc_mode TYPE c VALUE 'N'.
CLEAR itab_bdc.
DO 30 TIMES.
c = sy-index .
CONCATENATE fieldname '(' c ')' INTO field.
itab_bdc-fnam = 'BDC_CURSOR'.
itab_bdc-fval = field.
APPEND itab_bdc.
ENDDO.
CALL TRANSACTION tcode USING itab_bdc
UPDATE 'S'
MODE bdc_mode
MESSAGES INTO itab_message.
READ TABLE itab_message WITH KEY msgid = '00'
msgnr = '343'.
* Cursor field &1&2 does not exist in the screen
IF sy-subrc = 0.
msgv2 = itab_message-msgv2.
REPLACE : '(' WITH space INTO msgv2,
')' WITH space INTO msgv2.
loopc = msgv2 - 1.
ENDIF.
IF loopc = 0.
READ TABLE itab_message WITH KEY msgid = '00'
msgnr = '344'.
* No batch input data for screen & &
IF sy-subrc = 0.
RAISE invalid_batch_data.
ELSE.
READ TABLE itab_message WITH KEY msgid = '00'
msgnr = '358'.
* Field &1&2 not found in loop of screen &3 &4
IF sy-subrc = 0.
RAISE invalid_field_name.
ELSE.
RAISE cannot_get_loopc.
ENDIF.
ENDIF.
ENDIF.
ENDFUNCTION.
어차리 하나씩 입력한다면 Internal 테이블을 Looping하면서 BDC테이블에 넣을 같네요..
그건 다 아실것같고.. 테이블 컨트롤을 BDC작성하려면 순간순간 입력하는 필드가 테이블 컨트롤 젤위에 나타는게 좋습니다.
즉 Table컨틀롤-속성중에 Top_line이라는 속성을 이용해서 한데이타 입력하고 나면 그 다음줄이 top_line이 되도록 하면 될것같은데요..