SAP ALV选择列排序时弹出定义排序顺序窗口的解决方法

1、当程序中的FIELDCAT参考 LVC_T_FCAT时,字段EDIT = 'X',当选择某列排序时会弹出如下窗口

解决以上问题的方法:在实现类中加入红色字体的代码

CLASS LCL_EVENT_RECEIVER IMPLEMENTATION.

  METHOD HANDLE_MODIFY.
*    PERFORM refresh.
    DATA: lv_enter    TYPE REF TO cl_gui_event,
          lv_eventid  TYPE i.
*   获取当前事件
    lv_enter   = REF_GRID->cur_event.
*   实例化成功的时候
    IF lv_enter IS NOT INITIAL.
      lv_eventid = lv_enter->eventid.
    ENDIF.


    LOOP AT GTD_LIKP INTO GWA_LIKP  WHERE NEW_ROW = 'X'.
      GWA_LIKP-ZMENGE = ( GWA_LIKP-LFIMG * GWA_LIKP-BL ) / GWA_LIKP-ZL.
      MODIFY GTD_LIKP FROM GWA_LIKP.
    ENDLOOP.
*   稳定刷新
*   只有在[回车]事件的时候,再进行检查(19:代表回车事件)
    IF lv_eventid = 19 AND sy-ucomm   = ''.
      DATA STBL TYPE LVC_S_STBL.
      STBL-ROW = 'X'." 基于行的稳定刷新
      stbl-col = 'X'." 基于列稳定刷新
      CALL METHOD REF_GRID->REFRESH_TABLE_DISPLAY
        EXPORTING
          IS_STABLE = STBL.
    ENDIF.

  ENDMETHOD.                    "HANDLE_MODIFY

*******************************以下是程序代码************************************************

*&---------------------------------------------------------------------*
*& Report  ZMMR107MTL
*&
*&---------------------------------------------------------------------*
*&  辅料采购订单
*&---------------------------------------------------------------------*

REPORT  ZFIR022N.

TYPE-POOLS: SLIS.

TABLES: ZSD_LIKP,KNA1.
************************************************************************
* Define TABLE
************************************************************************


*DATA:  BEGIN OF GTD_LIKP OCCURS 0.
*DATA:          BOX(1) TYPE C.
*        INCLUDE STRUCTURE ZSD_LIKP .
*DATA:         STYLE TYPE LVC_T_STYL.
*DATA : END OF   GTD_LIKP.


TYPES:BEGIN OF GTY_LIKP,
        BOX(1) TYPE C  ,
NEW_ROW(1) TYPE    C,
KUNNR   TYPE    LIKP-KUNNR,        "客户号
VBELN   TYPE    ZSD_LIKP-VBELN,   "交货单号
VGBEL   TYPE    LIPS-VGBEL,
VGPOS   TYPE    LIPS-VGPOS,
POSNR   TYPE    ZSD_LIKP-POSNR  ,   "项目
ZMATNR  TYPE    ZSD_LIKP-ZMATNR ,    "来料物料号
ETENR   TYPE    ZSD_LIKP-ETENR  ,    "计划行
ZL      TYPE    ZSD_LIKP-ZL     ,   "  折率
BL      TYPE    ZSD_LIKP-BL     ,   "   份额
ZMENGE  TYPE    ZSD_LIKP-ZMENGE ,   "折后物料
MEINS   TYPE    ZSD_LIKP-MEINS  ,   "单位
MATNR   TYPE    ZSD_LIKP-MATNR  ,   "产成品物料号
LFIMG   TYPE    ZSD_LIKP-LFIMG  ,   "交货数量
AEDAT   TYPE    ZSD_LIKP-AEDAT  ,   "过账日期
CPUTM   TYPE    ZSD_LIKP-CPUTM  ,   "过账时间
USNAM   TYPE    ZSD_LIKP-USNAM  ,   "工号
MBLNR   TYPE    ZSD_LIKP-MBLNR  ,   "物料凭证号
MJAHR   TYPE    ZSD_LIKP-MJAHR  ,   "年份
ZEILE   TYPE    ZSD_LIKP-ZEILE  ,   "月份
ZZTXT   TYPE    ZSD_LIKP-ZZTXT  ,   "描述
VBELN1  TYPE    ZSD_LIKP-VBELN1 ,   "开票
POSNR1  TYPE    ZSD_LIKP-POSNR1 ,   "行
FKDAT   TYPE    VBRK-FKDAT,         "发票日期
 STYLE TYPE LVC_T_STYL,

 "设置编辑状态字段
      END OF GTY_LIKP.
DATA:GTD_LIKP TYPE STANDARD TABLE OF GTY_LIKP,
     GWA_LIKP TYPE GTY_LIKP.
DATA TEP_LIKP TYPE GTY_LIKP.
DATA:N TYPE I.
DATA: WA LIKE ZSD_LIKP OCCURS 0 WITH HEADER LINE.
DATA: UPDATE_TABLE LIKE TABLE OF WA.
DATA: T_MATNR  TYPE MARA-MATNR,BS(1) TYPE C.
DATA: GT_FIELDCAT TYPE LVC_T_FCAT,
      GS_FIELDCAT TYPE LVC_S_FCAT,
      "GT_EVENT TYPE  SLIS_T_EVENT WITH HEADER LINE,
      GS_LAYOUT TYPE LVC_S_LAYO.
DATA: GT_EVENT TYPE SLIS_T_EVENT WITH HEADER LINE,
      GT_EVENT_EXIT TYPE SLIS_T_EVENT_EXIT WITH HEADER LINE.
DATA:  REF_GRID TYPE REF TO CL_GUI_ALV_GRID.
"DATA: GT_FIELDCAT LIKE GS_FIELDCAT OCCURS 0.
" GT_EVENT  TYPE SLIS_T_EVENT.
DATA: GV_REPID LIKE SY-REPID.
DATA: GTD_TITLE          TYPE SLIS_T_LISTHEADER,
      GTH_TITLE          TYPE SLIS_LISTHEADER.
DATA  GR_ALVGRID TYPE REF TO CL_GUI_ALV_GRID .
DATA: OK_CODE            LIKE SY-UCOMM,
      SAVE_OK            LIKE SY-UCOMM.
DATA:GWA_EDIT TYPE LVC_S_STYL,
     GIT_EDIT TYPE LVC_T_STYL.
*
"声明类及定义方法来处理data_changed_finished事件
*----------------------------------------------------------------------*
*       CLASS lcl_event_receiver DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LCL_EVENT_RECEIVER DEFINITION.

  PUBLIC SECTION.
    METHODS HANDLE_MODIFY
    FOR EVENT DATA_CHANGED_FINISHED OF CL_GUI_ALV_GRID
    IMPORTING E_MODIFIED ET_GOOD_CELLS.

ENDCLASS.                    "LCL_EVENT_RECEIVER DEFINITION
*---------------------------------------------------------------------*
*       CLASS LCL_EVENT_RECEIVER IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LCL_EVENT_RECEIVER IMPLEMENTATION.

  METHOD HANDLE_MODIFY.
*    PERFORM refresh.
    DATA: lv_enter    TYPE REF TO cl_gui_event,
          lv_eventid  TYPE i.
*   获取当前事件
    lv_enter   = REF_GRID->cur_event.
*   实例化成功的时候
    IF lv_enter IS NOT INITIAL.
      lv_eventid = lv_enter->eventid.
    ENDIF.

    LOOP AT GTD_LIKP INTO GWA_LIKP  WHERE NEW_ROW = 'X'.
      GWA_LIKP-ZMENGE = ( GWA_LIKP-LFIMG * GWA_LIKP-BL ) / GWA_LIKP-ZL.
      MODIFY GTD_LIKP FROM GWA_LIKP.
    ENDLOOP.
*   稳定刷新
*   只有在[回车]事件的时候,再进行检查(19:代表回车事件)
    IF lv_eventid = 19 AND sy-ucomm   = ''.
      DATA STBL TYPE LVC_S_STBL.
      STBL-ROW = 'X'." 基于行的稳定刷新
      stbl-col = 'X'." 基于列稳定刷新
      CALL METHOD REF_GRID->REFRESH_TABLE_DISPLAY
        EXPORTING
          IS_STABLE = STBL.
    ENDIF.
  ENDMETHOD.                    "HANDLE_MODIFY

ENDCLASS.                    "LCL_EVENT_RECEIVER IMPLEMENTATION
"BUILD_EVENTS1
DATA GT_EVENT_RECEIVER TYPE REF TO LCL_EVENT_RECEIVER .
*----------------------------------------------------------------------
*     SELECTION-SCREEN
*----------------------------------------------------------------------
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
SELECTION-SCREEN SKIP 1.

"PARAMETERS: P_VBELN  LIKE ZSD_LIKP-VBELN  OBLIGATORY .
SELECT-OPTIONS:
             S_VBELN  FOR ZSD_LIKP-VBELN ,
             S_AEDAT FOR ZSD_LIKP-AEDAT,
             S_KUNNR FOR KNA1-KUNNR.
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN END OF BLOCK B1.

*----------------------------------------------------------------------*
*       START-OF-SELECTION
*----------------------------------------------------------------------*
START-OF-SELECTION.
  PERFORM SUB_DATA.
  PERFORM SUB_ALV_DISPLAY.
  "  PERFORM SUB_CLEAR.
*&---------------------------------------------------------------------*
*&      Form  SUB_GET_DATA
*&---------------------------------------------------------------------*
FORM SUB_DATA .
  data: lw_edit type lvc_s_styl .
data: lt_edit type lvc_t_styl .
  SELECT
     LIKP~KUNNR
     ZSD_LIKP~VBELN
     ZSD_LIKP~POSNR
     LIPS~VGBEL "销售订单号
     LIPS~VGPOS "销售行项目
     ZSD_LIKP~ZMATNR
     ZSD_LIKP~ETENR
     ZSD_LIKP~ZL
     ZSD_LIKP~BL
     ZSD_LIKP~ZMENGE
     ZSD_LIKP~MEINS
     ZSD_LIKP~MATNR
     ZSD_LIKP~LFIMG
     ZSD_LIKP~AEDAT
     ZSD_LIKP~CPUTM
     ZSD_LIKP~USNAM
     ZSD_LIKP~MBLNR
     ZSD_LIKP~MJAHR
     ZSD_LIKP~ZEILE
     ZSD_LIKP~ZZTXT
     VBRP~VBELN   AS VBELN1
     VBRP~POSNR  AS  POSNR1
 INTO CORRESPONDING FIELDS OF TABLE GTD_LIKP
    FROM ZSD_LIKP JOIN  LIKP ON LIKP~VBELN = ZSD_LIKP~VBELN LEFT JOIN VBRP ON VBRP~VGBEL = ZSD_LIKP~VBELN AND VBRP~VGPOS = ZSD_LIKP~POSNR
    JOIN LIPS ON LIPS~VBELN = ZSD_LIKP~VBELN AND LIPS~POSNR = ZSD_LIKP~POSNR
      WHERE ZSD_LIKP~VBELN IN S_VBELN
        AND ZSD_LIKP~AEDAT IN S_AEDAT
        AND LIKP~KUNNR IN S_KUNNR
    order by LIKP~KUNNR   ZSD_LIKP~VBELN  ZSD_LIKP~POSNR ZSD_LIKP~ZMATNR ZSD_LIKP~ETENR .

  LOOP AT GTD_LIKP INTO GWA_LIKP.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
      EXPORTING
        INPUT  = GWA_LIKP-ZMATNR
      IMPORTING
        OUTPUT = GWA_LIKP-ZMATNR.
    MODIFY GTD_LIKP FROM GWA_LIKP.
  ENDLOOP.

  LOOP AT GTD_LIKP INTO GWA_LIKP WHERE VBELN1 <> '' .
    SELECT SINGLE FKDAT INTO GWA_LIKP-FKDAT FROM VBRK WHERE VBELN = GWA_LIKP-VBELN1.
    MODIFY  GTD_LIKP FROM GWA_LIKP .
  ENDLOOP.
*  GWA_EDIT-FIELDNAME = 'ZMATNR'.
*  GWA_EDIT-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED."设置为不可编辑
*  INSERT GWA_EDIT INTO TABLE GIT_EDIT.
*
*  GWA_EDIT-FIELDNAME = 'BL'.
*  GWA_EDIT-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED."设置为不可编辑
*  INSERT GWA_EDIT INTO TABLE GIT_EDIT.
*  "  APPEND GWA_EDIT TO GIT_EDIT.
*
*  GWA_EDIT-FIELDNAME = 'ZL'.
*  GWA_EDIT-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED."设置为不可编辑
*  "APPEND GWA_EDIT TO GIT_EDIT.
*  INSERT GWA_EDIT INTO TABLE GIT_EDIT.
*  INSERT LINES OF GIT_EDIT INTO TABLE GWA_LIKP-STYLE.
*      lw_edit-fieldname = 'BOX'. " 需要编辑的列名name_text
*      lw_edit-style = cl_gui_alv_grid=>mc_style_enabled. " 设置为可编辑状态
*      insert lw_edit into table lt_edit.
*      clear: lw_edit.

      lw_edit-fieldname = 'ZMATNR'. " 需要编辑的列名name_text
      lw_edit-style = cl_gui_alv_grid=>mc_style_DISABLED. " 设置为可编辑状态
      insert lw_edit into table lt_edit.
      clear: lw_edit.

      lw_edit-fieldname = 'BL'. " 需要编辑的列名name_text
      lw_edit-style = cl_gui_alv_grid=>mc_style_DISABLED. " 设置为可编辑状态
      insert lw_edit into table lt_edit.
      clear: lw_edit.

      lw_edit-fieldname = 'ZL'. " 需要编辑的列名name_text
      lw_edit-style = cl_gui_alv_grid=>mc_style_DISABLED. " 设置为可编辑状态
      insert lw_edit into table lt_edit.
      clear: lw_edit.

      GWA_LIKP-STYLE = lt_edit.
      "modify gt_tab from gw_tab TRANSPORTING cellstyle.
*      clear: gw_tab.
*      refresh:lt_edit.


  DESCRIBE TABLE GTD_LIKP LINES N.

  DO N TIMES.

    MODIFY GTD_LIKP INDEX SY-INDEX FROM GWA_LIKP TRANSPORTING STYLE.

  ENDDO.
ENDFORM.                    " SUB_GET_DATA

*----------------------------------------------------------------------
*     Form  sub_alv_display
*----------------------------------------------------------------------
*       采购订单ALV汇总列表
*----------------------------------------------------------------------

FORM SUB_ALV_DISPLAY.

  PERFORM SUB_TITLE.
  PERFORM SUB_FIELD.

  GT_EVENT-NAME = 'CALLER_EXIT'.   "slis_ev_caller_exit_at_start事件 调用来获取ALV对象并注册回车事件
  GT_EVENT-FORM = 'FM_BUTTON'.
 " GS_EVENTS1-NAME = 'PF_STATUS_SET1' .
 " GT_EVENT-FORM = 'SET_STATUS'.
  APPEND GT_EVENT .

  GS_LAYOUT-ZEBRA = 'X'.
  "  GS_LAYOUT-SEL_MODE = 'A'.
  GS_LAYOUT-CWIDTH_OPT = 'X'.
  "  GS_LAYOUT-EDIT     = 'X'.       "将整个ALV设置成可编辑
  GS_LAYOUT-STYLEFNAME = 'STYLE'. "指定保存编辑状态的字段名
  "GS_LAYOUT-EDT_CLL_CB = 'X'.
  " GS_LAYOUT-CWIDTH_OPT = 'X'.
"   GS_LAYOUT-ZEBRA = 'X'.
"  GS_LAYOUT-KEY_HOTSPOT = 'X' .
  GS_LAYOUT-CWIDTH_OPT  = 'X'.
  GS_LAYOUT-BOX_FNAME = 'BOX'.

  GV_REPID = SY-REPID.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      I_CALLBACK_PROGRAM       = SY-REPID                   "程序名称
*      I_CALLBACK_TOP_OF_PAGE   = 'ALV_TOP_OF_PAGE'          "只是简单的文本,而且处理程序中只能用REUSE_ALV_COMMENTARY_WRITE来显示表头信息
      I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS'                 "定义触法工具栏定义,通常为一子程序
      IT_FIELDCAT_LVC          = GT_FIELDCAT[]                "定义fieldcat数据的值
      IS_LAYOUT_LVC            = GS_LAYOUT                  "定义layout名称
      IT_EVENTS                = GT_EVENT[]                "定义alv输出时间
      I_SAVE                   = 'A'
      I_CALLBACK_USER_COMMAND  = 'USER_COMMAND'             "如某表字段的双击事件
    TABLES
      T_OUTTAB                 = GTD_LIKP.

  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
*CALL METHOD CL_GUI_CONTROL=>SET_FOCUS
*    EXPORTING
*      CONTROL = REF_GRID.
*  CALL METHOD CL_GUI_CFW=>FLUSH.
ENDFORM.                    "sub_alv_display
*----------------------------------------------------------------------
*      Form  sub_title
*----------------------------------------------------------------------
*       ALV列表显示的抬头信息
*----------------------------------------------------------------------
FORM SUB_TITLE.
  PERFORM SUB_SET_TITLE USING  'H'  ''  '核销数据调整'.
  PERFORM SUB_SET_TITLE USING  'S'  'DATE :' SY-DATUM.
  PERFORM SUB_SET_TITLE USING  'S'  'USER :' SY-UNAME.

ENDFORM.                    " set_titlt
*-----------------------------------------------------------------------
*&      Form  sub_set_title
*-----------------------------------------------------------------------
*       ALV列表抬头信息的属性设置
*-----------------------------------------------------------------------
FORM SUB_SET_TITLE USING I_TYP TYPE ANY
                         I_KEY TYPE ANY
                         I_INFO TYPE ANY.

  CLEAR GTH_TITLE.
  GTH_TITLE-TYP  = I_TYP.             "输出的类型
  GTH_TITLE-KEY  = I_KEY.             "文本
  GTH_TITLE-INFO = I_INFO.            "数值
  APPEND GTH_TITLE TO GTD_TITLE.

ENDFORM.     "sub_set_title
*-----------------------------------------------------------------------
*      Form  sub_field
*-----------------------------------------------------------------------
*       调用set_field_cat,设置ALV字段的属性,减少代码量  GTD_FK
*-----------------------------------------------------------------------
FORM SUB_FIELD.

*  REFRESH GT_FIELDCAT. CLEAR:GT_FIELDCAT.
*
**  GT_FIELDCAT-FIELDNAME = 'BOX'.
**  GT_FIELDCAT-COLTEXT = '选择'.
**  GT_FIELDCAT-EDIT = 'X'.
**  GT_FIELDCAT-CHECKBOX = 'X'.
**  APPEND GT_FIELDCAT TO GT_FIELDCAT.
**  CLEAR GT_FIELDCAT.
*
*  GT_FIELDCAT-FIELDNAME = 'KUNNR'.
*  GT_FIELDCAT-COLTEXT = '客户号'.
*
*  APPEND GT_FIELDCAT TO GT_FIELDCAT.
*  CLEAR GT_FIELDCAT.
*
*  GT_FIELDCAT-FIELDNAME = 'VBELN'.
*  GT_FIELDCAT-COLTEXT = '交货单'.
*
*  APPEND GT_FIELDCAT TO GT_FIELDCAT.
*  CLEAR GT_FIELDCAT.
*
*  GT_FIELDCAT-FIELDNAME = 'POSNR'.
*  GT_FIELDCAT-COLTEXT = '行号'.
*  APPEND GT_FIELDCAT TO GT_FIELDCAT.
*  CLEAR GT_FIELDCAT.
*
*  GT_FIELDCAT-FIELDNAME = 'VGBEL'.
*  GT_FIELDCAT-COLTEXT = '销售订单'.
*
*  APPEND GT_FIELDCAT TO GT_FIELDCAT.
*  CLEAR GT_FIELDCAT.
*
*  GT_FIELDCAT-FIELDNAME = 'VGPOS'.
*  GT_FIELDCAT-COLTEXT = '销售行号'.
*  APPEND GT_FIELDCAT TO GT_FIELDCAT.
*  CLEAR GT_FIELDCAT.
*
*  GT_FIELDCAT-FIELDNAME = 'ZMATNR'.
**  GT_FIELDCAT-EDIT = 'X'.
*  GT_FIELDCAT-COLTEXT = '来料物料号'.
*  GT_FIELDCAT-REF_TABLE   = 'MARA'.
*  GT_FIELDCAT-REF_FIELD = 'MATNR'.
*  APPEND GT_FIELDCAT TO GT_FIELDCAT.
*  CLEAR GT_FIELDCAT.
*
*  GT_FIELDCAT-FIELDNAME = 'ETENR'.
*  GT_FIELDCAT-COLTEXT = '计划行'.
*  APPEND GT_FIELDCAT TO GT_FIELDCAT.
*  CLEAR GT_FIELDCAT.
*
*  GT_FIELDCAT-FIELDNAME = 'ZL'.
**  GT_FIELDCAT-EDIT = 'X'.
*  GT_FIELDCAT-COLTEXT = '折率'.
*  GT_FIELDCAT-DECIMALS = 4 .
*  APPEND GT_FIELDCAT TO GT_FIELDCAT.
*  CLEAR GT_FIELDCAT.
*
*  GT_FIELDCAT-FIELDNAME = 'BL'.
**  GT_FIELDCAT-EDIT = 'X'.
*  GT_FIELDCAT-COLTEXT = ' 份额'.
*  GT_FIELDCAT-DECIMALS = 4 .
*  APPEND GT_FIELDCAT TO GT_FIELDCAT.
*  CLEAR GT_FIELDCAT.
*
*  GT_FIELDCAT-FIELDNAME = 'ZMENGE'.
*  " GT_FIELDCAT-EDIT = 'X'.
*  GT_FIELDCAT-COLTEXT = ' 折后物料'.
*  APPEND GT_FIELDCAT TO GT_FIELDCAT.
*  CLEAR GT_FIELDCAT.
*
*  GT_FIELDCAT-FIELDNAME = 'MEINS'.
*  GT_FIELDCAT-COLTEXT = '单位'.
*  APPEND GT_FIELDCAT TO GT_FIELDCAT.
*  CLEAR GT_FIELDCAT.
*
*  GT_FIELDCAT-FIELDNAME = 'MATNR'.
*  GT_FIELDCAT-COLTEXT = ' 产成品物料号'.
*  APPEND GT_FIELDCAT TO GT_FIELDCAT.
*  CLEAR GT_FIELDCAT.
*
*  GT_FIELDCAT-FIELDNAME = 'LFIMG'.
*  "GT_FIELDCAT-EDIT = 'X'.
*  GT_FIELDCAT-COLTEXT = '交货数量'.
*  APPEND GT_FIELDCAT TO GT_FIELDCAT.
*  CLEAR GT_FIELDCAT.
*
*  GT_FIELDCAT-FIELDNAME = 'AEDAT'.
*  GT_FIELDCAT-COLTEXT = ' 过账日期'.
*  APPEND GT_FIELDCAT TO GT_FIELDCAT.
*  CLEAR GT_FIELDCAT.
*
*  GT_FIELDCAT-FIELDNAME = 'CPUTM'.
*  GT_FIELDCAT-COLTEXT = ' 过账时间'.
*  APPEND GT_FIELDCAT TO GT_FIELDCAT.
*  CLEAR GT_FIELDCAT.
*
*  GT_FIELDCAT-FIELDNAME = 'USNAM'.
*  GT_FIELDCAT-COLTEXT = ' 工号'.
*  APPEND GT_FIELDCAT TO GT_FIELDCAT.
*  CLEAR GT_FIELDCAT.
*
*  GT_FIELDCAT-FIELDNAME = 'MBLNR'.
*  GT_FIELDCAT-COLTEXT = ' 物料凭证号'.
*  APPEND GT_FIELDCAT TO GT_FIELDCAT.
*  CLEAR GT_FIELDCAT.
*
*  GT_FIELDCAT-FIELDNAME = 'ZEILE'.
*  GT_FIELDCAT-COLTEXT = ' 项目号'.
*  APPEND GT_FIELDCAT TO GT_FIELDCAT.
*  CLEAR GT_FIELDCAT.
*
*  GT_FIELDCAT-FIELDNAME = 'MJAHR'.
*  GT_FIELDCAT-COLTEXT = '年份'.
*  APPEND GT_FIELDCAT TO GT_FIELDCAT.
*  CLEAR GT_FIELDCAT.
*
*  GT_FIELDCAT-FIELDNAME = 'ZZTXT'.
*  "GT_FIELDCAT-EDIT = 'X'.
*  GT_FIELDCAT-COLTEXT = '描述'.
*  APPEND GT_FIELDCAT TO GT_FIELDCAT.
*  CLEAR GT_FIELDCAT.
*
*  GT_FIELDCAT-FIELDNAME = 'VBELN1'.
*  GT_FIELDCAT-COLTEXT = ' 开票'.
*  APPEND GT_FIELDCAT TO GT_FIELDCAT.
*  CLEAR GT_FIELDCAT.
*
*  GT_FIELDCAT-FIELDNAME = 'POSNR1'.
*  GT_FIELDCAT-COLTEXT = ' 行'.
*  APPEND GT_FIELDCAT TO GT_FIELDCAT.
*  CLEAR GT_FIELDCAT.
*
*  GT_FIELDCAT-FIELDNAME = 'FKDAT'.
*  GT_FIELDCAT-COLTEXT = '开票日期'.
*  APPEND GT_FIELDCAT TO GT_FIELDCAT.
*  CLEAR GT_FIELDCAT.

  DATA: L_I TYPE I.
  CLEAR: GT_FIELDCAT[].
  define  APPEND_FIELDCAT.
    CLEAR GS_FIELDCAT.
    L_I = L_I  + 1.
    GS_FIELDCAT-COL_POS       = L_I.
    GS_FIELDCAT-FIELDNAME     = &1.
    GS_FIELDCAT-COLTEXT       = &2.
    GS_FIELDCAT-DATATYPE      = &3.
    GS_FIELDCAT-NO_ZERO       = &4.
    GS_FIELDCAT-EDIT = &5.   " 设置字段可编辑
    GS_FIELDCAT-CHECKBOX = &6.
    APPEND GS_FIELDCAT TO GT_FIELDCAT.
    CLEAR:GS_FIELDCAT.
  END-OF-DEFINITION.

      APPEND_FIELDCAT 'BOX'       '选择'         ' ' ' ' 'X' 'X'.
      APPEND_FIELDCAT 'KUNNR'     '客户号'       ' ' ' ' ' ' ''.
      APPEND_FIELDCAT 'VBELN'     '交货单'       ' ' ' ' ' ' ''.
      APPEND_FIELDCAT 'POSNR'     '行号'         ' ' ' ' ' ' ''.
      APPEND_FIELDCAT 'VGBEL'     '销售订单'     ' ' ' ' ' ' ''.
      APPEND_FIELDCAT 'VGPOS'     '销售行号'     ' ' ' ' ' ' ''.
      APPEND_FIELDCAT 'ZMATNR'    '来料物料号'   ' ' 'X' 'X' ''.
      APPEND_FIELDCAT 'ETENR'     '计划行'       ' ' ' ' ' ' ''.
      APPEND_FIELDCAT 'ZL'        '折率'         'ZL' ' ' 'X' ''.
      APPEND_FIELDCAT 'BL'        '份额'         'ZBL' ' ' 'X' ''.
      APPEND_FIELDCAT 'ZMENGE'    '折后物料'     ' ' ' ' ' ' ''.
      APPEND_FIELDCAT 'MEINS'     '单位'         ' ' ' ' ' ' ''.
      APPEND_FIELDCAT 'MATNR'     '产成品物料号' ' ' ' ' ' ' ''.
      APPEND_FIELDCAT 'LFIMG'     '交货数量'     ' ' ' ' ' ' ''.
      APPEND_FIELDCAT 'AEDAT'     '过账日期'     ' ' ' ' ' ' ''.
      APPEND_FIELDCAT 'CPUTM'     '过账时间'     ' ' ' ' ' ' ''.
      APPEND_FIELDCAT 'USNAM'     '工号'         ' ' ' ' ' ' ''.
      APPEND_FIELDCAT 'MBLNR'     '物料凭证号'   ' ' ' ' ' ' ''.
      APPEND_FIELDCAT 'ZEILE'     '项目号'       ' ' ' ' ' ' ''.
      APPEND_FIELDCAT 'MJAHR'     '年份'         ' ' ' ' ' ' ''.
      APPEND_FIELDCAT 'ZZTXT'     '描述'         ' ' ' ' ' ' ''.
      APPEND_FIELDCAT 'VBELN1'    '开票'         ' ' ' ' ' ' ''.
      APPEND_FIELDCAT 'POSNR1'    '行'           ' ' ' ' ' ' ''.
      APPEND_FIELDCAT 'FKDAT'     '开票日期'     ' ' ' ' ' ' ''.

ENDFORM.                    "sub_field
************************************************************************
*&      Form  alv_top_of_page
************************************************************************
*       ALV列表抬头的设定
************************************************************************
FORM ALV_TOP_OF_PAGE.
  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      IT_LIST_COMMENTARY = GTD_TITLE.
ENDFORM.   "alv_top_of_page
*&---------------------------------------------------------------------*
*&      Form  set_pf_status
*&---------------------------------------------------------------------*
*       调用GUI出口程序
*----------------------------------------------------------------------*
* -->i_extab       "参照slis_t_extab的内表
*----------------------------------------------------------------------*
FORM SET_PF_STATUS USING  I_EXTAB TYPE SLIS_T_EXTAB.

  SET PF-STATUS 'STATUS'." EXCLUDING I_EXTAB.

ENDFORM.                    "set_pf_status
*&---------------------------------------------------------------------*
*&      Form  user_command2
*&---------------------------------------------------------------------*
*       实现自定义的按钮的功能
*----------------------------------------------------------------------*
************************************************************************
FORM FM_BUTTON USING E_GRID TYPE SLIS_DATA_CALLER_EXIT.
               " USING  I_EXTAB TYPE SLIS_T_EXTAB  .

  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
*   EXPORTING
*     IR_SALV_FULLSCREEN_ADAPTER       =
  IMPORTING
*     ET_EXCLUDING                     =
*     E_REPID                          =
*     E_CALLBACK_PROGRAM               =
*     E_CALLBACK_ROUTINE               =
    E_GRID                           = REF_GRID
*     ET_FIELDCAT_LVC                  =
*     ER_TRACE                         =
*     E_FLG_NO_HTML                    =
*     ES_LAYOUT_KKBLO                  =
*     ES_SEL_HIDE                      =
*     ET_EVENT_EXIT                    =
*     ER_FORM_TOL                      =
*     ER_FORM_EOL                      =
    .
  CALL METHOD ref_grid->check_changed_data.
* 设置enter事件
  CALL METHOD REF_GRID->REGISTER_EDIT_EVENT
    EXPORTING
      I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_ENTER
    EXCEPTIONS
      ERROR      = 1
      OTHERS     = 2.
" SET PF-STATUS 'STATUS' EXCLUDING I_EXTAB.
  CREATE OBJECT GT_EVENT_RECEIVER.
  SET HANDLER   GT_EVENT_RECEIVER->HANDLE_MODIFY FOR REF_GRID.
ENDFORM.                    "FM_BUTTON
*&---------------------------------------------------------------------*
*&      Form  USER_COMMAND
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->I_UCOMM    text
*      -->I_SELFIELD text
*----------------------------------------------------------------------*
FORM USER_COMMAND USING I_UCOMM LIKE SY-UCOMM
                         I_SELFIELD TYPE SLIS_SELFIELD.
  DATA: LWK_GRID TYPE REF TO CL_GUI_ALV_GRID.
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'"这个函数就是将我们现阶段的ALV转成了 CL_GUI_ALV_GRID 类的一个实例.
    IMPORTING
      E_GRID = LWK_GRID.
  DATA: II TYPE I.
  CALL METHOD LWK_GRID->CHECK_CHANGED_DATA.
  IF SY-BATCH IS INITIAL.
    CALL METHOD LWK_GRID->REGISTER_EDIT_EVENT
      EXPORTING
        I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_ENTER. "回车时触发
    CALL METHOD LWK_GRID->REFRESH_TABLE_DISPLAY.
  ENDIF.
  CASE I_UCOMM.
*    WHEN '&IC1'.
*      CLEAR GTD_FK.
*      READ TABLE GTD_FK INDEX I_SELFIELD-TABINDEX.
*      CASE I_SELFIELD-FIELDNAME.
*        WHEN 'LIFNR'.
*          PERFORM GET_SUB_DATA USING GTD_FK-LIFNR GTD_FK-LAUFD  GTD_FK-LAUFI GTD_FK-XVORL.
*          PERFORM GET_LAYOUT_MX.
*          PERFORM SUB_ALV_WRITE_MX.
*          " EXPORT GT_ALV1 TO MEMORY ID 'ZLCQ_TABLE'.
*          " SUBMIT ZFIR501A WITH FLAG1 = S_UMSKZ-LOW
*          "WITH FLAG2 = S_UMSKZ-HIGH AND RETURN .
*      ENDCASE.
    WHEN 'SETALL'.
      CLEAR GWA_LIKP.
      LOOP AT GTD_LIKP INTO GWA_LIKP  WHERE BOX = 'X' AND ETENR <> 7001.
        GWA_LIKP-NEW_ROW = 'X'.
        GWA_LIKP-BOX = ''.
        CLEAR II.
        LOOP AT GTD_LIKP  INTO TEP_LIKP WHERE VBELN = GWA_LIKP-VBELN AND POSNR = GWA_LIKP-POSNR AND ETENR > GWA_LIKP-ETENR AND ETENR <> 7001 AND  ETENR <> 9001.
          II = II + 1.
        ENDLOOP.
        GWA_LIKP-ETENR = GWA_LIKP-ETENR + 1 + II.
        GWA_LIKP-MBLNR = '0000009001'.
        GWA_LIKP-AEDAT = SY-DATUM.
        GWA_LIKP-CPUTM = SY-UZEIT.
        GWA_LIKP-USNAM = SY-UNAME.
        GWA_LIKP-MJAHR = SY-DATUM+0(4).
        GWA_LIKP-ZEILE =  SY-DATUM+4(2).
        GWA_LIKP-ZZTXT = '新增正常的过账'.
       CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
      EXPORTING
        INPUT  = GWA_LIKP-ZMATNR
      IMPORTING
        OUTPUT = GWA_LIKP-ZMATNR.
        CLEAR GWA_LIKP-STYLE.
        APPEND GWA_LIKP TO GTD_LIKP.
      ENDLOOP.
