ABAP指標field symbol!

mmccking發表於2007-09-03
ABAP指標field symbol![@more@]

例:   頑張れ

*&---------------------------------------------------------------------*
*& Report X *
*& *
*&---------------------------------------------------------------------*
*& *
*& *
*&---------------------------------------------------------------------*
REPORT X.
*
TYPES: gts_str TYPE STRING.
DATA: gdt_str TYPE TABLE OF gts_str.
DATA: gds_str TYPE gts_str.
DATA: gdf_str TYPE STRING.
*
DATA: gdt_DD02L TYPE TABLE OF DD02L.
DATA: gds_DD02L TYPE TABLE OF DD02L.

* フィールドシンボル定義
FIELD-SYMBOLS: TYPE ANY. " シンボリック專案を宣言




DATA: v_flienm(40).
DATA: wa_str TYPE STRING.
DATA: it_str TYPE TABLE OF STRING.

* APPEND 'TYPE = ''TR'' AND OKFLAG = ''U''' TO it_options_usobx.
*&---------------------------------------------------------------------*
*& Event START-OF-SELECTION <主処理>
*&---------------------------------------------------------------------*
START-OF-SELECTION.
************************************************************************
* PERFORM SUB_SET_SEPARATOR_XXX.
* PERFORM X_A_TEST.
PERFORM X_B_TEST.

*&---------------------------------------------------------------------*
*& Form X_B_TEST
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM X_B_TEST .
DATA: v_buf(10000).

* DESCRIBE TABLE
ASSIGN v_buf TO CASTING TYPE DD02L.
SELECT * FROM DD02L UP TO 10 ROWS
INTO .
WRITE: / .

APPEND TO it_str.
ENDSELECT.

ENDFORM. " X_B_TEST
*&---------------------------------------------------------------------*
*& Form X_A_TEST
*&---------------------------------------------------------------------*
FORM X_A_TEST .

DATA: v_buf(10000).

* DESCRIBE TABLE
ASSIGN v_buf TO CASTING TYPE DD02L.
SELECT * FROM DD02L UP TO 10 ROWS
INTO .
WRITE: / .
ENDSELECT.
*
SKIP.
ASSIGN COMPONENT v_buf OF STRUCTURE gds_DD02L TO .
SELECT * FROM DD02L UP TO 10 ROWS
INTO .
WRITE: / .
ENDSELECT.

SKIP.
ASSIGN v_buf TO CASTING TYPE DD03L.
SELECT * FROM DD03L UP TO 10 ROWS
INTO .
WRITE: / .
ENDSELECT.


ENDFORM. " X_A_TEST
*&---------------------------------------------------------------------*
*& Form SUB_SET_SEPARATOR
*&---------------------------------------------------------------------*
* 構造を渡すと、專案間にセパレーターをセットして、1專案で返す
*----------------------------------------------------------------------*
FORM SUB_SET_SEPARATOR_XXX.
DATA: V_DATA(30000).
DATA: V_TABNAME LIKE DD02L-TABNAME VALUE 'T001W'.
DATA: V_CHAR72 LIKE RFC_DB_OPT.
FIELD-SYMBOLS: TYPE ANY.
ASSIGN V_DATA TO CASTING TYPE (V_TABNAME).

IF V_CHAR72 IS INITIAL.
SELECT * FROM (V_TABNAME) INTO .
WRITE V_DATA.
ENDSELECT.
ELSE.
SELECT * FROM (V_TABNAME) INTO WHERE (V_CHAR72).
WRITE V_DATA.
ENDSELECT.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form SUB_SET_SEPARATOR
*&---------------------------------------------------------------------*
* 構造を渡すと、專案間にセパレーターをセットして、1專案で返す
*----------------------------------------------------------------------*
* --&gtU_STR 構造
* --&gtU_SEPARATOR 區切り文字
* *----------------------------------------------------------------------*
FORM SUB_SET_SEPARATOR USING U_STR
U_SEPARATOR
CHANGING C_RET.

FIELD-SYMBOLS: TYPE ANY.
DATA LDF_WORK(512) TYPE C.
DATA LDF_INDEX LIKE SY-INDEX.
* DATA LDF_LEN TYPE I.

CLEAR SY-INDEX.
CLEAR C_RET.
UNASSIGN .
DO 1000 TIMES.
ASSIGN COMPONENT SY-INDEX OF STRUCTURE U_STR TO .

IF SY-SUBRC <> 0.
EXIT.
ENDIF.
* LDF_LEN = STRLEN( ).
* DESCRIBE FIELD LENGTH LDF_LEN IN BYTE MODE.
* LDF_WORK = +0(LDF_LEN).
LDF_WORK = .
* CONDENSE LDF_WORK. " 空白削除
LDF_INDEX = SY-INDEX + 1.
ASSIGN COMPONENT LDF_INDEX OF STRUCTURE U_STR TO .
IF SY-SUBRC = 0.
CONCATENATE C_RET LDF_WORK U_SEPARATOR INTO C_RET.
* SEPARATED BY U_SEPARATOR.
ELSE.
" 最終行にはセパレータはセットしない
CONCATENATE C_RET LDF_WORK INTO C_RET.
ENDIF.
ENDDO.

ENDFORM. " SUB_SET_SEPARATOR

*&---------------------------------------------------------------------*
*& Form SUB_SET_SEPARATOR_TAB
*&---------------------------------------------------------------------*
* 構造を渡すと、專案間に TABをセットして、1專案で返す
*----------------------------------------------------------------------*
* --&gtU_STR 構造
* *----------------------------------------------------------------------*
FORM SUB_SET_SEPARATOR_TAB USING U_STR
CHANGING C_RET TYPE C.
FIELD-SYMBOLS: TYPE ANY.
DATA LDF_WORK(100) TYPE C.
DATA LDF_INDEX LIKE SY-INDEX.
* DATA LDF_LEN TYPE I.

CLEAR SY-INDEX.
CLEAR C_RET.
UNASSIGN .

DO 1000 TIMES.
ASSIGN COMPONENT SY-INDEX OF STRUCTURE U_STR TO .

IF SY-SUBRC <> 0.
EXIT.
ENDIF.
* LDF_LEN = STRLEN( ).
* DESCRIBE FIELD LENGTH LDF_LEN IN CHARACTER MODE.
* LDF_WORK = +0(LDF_LEN).
LDF_WORK = .
CONDENSE LDF_WORK. " 空白削除
LDF_INDEX = SY-INDEX + 1.
ASSIGN COMPONENT LDF_INDEX OF STRUCTURE U_STR TO .
IF SY-SUBRC = 0.
CONCATENATE C_RET
LDF_WORK
CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB
INTO C_RET.
* SEPARATED BY cl_abap_char_utilities=>horizontal_tab.
ELSE.
" 最終行にはセパレータはセットしない
CONCATENATE C_RET LDF_WORK INTO C_RET.
ENDIF.

ENDDO.
ENDFORM. " SUB_SET_SEPARATOR_TAB

**********************************************************

來個簡單的,比較容易理解的

types: begin of t_date ,
year(4) type n ,
month(2) type n ,
day(2) type n ,
end of t_date .
field-symbols: type t_date .

assign l_first_day to casting .

-year ' -month ' -day 可以分別取到l_first_day 的年月日

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8356764/viewspace-967715/,如需轉載,請註明出處,否則將追究法律責任。

相關文章