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