ABAP自定義F4並且標題也自定義

首先上圖

大概就是這個樣子。。。。。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  。 這塊如果實在不會算 你就取一個估計數值然後慢慢計算 看與實際數據差幾個 就剪掉幾位(或加上幾位)。

發佈了44 篇原創文章 · 獲贊 9 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章