ABAP ALV新增可維護的新行


話不多說,直接上代碼,復制黏貼既可用!!!!!!!

雙擊某一行就會新增一行可維護空行!!!!!!!

TYPES:BEGIN OF ty_ekko,
        ebeln TYPE ekko-ebeln,
        verkf TYPE ekko-verkf,
        sel   TYPE c,  "用來標識行選擇的字段
        F_STYLE TYPE LVC_T_STYL,
      END OF ty_ekko.
DATA:it_ekko TYPE STANDARD TABLE OF ty_ekko,
     wa_ekko TYPE ty_ekko.

DATA:lt_fieldcat TYPE lvc_t_fcat,
     wa_fieldcat LIKE LINE OF lt_fieldcat,
     wa_layout TYPE lvc_s_layo.
CONSTANTS: gco_callback_user_command TYPE slis_formname  VALUE 'FRM_USER_COMMAND',
           gco_callback_status       TYPE slis_formname  VALUE 'FRM_USER_STATUS'.

START-OF-SELECTION.

  SELECT ebeln
         verkf
    INTO CORRESPONDING FIELDS OF TABLE it_ekko
    FROM ekko
  UP TO 10 ROWS.

  APPEND INITIAL LINE TO it_ekko.

  PERFORM frm_set_catalog.

  PERFORM frm_loop_itdata.
*  wa_layout-zebra = 'X'.
*  wa_layout-box_fname = 'SEL'.  "指定行選擇字段
  wa_layout-cwidth_opt = 'X'.
  wa_layout-stylefname = 'F_STYLE'.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program       = sy-repid
      is_layout_lvc            = wa_layout
      it_fieldcat_lvc          = lt_fieldcat
      i_callback_pf_status_set = gco_callback_status
      i_callback_user_command  = gco_callback_user_command
    TABLES
      t_outtab                 = it_ekko[]
    EXCEPTIONS
      program_error            = 1
      OTHERS                   = 2.
  IF sy-subrc = 0.

  ENDIF.

*&---------------------------------------------------------------------*
*&      Form  FRM_SET_PF_STATUS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_user_status USING i_it_extab TYPE slis_t_extab.
*  SET PF-STATUS '*******' .
ENDFORM.                    " FRM_SET_PF_STATUS

FORM frm_user_command USING i_ucomm       TYPE sy-ucomm
                            i_wa_selfield TYPE slis_selfield.
  CASE i_ucomm.
    WHEN '&IC1'.  "Double click
*     if click on PO field, jump to me23n
*      IF i_wa_selfield-fieldname = 'EBELN'.
*        SET PARAMETER ID 'BES' FIELD i_wa_selfield-value.
*        CALL TRANSACTION 'ME23N' AND SKIP FIRST SCREEN.
*      ENDIF.
      PERFORM frm_loop_itdata .
      APPEND INITIAL LINE TO it_ekko.
      i_wa_selfield-refresh = 'X'.
    WHEN OTHERS.

  ENDCASE.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_SET_CATALOG
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_set_catalog .

  DEFINE mac_fieldcat.
    clear wa_fieldcat.
    wa_fieldcat-fieldname = &1.
    wa_fieldcat-reptext   = &2.
    wa_fieldcat-tabname   = 'IT_EKKO'.
    wa_fieldcat-outputlen = &3.       "設置輸出列寬
    wa_fieldcat-edit      = &4.
    APPEND wa_fieldcat TO lt_fieldcat.
  END-OF-DEFINITION.

  clear wa_fieldcat.
  wa_fieldcat-fieldname = 'SEL'.
  wa_fieldcat-reptext   = '選擇框'.
  wa_fieldcat-tabname   = 'IT_EKKO'.
  wa_fieldcat-edit      = 'X'.
  wa_fieldcat-checkbox  = 'X'.
  wa_fieldcat-outputlen = 5.       "設置輸出列寬
  APPEND wa_fieldcat TO lt_fieldcat.

  mac_fieldcat 'EBELN' '采購單號' 10 'X'.
  mac_fieldcat 'VERKF' '銷售員'   10 'X'.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_loop_itdata
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_loop_itdata .
  DATA stylelin TYPE lvc_s_styl.

  LOOP AT it_ekko INTO wa_ekko.
    IF wa_ekko-ebeln IS NOT INITIAL.
      CLEAR :wa_ekko-f_style[].
      CLEAR stylelin.
      stylelin-fieldname = 'EBELN'. " 需要編輯的列名
      stylelin-style = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. " 設置為不可編輯狀態
      APPEND stylelin TO wa_ekko-f_style.

      CLEAR STYLELIN.
      stylelin-fieldname = 'VERKF'.
      stylelin-style = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.
      APPEND stylelin TO wa_ekko-f_style.

      MODIFY it_ekko FROM wa_ekko.
    ENDIF.
  ENDLOOP.
ENDFORM.

 有時候會報如下異常:

解決辦法如下:

問題:使用LVC_S_STYL參數賦值修改內表LVC_T_STYL表字段時,報ABAP系統錯誤如下:
'Error inserting into or changing a sorted table';具體代碼如下:

IS_STYLE-FIELDNAME = 'ZWEIZHI1'.
IS_STYLE-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.
APPEND IS_STYLE TO TAB_G_ZMRM-CELLSTYLES.
IS_STYLE-FIELDNAME = 'ZWEIZHI2'.
IS_STYLE-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.
APPEND IS_STYLE TO TAB_G_ZMRM-CELLSTYLES.

................

IS_STYLE-FIELDNAME = 'ZWEIZHI9'.
IS_STYLE-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.
APPEND IS_STYLE TO TAB_G_ZMRM-CELLSTYLES.
IS_STYLE-FIELDNAME = 'ZWEIZHI10'.
IS_STYLE-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.
APPEND IS_STYLE TO TAB_G_ZMRM-CELLSTYLES.
IS_STYLE-FIELDNAME = 'ZWEIZHI11'.
IS_STYLE-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.
APPEND IS_STYLE TO TAB_G_ZMRM-CELLSTYLES.


解決:ALV編輯單元格狀態或控制單元格顯示等可使用參數LVC_S_STYL,
參照LVC_S_STYL定義工作區,參照LVC_T_STYL定義一個表字段,放在顯示內表中,
並把該表字段在layout參數中激活STYLEFNAME,即可實現。

對於表字段的具體賦值,CALL FUNCTION和CALL METHOD不同ALV方式的實現方法也不相同。

但是在表字段賦值時,一定要注意FIELDNAME字段的排序方式,按照1 10 11...2 20 21...3...
依次順序排序,如果append進內表的字段排序順序不對的話,就會報SORT表的排序錯誤。
更改后代碼為:

IS_STYLE-FIELDNAME = 'ZWEIZHI1'.
IS_STYLE-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.
APPEND IS_STYLE TO TAB_G_ZMRM-CELLSTYLES.
IS_STYLE-FIELDNAME = 'ZWEIZHI10'.
IS_STYLE-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.
APPEND IS_STYLE TO TAB_G_ZMRM-CELLSTYLES.
IS_STYLE-FIELDNAME = 'ZWEIZHI11'.
IS_STYLE-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.
APPEND IS_STYLE TO TAB_G_ZMRM-CELLSTYLES.
IS_STYLE-FIELDNAME = 'ZWEIZHI2'.
IS_STYLE-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.
APPEND IS_STYLE TO TAB_G_ZMRM-CELLSTYLES.

................

IS_STYLE-FIELDNAME = 'ZWEIZHI9'.
IS_STYLE-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.
APPEND IS_STYLE TO TAB_G_ZMRM-CELLSTYLES.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM