首先上圖
大概就是這個樣子。。。。。em em em em em emmmmm......
上代碼走起~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*&---------------------------------------------------------------------*
*& REPORT Z001_FQ_2 *
*& *
*&--------F4 自定義標題欄目 -------------------------------------------------------------*
*& *
*& *
*&---------------------------------------------------------------------*
REPORT Z001_FQ_2 .
TABLES: T001L.
PARAMETERS:S_WERKS LIKE T001L-WERKS.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_WERKS.
PERFORM F4_WERKS.
*&---------------------------------------------------------------------*
*& Form F4_WERKS
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM F4_WERKS .
TYPES: BEGIN OF TY_F4,
WERKS TYPE T001L-WERKS,
LGOBE TYPE T001L-LGOBE,
LGORT TYPE T001L-LGORT,
END OF TY_F4.
DATA:LT_RETURN TYPE HRRETURN_TAB,
LS_RETURN TYPE DDSHRETVAL,
LS_FIELD_TAB TYPE DFIES,
LT_FIELD_TAB LIKE TABLE OF LS_FIELD_TAB.
DATA: LT_WERKS TYPE STANDARD TABLE OF TY_F4.
SELECT WERKS LGOBE LGORT
FROM T001L
INTO TABLE LT_WERKS.
IF SY-SUBRC <> 0.
RETURN.
ENDIF.
CLEAR: LS_FIELD_TAB.
PERFORM GET_FIELDINFO
USING 'T001L' 'WERKS'
CHANGING LS_FIELD_TAB.
LS_FIELD_TAB-POSITION = 1.
LS_FIELD_TAB-OFFSET = 0.
LS_FIELD_TAB-REPTEXT =
LS_FIELD_TAB-SCRTEXT_S =
LS_FIELD_TAB-SCRTEXT_M =
LS_FIELD_TAB-SCRTEXT_L = '字段1'.
APPEND LS_FIELD_TAB TO LT_FIELD_TAB.
CLEAR: LS_FIELD_TAB.
PERFORM GET_FIELDINFO
USING 'T001L' 'LGOBE'
CHANGING LS_FIELD_TAB.
LS_FIELD_TAB-POSITION = 2.
LS_FIELD_TAB-OFFSET = 4. "與前面字段的 INTLEN 長度一樣累計 0+4
LS_FIELD_TAB-REPTEXT =
LS_FIELD_TAB-SCRTEXT_S =
LS_FIELD_TAB-SCRTEXT_M =
LS_FIELD_TAB-SCRTEXT_L = '字段2'.
APPEND LS_FIELD_TAB TO LT_FIELD_TAB.
CLEAR: LS_FIELD_TAB.
PERFORM GET_FIELDINFO
USING 'T001L' 'LGORT'
CHANGING LS_FIELD_TAB.
LS_FIELD_TAB-POSITION = 3.
LS_FIELD_TAB-OFFSET = 20. "與前面字段的 INTLEN 長度一樣累計 0+4+16
LS_FIELD_TAB-REPTEXT =
LS_FIELD_TAB-SCRTEXT_S =
LS_FIELD_TAB-SCRTEXT_M =
LS_FIELD_TAB-SCRTEXT_L = '字段3'.
APPEND LS_FIELD_TAB TO LT_FIELD_TAB.
SORT LT_WERKS.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
RETFIELD = 'WERKS'
DYNPPROG = SY-REPID
DYNPNR = SY-DYNNR
VALUE_ORG = 'S'
DYNPROFIELD = 'WERKS'
* CALLBACK_PROGRAM = SY-REPID
* CALLBACK_FORM = ''
TABLES
VALUE_TAB = LT_WERKS[]
RETURN_TAB = LT_RETURN
FIELD_TAB = LT_FIELD_TAB
EXCEPTIONS
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
CLEAR:LT_RETURN.
ENDIF.
ENDFORM.
*---------------------------------------------------------------------*
* Form GET_FIELDINFO
*---------------------------------------------------------------------*
FORM GET_FIELDINFO USING U_TABNAME
U_FIELDNAME
CHANGING CS_FIELD_TAB.
CALL FUNCTION 'DDIF_FIELDINFO_GET'
EXPORTING
TABNAME = U_TABNAME
FIELDNAME = U_FIELDNAME
LFIELDNAME = U_FIELDNAME
IMPORTING
DFIES_WA = CS_FIELD_TAB
EXCEPTIONS
NOT_FOUND = 1
INTERNAL_ERROR = 2
OTHERS = 3.
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. " GET_FIELDINFO
重點!!!!! LS_FIELD_TAB-OFFSET 這個 字段後面的參數就是你前面字段長度累加!!!!!
比如第一個字段長度爲 4 那麼第二就寫 4 比如第三個字段 爲 10 那麼第三個就寫 14 。 這塊如果實在不會算 你就取一個估計數值然後慢慢計算 看與實際數據差幾個 就剪掉幾位(或加上幾位)。