• 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.

     

  • 相关阅读:
    【转】第 02 天:在 Windows 平台必裝的三套 Git 工具
    【转】整理一下Android中的ListView
    【转】Git图形化界面客户端大汇总
    【转】探讨android更新UI的几种方法----不错
    【转】MTK Android Driver知识大全
    【转】Linux I2C设备驱动编写(三)-实例分析AM3359
    【转】Linux I2C设备驱动编写(二)
    【转】Linux I2C设备驱动编写(一)
    【转】(DT系列六)devicetree中数据和 struct device有什么关系
    空间同构(isomorphic)
  • 原文地址:https://www.cnblogs.com/seven1314pp/p/15715614.html
Copyright © 2020-2023  润新知