SORT  GTD_LIKP BY VBELN POSNR.
    WHEN 'PRINT2'.
      CLEAR GWA_LIKP.
      LOOP AT GTD_LIKP INTO GWA_LIKP  WHERE BOX = 'X' AND ETENR <> 7001.
        "冲销
        GWA_LIKP-NEW_ROW = 'Y'.
        GWA_LIKP-BOX = ''.
        GWA_LIKP-ETENR = 7001.
        GWA_LIKP-ZMENGE = -1 * GWA_LIKP-ZMENGE.
        GWA_LIKP-LFIMG = -1 * GWA_LIKP-LFIMG.
        GWA_LIKP-MBLNR = '0000007001'.
        GWA_LIKP-AEDAT = SY-DATUM.
        GWA_LIKP-CPUTM = SY-UZEIT.
        GWA_LIKP-USNAM = SY-UNAME.
        GWA_LIKP-MJAHR = SY-DATUM+0(4).
        GWA_LIKP-ZEILE =  SY-DATUM+4(2).
        GWA_LIKP-ZZTXT = '自动冲销'.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
      EXPORTING
        INPUT  = GWA_LIKP-ZMATNR
      IMPORTING
        OUTPUT = GWA_LIKP-ZMATNR.
        APPEND GWA_LIKP TO GTD_LIKP.
      ENDLOOP.
      CLEAR GWA_LIKP.
      LOOP AT GTD_LIKP INTO GWA_LIKP  WHERE BOX = 'X' AND ETENR <> 7001.
        GWA_LIKP-NEW_ROW = 'X'.
        GWA_LIKP-BOX = ''.
        CLEAR II.
        LOOP AT GTD_LIKP  INTO TEP_LIKP WHERE VBELN = GWA_LIKP-VBELN AND POSNR = GWA_LIKP-POSNR AND ETENR > GWA_LIKP-ETENR AND ETENR <> 7001 AND  ETENR <> 9001.
          II = II + 1.
        ENDLOOP.
        GWA_LIKP-ETENR = GWA_LIKP-ETENR + 1 + II.
        GWA_LIKP-MBLNR = '0000009001'.
        GWA_LIKP-AEDAT = SY-DATUM.
        GWA_LIKP-CPUTM = SY-UZEIT.
        GWA_LIKP-USNAM = SY-UNAME.
        GWA_LIKP-MJAHR = SY-DATUM+0(4).
        GWA_LIKP-ZEILE =  SY-DATUM+4(2).
        GWA_LIKP-ZZTXT = '新增正常的过账'.
     CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
      EXPORTING
        INPUT  = GWA_LIKP-ZMATNR
      IMPORTING
        OUTPUT = GWA_LIKP-ZMATNR.
        CLEAR GWA_LIKP-STYLE.
        APPEND GWA_LIKP TO GTD_LIKP.
      ENDLOOP.
  SORT  GTD_LIKP BY VBELN POSNR.
    WHEN 'SAVE1'.
      READ TABLE GTD_LIKP INTO GWA_LIKP WITH KEY  NEW_ROW = 'X'.
      IF SY-SUBRC <> 0.
        MESSAGE '没有要保存的数据' TYPE 'E'.
      ENDIF.
      CLEAR:BS.
      LOOP AT GTD_LIKP INTO GWA_LIKP  WHERE NEW_ROW = 'X' OR NEW_ROW = 'Y'   .
        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
          EXPORTING
            INPUT  = GWA_LIKP-ZMATNR
          IMPORTING
            OUTPUT = GWA_LIKP-ZMATNR.
        SELECT SINGLE MATNR INTO T_MATNR FROM MARA WHERE MATNR = GWA_LIKP-ZMATNR.
        IF SY-SUBRC <> 0.
          MESSAGE '请检查你的来码物料' TYPE 'S'.
          BS = 'X'.
          CLEAR UPDATE_TABLE[].
          EXIT.
        ELSE.
          MOVE-CORRESPONDING GWA_LIKP TO WA.
          APPEND WA TO UPDATE_TABLE.
        ENDIF.
      ENDLOOP.
      IF BS <> 'X'.
        MODIFY ZSD_LIKP FROM TABLE UPDATE_TABLE.
        IF SY-SUBRC = 0.
          MESSAGE '保存成功!!' TYPE 'S'.
*          CALL METHOD LWK_GRID->REFRESH_TABLE_DISPLAY.
        ELSE.
          MESSAGE '保存失败' TYPE 'E'.
          ROLLBACK WORK.
        ENDIF.
      ENDIF.
  ENDCASE.
  I_SELFIELD-REFRESH = 'X'.
  I_SELFIELD-COL_STABLE = 'X'.
  I_SELFIELD-ROW_STABLE = 'X'.
ENDFORM.                    "user_command

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值