alv edit and save all
在创建ALV架构的时候,一个很重要的字段fieldname ,其等号后面单引号里面是对应内表的每个字段的名称,并且必须是大写的。
如果是把这个字段的值写成了小写字母,其他的都没有什么错误,但是alv就是不会把内表中的数据显示出来,就是debug你会看到
内表中已经查出了数据,而ALV就是不显示,你就要考虑是不是在创建ALV架构的时候,w_fieldcat_alv-fieldname = ‘vbeln’.
如果是这样只要把小写改成大写就ok了。
FORM fieldcat_build .
w_fieldcat_alv-fieldname = ‘VBELN’.
w_fieldcat_alv-ref_table = ‘VBAP’.
w_fieldcat_alv-scrtext_s = ‘Sale Order No’.
APPEND w_fieldcat_alv TO i_fieldcat_alv.
CLEAR w_fieldcat_alv.
w_fieldcat_alv-scrtext_s = ‘CheckBox’.
w_fieldcat_alv-checkbox = ‘X’.
w_fieldcat_alv-edit = ‘X’.
APPEND w_fieldcat_alv TO i_fieldcat_alv.
CLEAR w_fieldcat_alv.
ENDFORM. " fieldcat_build
ALV家族包含3中ALV工具:简易的,两层ALV,分等级连续的列表和树形结构的ALV.
ALV有两种方式实现,一种方式是CALL FUNCTION: REUSE_ALV_GRID_DISPLAY, 标准按钮是包含刷新设置的,但是如果自定义功能,也就是需要设置USER_COMMAND CALL BACK程序的时候,需要对参数SELFIELD-REFRESH值设置为’X’,这样ALV的数据就会刷新显示。
作者:weixin_38238891
来源:CSDN
原文:https://blog.csdn.net/weixin_38238891/article/details/71710872
版权声明:本文为博主原创文章,转载请附上博文链接!
ALV有两种方式实现,一种方式是CALL FUNCTION: REUSE_ALV_GRID_DISPLAY, 标准按钮是包含刷新设置的,但是如果自定义功能,也就是需要设置USER_COMMAND CALL BACK程序的时候,需要对参数SELFIELD-REFRESH值设置为’X’,这样ALV的数据就会刷新显示。
作者:weixin_38238891
来源:CSDN
原文:https://blog.csdn.net/weixin_38238891/article/details/71710872
版权声明:本文为博主原创文章,转载请附上博文链接!
SAP提供的ALV标准Demo程序:
BCALV_EDIT_01切换 显示<–>修改 模式
BCALV_EDIT_02 修改单元格
BCALV_EDIT_03 修改的单元格校验
BCALV_EDIT_04 删除行, 添加行, 检查并保存
BCALV_EDIT_05 可编辑复选框,双击复选框单元格,更改复选框编辑状态
BCALV_EDIT_06 列级别的下拉清单框
BCALV_EDIT_07 单元格级别的下拉清单框
BCALV_EDIT_08 集成非标准的F4帮助
作者:SAP剑客
来源:CSDN
原文:https://blog.csdn.net/zhongguomao/article/details/77882199
版权声明:本文为博主原创文章,转载请附上博文链接!
输入’BCALV*'后按F4,你可以查到很多ALV示例程序。
在ALV中更新数据库表
FORM usercommand USING ucomm TYPE sy-ucomm
selfield TYPE slis_selfield.
DATA: lr_grid TYPE REF TO cl_gui_alv_grid.
方法①
CALL FUNCTION ‘GET_GLOBALS_FROM_SLVC_FULLSCR’ "获得数据
IMPORTING
e_grid = lr_grid.
CALL METHOD lr_grid->check_changed_data.
方法②
selfield-refresh = ‘X’. " 所有更改全部更新
** itab-fld1 = selfield-value "更改某一字段
注释:这里方法①②都可以用来更新数据,不知道有什么区别优势
CASE sy-ucomm.
*请填写删除操作
* 保存操作
WHEN ‘SAVE’.
*请填写修改操作
MODIFY ZSZ_LEAVE FROM TABLE ITAB.
COMMIT WORK.
ENDCASE.
ENDFORM. "USER_COMMAND
http://blog.sina.com.cn/s/blog_55c871720102wlj0.html
通过ALV控件编辑内表和数据库更新 2011-06-20 17:23:27
分类:
&---------------------------------------------------------------------
*& Report YGYTEST068
*&
&---------------------------------------------------------------------
*&
*&
&---------------------------------------------------------------------
REPORT YGYTEST068.
DATA:OK_CODE TYPE SY-UCOMM,
SAVE_OK LIKE OK_CODE.
TABLES SPFLI.
DATA LS_SPFLI TYPE SPFLI.
DATA WA_SPFLI TYPE TABLE OF SPFLI.
DATA WADEL_SPFLI TYPE TABLE OF SPFLI.
SELECT * INTO TABLE WA_SPFLI FROM SPFLI.
DATA:WA_CONTAINER TYPE SCRFNAME VALUE ‘ALVDATA’,
ALV_GRID TYPE REF TO CL_GUI_ALV_GRID,
WA_CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
DATA WA_LAYOUT TYPE LVC_S_LAYO.
WA_LAYOUT-EDIT = ‘X’.
CLASS LCL_EVENT_RECEIVER DEFINITION DEFERRED.
DATA EVENT_RECEIVER TYPE REF TO LCL_EVENT_RECEIVER.
CLASS LCL_EVENT_RECEIVER DEFINITION.
PUBLIC SECTION.
TYPES:DEL_ROWS TYPE STANDARD TABLE OF SPFLI.
DATA:DDEL_ROWS TYPE STANDARD TABLE OF SPFLI.
METHODS:
HANDLE_DATA_CHANGED
FOR EVENT DATA_CHANGED OF CL_GUI_ALV_GRID
IMPORTING ER_DATA_CHANGED.
METHODS:
UPDATE_DELTA_TABLES
IMPORTING PR_DATA_CHANGED TYPE REF TO CL_ALV_CHANGED_DATA_PROTOCOL.
METHODS:
GET_DELETED_ROWS
EXPORTING
DELETED_ROWS TYPE DEL_ROWS.
ENDCLASS.
CLASS LCL_EVENT_RECEIVER IMPLEMENTATION.
METHOD HANDLE_DATA_CHANGED.
* CALL METHOD UPDATE_DELTA_TABLES.
CALL METHOD UPDATE_DELTA_TABLES( ER_DATA_CHANGED ).
ENDMETHOD.
METHOD UPDATE_DELTA_TABLES.
DATA:L_DEL_ROW TYPE LVC_S_MOCE.
LOOP AT PR_DATA_CHANGED->MT_DELETED_ROWS INTO L_DEL_ROW.
READ TABLE WA_SPFLI INTO LS_SPFLI INDEX L_DEL_ROW-ROW_ID.
IF SY-SUBRC NE 0.
MESSAGE E208(00) WITH ‘处理错误’.
ELSE.
APPEND LS_SPFLI TO DDEL_ROWS.
ENDIF.
ENDLOOP.
ENDMETHOD.
METHOD GET_DELETED_ROWS.
DELETED_ROWS = ME->DDEL_ROWS.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
CALL SCREEN 100.
WRITE / ‘删除的内表记录:’.
WRITE / ‘--------’.
CALL METHOD EVENT_RECEIVER->GET_DELETED_ROWS
IMPORTING DELETED_ROWS = WADEL_SPFLI.
LOOP AT WADEL_SPFLI INTO SPFLI.
WRITE: / SPFLI-CARRID,SPFLI-CONNID,SPFLI-CITYFROM.
ENDLOOP.
WRITE : / ‘更新后的内表记录:’.
WRITE: / ‘-------’.
LOOP AT WADEL_SPFLI INTO SPFLI.
WRITE: / SPFLI-CARRID,SPFLI-CONNID,SPFLI-CITYFROM.
ENDLOOP.
MODULE USER_COMMAND_0100 INPUT.
SAVE_OK = OK_CODE.
CLEAR OK_CODE.
CASE SAVE_OK.
WHEN ‘EXIT’.
DATA L_RET VALUE ‘X’.
CALL METHOD ALV_GRID->CHECK_CHANGED_DATA
IMPORTING E_VALID = L_RET.
LEAVE TO SCREEN 0.
WHEN ‘SAVE’.
MODIFY SPFLI FROM TABLE WA_SPFLI.
IF SY-SUBRC NE 0 .
MESSAGE I005(YMESS) WITH ‘更新数据错误!’.
EXIT.
ELSE.
MESSAGE I005(YMESS) WITH ‘更新数据OK!’.
ENDIF.
DELETE SPFLI FROM TABLE WADEL_SPFLI.
IF SY-SUBRC NE 0 .
MESSAGE I005(YMESS) WITH ‘更新数据错误!’.
EXIT.
ELSE.
MESSAGE I005(YMESS) WITH ‘更新数据OK!’.
ENDIF.
ENDCASE.
ENDMODULE.
MODULE STATUS_0100 OUTPUT.
* SET PF-STATUS ‘STATUS1’.
IF WA_CUSTOM_CONTAINER IS INITIAL.
CREATE OBJECT WA_CUSTOM_CONTAINER
EXPORTING CONTAINER_NAME = WA_CONTAINER.
CREATE OBJECT ALV_GRID
EXPORTING I_PARENT = WA_CUSTOM_CONTAINER.
CREATE OBJECT EVENT_RECEIVER.
SET HANDLER EVENT_RECEIVER->HANDLE_DATA_CHANGED FOR ALV_GRID.
CALL METHOD ALV_GRID->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING I_STRUCTURE_NAME = ‘SPFLI’
IS_LAYOUT = WA_LAYOUT
CHANGING IT_OUTTAB = WA_SPFLI.
ENDIF.
ENDMODULE.
http://blog.sina.com.cn/s/blog_3f87d6a80100r9kj.html
原文地址:FM ALV可编辑字段值更新内表作者:北风
FM ALV在处理可编辑字段方面已经很强大了,所以平常很少用OO ALV来做。
当然OO ALV凭借类、事件、方法有其更强大的功能,FM ALV底层实际也是基于OO ALV的。
本文主要以REUSE_ALV_GRID_DISPLAY_LVC为例,演示可编辑字段处理的简单方法:
在REUSE_ALV_GRID_DISPLAY_LVC显示的ALV中,实现可编辑字段的新值自动更新到内表有一个前提:
REUSE_ALV_GRID_DISPLAY_LVC的输入参数中,有一个是:I_GRID_SETTINGS,其中的EDT_CLL_CB字段是可回调标识,需要设置EDT_CLL_CB = ‘X’。
在此前提下,再按是否自定义STATUS区分:
(1)没有自定义STATUS,即使用标准的界面。
当为可编辑字段输入新值后,敲回车点击标准工具栏的按钮点击标准的保存按钮,都可以自动更新字段的新值到内表中;
(2)自定义STATUS,此时又区分2种情况:
(2.1)自定义按钮的功能码设置为&DATA_SAVE。当为可编辑字段输入新值后,点击此按钮,也可以自动更新字段的新值到内表中;
(2.2)自定义按钮的功能码不是&DATA_SAVE。当为可编辑字段输入新值后,点击此按钮,是不会自动更新字段的新值到内表中的。
其中,&DATA_SAVE是标准界面保存按钮的功能码。
对于(2.2)情况,可以在判断功能码时,调用方法CHECK_CHANGED_DATA,这样即可自动更新可编辑字段的新值到内表中。
以“FM ALV自定义小计文本”一文代码为例,设置“数量”字段为可编辑字段。
新建了状态ZSTATUS,保留标准保存按钮。
创建了按钮YES、NO,功能码分别是POPUP_1、POPUP_2。
这2个按钮和标准的保存按钮都是调用FORM:FRM_ALV_POPUP弹出另一个ALV窗口显示内表最新值。
这2个按钮的区别在于:按钮YES在调用FORM:FRM_ALV_POPUP之前,调用了方法CHECK_CHANGED_DATA;而按钮NO没有。
你可以尝试上述说的几种情况,对比当前界面内表与弹出的窗口内表(即更新后)的值。
对可编辑字段输入新值后:直接点击标准保存按钮按钮YES,内表更新了;点击按钮NO,内表没有更新。
所以自定义按钮时,建议把方法CHECK_CHANGED_DATA的调用移到判断功能码前。
- 本程序保留了“REUSE_ALV_POPUP_TO_SELECT导出”一文中的导出功能。
REPORT ZTEMP MESSAGE-ID OO.
----------------------------------------------------------------------
- Pools and Types
----------------------------------------------------------------------
TYPE-POOLS: SLIS,ABAP,VRM,ICON,OLE2.
TYPES: BEGIN OF STRUC_TAB,
MBLNR TYPE MSEG-MBLNR,
MJAHR TYPE MSEG-MJAHR,
ZEILE TYPE MSEG-ZEILE,
BWART TYPE MSEG-BWART,
MATNR TYPE MSEG-MATNR,
MAKTX TYPE MAKT-MAKTX,
DMBTR TYPE MSEG-DMBTR,
MENGE TYPE MSEG-MENGE,
BPMNG TYPE MSEG-BPMNG,
MEINS TYPE MARA-MEINS,
SUM TYPE CHAR50,
END OF STRUC_TAB.
----------------------------------------------------------------------
- Work Area and Internal Table
----------------------------------------------------------------------
DATA: GS_LAYOUT TYPE LVC_S_LAYO,
GS_SETTINGS TYPE LVC_S_GLAY,
GT_SORT TYPE LVC_T_SORT,
GT_FIELDCAT TYPE LVC_T_FCAT.
DATA: GS_TAB TYPE STRUC_TAB,
GT_TAB TYPE TABLE OF STRUC_TAB.
----------------------------------------------------------------------
- Ranges and Field Symbols
----------------------------------------------------------------------
FIELD-SYMBOLS: <FS_TAB> TYPE STRUC_TAB.
----------------------------------------------------------------------
- Class and Object
----------------------------------------------------------------------
DATA: GRID TYPE REF TO CL_GUI_ALV_GRID.
----------------------------------------------------------------------
- START-OF-SELECTION
----------------------------------------------------------------------
START-OF-SELECTION.
PERFORM FRM_DATA_GET.
PERFORM FRM_DATA_PROCESS.
PERFORM FRM_DATA_OUTPUT.
&---------------------------------------------------------------------
*& FORM FRM_DATA_GET
&---------------------------------------------------------------------
FORM FRM_DATA_GET.
SELECT A~MBLNR A~MJAHR A~ZEILE A~BWART A~MATNR A~DMBTR A~MENGE A~BPMNG
B~MAKTX
FROM MSEG AS A
INNER JOIN MAKT AS B ON B~MATNR EQ A~MATNR AND B~SPRAS EQ SY-LANGU
UP TO 15 ROWS
INTO CORRESPONDING FIELDS OF TABLE GT_TAB.
IF GT_TAB IS INITIAL.
MESSAGE S000 WITH ‘没有符合条件的数据!’ DISPLAY LIKE ‘E’.
STOP.
ENDIF.
ENDFORM. "FRM_DATA_GET
&---------------------------------------------------------------------
*& FORM FRM_DATA_PROCESS
&---------------------------------------------------------------------
FORM FRM_DATA_PROCESS.
LOOP AT GT_TAB ASSIGNING <FS_TAB>.
CONCATENATE <FS_TAB>-MAKTX ‘-’ <FS_TAB>-BWART INTO <FS_TAB>-SUM.
ENDLOOP.
GS_TAB-MEINS = ‘EA’.
MODIFY GT_TAB FROM GS_TAB TRANSPORTING MEINS WHERE MEINS NE ‘EA’.
CLEAR GS_TAB.
ENDFORM. "FRM_DATA_PROCESS
&---------------------------------------------------------------------
*& FORM FRM_DATA_OUTPUT
&---------------------------------------------------------------------
FORM FRM_DATA_OUTPUT.
PERFORM FRM_ALV_INIT_LAYOUT.
PERFORM FRM_ALV_INIT_SETTINGS.
PERFORM FRM_ALV_SORT_BUILD.
PERFORM FRM_ALV_INIT_FIELDCAT.
PERFORM FRM_ALV_DISPLAY.
ENDFORM. " FRM_DATA_OUTPUT
&---------------------------------------------------------------------
*& FORM FRM_ALV_INIT_LAYOUT
&---------------------------------------------------------------------
FORM FRM_ALV_INIT_LAYOUT.
GS_LAYOUT-ZEBRA = ‘X’.
GS_LAYOUT-SEL_MODE = ‘D’.
GS_LAYOUT-CWIDTH_OPT = ‘X’.
GS_LAYOUT-DETAILINIT = ‘X’.
ENDFORM. " FRM_ALV_INIT_LAYOUT
&---------------------------------------------------------------------
*& FORM FRM_ALV_INIT_SETTINGS
&---------------------------------------------------------------------
FORM FRM_ALV_INIT_SETTINGS.
GS_SETTINGS-EDT_CLL_CB = ‘X’.
ENDFORM. " FRM_ALV_INIT_SETTINGS
&---------------------------------------------------------------------
*& FORM FRM_ALV_SORT_BUILD
&---------------------------------------------------------------------
FORM FRM_ALV_SORT_BUILD.
DATA: LS_SORT TYPE LVC_S_SORT.
LS_SORT-FIELDNAME = ‘MATNR’.
LS_SORT-UP = ‘X’.
APPEND LS_SORT TO GT_SORT.
CLEAR LS_SORT.
LS_SORT-FIELDNAME = ‘MAKTX’.
LS_SORT-UP = ‘X’.
APPEND LS_SORT TO GT_SORT.
CLEAR LS_SORT.
LS_SORT-FIELDNAME = ‘BWART’.
LS_SORT-UP = ‘X’.
APPEND LS_SORT TO GT_SORT.
CLEAR LS_SORT.
LS_SORT-FIELDNAME = ‘SUM’.
LS_SORT-UP = ‘X’.
LS_SORT-SUBTOT = ‘X’.
APPEND LS_SORT TO GT_SORT.
CLEAR LS_SORT.
ENDFORM. "FRM_ALV_SORT_BUILD
&---------------------------------------------------------------------
*& FORM FRM_ALV_INIT_FIELDCAT
&---------------------------------------------------------------------
FORM FRM_ALV_INIT_FIELDCAT.
DATA: LS_FIELDCAT TYPE LVC_S_FCAT.
DEFINE MAC_FILL_FIELDCAT.
LS_FIELDCAT-FIELDNAME = &1.
LS_FIELDCAT-COLTEXT = &2.
LS_FIELDCAT-NO_ZERO = &3.
LS_FIELDCAT-DO_SUM = &4.
LS_FIELDCAT-NO_OUT = &5.
LS_FIELDCAT-REF_TABLE = &6.
LS_FIELDCAT-REF_FIELD = &7.
LS_FIELDCAT-DECIMALS_O = &8.
LS_FIELDCAT-QFIELDNAME = &9.
APPEND LS_FIELDCAT TO GT_FIELDCAT.
CLEAR LS_FIELDCAT.
END-OF-DEFINITION.
MAC_FILL_FIELDCAT ‘MBLNR’ ‘物料凭证’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
MAC_FILL_FIELDCAT ‘MJAHR’ ‘凭证年度’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
MAC_FILL_FIELDCAT ‘ZEILE’ ‘行号’ ‘X’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
MAC_FILL_FIELDCAT ‘BWART’ ‘移动类型’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
MAC_FILL_FIELDCAT ‘MATNR’ ‘物料编码’ ‘X’ ‘’ ‘’ ‘MARA’ ‘MATNR’ ‘’ ‘’.
MAC_FILL_FIELDCAT ‘MAKTX’ ‘物料描述’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
MAC_FILL_FIELDCAT ‘DMBTR’ ‘金额’ ‘’ ‘X’ ‘’ ‘’ ‘’ ‘’ ‘’.
MAC_FILL_FIELDCAT ‘MENGE’ ‘数量’ ‘’ ‘X’ ‘’ ‘MSEG’ ‘MENGE’ ‘0’ ‘MEINS’.
MAC_FILL_FIELDCAT ‘BPMNG’ ‘计算数量’ ‘’ ‘X’ ‘’ ‘MSEG’ ‘MENGE’ ‘0’ ‘MEINS’.
MAC_FILL_FIELDCAT ‘SUM’ ‘小计:’ ‘’ ‘’ ‘X’ ‘’ ‘’ ‘’ ‘’.
MAC_FILL_FIELDCAT ‘MEINS’ ‘单位’ ‘’ ‘’ ‘X’ ‘’ ‘’ ‘’ ‘’.
LS_FIELDCAT-EDIT = ‘X’.
MODIFY GT_FIELDCAT FROM LS_FIELDCAT TRANSPORTING EDIT
WHERE FIELDNAME EQ ‘MENGE’.
CLEAR LS_FIELDCAT.
ENDFORM. " FRM_ALV_INIT_FIELDCAT
&---------------------------------------------------------------------
*& FORM FRM_ALV_DISPLAY
&---------------------------------------------------------------------
FORM FRM_ALV_DISPLAY.
CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY_LVC’
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
IS_LAYOUT_LVC = GS_LAYOUT
I_GRID_SETTINGS = GS_SETTINGS
IT_SORT_LVC = GT_SORT
IT_FIELDCAT_LVC = GT_FIELDCAT
I_SAVE = ‘U’
I_DEFAULT = SPACE
I_CALLBACK_PF_STATUS_SET = ‘FRM_ALV_STATUS_SET’
I_CALLBACK_USER_COMMAND = ‘FRM_ALV_USER_COMMAND’
TABLES
T_OUTTAB = GT_TAB
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
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. " FRM_ALV_DISPLAY
&---------------------------------------------------------------------
*& FORM FRM_ALV_STATUS_SET
&---------------------------------------------------------------------
FORM FRM_ALV_STATUS_SET USING PT_EXTAB TYPE SLIS_T_EXTAB.
SET PF-STATUS ‘ZSTATUS’ EXCLUDING PT_EXTAB.
CHECK GRID IS INITIAL.
CALL FUNCTION ‘GET_GLOBALS_FROM_SLVC_FULLSCR’
IMPORTING
E_GRID = GRID.
ENDFORM. " FRM_ALV_STATUS_SET
&---------------------------------------------------------------------
*& FORM FRM_ALV_USER_COMMAND
&---------------------------------------------------------------------
FORM FRM_ALV_USER_COMMAND USING PA_UCOMM TYPE SY-UCOMM
PS_SELFIELD TYPE SLIS_SELFIELD.
CASE PA_UCOMM.
WHEN ‘&DATA_SAVE’.
PERFORM FRM_ALV_POPUP.
WHEN ‘POPUP_1’.
CALL METHOD GRID->CHECK_CHANGED_DATA.
PERFORM FRM_ALV_POPUP.
WHEN ‘POPUP_2’.
PERFORM FRM_ALV_POPUP.
ENDCASE.
ENDFORM. " FRM_ALV_USER_COMMAND
&---------------------------------------------------------------------
*& FORM FRM_ALV_POPUP
&---------------------------------------------------------------------
FORM FRM_ALV_POPUP.
DATA: LS_FIELDCAT_SUB TYPE SLIS_FIELDCAT_ALV,
LT_FIELDCAT_SUB TYPE SLIS_T_FIELDCAT_ALV.
DEFINE MAC_FILL_FIELDCAT_SUB.
LS_FIELDCAT_SUB-FIELDNAME = &1.
LS_FIELDCAT_SUB-SELTEXT_M = &2.
LS_FIELDCAT_SUB-KEY = &3.
LS_FIELDCAT_SUB-NO_ZERO = &4.
LS_FIELDCAT_SUB-NO_OUT = &5.
LS_FIELDCAT_SUB-REF_TABNAME = &6.
LS_FIELDCAT_SUB-REF_FIELDNAME = &7.
LS_FIELDCAT_SUB-DECIMALS_OUT = &8.
LS_FIELDCAT_SUB-QFIELDNAME = &9.
APPEND LS_FIELDCAT_SUB TO LT_FIELDCAT_SUB.
CLEAR LS_FIELDCAT_SUB.
END-OF-DEFINITION.
MAC_FILL_FIELDCAT_SUB ‘MBLNR’ ‘物料凭证’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
MAC_FILL_FIELDCAT_SUB ‘MJAHR’ ‘凭证年度’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
MAC_FILL_FIELDCAT_SUB ‘ZEILE’ ‘行号’ ‘’ ‘X’ ‘’ ‘’ ‘’ ‘’ ‘’.
MAC_FILL_FIELDCAT_SUB ‘BWART’ ‘移动类型’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
MAC_FILL_FIELDCAT_SUB ‘MATNR’ ‘物料编码’ ‘’ ‘X’ ‘’ ‘MARA’ ‘MATNR’ ‘’ ‘’.
MAC_FILL_FIELDCAT_SUB ‘MAKTX’ ‘物料描述’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
MAC_FILL_FIELDCAT_SUB ‘DMBTR’ ‘金额’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
MAC_FILL_FIELDCAT_SUB ‘MENGE’ ‘数量’ ‘’ ‘’ ‘’ ‘MSEG’ ‘MENGE’ ‘0’ ‘MEINS’.
MAC_FILL_FIELDCAT_SUB ‘BPMNG’ ‘计算数量’ ‘’ ‘’ ‘’ ‘MSEG’ ‘MENGE’ ‘0’ ‘MEINS’.
MAC_FILL_FIELDCAT_SUB ‘MEINS’ ‘单位’ ‘’ ‘’ ‘X’ ‘’ ‘’ ‘’ ‘’.
CALL FUNCTION ‘REUSE_ALV_POPUP_TO_SELECT’
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
I_ZEBRA = ‘X’
I_SCREEN_START_COLUMN = 10
I_SCREEN_START_LINE = 1
I_SCREEN_END_COLUMN = 135
I_SCREEN_END_LINE = 15
I_TABNAME = ‘1’
IT_FIELDCAT = LT_FIELDCAT_SUB
I_CALLBACK_USER_COMMAND = ‘FRM_ALV_USER_COMMAND_POPUP’
TABLES
T_OUTTAB = GT_TAB
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
ENDFORM. "FRM_ALV_POPUP
&---------------------------------------------------------------------
*& FORM FRM_ALV_USER_COMMAND_POPUP
&---------------------------------------------------------------------
FORM FRM_ALV_USER_COMMAND_POPUP USING PA_UCOMM TYPE SY-UCOMM
PWA_SELFIELD TYPE SLIS_SELFIELD.
DATA: L_FILENAME TYPE STRING,
L_PATH TYPE STRING,
L_FULLPATH TYPE STRING,
L_ACTION TYPE I.
TYPES: BEGIN OF STRUC_TABLE,
MBLNR TYPE CHAR20,
MJAHR TYPE CHAR20,
ZEILE TYPE CHAR20,
BWART TYPE CHAR20,
MATNR TYPE CHAR20,
MAKTX TYPE CHAR20,
DMBTR TYPE CHAR20,
MENGE TYPE CHAR20,
BPMNG TYPE CHAR20,
END OF STRUC_TABLE.
DATA: LS_TAB TYPE STRUC_TABLE,
LT_TAB TYPE TABLE OF STRUC_TABLE.
CASE PA_UCOMM.
WHEN ‘&ETA’.
CLEAR PA_UCOMM.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
EXPORTING
FILE_FILTER = ‘Excel Files (.xls,.xlsx)|.xls;.xlsx’
CHANGING
FILENAME = L_FILENAME
PATH = L_PATH
FULLPATH = L_FULLPATH
USER_ACTION = L_ACTION
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
NOT_SUPPORTED_BY_GUI = 39
OTHERS = 4.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CHECK L_ACTION EQ 0.
CLEAR LS_TAB.
REFRESH LT_TAB.
LOOP AT GT_TAB ASSIGNING <FS_TAB>.
MOVE-CORRESPONDING <FS_TAB> TO LS_TAB.
APPEND LS_TAB TO LT_TAB.
CLEAR LS_TAB.
ENDLOOP.
LS_TAB-MBLNR = ‘物料凭证’.
LS_TAB-MJAHR = ‘凭证年度’.
LS_TAB-ZEILE = ‘行号’.
LS_TAB-BWART = ‘移动类型’.
LS_TAB-MATNR = ‘物料编码’.
LS_TAB-MAKTX = ‘物料描述’.
LS_TAB-DMBTR = ‘金额’.
LS_TAB-MENGE = ‘数量’.
LS_TAB-BPMNG = ‘计算数量’.
INSERT LS_TAB INTO LT_TAB INDEX 1.
CLEAR LS_TAB.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>GUI_DOWNLOAD
EXPORTING
FILENAME = L_FULLPATH
WRITE_FIELD_SEPARATOR = ‘X’
CHANGING
DATA_TAB = LT_TAB
EXCEPTIONS
FILE_WRITE_ERROR = 1
NO_BATCH = 2
GUI_REFUSE_FILETRANSFER = 3
INVALID_TYPE = 4
NO_AUTHORITY = 5
UNKNOWN_ERROR = 6
HEADER_NOT_ALLOWED = 7
SEPARATOR_NOT_ALLOWED = 8
FILESIZE_NOT_ALLOWED = 9
HEADER_TOO_LONG = 10
DP_ERROR_CREATE = 11
DP_ERROR_SEND = 12
DP_ERROR_WRITE = 13
UNKNOWN_DP_ERROR = 14
ACCESS_DENIED = 15
DP_OUT_OF_MEMORY = 16
DISK_FULL = 17
DP_TIMEOUT = 18
FILE_NOT_FOUND = 19
DATAPROVIDER_EXCEPTION = 20
CONTROL_FLUSH_ERROR = 21
NOT_SUPPORTED_BY_GUI = 22
ERROR_NO_GUI = 23
OTHERS = 24.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDCASE.
ENDFORM. " FRM_ALV_USER_COMMAND_POPUP
http://blog.sina.com.cn/s/blog_3f87d6a80100r9kf.html
原文地址:FM ALV根据可编辑字段的值更新相关字段值作者:北风
以“FM ALV自定义小计文本”一文代码为例,设置“数量”字段为可编辑字段。
在“数量”字段输入新值后,敲回车点击标准保存按钮点击自定义按钮YES,用“数量”字段值减去5更新“计算数量”字段的值。
为了在更新内表字段值后,保证小计、合计值也重新汇总,需要调用方法:REFRESH_TABLE_DISPLAY。注意这个方法对应的事件:DATA_CHANGED_FINISHED。
2011-05-30:发现一个小问题,在没有修改数据的情况下,点击标准查看明细按钮时,也会执行事件DATA_CHANGED_FINISHED,导致刷新后,鼠标始终定位在第1行,即所查看到的明细永远是第1行。解决方法:
在调用方法前,CHECK E_MODIFIED EQ ‘X’,即发生修改时才刷新。
REPORT ZTEMP MESSAGE-ID OO.
----------------------------------------------------------------------
- Pools and Types
----------------------------------------------------------------------
TYPE-POOLS: SLIS,ABAP,VRM,ICON,OLE2.
TYPES: BEGIN OF STRUC_TAB,
MBLNR TYPE MSEG-MBLNR,
MJAHR TYPE MSEG-MJAHR,
ZEILE TYPE MSEG-ZEILE,
BWART TYPE MSEG-BWART,
MATNR TYPE MSEG-MATNR,
MAKTX TYPE MAKT-MAKTX,
DMBTR TYPE MSEG-DMBTR,
MENGE TYPE MSEG-MENGE,
BPMNG TYPE MSEG-BPMNG,
MEINS TYPE MARA-MEINS,
SUM TYPE CHAR50,
END OF STRUC_TAB.
----------------------------------------------------------------------
- Work Area and Internal Table
----------------------------------------------------------------------
DATA: GS_LAYOUT TYPE LVC_S_LAYO,
GS_SETTINGS TYPE LVC_S_GLAY,
GT_SORT TYPE LVC_T_SORT,
GT_FIELDCAT TYPE LVC_T_FCAT.
DATA: GS_TAB TYPE STRUC_TAB,
GT_TAB TYPE TABLE OF STRUC_TAB.
----------------------------------------------------------------------
- Ranges and Field Symbols
----------------------------------------------------------------------
RANGES: R_ROW FOR MSEG-ZEILE.
FIELD-SYMBOLS: <FS_TAB> TYPE STRUC_TAB.
----------------------------------------------------------------------
- Class and Object
----------------------------------------------------------------------
DATA: GRID TYPE REF TO CL_GUI_ALV_GRID.
----------------------------------------------------------------------
- CLASS DEFINITION
----------------------------------------------------------------------
CLASS LCL_EVENT_RECEIVER DEFINITION.
PUBLIC SECTION.
METHODS:
CALCULATE_QUANTITY
FOR EVENT DATA_CHANGED OF CL_GUI_ALV_GRID
IMPORTING ER_DATA_CHANGED.
METHODS:
REFRESH_SUBTOTAL
FOR EVENT DATA_CHANGED_FINISHED OF CL_GUI_ALV_GRID
IMPORTING E_MODIFIED.
ENDCLASS. "LCL_EVENT_RECEIVER DEFINITION
----------------------------------------------------------------------
- START-OF-SELECTION
----------------------------------------------------------------------
START-OF-SELECTION.
PERFORM FRM_DATA_GET.
PERFORM FRM_DATA_PROCESS.
PERFORM FRM_DATA_OUTPUT.
&---------------------------------------------------------------------
*& FORM FRM_DATA_GET
&---------------------------------------------------------------------
FORM FRM_DATA_GET.
SELECT A~MBLNR A~MJAHR A~ZEILE A~BWART A~MATNR A~DMBTR A~MENGE A~BPMNG
B~MAKTX
FROM MSEG AS A
INNER JOIN MAKT AS B ON B~MATNR EQ A~MATNR AND B~SPRAS EQ SY-LANGU
UP TO 15 ROWS
INTO CORRESPONDING FIELDS OF TABLE GT_TAB.
IF GT_TAB IS INITIAL.
MESSAGE S000 WITH ‘没有符合条件的数据!’ DISPLAY LIKE ‘E’.
STOP.
ENDIF.
ENDFORM. "FRM_DATA_GET
&---------------------------------------------------------------------
*& FORM FRM_DATA_PROCESS
&---------------------------------------------------------------------
FORM FRM_DATA_PROCESS.
LOOP AT GT_TAB ASSIGNING <FS_TAB>.
CONCATENATE <FS_TAB>-MAKTX ‘-’ <FS_TAB>-BWART INTO <FS_TAB>-SUM.
ENDLOOP.
GS_TAB-MEINS = ‘EA’.
MODIFY GT_TAB FROM GS_TAB TRANSPORTING MEINS WHERE MEINS NE ‘EA’.
CLEAR GS_TAB.
ENDFORM. "FRM_DATA_PROCESS
&---------------------------------------------------------------------
*& FORM FRM_DATA_OUTPUT
&---------------------------------------------------------------------
FORM FRM_DATA_OUTPUT.
PERFORM FRM_ALV_INIT_LAYOUT.
PERFORM FRM_ALV_INIT_SETTINGS.
PERFORM FRM_ALV_SORT_BUILD.
PERFORM FRM_ALV_INIT_FIELDCAT.
PERFORM FRM_ALV_DISPLAY.
ENDFORM. " FRM_DATA_OUTPUT
&---------------------------------------------------------------------
*& FORM FRM_ALV_INIT_LAYOUT
&---------------------------------------------------------------------
FORM FRM_ALV_INIT_LAYOUT.
GS_LAYOUT-ZEBRA = ‘X’.
GS_LAYOUT-SEL_MODE = ‘D’.
GS_LAYOUT-CWIDTH_OPT = ‘X’.
GS_LAYOUT-DETAILINIT = ‘X’.
ENDFORM. " FRM_ALV_INIT_LAYOUT
&---------------------------------------------------------------------
*& FORM FRM_ALV_INIT_SETTINGS
&---------------------------------------------------------------------
FORM FRM_ALV_INIT_SETTINGS.
GS_SETTINGS-EDT_CLL_CB = ‘X’.
ENDFORM. " FRM_ALV_INIT_SETTINGS
&---------------------------------------------------------------------
*& FORM FRM_ALV_SORT_BUILD
&---------------------------------------------------------------------
FORM FRM_ALV_SORT_BUILD.
DATA: LS_SORT TYPE LVC_S_SORT.
LS_SORT-FIELDNAME = ‘MATNR’.
LS_SORT-UP = ‘X’.
APPEND LS_SORT TO GT_SORT.
CLEAR LS_SORT.
LS_SORT-FIELDNAME = ‘MAKTX’.
LS_SORT-UP = ‘X’.
APPEND LS_SORT TO GT_SORT.
CLEAR LS_SORT.
LS_SORT-FIELDNAME = ‘BWART’.
LS_SORT-UP = ‘X’.
APPEND LS_SORT TO GT_SORT.
CLEAR LS_SORT.
LS_SORT-FIELDNAME = ‘SUM’.
LS_SORT-UP = ‘X’.
LS_SORT-SUBTOT = ‘X’.
APPEND LS_SORT TO GT_SORT.
CLEAR LS_SORT.
ENDFORM. "FRM_ALV_SORT_BUILD
&---------------------------------------------------------------------
*& FORM FRM_ALV_INIT_FIELDCAT
&---------------------------------------------------------------------
FORM FRM_ALV_INIT_FIELDCAT.
DATA: LS_FIELDCAT TYPE LVC_S_FCAT.
DEFINE MAC_FILL_FIELDCAT.
LS_FIELDCAT-FIELDNAME = &1.
LS_FIELDCAT-COLTEXT = &2.
LS_FIELDCAT-NO_ZERO = &3.
LS_FIELDCAT-DO_SUM = &4.
LS_FIELDCAT-NO_OUT = &5.
LS_FIELDCAT-REF_TABLE = &6.
LS_FIELDCAT-REF_FIELD = &7.
LS_FIELDCAT-DECIMALS_O = &8.
LS_FIELDCAT-QFIELDNAME = &9.
APPEND LS_FIELDCAT TO GT_FIELDCAT.
CLEAR LS_FIELDCAT.
END-OF-DEFINITION.
MAC_FILL_FIELDCAT ‘MBLNR’ ‘物料凭证’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
MAC_FILL_FIELDCAT ‘MJAHR’ ‘凭证年度’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
MAC_FILL_FIELDCAT ‘ZEILE’ ‘行号’ ‘X’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
MAC_FILL_FIELDCAT ‘BWART’ ‘移动类型’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
MAC_FILL_FIELDCAT ‘MATNR’ ‘物料编码’ ‘X’ ‘’ ‘’ ‘MARA’ ‘MATNR’ ‘’ ‘’.
MAC_FILL_FIELDCAT ‘MAKTX’ ‘物料描述’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
MAC_FILL_FIELDCAT ‘DMBTR’ ‘金额’ ‘’ ‘X’ ‘’ ‘’ ‘’ ‘’ ‘’.
MAC_FILL_FIELDCAT ‘MENGE’ ‘数量’ ‘’ ‘X’ ‘’ ‘MSEG’ ‘MENGE’ ‘0’ ‘MEINS’.
MAC_FILL_FIELDCAT ‘BPMNG’ ‘计算数量’ ‘’ ‘X’ ‘’ ‘MSEG’ ‘MENGE’ ‘0’ ‘MEINS’.
MAC_FILL_FIELDCAT ‘SUM’ ‘小计:’ ‘’ ‘’ ‘X’ ‘’ ‘’ ‘’ ‘’.
MAC_FILL_FIELDCAT ‘MEINS’ ‘单位’ ‘’ ‘’ ‘X’ ‘’ ‘’ ‘’ ‘’.
LS_FIELDCAT-EDIT = ‘X’.
MODIFY GT_FIELDCAT FROM LS_FIELDCAT TRANSPORTING EDIT
WHERE FIELDNAME EQ ‘MENGE’.
CLEAR LS_FIELDCAT.
ENDFORM. " FRM_ALV_INIT_FIELDCAT
&---------------------------------------------------------------------
*& FORM FRM_ALV_DISPLAY
&---------------------------------------------------------------------
FORM FRM_ALV_DISPLAY.
CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY_LVC’
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
IS_LAYOUT_LVC = GS_LAYOUT
I_GRID_SETTINGS = GS_SETTINGS
IT_SORT_LVC = GT_SORT
IT_FIELDCAT_LVC = GT_FIELDCAT
I_SAVE = ‘U’
I_DEFAULT = SPACE
I_CALLBACK_PF_STATUS_SET = ‘FRM_ALV_STATUS_SET’
I_CALLBACK_USER_COMMAND = ‘FRM_ALV_USER_COMMAND’
TABLES
T_OUTTAB = GT_TAB
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
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. " FRM_ALV_DISPLAY
&---------------------------------------------------------------------
*& FORM FRM_ALV_STATUS_SET
&---------------------------------------------------------------------
FORM FRM_ALV_STATUS_SET USING PT_EXTAB TYPE SLIS_T_EXTAB.
DATA: L_GRID_EVENTS TYPE REF TO LCL_EVENT_RECEIVER.
SET PF-STATUS ‘ZSTATUS’ EXCLUDING PT_EXTAB.
CHECK GRID IS INITIAL.
CALL FUNCTION ‘GET_GLOBALS_FROM_SLVC_FULLSCR’
IMPORTING
E_GRID = GRID.
CALL METHOD GRID->REGISTER_EDIT_EVENT
EXPORTING
I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_ENTER.
CREATE OBJECT L_GRID_EVENTS.
SET HANDLER L_GRID_EVENTS->CALCULATE_QUANTITY FOR GRID.
SET HANDLER L_GRID_EVENTS->REFRESH_SUBTOTAL FOR GRID.
ENDFORM. " FRM_ALV_STATUS_SET
&---------------------------------------------------------------------
*& FORM FRM_ALV_USER_COMMAND
&---------------------------------------------------------------------
FORM FRM_ALV_USER_COMMAND USING PA_UCOMM TYPE SY-UCOMM
PS_SELFIELD TYPE SLIS_SELFIELD.
CALL METHOD GRID->CHECK_CHANGED_DATA.
CASE PA_UCOMM.
WHEN ‘&DATA_SAVE’.
PERFORM FRM_ALV_POPUP.
WHEN ‘POPUP_1’.
PERFORM FRM_ALV_POPUP.
ENDCASE.
ENDFORM. " FRM_ALV_USER_COMMAND
&---------------------------------------------------------------------
*& FORM FRM_ALV_POPUP
&---------------------------------------------------------------------
FORM FRM_ALV_POPUP.
DATA: LS_FIELDCAT_SUB TYPE SLIS_FIELDCAT_ALV,
LT_FIELDCAT_SUB TYPE SLIS_T_FIELDCAT_ALV.
DEFINE MAC_FILL_FIELDCAT_SUB.
LS_FIELDCAT_SUB-FIELDNAME = &1.
LS_FIELDCAT_SUB-SELTEXT_M = &2.
LS_FIELDCAT_SUB-KEY = &3.
LS_FIELDCAT_SUB-NO_ZERO = &4.
LS_FIELDCAT_SUB-NO_OUT = &5.
LS_FIELDCAT_SUB-REF_TABNAME = &6.
LS_FIELDCAT_SUB-REF_FIELDNAME = &7.
LS_FIELDCAT_SUB-DECIMALS_OUT = &8.
LS_FIELDCAT_SUB-QFIELDNAME = &9.
APPEND LS_FIELDCAT_SUB TO LT_FIELDCAT_SUB.
CLEAR LS_FIELDCAT_SUB.
END-OF-DEFINITION.
MAC_FILL_FIELDCAT_SUB ‘MBLNR’ ‘物料凭证’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
MAC_FILL_FIELDCAT_SUB ‘MJAHR’ ‘凭证年度’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
MAC_FILL_FIELDCAT_SUB ‘ZEILE’ ‘行号’ ‘’ ‘X’ ‘’ ‘’ ‘’ ‘’ ‘’.
MAC_FILL_FIELDCAT_SUB ‘BWART’ ‘移动类型’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
MAC_FILL_FIELDCAT_SUB ‘MATNR’ ‘物料编码’ ‘’ ‘X’ ‘’ ‘MARA’ ‘MATNR’ ‘’ ‘’.
MAC_FILL_FIELDCAT_SUB ‘MAKTX’ ‘物料描述’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
MAC_FILL_FIELDCAT_SUB ‘DMBTR’ ‘金额’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
MAC_FILL_FIELDCAT_SUB ‘MENGE’ ‘数量’ ‘’ ‘’ ‘’ ‘MSEG’ ‘MENGE’ ‘0’ ‘MEINS’.
MAC_FILL_FIELDCAT_SUB ‘BPMNG’ ‘计算数量’ ‘’ ‘’ ‘’ ‘MSEG’ ‘MENGE’ ‘0’ ‘MEINS’.
MAC_FILL_FIELDCAT_SUB ‘MEINS’ ‘单位’ ‘’ ‘’ ‘X’ ‘’ ‘’ ‘’ ‘’.
CALL FUNCTION ‘REUSE_ALV_POPUP_TO_SELECT’
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
I_ZEBRA = ‘X’
I_SCREEN_START_COLUMN = 10
I_SCREEN_START_LINE = 1
I_SCREEN_END_COLUMN = 135
I_SCREEN_END_LINE = 15
I_TABNAME = ‘1’
IT_FIELDCAT = LT_FIELDCAT_SUB
I_CALLBACK_USER_COMMAND = ‘FRM_ALV_USER_COMMAND_POPUP’
TABLES
T_OUTTAB = GT_TAB
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
ENDFORM. "FRM_ALV_POPUP
&---------------------------------------------------------------------
*& FORM FRM_ALV_USER_COMMAND_POPUP
&---------------------------------------------------------------------
FORM FRM_ALV_USER_COMMAND_POPUP USING PA_UCOMM TYPE SY-UCOMM
PWA_SELFIELD TYPE SLIS_SELFIELD.
DATA: L_FILENAME TYPE STRING,
L_PATH TYPE STRING,
L_FULLPATH TYPE STRING,
L_ACTION TYPE I.
TYPES: BEGIN OF STRUC_TABLE,
MBLNR TYPE CHAR20,
MJAHR TYPE CHAR20,
ZEILE TYPE CHAR20,
BWART TYPE CHAR20,
MATNR TYPE CHAR20,
MAKTX TYPE CHAR20,
DMBTR TYPE CHAR20,
MENGE TYPE CHAR20,
BPMNG TYPE CHAR20,
END OF STRUC_TABLE.
DATA: LS_TAB TYPE STRUC_TABLE,
LT_TAB TYPE TABLE OF STRUC_TABLE.
CASE PA_UCOMM.
WHEN ‘&ETA’.
CLEAR PA_UCOMM.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
EXPORTING
FILE_FILTER = ‘Excel Files (.xls,.xlsx)|.xls;.xlsx’
CHANGING
FILENAME = L_FILENAME
PATH = L_PATH
FULLPATH = L_FULLPATH
USER_ACTION = L_ACTION
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
NOT_SUPPORTED_BY_GUI = 39
OTHERS = 4.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CHECK L_ACTION EQ 0.
CLEAR LS_TAB.
REFRESH LT_TAB.
LOOP AT GT_TAB ASSIGNING <FS_TAB>.
MOVE-CORRESPONDING <FS_TAB> TO LS_TAB.
APPEND LS_TAB TO LT_TAB.
CLEAR LS_TAB.
ENDLOOP.
LS_TAB-MBLNR = ‘物料凭证’.
LS_TAB-MJAHR = ‘凭证年度’.
LS_TAB-ZEILE = ‘行号’.
LS_TAB-BWART = ‘移动类型’.
LS_TAB-MATNR = ‘物料编码’.
LS_TAB-MAKTX = ‘物料描述’.
LS_TAB-DMBTR = ‘金额’.
LS_TAB-MENGE = ‘数量’.
LS_TAB-BPMNG = ‘计算数量’.
INSERT LS_TAB INTO LT_TAB INDEX 1.
CLEAR LS_TAB.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>GUI_DOWNLOAD
EXPORTING
FILENAME = L_FULLPATH
WRITE_FIELD_SEPARATOR = ‘X’
CHANGING
DATA_TAB = LT_TAB
EXCEPTIONS
FILE_WRITE_ERROR = 1
NO_BATCH = 2
GUI_REFUSE_FILETRANSFER = 3
INVALID_TYPE = 4
NO_AUTHORITY = 5
UNKNOWN_ERROR = 6
HEADER_NOT_ALLOWED = 7
SEPARATOR_NOT_ALLOWED = 8
FILESIZE_NOT_ALLOWED = 9
HEADER_TOO_LONG = 10
DP_ERROR_CREATE = 11
DP_ERROR_SEND = 12
DP_ERROR_WRITE = 13
UNKNOWN_DP_ERROR = 14
ACCESS_DENIED = 15
DP_OUT_OF_MEMORY = 16
DISK_FULL = 17
DP_TIMEOUT = 18
FILE_NOT_FOUND = 19
DATAPROVIDER_EXCEPTION = 20
CONTROL_FLUSH_ERROR = 21
NOT_SUPPORTED_BY_GUI = 22
ERROR_NO_GUI = 23
OTHERS = 24.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDCASE.
ENDFORM. " FRM_ALV_USER_COMMAND_POPUP
----------------------------------------------------------------------
- CLASS IMPLEMENTATION
----------------------------------------------------------------------
CLASS LCL_EVENT_RECEIVER IMPLEMENTATION.
METHOD CALCULATE_QUANTITY.
DATA: LS_MOD_CELL TYPE LVC_S_MODI,
L_MENGE TYPE MSEG-MENGE,
L_DMBTR TYPE BSID-DMBTR.
CLEAR R_ROW.
REFRESH R_ROW[].
R_ROW-SIGN = ‘I’.
R_ROW-OPTION = ‘EQ’.
LOOP AT ER_DATA_CHANGED->MT_MOD_CELLS INTO LS_MOD_CELL.
IF SY-TABIX EQ 1.
R_ROW-LOW = LS_MOD_CELL-ROW_ID.
APPEND R_ROW TO R_ROW[].
ELSE.
IF LS_MOD_CELL-ROW_ID NOT IN R_ROW[].
R_ROW-LOW = LS_MOD_CELL-ROW_ID.
APPEND R_ROW TO R_ROW[].
ELSE.
CONTINUE.
ENDIF.
ENDIF.
CALL METHOD ER_DATA_CHANGED->GET_CELL_VALUE
EXPORTING
I_ROW_ID = LS_MOD_CELL-ROW_ID
I_FIELDNAME = ‘MENGE’
IMPORTING
E_VALUE = L_MENGE.
READ TABLE GT_TAB ASSIGNING <FS_TAB> INDEX LS_MOD_CELL-ROW_ID.
IF <FS_TAB>-MENGE EQ L_MENGE.
CONTINUE.
ENDIF.
L_MENGE = L_MENGE - 5.
CALL METHOD ER_DATA_CHANGED->MODIFY_CELL
EXPORTING
I_ROW_ID = LS_MOD_CELL-ROW_ID
I_FIELDNAME = ‘BPMNG’
I_VALUE = L_MENGE.
ENDLOOP.
ENDMETHOD. "CALCULATE_QUANTITY
METHOD REFRESH_SUBTOTAL.
CHECK E_MODIFIED EQ ‘X’.
CALL METHOD GRID->REFRESH_TABLE_DISPLAY.
ENDMETHOD. "REFRESH_SUBTOTAL
ENDCLASS. "LCL_EVENT_RECEIVER IMPLEMENTATION
https://archive.sap.com/discussions/thread/1392609
REPORT ZSAN_EDITABLE_ALV.
type-POOLs : slis.
data : it_fieldcat type slis_t_fieldcat_alv.
data : wa_fieldcat like line of it_fieldcat.
data : it_ZEMPLOYEE type STANDARD TABLE OF ZEMPLOYEE WITH HEADER LINE.
SELECT * FROM ZEMPLOYEE
INTO TABLE IT_ZEMPLOYEe.
CALL FUNCTION ‘REUSE_ALV_FIELDCATALOG_MERGE’
EXPORTING
I_PROGRAM_NAME = SY-REPID
I_INTERNAL_TABNAME =
I_STRUCTURE_NAME = ‘ZEMPLOYEE’
I_CLIENT_NEVER_DISPLAY = ‘X’
I_INCLNAME =
I_BYPASSING_BUFFER =
I_BUFFER_ACTIVE =
CHANGING
CT_FIELDCAT = it_fieldcat
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3
.
loop at it_fieldcat into wa_fieldcat.
if wa_fieldcat-fieldname = ‘ENAME’ or
wa_fieldcat-fieldname = ‘AGE’.
wa_fieldcat-edit = ‘X’.
MODIFY it_fieldcat from wa_fieldcat.
endif.
endloop.
CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY’
EXPORTING
I_CALLBACK_PROGRAM = sy-repid
I_CALLBACK_USER_COMMAND = ‘ALV_USER_COMMAND’
IT_FIELDCAT = it_fieldcat
TABLES
T_OUTTAB = it_zemployee
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
FORM ALV_USER_COMMAND
USING ucomm TYPE syucomm
selfield TYPE slis_selfield. "#EC_CALLED
data : wa_employee like line of it_zemployee.
IF ucomm = ‘&DATA_SAVE’.
read table it_zemployee into wa_employee index selfield-tabindex.
if sy-subrc = 0.
modify zemployee from wa_employee.
if sy-subrc = 0.
MESSAGE ‘Database table updated’ TYPE ‘S’.
endif.
endif.
endif.
selfield-refresh = ‘X’.
selfield-row_stable = ‘X’.
selfield-col_stable = ‘X’.
endform. "alv_user_command
https://www.saptechpro.com/post/BCALV_GRID_EDIT
program test.
parameters p_cell as checkbox default ’ '.
parameters p_loce as checkbox default ’ '.
parameters p_cedit as checkbox default ’ '.
parameters p_f4 as checkbox default ’ '.
parameters p_bforf4 as checkbox default ’ '.
parameters p_aftrf4 as checkbox default ‘X’.
parameters p_style as checkbox default ’ '.
class cl_gui_object definition load.
class lcl_event_receiver definition deferred.
include .
data: ok_code like sy-ucomm.
data: blubber2(30) type c.
data: blubber6(1) type c value ‘X’.
data: blubber7(1) type c value ’ '.
data: ls_cell type lvc_s_styl.
data: blubber9(1) type c value ’ '.
data: gs_variant type disvariant.
data: gt_fieldcat type lvc_t_fcat.
data: gt_sort type lvc_t_sort.
data: gs_sort type lvc_s_sort.
data: gs_layout type lvc_s_layo.
data: gt_f4 type lvc_t_f4.
data: gs_f4 type lvc_s_f4.
data: gs_fieldcat type lvc_s_fcat.
data: begin of gt_sflight occurs 0.
include structure sflight.
data: carrname like scarr-carrname,
cell type lvc_t_styl,
end of gt_sflight.
data: begin of gt_sflight1 occurs 0.
include structure sflight.
data: carrname like scarr-carrname,
end of gt_sflight1,
g_container type scrfname value 'BCALV_GRID_DEMO_0100_CONT1',g_container2 type scrfname value 'BCALV_GRID_DEMO_0100_CONT2',grid1 type ref to cl_gui_alv_grid,g_custom_container type ref to cl_gui_custom_container.
data g_custom_container2 type ref to cl_gui_custom_container.
data: event_receiver type ref to lcl_event_receiver.
initialization.
if cl_gui_object=>www_active = ‘X’.
p_loce = ‘X’.
endif.
blubber2 = text-002.
---------------------------------------------------------------------
CLASS LCL_EVENT_RECEIVER DEFINITION
---------------------------------------------------------------------
........ *
---------------------------------------------------------------------
class lcl_event_receiver definition.
public section.
methods handle_data_changed
for event data_changed of cl_gui_alv_grid
importing er_data_changed.
methods handle_f4
for event onf4 of cl_gui_alv_grid
importing e_fieldname
es_row_no
er_event_data
et_bad_cells.
endclass.
---------------------------------------------------------------------
CLASS lcl_event_receiver IMPLEMENTATION
---------------------------------------------------------------------
........ *
---------------------------------------------------------------------
class lcl_event_receiver implementation.
method handle_data_changed.
perform data_changed using er_data_changed.
endmethod.
method handle_f4.
perform f4 using e_fieldname
es_row_no
er_event_data
et_bad_cells.
endmethod.
endclass.
---------------------------------------------------------------------
MAIN *
---------------------------------------------------------------------
start-of-selection.
if ( p_loce = ’ ’ and cl_gui_object=>www_active = ‘X’ ).
message i000(0K) with text-003.
p_loce = ‘X’.
endif.
if ( cl_gui_control=>www_active = ’ ’ ).
select * into corresponding fields of table gt_sflight1 from
( sflight left join scarr
on sflight~carrid = scarr~carrid ) up to 50 rows.
else.
select * into corresponding fields of table gt_sflight1 from
( sflight left join scarr
on sflight~carrid = scarr~carrid ) up to 60 rows.
endif.
loop at gt_sflight1.
clear gt_sflight.
clear ls_cell.
move-corresponding gt_sflight1 to gt_sflight.
if p_cedit = ‘X’.
if sy-tabix = 7.
ls_cell-style = cl_gui_alv_grid=>mc_style_disabled.
append ls_cell to gt_sflight-cell.endif.if sy-tabix = 9.ls_cell-style = cl_gui_alv_grid=>mc_style_enabled.ls_cell-maxlen = 4.ls_cell-fieldname = 'PLANETYPE'.append ls_cell to gt_sflight-cell.endif.if sy-tabix = 11.ls_cell-style = cl_gui_alv_grid=>mc_style_enabled.ls_cell-maxlen = 4.ls_cell-fieldname = 'CARRNAME'.append ls_cell to gt_sflight-cell.endif.
endif.
append gt_sflight.
endloop.
clear gs_fieldcat.
gs_fieldcat-fieldname = ‘CARRID’.
gs_fieldcat-ref_table = ‘SFLIGHT’.
gs_fieldcat-outputlen = ‘5’.
gs_fieldcat-key = ‘X’.
gs_fieldcat-edit = ‘X’.
gs_fieldcat-auto_value = ‘X’.
append gs_fieldcat to gt_fieldcat.
clear gs_fieldcat.
gs_fieldcat-fieldname = ‘CARRNAME’.
gs_fieldcat-ref_table = ‘SCARR’.
gs_fieldcat-outputlen = ‘12’.
gs_fieldcat-key = ‘X’.
gs_fieldcat-auto_value = ‘X’.
append gs_fieldcat to gt_fieldcat.
clear gs_fieldcat.
gs_fieldcat-fieldname = ‘CONNID’.
gs_fieldcat-ref_table = ‘SFLIGHT’.
gs_fieldcat-key = ‘X’.
gs_fieldcat-edit = ‘X’.
gs_fieldcat-auto_value = ‘X’.
append gs_fieldcat to gt_fieldcat.
clear gs_fieldcat.
gs_fieldcat-fieldname = ‘FLDATE’.
gs_fieldcat-ref_table = ‘SFLIGHT’.
gs_fieldcat-edit = ‘X’.
gs_fieldcat-key = ‘X’.
append gs_fieldcat to gt_fieldcat.
clear gs_fieldcat.
gs_fieldcat-fieldname = ‘PLANETYPE’.
gs_fieldcat-ref_table = ‘SFLIGHT’.
gs_fieldcat-edit = ‘X’.
append gs_fieldcat to gt_fieldcat.
clear gs_fieldcat.
gs_fieldcat-fieldname = ‘SEATSMAX’.
gs_fieldcat-ref_table = ‘SFLIGHT’.
append gs_fieldcat to gt_fieldcat.
clear gs_fieldcat.
gs_fieldcat-fieldname = ‘SEATSOCC’.
gs_fieldcat-ref_table = ‘SFLIGHT’.
gs_fieldcat-edit = ‘X’.
append gs_fieldcat to gt_fieldcat.
clear gs_fieldcat.
gs_fieldcat-fieldname = ‘PAYMENTSUM’.
gs_fieldcat-datatype = ‘CURR’.
gs_fieldcat-coltext = text-004.
gs_fieldcat-cfieldname = ‘CURRENCY’.
gs_fieldcat-edit = ‘X’.
append gs_fieldcat to gt_fieldcat.
clear gs_fieldcat.
gs_fieldcat-fieldname = ‘PRICE’.
gs_fieldcat-ref_table = ‘SFLIGHT’.
gs_fieldcat-cfieldname = ‘CURRENCY’.
gs_fieldcat-edit = ‘X’.
append gs_fieldcat to gt_fieldcat.
clear gs_fieldcat.
gs_fieldcat-fieldname = ‘CURRENCY’.
gs_fieldcat-ref_table = ‘SFLIGHT’.
gs_fieldcat-edit = ‘X’.
gs_fieldcat-checktable = ‘!’.
gs_fieldcat-auto_value = ‘X’.
append gs_fieldcat to gt_fieldcat.
gs_variant-report = sy-repid.
gs_sort-fieldname = ‘CARRID’.
append gs_sort to gt_sort.
gs_f4-fieldname = ‘PLANETYPE’.
if p_f4 = ‘X’.
gs_f4-register = ‘X’.
endif.
if p_bforf4 = ‘X’.
gs_f4-getbefore = ‘X’.
endif.
if p_aftrf4 = ‘X’.
gs_f4-chngeafter = ‘X’.
endif.
insert gs_f4 into table gt_f4.
gs_f4-fieldname = ‘CONNID’.
if p_f4 = ‘X’.
gs_f4-register = 'X '.
endif.
if p_bforf4 = ‘X’.
gs_f4-getbefore = ‘X’.
endif.
if p_aftrf4 = ‘X’.
gs_f4-chngeafter = ‘X’.
endif.
if ( p_loce = ‘X’ ).
call screen 200.
else.
call screen 100.
endif.
---------------------------------------------------------------------
MODULE PBO OUTPUT *
---------------------------------------------------------------------
module pbo output.
perform pbo_output.
endmodule.
---------------------------------------------------------------------
MODULE PAI INPUT *
---------------------------------------------------------------------
module pai input.
perform pai_input.
endmodule.
&---------------------------------------------------------------------
*& Form data_changed
&---------------------------------------------------------------------
text
----------------------------------------------------------------------
form data_changed using rr_data_changed type ref to
cl_alv_changed_data_protocol.
data: ls_mod_cells type lvc_s_modi.
data: ls_cells type lvc_s_modi.
data: l_carrid type sflight-carrid.
data: l_seats type sflight-seatsocc.
data: l_curr type sflight-currency.
data: l_seatsmax type sflight-seatsmax.
data: ls_sflight like gt_sflight1.
data: ls_tcurc like tcurc. "#EC NEEDED
loop at rr_data_changed->mt_good_cells into ls_mod_cells.
case ls_mod_cells-fieldname.when 'CARRID'.call method rr_data_changed->get_cell_valueexporting i_row_id = ls_mod_cells-row_idi_fieldname = ls_mod_cells-fieldnameimporting e_value = l_carrid.select single * into corresponding fieldsof ls_sflight from( sflight left join scarron sflight~carrid = scarr~carrid )where sflight~carrid = l_carrid.if sy-subrc ne 0.else.call method rr_data_changed->modify_cellexporting i_row_id = ls_mod_cells-row_idi_fieldname = 'CARRNAME'i_value = ls_sflight-carrname.endif.when 'CONNID'.if p_style = 'X'.call method rr_data_changed->modify_styleexporting i_fieldname = 'CURRENCY'i_row_id = ls_mod_cells-row_idi_style = cl_gui_alv_grid=>mc_style_disabled.endif.when 'PLANETYPE'.
perform change_planetype using rr_data_changed
ls_mod_cells. when 'SEATSOCC'.call method rr_data_changed->add_protocol_entryexporting i_msgid = '0K'i_msgno = '000'i_msgty = 'I'i_msgv1 = text-007i_msgv2 = text-008i_fieldname = ls_mod_cells-fieldnamei_row_id = ls_mod_cells-row_id.read table rr_data_changed->mt_good_cells into ls_cellswith key row_id = ls_mod_cells-row_idfieldname = 'PLANETYPE'.if sy-subrc = 0.perform change_planetype using rr_data_changedls_cells.endif.call method rr_data_changed->get_cell_valueexporting i_row_id = ls_mod_cells-row_idi_fieldname = ls_mod_cells-fieldnameimporting e_value = l_seats.call method rr_data_changed->get_cell_valueexporting i_row_id = ls_mod_cells-row_idi_fieldname = 'SEATSMAX'importing e_value = l_seatsmax.if l_seatsmax < l_seats.call method rr_data_changed->add_protocol_entryexporting i_msgid = '0K'i_msgno = '000'i_msgty = 'E'i_msgv1 = text-007i_msgv2 = text-008i_fieldname = ls_mod_cells-fieldnamei_row_id = ls_mod_cells-row_id.call method rr_data_changed->add_protocol_entryexporting i_msgid = '0K'i_msgno = '000'i_msgty = 'I'i_msgv1 = text-007i_msgv2 = text-008i_fieldname = ls_mod_cells-fieldnamei_row_id = ls_mod_cells-row_id.endif. when 'CURRENCY'.call method rr_data_changed->get_cell_valueexporting i_row_id = ls_mod_cells-row_idi_fieldname = ls_mod_cells-fieldnameimporting e_value = l_curr.select single * from tcurc into ls_tcurc where waers = l_curr.if sy-subrc ne 0.call method rr_data_changed->add_protocol_entryexporting i_msgid = '0K'i_msgno = '000'i_msgty = 'E'i_msgv1 = text-001i_msgv2 = l_curri_msgv3 = text-006i_fieldname = ls_mod_cells-fieldnamei_row_id = ls_mod_cells-row_id.endif.
endcase.
endloop.
endform. " data_changed
&---------------------------------------------------------------------
*& Form change_planetype
&---------------------------------------------------------------------
text
----------------------------------------------------------------------
form change_planetype using rr_data_changed type ref to
cl_alv_changed_data_protocol
rs_mod_cells type lvc_s_modi.
data: l_planetype type sflight-planetype.
data: ls_saplane type saplane .
call method rr_data_changed->get_cell_value
exporting i_row_id = rs_mod_cells-row_id
i_fieldname = rs_mod_cells-fieldname
importing e_value = l_planetype.
select single * from saplane into ls_saplane where
planetype = l_planetype.
if sy-subrc ne 0.
call method rr_data_changed->add_protocol_entry
exporting i_msgid = ‘0K’
i_msgno = ‘000’
i_msgty = ‘E’
i_msgv1 = text-005
i_msgv2 = l_planetype
i_msgv3 = text-006
i_fieldname = rs_mod_cells-fieldname
i_row_id = rs_mod_cells-row_id.
else.
call method rr_data_changed->modify_cell
exporting i_row_id = rs_mod_cells-row_id
i_fieldname = ‘SEATSMAX’
i_value = ls_saplane-seatsmax.
call method rr_data_changed->modify_cell
exporting i_row_id = rs_mod_cells-row_id
i_fieldname = ‘PAYMENTSUM’
i_value = ‘1000’.
call method rr_data_changed->modify_style
exporting i_fieldname = ‘PAYMENTSUM’
i_row_id = rs_mod_cells-row_id
i_style = cl_gui_alv_grid=>mc_style_disabled.
endif.
endform. " change_planetype
&---------------------------------------------------------------------
*& Form F4
&---------------------------------------------------------------------
text
----------------------------------------------------------------------
form f4 using r_fieldname type lvc_fname
rs_row_no type lvc_s_roid
rr_event_data type ref to cl_alv_event_data
rt_bad_cells type lvc_t_modi. "#EC *
field-symbols: type lvc_t_modi.
data: ls_f4 type lvc_s_modi.
assign rr_event_data->m_data->* to .
ls_f4-fieldname = r_fieldname.
ls_f4-row_id = rs_row_no-row_id.
ls_f4-value = ‘BLUBBER’.
append ls_f4 to .
rr_event_data->m_event_handled = ‘X’.
endform. " F4
&---------------------------------------------------------------------
*& Form pbo_output
&---------------------------------------------------------------------
text
----------------------------------------------------------------------
FORM pbo_output.
set pf-status ‘MAIN100’.
if g_custom_container is initial.
if sy-batch is initial.
create object g_custom_container
exporting container_name = g_container.
if ( p_loce = ‘X’ ).
create object g_custom_container2
exporting container_name = g_container2.
endif.
endif.
create object grid1
exporting i_parent = g_custom_container
i_applogparent = g_custom_container2.
create object event_receiver.
set handler event_receiver->handle_data_changed for grid1.
if p_f4 = 'X'.set handler event_receiver->handle_f4 for grid1.
endif.
call method grid1->register_f4_for_fields exporting it_f4 = gt_f4.
if sy-batch is initial.if p_cell = 'X'.call method grid1->register_edit_event exportingi_event_id =cl_gui_alv_grid=>mc_evt_modified.else.call method grid1->register_edit_event exportingi_event_id =cl_gui_alv_grid=>mc_evt_enter.endif.
endif.
gs_layout-stylefname = 'CELL'.
call method grid1->set_table_for_first_displayexporting " i_buffer_active = 'X'i_save = 'A'is_variant = gs_variantis_layout = gs_layoutchanging it_fieldcatalog = gt_fieldcatit_sort = gt_sortit_outtab = gt_sflight[].
endif.
ENDFORM. " pbo_output
&---------------------------------------------------------------------
*& Form pai_input
&---------------------------------------------------------------------
text
----------------------------------------------------------------------
FORM pai_input.
data: l_valid(1) type c.
case ok_code.
when ‘SAVE’.
call method grid1->check_changed_data importing e_valid = l_valid.
if l_valid = ‘X’.
message i000(0k) with text-009.
else.
message i000(0k) with text-010.
endif.
when ‘CHANGE’.
if grid1->is_ready_for_input( ) = 0.
call method grid1->set_ready_for_input exporting
i_ready_for_input = 1.
else.
call method grid1->check_changed_data
importing e_valid = l_valid.
if l_valid = ‘X’.
call method grid1->set_ready_for_input exporting
i_ready_for_input = 0.
endif.
endif.
when ‘EXIT’.
set screen 0.
leave screen.
endcase.
clear ok_code.
ENDFORM. " pai_input
https://www.sapnuts.com/tutorials/Edit-and-Save-Functionality-in-ABAP.html
Follow the below steps to Create ALV with edit and Save functionality
Create a program in SE38, add data declarations
Create a report program in SE38 and add data declarations for MARA table, MAKT table.Add select-options for material no input.
TYPES: BEGIN OF TY_MARA,
MATNR TYPE MARA-MATNR,
MTART TYPE MARA-MTART,
MBRSH TYPE MARA-MBRSH,
MATKL TYPE MARA-MATKL,
MEINS TYPE MARA-MEINS,
LABOR TYPE MARA-LABOR,
END OF TY_MARA.
DATA : IT_MARA TYPE TABLE OF TY_MARA,
WA_MARA TYPE TY_MARA.
SELECT-OPTIONS: S_MATNR FOR WA_MARA-MATNR. "material no input
Build Field catalog for MARA
Build field catalog for MARA table and specify EDIT = ‘X’ for field catalog fields to make them editable.
DATA : WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV, "Field catalog work area
IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV. "field catalog internal table
WA_FIELDCAT-FIELDNAME = ‘MATNR’. "field name
WA_FIELDCAT-SELTEXT_M = ‘Material Value’. "field text
WA_FIELDCAT-COL_POS = 1. "position
WA_FIELDCAT-KEY = ‘X’. "is key field
WA_FIELDCAT-HOTSPOT = ‘X’. "hotspot(hperlink)
APPEND WA_FIELDCAT TO IT_FIELDCAT.
CLEAR WA_FIELDCAT.
WA_FIELDCAT-FIELDNAME = ‘MTART’.
WA_FIELDCAT-SELTEXT_M = ‘Material Type’.
WA_FIELDCAT-EDIT = ‘X’. "make editable
WA_FIELDCAT-COL_POS = 2.
APPEND WA_FIELDCAT TO IT_FIELDCAT.
CLEAR WA_FIELDCAT.
WA_FIELDCAT-FIELDNAME = ‘MBRSH’.
WA_FIELDCAT-SELTEXT_M = ‘Industry Sector’.
WA_FIELDCAT-EDIT = ‘X’. "make editable
WA_FIELDCAT-COL_POS = 3.
APPEND WA_FIELDCAT TO IT_FIELDCAT.
CLEAR WA_FIELDCAT.
WA_FIELDCAT-FIELDNAME = ‘MATKL’.
WA_FIELDCAT-SELTEXT_M = ‘Material Group’.
WA_FIELDCAT-EDIT = ‘X’. "make editable
WA_FIELDCAT-COL_POS = 4.
APPEND WA_FIELDCAT TO IT_FIELDCAT.
CLEAR WA_FIELDCAT.
WA_FIELDCAT-FIELDNAME = ‘MEINS’.
WA_FIELDCAT-SELTEXT_M = ‘Base UOM’.
WA_FIELDCAT-COL_POS = 5.
APPEND WA_FIELDCAT TO IT_FIELDCAT.
CLEAR WA_FIELDCAT.
WA_FIELDCAT-FIELDNAME = ‘LABOR’.
WA_FIELDCAT-SELTEXT_M = ‘Lab Office’.
WA_FIELDCAT-COL_POS = 6.
APPEND WA_FIELDCAT TO IT_FIELDCAT.
CLEAR WA_FIELDCAT.
Call Function Module to display ALV
Call ALV function module, provide subroutine names for top of page and user command.
DATA : IT_LAYOUT TYPE SLIS_LAYOUT_ALV, "ALV layout settings
FORM_TOP_OF_PAGE TYPE SLIS_FORMNAME VALUE ‘FORM_TOP_OF_PAGE’, "for avl header.
FORM_CALLBACK TYPE SLIS_FORMNAME VALUE ‘USER_COMMAND’. "For user command
IT_MARACP[] = IT_MARA[]. "store original data before displaying ALV
CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY’
EXPORTING
I_INTERFACE_CHECK = ' '
I_BYPASSING_BUFFER = ' '
I_BUFFER_ACTIVE = ' ' I_CALLBACK_PROGRAM = SY-REPID "program name
I_CALLBACK_PF_STATUS_SET = ' ' I_CALLBACK_USER_COMMAND = FORM_CALLBACK "user command subroutine name I_CALLBACK_TOP_OF_PAGE = FORM_TOP_OF_PAGE "sub routine for top of page
I_CALLBACK_HTML_TOP_OF_PAGE = ' '
I_CALLBACK_HTML_END_OF_LIST = ' '
I_STRUCTURE_NAME =
I_BACKGROUND_ID = ' '
I_GRID_TITLE =
I_GRID_SETTINGS = IS_LAYOUT = IT_LAYOUT IT_FIELDCAT = IT_FIELDCAT
IT_EXCLUDING =
IT_SPECIAL_GROUPS =
IT_SORT =
IT_FILTER =
IS_SEL_HIDE =
I_DEFAULT = 'X'
I_SAVE = ' '
IS_VARIANT =
IT_EVENTS =
IT_EVENT_EXIT =
IS_PRINT =
IS_REPREP_ID =
I_SCREEN_START_COLUMN = 0
I_SCREEN_STARlv_line = 0
I_SCREEN_END_COLUMN = 0
I_SCREEN_END_LINE = 0
I_HTML_HEIGHT_TOP = 0
I_HTML_HEIGHT_END = 0
IT_ALV_GRAPHICS =
IT_HYPERLINK =
IT_ADD_FIELDCAT =
IT_EXCEPT_QINFO =
IR_SALV_FULLSCREEN_ADAPTER =
- IMPORTING
E_EXIT_CAUSED_BY_CALLER =
ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = IT_MARA
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
Add Code to display top of page
Implement subroutine for top of page.
FORM FORM_TOP_OF_PAGE.
DATA: IT_HEADER TYPE SLIS_T_LISTHEADER,
WA_HEADER TYPE SLIS_LISTHEADER,
LV_LINE LIKE WA_HEADER-INFO,
LD_LINES TYPE I,
LD_LINESC(10) TYPE C.
Title
WA_HEADER-TYP = ‘H’.
WA_HEADER-INFO = ‘MARA Master Report’.
APPEND WA_HEADER TO IT_HEADER.
CLEAR WA_HEADER.Date
WA_HEADER-TYP = ‘S’.
WA_HEADER-KEY = 'Date: '.
CONCATENATE SY-DATUM+6(2) ‘.’
SY-DATUM+4(2) ‘.’
SY-DATUM(4) INTO WA_HEADER-INFO. "todays date
APPEND WA_HEADER TO IT_HEADER.
CLEAR: WA_HEADER.Date
WA_HEADER-TYP = ‘S’.
WA_HEADER-KEY = 'User: '.
CONCATENATE SY-UNAME ’ ’ INTO WA_HEADER-INFO. "Logged in user
APPEND WA_HEADER TO IT_HEADER.
CLEAR: WA_HEADER.Total No. of Records Selected
DESCRIBE TABLE IT_MARA LINES LD_LINES.
LD_LINESC = LD_LINES.
CONCATENATE 'Total No. of Records Selected: ’ LD_LINESC
INTO LV_LINE SEPARATED BY SPACE.
WA_HEADER-TYP = ‘A’.
WA_HEADER-INFO = LV_LINE.
APPEND WA_HEADER TO IT_HEADER.
CLEAR: WA_HEADER, LV_LINE.CALL FUNCTION ‘REUSE_ALV_COMMENTARY_WRITE’
EXPORTING
IT_LIST_COMMENTARY = IT_HEADER.
.
CLEAR IT_HEADER.
ENDFORM. "TOP-OF-PAGE
Implement user command subroutine
Implement subroutine for user command to save data after edit.
FORM USER_COMMAND USING P_UCOMM LIKE SY-UCOMM
P_SELFIELD TYPE SLIS_SELFIELD.
"p_ucomm will hold user action like double click, clicking a button ,etc
CASE P_UCOMM.
WHEN ‘&IC1’. " Function code for double click
READ TABLE IT_MARA INTO WA_MARA INDEX P_SELFIELD-TABINDEX. " Getting Row data
CASE P_SELFIELD-FIELDNAME.
WHEN ‘MATNR’. " Column data
SET PARAMETER ID: ‘MAT’ FIELD P_SELFIELD-VALUE.
CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.WHEN 'MTART'.MESSAGE P_SELFIELD-VALUE TYPE 'S'.ENDCASE.
WHEN '&DATA_SAVE'. "Save FunctionMESSAGE 'Saving data' TYPE 'S'.DATA : WA_MARACP TYPE TY_MARA.
DATA : WA_MARA_TMP TYPE MARA.
CLEAR IT_CHANGES[].
**loop thorugh it_mara and dind changed records
LOOP AT IT_MARA INTO WA_MARA.
READ TABLE IT_MARACP INTO WA_MARACP INDEX SY-TABIX.
IF WA_MARACP NE WA_MARA.
MOVE-CORRESPONDING WA_MARA TO WA_MARA_TMP.
MODIFY MARA FROM WA_MARA_TMP . "modify standard MARA table
IF SY-SUBRC EQ 0.
MESSAGE ‘Data Updated’ TYPE ‘I’.
ENDIF.
ENDIF.
CLEAR WA_MARACP.
ENDLOOP.
ENDCASE.
ENDFORM. "user_command
Full and Final Code to display blocked list ALV
REPORT ZSAN_EDITABLE_MARA.
TYPES: BEGIN OF TY_MARA,
MATNR TYPE MARA-MATNR,
MTART TYPE MARA-MTART,
MBRSH TYPE MARA-MBRSH,
MATKL TYPE MARA-MATKL,
MEINS TYPE MARA-MEINS,
LABOR TYPE MARA-LABOR,
END OF TY_MARA.
DATA : IT_MARA TYPE TABLE OF TY_MARA,
WA_MARA TYPE TY_MARA.
DATA : IT_MARACP TYPE STANDARD TABLE OF TY_MARA, "temparary table for MARA
IT_CHANGES TYPE STANDARD TABLE OF TY_MARA. "changes on grid
DATA : WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV, "Field catalog work area
IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV, "field catalog internal table
IT_LAYOUT TYPE SLIS_LAYOUT_ALV, "ALV layout settings
FORM_TOP_OF_PAGE TYPE SLIS_FORMNAME VALUE ‘FORM_TOP_OF_PAGE’, "for avl header.
FORM_CALLBACK TYPE SLIS_FORMNAME VALUE ‘USER_COMMAND’. "For user command
SELECT-OPTIONS: S_MATNR FOR WA_MARA-MATNR. "material no input
START-OF-SELECTION.
SELECT MATNR
MTART
MBRSH
MATKL
MEINS
LABOR FROM MARA INTO TABLE IT_MARA WHERE MATNR IN S_MATNR.
PERFORM BUILD_FCAT.
PERFORM DISPLAY_ALV.
FORM BUILD_FCAT .
WA_FIELDCAT-FIELDNAME = ‘MATNR’.
WA_FIELDCAT-SELTEXT_M = ‘Material Value’.
WA_FIELDCAT-COL_POS = 1.
WA_FIELDCAT-KEY = ‘X’.
WA_FIELDCAT-HOTSPOT = ‘X’.
APPEND WA_FIELDCAT TO IT_FIELDCAT.
CLEAR WA_FIELDCAT.
WA_FIELDCAT-FIELDNAME = ‘MTART’.
WA_FIELDCAT-SELTEXT_M = ‘Material Type’.
WA_FIELDCAT-EDIT = ‘X’.
WA_FIELDCAT-COL_POS = 2.
APPEND WA_FIELDCAT TO IT_FIELDCAT.
CLEAR WA_FIELDCAT.
WA_FIELDCAT-FIELDNAME = ‘MBRSH’.
WA_FIELDCAT-SELTEXT_M = ‘Industry Sector’.
WA_FIELDCAT-EDIT = ‘X’.
WA_FIELDCAT-COL_POS = 3.
APPEND WA_FIELDCAT TO IT_FIELDCAT.
CLEAR WA_FIELDCAT.
WA_FIELDCAT-FIELDNAME = ‘MATKL’.
WA_FIELDCAT-SELTEXT_M = ‘Material Group’.
WA_FIELDCAT-EDIT = ‘X’.
WA_FIELDCAT-COL_POS = 4.
APPEND WA_FIELDCAT TO IT_FIELDCAT.
CLEAR WA_FIELDCAT.
WA_FIELDCAT-FIELDNAME = ‘MEINS’.
WA_FIELDCAT-SELTEXT_M = ‘Base UOM’.
WA_FIELDCAT-ICON = ‘X’. " Display the field as ICON
WA_FIELDCAT-COL_POS = 5.
APPEND WA_FIELDCAT TO IT_FIELDCAT.
CLEAR WA_FIELDCAT.
WA_FIELDCAT-FIELDNAME = ‘LABOR’.
WA_FIELDCAT-SELTEXT_M = ‘Lab Office’.
WA_FIELDCAT-ICON = ‘X’. " Display the field as ICON
WA_FIELDCAT-COL_POS = 6.
APPEND WA_FIELDCAT TO IT_FIELDCAT.
CLEAR WA_FIELDCAT.
ENDFORM. " BUILD_FCAT
FORM DISPLAY_ALV .
IT_MARACP[] = IT_MARA[].
CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY’
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID "program name
I_CALLBACK_USER_COMMAND = FORM_CALLBACK "user command subroutine name
I_CALLBACK_TOP_OF_PAGE = FORM_TOP_OF_PAGE "sub routine for top of page
IS_LAYOUT = IT_LAYOUT
IT_FIELDCAT = IT_FIELDCAT
TABLES
T_OUTTAB = IT_MARA
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
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. " DISPLAY_ALV
FORM FORM_TOP_OF_PAGE.
DATA: IT_HEADER TYPE SLIS_T_LISTHEADER,
WA_HEADER TYPE SLIS_LISTHEADER,
LV_LINE LIKE WA_HEADER-INFO,
LD_LINES TYPE I,
LD_LINESC(10) TYPE C.
Title
WA_HEADER-TYP = ‘H’.
WA_HEADER-INFO = ‘MARA Master Report’.
APPEND WA_HEADER TO IT_HEADER.
CLEAR WA_HEADER.Date
WA_HEADER-TYP = ‘S’.
WA_HEADER-KEY = 'Date: '.
CONCATENATE SY-DATUM+6(2) ‘.’
SY-DATUM+4(2) ‘.’
SY-DATUM(4) INTO WA_HEADER-INFO. "todays date
APPEND WA_HEADER TO IT_HEADER.
CLEAR: WA_HEADER.Date
WA_HEADER-TYP = ‘S’.
WA_HEADER-KEY = 'User: '.
CONCATENATE SY-UNAME ’ ’ INTO WA_HEADER-INFO. "Logged in user
APPEND WA_HEADER TO IT_HEADER.
CLEAR: WA_HEADER.Total No. of Records Selected
DESCRIBE TABLE IT_MARA LINES LD_LINES.
LD_LINESC = LD_LINES.
CONCATENATE 'Total No. of Records Selected: ’ LD_LINESC
INTO LV_LINE SEPARATED BY SPACE.
WA_HEADER-TYP = ‘A’.
WA_HEADER-INFO = LV_LINE.
APPEND WA_HEADER TO IT_HEADER.
CLEAR: WA_HEADER, LV_LINE.CALL FUNCTION ‘REUSE_ALV_COMMENTARY_WRITE’
EXPORTING
IT_LIST_COMMENTARY = IT_HEADER.
.
CLEAR IT_HEADER.
ENDFORM. "TOP-OF-PAGE
FORM F_SAVE_DATA.
DATA : WA_MARACP TYPE TY_MARA.
DATA : WA_MARA_TMP TYPE MARA.
CLEAR IT_CHANGES[].
LOOP AT IT_MARA INTO WA_MARA.
READ TABLE IT_MARACP INTO WA_MARACP INDEX SY-TABIX.
IF WA_MARACP NE WA_MARA.
APPEND WA_MARA TO IT_CHANGES.
MOVE-CORRESPONDING WA_MARA TO WA_MARA_TMP.
MODIFY MARA FROM WA_MARA_TMP .
IF SY-SUBRC EQ 0.
MESSAGE ‘Data Updated’ TYPE ‘I’.
ENDIF.
ENDIF.
CLEAR WA_MARACP.
ENDLOOP.
ENDFORM. "f_save_data
FORM USER_COMMAND USING P_UCOMM LIKE SY-UCOMM
P_SELFIELD TYPE SLIS_SELFIELD.
"p_ucomm will hold user action like double click, save click
CASE P_UCOMM.
WHEN ‘&IC1’. " SAP standard code for double-clicking
READ TABLE IT_MARA INTO WA_MARA INDEX P_SELFIELD-TABINDEX. " Getting Row data
CASE P_SELFIELD-FIELDNAME.
WHEN ‘MATNR’. " Column data
SET PARAMETER ID: ‘MAT’ FIELD P_SELFIELD-VALUE.CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.WHEN 'MTART'.MESSAGE P_SELFIELD-VALUE TYPE 'S'. ENDCASE.
WHEN ‘&DATA_SAVE’.
MESSAGE ‘Trying to save’ TYPE ‘S’.
PERFORM F_SAVE_DATA."It_changes hold all the change made in the ALV
ENDCASE.
ENDFORM. "user_command
https://wiki.scn.sap.com/wiki/display/ABAP/Alv+with+EDIT+and+SAVE
ALV with EDIT and SAVE functionality
REPORT z_demo_alv_jg.
*******************************************************************
- TYPE-POOLS *
*******************************************************************
TYPE-POOLS: slis.
******************************************************************* - INTERNAL TABLES/WORK AREAS/VARIABLES *
*******************************************************************
DATA: i_fieldcat TYPE slis_t_fieldcat_alv,
i_index TYPE STANDARD TABLE OF i WITH HEADER LINE,
w_field TYPE slis_fieldcat_alv,
p_table LIKE dd02l-tabname,
dy_table TYPE REF TO data,
dy_tab TYPE REF TO data,
dy_line TYPE REF TO data.
******************************************************************* - FIELD-SYMBOLS *
*******************************************************************
FIELD-SYMBOLS: <dyn_table> TYPE STANDARD TABLE,
<dyn_wa> TYPE ANY,
<dyn_field> TYPE ANY,
<dyn_tab_temp> TYPE STANDARD TABLE.
******************************************************************* - SELECTION SCREEN *
*******************************************************************
PARAMETERS: tabname(30) TYPE c,
lines(5) TYPE n.
******************************************************************* - START-OF-SELECTION *
*******************************************************************
START-OF-SELECTION. - Storing table name
p_table = tabname. - Create internal table dynamically with the stucture of table name
- entered in the selection screen
CREATE DATA dy_table TYPE STANDARD TABLE OF (p_table).
ASSIGN dy_table->* TO <dyn_table>.
IF sy-subrc <> 0.
MESSAGE i000(z_zzz_ca_messages) WITH ’ No table found’.
LEAVE TO LIST-PROCESSING.
ENDIF. - Create workarea for the table
CREATE DATA dy_line LIKE LINE OF <dyn_table>.
ASSIGN dy_line->* TO <dyn_wa>. - Create another temp. table
CREATE DATA dy_tab TYPE STANDARD TABLE OF (p_table).
ASSIGN dy_tab->* TO <dyn_tab_temp>.
SORT i_fieldcat BY col_pos. - Select data from table
SELECT * FROM (p_table)
INTO TABLE <dyn_table>
UP TO lines ROWS.
REFRESH <dyn_tab_temp>. - Display report
CALL FUNCTION ‘REUSE_ALV_LIST_DISPLAY’
EXPORTING
i_callback_program = sy-repid
i_structure_name = p_table
i_callback_user_command = ‘USER_COMMAND’
i_callback_pf_status_set = ‘SET_PF_STATUS’
TABLES
t_outtab = <dyn_table>
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
ENDIF.
&-----------------------------------------------------------------
*& Form SET_PF_STATUS
&----------------------------------------------------------------- - Setting custom PF-Status
------------------------------------------------------------------ - –>RT_EXTAB Excluding table
------------------------------------------------------------------
FORM set_pf_status USING rt_extab TYPE slis_t_extab.
SET PF-STATUS ‘Z_STANDARD’.
ENDFORM. "SET_PF_STATUS
&----------------------------------------------------------------
*& Form user_command
&----------------------------------------------------------------- - Handling custom function codes
------------------------------------------------------------------ - –>R_UCOMM Function code value
- –>RS_SELFIELD Info. of cursor position in ALV
------------------------------------------------------------------
FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield. - Local data declaration
DATA: li_tab TYPE REF TO data,
l_line TYPE REF TO data. - Local field-symbols
FIELD-SYMBOLS:<l_tab> TYPE table,
<l_wa> TYPE ANY. - Create table
CREATE DATA li_tab TYPE STANDARD TABLE OF (p_table).
ASSIGN li_tab->* TO <l_tab>. - Create workarea
CREATE DATA l_line LIKE LINE OF <l_tab>.
ASSIGN l_line->* TO <l_wa>.
CASE r_ucomm. - When a record is selected
WHEN ‘&IC1’. - Read the selected record
READ TABLE <dyn_table> ASSIGNING <dyn_wa> INDEX
rs_selfield-tabindex.
IF sy-subrc = 0. - Store the record in an internal table
APPEND <dyn_wa> TO <l_tab>. - Fetch the field catalog info
CALL FUNCTION ‘REUSE_ALV_FIELDCATALOG_MERGE’
EXPORTING
i_program_name = ‘Z_DEMO_PDF_JG’
i_structure_name = p_table
CHANGING
ct_fieldcat = i_fieldcat
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
IF sy-subrc = 0. - Make all the fields input enabled except key fields
w_field-input = ‘X’.
MODIFY i_fieldcat FROM w_field TRANSPORTING input
WHERE key IS INITIAL.
ENDIF. - Display the record for editing purpose
CALL FUNCTION ‘REUSE_ALV_LIST_DISPLAY’
EXPORTING
i_callback_program = sy-repid
i_structure_name = p_table
it_fieldcat = i_fieldcat
i_screen_start_column = 10
i_screen_start_line = 15
i_screen_end_column = 200
i_screen_end_line = 20
TABLES
t_outtab = <l_tab>
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc = 0. - Read the modified data
READ TABLE <l_tab> INDEX 1 INTO <l_wa>. - If the record is changed then track its index no.
- and populate it in an internal table for future
- action
IF sy-subrc = 0 AND <dyn_wa> <> <l_wa>.
<dyn_wa> = <l_wa>.
i_index = rs_selfield-tabindex.
APPEND i_index.
ENDIF.
ENDIF.
ENDIF. - When save button is pressed
WHEN ‘SAVE’. - Sort the index table
SORT i_index. - Delete all duplicate records
DELETE ADJACENT DUPLICATES FROM i_index.
LOOP AT i_index. - Find out the changes in the internal table
- and populate these changes in another internal table
READ TABLE <dyn_table> ASSIGNING <dyn_wa> INDEX i_index.
IF sy-subrc = 0.
APPEND <dyn_wa> TO <dyn_tab_temp>.
ENDIF.
ENDLOOP. - Lock the table
CALL FUNCTION ‘ENQUEUE_E_TABLE’
EXPORTING
mode_rstable = ‘E’
tabname = p_table
EXCEPTIONS
foreign_lock = 1
system_failure = 2
OTHERS = 3.
IF sy-subrc = 0. - Modify the database table with these changes
MODIFY (p_table) FROM TABLE <dyn_tab_temp>.
REFRESH <dyn_tab_temp>. - Unlock the table
CALL FUNCTION ‘DEQUEUE_E_TABLE’
EXPORTING
mode_rstable = ‘E’
tabname = p_table.
ENDIF.
ENDCASE.
rs_selfield-refresh = ‘X’.
ENDFORM. "user_command
alv edit and save all相关推荐
- Sublime Text 3便携版下载安装和常用插件安装--顺便解决报错An error occured installing和no packages available for install
文章目录 Sublime Text 3便携版下载安装和常用插件安装 1.Sublime Text 3便携版下载: 2.sublime 插件控制器(Package Control)安装 2.1离线安装P ...
- XSLT教程 [转]
XSLT教程 XSL代表可扩充样式表语言 为了适应基于XML的样式表语言的需要,万维网联盟(W3C)开始发展XSL. XSLT代表XSL的变革.在这个教程里,你会学到如何通过XSLT把XML文档转换成 ...
- BootstrapTable
<!---------------------------------------- BEGIN动态表相关 ----------------------------------------> ...
- 自己动手实现简单权限控制
最近接手一小型私活,用户量封顶上千,工期预期的也相对宽松,权限控制当然是必不可少. web 权限控制,很多项目会引入 shiro/spring-security. shiro/spring-secur ...
- nodejs web开发入门: Simple-TODO Nodejs 实现版
起因 看到simple todo的各种python版本实现, 我也来凑凑热闹... 既然已经有这么多python版本了, 我就对比实现了一个Simple-TODO的nodejs版本: Node TOD ...
- python官网怎么改中文-如何配置pycharm为中文?
1.Python执行程序形式 python script.py python -c "print()" python -i 执行后进入交互式 2.虚拟环境配置: 介绍python需 ...
- python官网怎么改中文-pycharm如何设置成中文
1.Python执行程序形式 python script.py python -c "print()" python -i 执行后进入交互式 2.虚拟环境配置: 介绍python需 ...
- python有趣的小项目-有趣的十个Python实战项目,让你瞬间爱上Python!
前言 Python 是一种极具可读性和通用性的编程语言.Python 这个名字的灵感来自于英国喜剧团体 Monty Python,它的开发团队有一个重要的基础目标,就是使语言使用起来很有趣.Pytho ...
- php smeoa,install.php
smeoa $files = "Conf/config.php"; if (!is_writable($files)) { echo "不可写!!!"; } e ...
最新文章
- 告别视频通话“渣画质”,英伟达新算法最高压缩90%流量
- Mysql日期时间Extract函数介绍
- 39.原码、反码、补码的转换
- java–jwt_java – Spring引导如何使用jwt管理用户角色
- 【CodeForces - 195D】Analyzing Polyline (思维,卡精度的处理方式)
- jsoup: Java HTML Parser
- STM8L051F3基础功能:内部时钟;TIM2定时器;串口及printf;
- dump文件 linux,linux使用MAT分析dump文件
- 作为一个程序猿你必须会的技能----自学框架!
- Flash学习资源下载列表
- 【趣味实践】Stable Diffusion绘制中秋美景
- win 10网络适配器没有无线网络连接(连不上WLAN)
- EDI 公开课:X12 850采购订单转换至可视化Excel
- 视觉slam中的一种单目稠密建图方法
- 【FAQ】接入HMS Core推送服务过程中一些常见问题总结
- leetcode — 46. 全排列(不含重复数字)
- 英汉《营销学》常用词汇-1
- php正则表达式总结
- 【转】phpcms授课学习
- 闭关修炼(四)并发包/类