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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章