FORM FRM_DOWLOAD TABLES P_IT_TABLE USING P_FILENAME.
DATA:FRM_FILENAME LIKE RLGRAP-FILENAME.
DATA:FRM_IT_DOWNLOAD TYPE STRING OCCURS 0 WITH HEADER LINE.
DATA:FRM_ITAB_COMPONET TYPE REF TO CL_ABAP_STRUCTDESCR.
DATA:FRM_TAB_CHAR.
DATA:FRM_VALUE TYPE STRING.
FIELD-SYMBOLS:<FRM_WA>,<FRM_FIELD>,<FRM_VALUE>.
REFRESH FRM_IT_DOWNLOAD.
FRM_ITAB_COMPONET ?= CL_ABAP_TYPEDESCR=>DESCRIBE_BY_DATA( P_IT_TABLE ).
FRM_TAB_CHAR = CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB."取跳格键
REFRESH FRM_IT_DOWNLOAD.
LOOP AT P_IT_TABLE.
CLEAR FRM_IT_DOWNLOAD.
LOOP AT FRM_ITAB_COMPONET->COMPONENTS ASSIGNING <FRM_WA>.
ASSIGN COMPONENT 'NAME' OF STRUCTURE <FRM_WA> TO <FRM_FIELD>.
ASSIGN COMPONENT <FRM_FIELD> OF STRUCTURE P_IT_TABLE TO <FRM_VALUE>.
IF <FRM_VALUE> IS INITIAL.
FRM_VALUE = ''.
ELSE.
FRM_VALUE = <FRM_VALUE>.
CONDENSE FRM_VALUE NO-GAPS.
ENDIF.
CONCATENATE FRM_IT_DOWNLOAD FRM_VALUE FRM_TAB_CHAR INTO FRM_IT_DOWNLOAD.
ENDLOOP.
CONDENSE FRM_IT_DOWNLOAD NO-GAPS.
APPEND FRM_IT_DOWNLOAD.
ENDLOOP.
FRM_FILENAME = P_FILENAME.
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
FILENAME = FRM_FILENAME
FILETYPE = 'ASC'
TABLES
DATA_TAB = FRM_IT_DOWNLOAD
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_WRITE_ERROR = 2
INVALID_FILESIZE = 3
INVALID_TYPE = 4
NO_BATCH = 5
UNKNOWN_ERROR = 6
INVALID_TABLE_WIDTH = 7
GUI_REFUSE_FILETRANSFER = 8
CUSTOMER_ERROR = 9
NO_AUTHORITY = 10
OTHERS = 11
.
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.
DATA:FRM_FILENAME LIKE RLGRAP-FILENAME.
DATA:FRM_IT_DOWNLOAD TYPE STRING OCCURS 0 WITH HEADER LINE.
DATA:FRM_ITAB_COMPONET TYPE REF TO CL_ABAP_STRUCTDESCR.
DATA:FRM_TAB_CHAR.
DATA:FRM_VALUE TYPE STRING.
FIELD-SYMBOLS:<FRM_WA>,<FRM_FIELD>,<FRM_VALUE>.
REFRESH FRM_IT_DOWNLOAD.
FRM_ITAB_COMPONET ?= CL_ABAP_TYPEDESCR=>DESCRIBE_BY_DATA( P_IT_TABLE ).
FRM_TAB_CHAR = CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB."取跳格键
REFRESH FRM_IT_DOWNLOAD.
LOOP AT P_IT_TABLE.
CLEAR FRM_IT_DOWNLOAD.
LOOP AT FRM_ITAB_COMPONET->COMPONENTS ASSIGNING <FRM_WA>.
ASSIGN COMPONENT 'NAME' OF STRUCTURE <FRM_WA> TO <FRM_FIELD>.
ASSIGN COMPONENT <FRM_FIELD> OF STRUCTURE P_IT_TABLE TO <FRM_VALUE>.
IF <FRM_VALUE> IS INITIAL.
FRM_VALUE = ''.
ELSE.
FRM_VALUE = <FRM_VALUE>.
CONDENSE FRM_VALUE NO-GAPS.
ENDIF.
CONCATENATE FRM_IT_DOWNLOAD FRM_VALUE FRM_TAB_CHAR INTO FRM_IT_DOWNLOAD.
ENDLOOP.
CONDENSE FRM_IT_DOWNLOAD NO-GAPS.
APPEND FRM_IT_DOWNLOAD.
ENDLOOP.
FRM_FILENAME = P_FILENAME.
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
FILENAME = FRM_FILENAME
FILETYPE = 'ASC'
TABLES
DATA_TAB = FRM_IT_DOWNLOAD
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_WRITE_ERROR = 2
INVALID_FILESIZE = 3
INVALID_TYPE = 4
NO_BATCH = 5
UNKNOWN_ERROR = 6
INVALID_TABLE_WIDTH = 7
GUI_REFUSE_FILETRANSFER = 8
CUSTOMER_ERROR = 9
NO_AUTHORITY = 10
OTHERS = 11
.
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.