*&---------------------------------------------------------------------*
*& Report ZCME_COPY_DATA
*&
*&---------------------------------------------------------------------*
*& 有一些缺陷,大数据时,表的字段长度大于 512 时的解决方法
*&第一次取结构,不管是什么数据类型的。反正你读出结构,创建动态内表。
*&然后你得到结构之后(内表). loop 这张内表, 累加它的字段长度,
*&小于等于 512 时再执行一次这个function 取数据(带关键字段,执行完了,
*&按照关键字段来合并数据),反复这样的操作。 需要写一个大方法
*&---------------------------------------------------------------------*
REPORT ZCME_COPY_DATA_D.
TABLES RSRD1.
SELECT-OPTIONS S_TAB FOR RSRD1-TBMA_VAL OBLIGATORY.
PARAMETERS P_DES TYPE RSEDR-SYSID.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_DES.
PERFORM SEARCH_HELP.
START-OF-SELECTION.
PERFORM GET_TABLE_NAME.
*&---------------------------------------------------------------------*
*& Form GET_TABLE_NAME
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_TABLE_NAME .
DATA LT_DD02L TYPE STANDARD TABLE OF DD02L.
DATA LS_DD02L TYPE DD02L.
DATA LT_RFC_DB_OPT TYPE STANDARD TABLE OF RFC_DB_OPT.
DATA LT_RFC_DB_FLD TYPE STANDARD TABLE OF RFC_DB_FLD.
DATA LT_TAB512 TYPE STANDARD TABLE OF TAB512.
DATA LS_TAB512 TYPE TAB512.
DATA DY_TABLE TYPE REF TO DATA.
DATA DY_LINE TYPE REF TO DATA.
DATA IFC TYPE LVC_T_FCAT.
DATA REF_TABLE_DES TYPE REF TO CL_ABAP_TYPEDESCR.
FIELD-SYMBOLS: <DYN_TABLE> TYPE STANDARD TABLE,
<DYN_WA>.
SELECT * INTO TABLE LT_DD02L
FROM DD02L
WHERE TABNAME IN S_TAB
AND AS4LOCAL = 'A'
AND TABNAME LIKE 'ZCME_%'.
LOOP AT LT_DD02L INTO LS_DD02L.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'.
REFRESH: LT_TAB512,LT_RFC_DB_FLD,LT_RFC_DB_OPT.
CALL FUNCTION 'RFC_READ_TABLE'
DESTINATION P_DES
EXPORTING
QUERY_TABLE = LS_DD02L-TABNAME
TABLES
OPTIONS = LT_RFC_DB_OPT
FIELDS = LT_RFC_DB_FLD
DATA = LT_TAB512
EXCEPTIONS
TABLE_NOT_AVAILABLE = 1
TABLE_WITHOUT_DATA = 2
OPTION_NOT_VALID = 3
FIELD_NOT_VALID = 4
NOT_AUTHORIZED = 5
DATA_BUFFER_EXCEEDED = 6
OTHERS = 7.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CREATE DATA DY_TABLE TYPE TABLE OF (LS_DD02L-TABNAME).
ASSIGN DY_TABLE->* TO <DYN_TABLE>.
CREATE DATA DY_LINE LIKE LINE OF <DYN_TABLE>.
ASSIGN DY_LINE->* TO <DYN_WA>.
LOOP AT LT_TAB512 INTO LS_TAB512.
ASSIGN LS_TAB512-WA TO <DYN_WA>.
*casting type (ls_dd02l-tabname).
APPEND <DYN_WA> TO <DYN_TABLE>.
ENDLOOP.
LOOP AT LT_TAB512 INTO LS_TAB512.
ASSIGN LS_TAB512-WA TO <DYN_WA>.
* casting type (ls_dd02l-tabname).
MODIFY (LS_DD02L-TABNAME) FROM <DYN_WA> .
IF SY-SUBRC = 0.
COMMIT WORK.
ENDIF.
ENDLOOP.
* check <dyn_table> is not initial.
* delete from (ls_dd02l-tabname).
* insert (ls_dd02l-tabname) from table <dyn_table>.
* if sy-subrc = 0.
* commit work.
* endif.
WRITE AT: / LS_DD02L-TABNAME.
ENDLOOP.
ENDFORM. " GET_TABLE_NAME
*&---------------------------------------------------------------------*
*& Form SEARCH_HELP
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SEARCH_HELP .
DATA: RFCDEST TYPE RFCDES-RFCDEST.
RFCDEST = P_DES.
CALL FUNCTION 'SCT2_GET_RFC_DESTINATION_F4'
EXPORTING
IV_RFC_DEST_TYPE = '3'
IV_POPUP_START_X = 5
IV_POPUP_START_Y = 5
CHANGING
CV_RFC_DEST = RFCDEST
EXCEPTIONS
RFC_DEST_NOT_FOUND = 1
CANCEL_BUTTON_PRESSED = 2
OTHERS = 3.
P_DES = RFCDEST.
ENDFORM. " SEARCH_HELP