单元格级别的操作ALV.

带表头的ALV使用结构如下:

CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
    EXPORTING
      I_LIST_TYPE = 0
    IMPORTING
      ET_EVENTS   = I_EVENTS.

READ TABLE I_EVENTS
       WITH KEY NAME = SLIS_EV_TOP_OF_PAGE
       INTO W_EVENTS.

IF SY-SUBRC = 0.
    MOVE 'ALV_TOP_OF_PAGE' TO W_EVENTS-FORM.
    MODIFY I_EVENTS FROM W_EVENTS INDEX SY-TABIX.
  ENDIF.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      I_CALLBACK_PROGRAM       = SY-REPID
      I_CALLBACK_PF_STATUS_SET = 'SET_STATUS'
      I_CALLBACK_USER_COMMAND  = 'USER_COMMAND'
      IS_LAYOUT_LVC            = GD_LAYOUT
      IT_FIELDCAT_LVC          = IT_FIELDCAT
      IT_EVENTS                = I_EVENTS
      I_SAVE                   = 'X'
      IT_SORT_LVC              = IT_SORT
    TABLES
      T_OUTTAB                 = GT_ALV
    EXCEPTIONS
      PROGRAM_ERROR            = 1
      OTHERS                   = 2.

一,定义部分。

TYPE-POOLS: SLIS.

1. 定义显示字段宏

DATA: IT_FIELDCAT TYPE LVC_T_FCAT,     "slis_t_fieldcat_alv WITH HEADER LINE,
      WA_FIELDCAT TYPE LVC_S_FCAT.
DEFINE ALV_INIT.
  WA_FIELDCAT-FIELDNAME   = &1.
  WA_FIELDCAT-SCRTEXT_M   = &2.
  WA_FIELDCAT-EDIT        = &3.
  WA_FIELDCAT-OUTPUTLEN   = &4.
  APPEND WA_FIELDCAT TO IT_FIELDCAT.
  CLEAR WA_FIELDCAT.
END-OF-DEFINITION.

2.定义排序定义

DATA: IT_SORT TYPE LVC_T_SORT.
 DATA: WA_SORT TYPE LVC_S_SORT.

3.定义显示参数

DATA  GD_LAYOUT    TYPE LVC_S_LAYO.

4.表头定义

DATA   I_EVENTS        TYPE SLIS_T_EVENT,

W_EVENTS        LIKE LINE OF I_EVENTS.

DATA   I_LIST_COMMENTS TYPE SLIS_T_LISTHEADER,

W_LIST_COMMENTS LIKE LINE OF I_LIST_COMMENTS .

5.单元格可编辑状态设置

在定义的输出结构中添加

TYPES: BEGIN OF TYP_SAMPLE.

.......

TYPES: 测试字段名称 TYPE 测试类型.

TYPES: SEL   TYPE C.                 "为设置多选状态预留

TYPES: FIELD_STYLE  TYPE LVC_T_STYL. "为设置单元格状态预留

TYPES: ROWCOLOR     TYPE CHAR30.     "为添加某行数据整体颜色预留

TYPES: END OF TYP_SAMPLE.

二、ALV FM 动态程序出口格式:

1.ALV PAI事件出口格式:

FORM USER_COMMAND USING RF_UCOMM    LIKE SY-UCOMM
                        RS_SELFIELD TYPE SLIS_SELFIELD.

1).使用整体设置,只要有OK_CODE就会刷新

RS_SELFIELD-REFRESH = 'X'.

2).不同按钮条件下的刷新

CASE RF_UCOMM.

WHEN 'SAVE'."SAVE为状态栏按钮

"只在点击SAVE(按钮名称)按钮时候才会自动刷新

RS_SELFIELD-REFRESH = 'X'.

WHEN OTHERS.

ENDCASE.

ENDFORM.

2.表头出口实例:

FORM ALV_TOP_OF_PAGE.
  CLEAR: I_LIST_COMMENTS[].
  W_LIST_COMMENTS-TYP  = 'H'. "H=Header, S=Selection, A=Action
  W_LIST_COMMENTS-KEY  = ''.
  CONCATENATE  ' ' '直发销售订单取消审批流程' INTO W_LIST_COMMENTS-INFO.
  APPEND W_LIST_COMMENTS TO I_LIST_COMMENTS.
**组织机构
  CLEAR W_LIST_COMMENTS.
  W_LIST_COMMENTS-TYP  = 'S'. "H=Header, S=Selection, A=Action
  W_LIST_COMMENTS-KEY  = ''.
  CONCATENATE  '双击报表中的销售订单那列可以进入显示销售订单界面,查看销售订单详细情况。'
  W_LIST_COMMENTS-INFO INTO W_LIST_COMMENTS-INFO.
  APPEND W_LIST_COMMENTS TO I_LIST_COMMENTS.
** 时间范围
  CLEAR W_LIST_COMMENTS.
  W_LIST_COMMENTS-TYP  = 'S'. "H=Header, S=Selection, A=Action
  W_LIST_COMMENTS-KEY  = ''.
  CONCATENATE  '统计日期:' SY-DATUM INTO W_LIST_COMMENTS-INFO.
  APPEND W_LIST_COMMENTS TO I_LIST_COMMENTS.
  CLEAR W_LIST_COMMENTS.
*调拨ALV的功能
  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      IT_LIST_COMMENTARY = I_LIST_COMMENTS.
ENDFORM.                  "alv_top_of_page

3.状态栏出口实例

FORM SET_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB.

ENDFORM.

三 ALV整体设置以及相关功能。

1). GD_LAYOUT-BOX_FNAME  = 'SEL'.       “设置多选按钮名称     (定义字段)
  GD_LAYOUT-STYLEFNAME = 'FIELD_STYLE'. ”设置单元格选择名称 (定义字段)
  GD_LAYOUT-INFO_FNAME = 'ROWCOLOR'.   “设置颜色名称        (定义字段)

单元格设置为不可编辑状态设置:(WA_FIELDCAT-EDIT = 'X' 要操作的列 必须设为可编辑状态 )

LS_STYLEROW-FIELDNAME = '测试字段名称' .
       LS_STYLEROW-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. "set field to disabled
       CLEAR  GT_ALV-FIELD_STYLE.
       APPEND LS_STYLEROW TO  GT_ALV-FIELD_STYLE.

注:通过LOOP ALV要显示的内表 可以根据SEL的‘X’或者其他字段的状态值,动态设置可编辑还是不可编辑状态

单元格设置为可编辑状态设置:

LS_STYLEROW-FIELDNAME = '测试字段名称' .
      LS_STYLEROW-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_ENABLED. "set field to disabled
      CLEAR  GT_ALV-FIELD_STYLE.
      APPEND LS_STYLEROW TO  GT_ALV-FIELD_STYLE.

注:通过LOOP ALV要显示的内表 可以根据SEL的‘X’或者其他字段的状态值,动态设置可编辑还是不可编辑状态

实例备忘代码:

LOOP AT  GT_ALV WHERE SQYY NE ''. "SQYY 申请原因 STAT 申请状态
    IF GT_ALV-STAT IS NOT INITIAL.
      LS_STYLEROW-FIELDNAME = 'SQYY' .
      LS_STYLEROW-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. "set field to disabled
      CLEAR  GT_ALV-FIELD_STYLE.
      APPEND LS_STYLEROW TO  GT_ALV-FIELD_STYLE.
      MODIFY GT_ALV.
      CLEAR LS_STYLEROW.
      CLEAR GT_ALV.
    ELSE.
      LS_STYLEROW-FIELDNAME = 'SQYY' .
      LS_STYLEROW-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_ENABLED. "set field to disabled
      CLEAR  GT_ALV-FIELD_STYLE.
      APPEND LS_STYLEROW TO  GT_ALV-FIELD_STYLE.
      MODIFY GT_ALV.
      CLEAR LS_STYLEROW.
      CLEAR GT_ALV.
    ENDIF.

2).   设置排序字段代码示例

WA_SORT-SPOS = '01'.
  WA_SORT-FIELDNAME = '测试字段名称'.
  WA_SORT-UP = 'X'.     "升序排列  WA_SORT-DOWN = ‘X’降序排列
  APPEND WA_SORT TO IT_SORT.
  CLEAR WA_SORT.

四 ALV中 PAI事件块的操作。

1).由于单元格可编辑状态,故要让后台获取前台(显示层)所操作的数据,需要调用一个函数。

CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      E_GRID = ALV_GRID.

分析:调用这个函数的其实是获取 调用标准FM ALV的屏幕号已经屏幕上的CONTROL(C)控件名称,并将所有的属性赋值给定义好的实例ALV_GRID,然后通过ALV_GRID 调用相关的方法。

CALL METHOD ALV_GRID->CHECK_CHANGED_DATA.  在里面的最重要的一句代码就是

CALL METHOD CL_GUI_CFW=>FLUSH.这句代码是将前台屏幕所输入的信息 同步到后台CFW 服务器,然后使用ABAP代码获取所需要的操作信息。 CFW : CONTROL FRAMEWORK  控件架构 在SAP 的前台中有个SAP GUI SERVICES (AUTOMATION HANDLER) 应用层的是 (CONTROL FRAMEWORK SERVICES) 就是使用该语句进行同步刷新的 。

代码示例如下:

FORM USER_COMMAND USING RF_UCOMM    LIKE SY-UCOMM
                        RS_SELFIELD TYPE SLIS_SELFIELD.

RS_SELFIELD TYPE SLIS_SELFIELD.
  RS_SELFIELD-REFRESH = 'X'.  "防止双击刷新
  CASE RF_UCOMM .
    WHEN 'APPROVE'.“审批

DATA ALV_GRID TYPE REF TO CL_GUI_ALV_GRID.
  DATA LT_ZHGXS_ZFSP TYPE TABLE OF ZHGXS_ZFSP.
  DATA LS_ZHGXS_ZFSP TYPE ZHGXS_ZFSP.
  DATA L_SIGN TYPE C.

CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      E_GRID = ALV_GRID.
  CALL METHOD ALV_GRID->CHECK_CHANGED_DATA.

”伪代码如下:

LOOP ALV输出内表 WHRER SEL = 'X' 被选中的行

IF  测试定义字段  IS INITIAL.

ELSE.

结构赋值.

添加内表.

ENDIF.

使用更新内表更新数据库。

IF 返回值 = 0.

COMMIT WORK .提交数据库,数据将不能被回滚.(数据层执行UPDATE队列。调用相关FM写入数据库。)

ELSE.

ROLLBACK WORK . 数据库回滚,只要有一条数据出错,所有的数据将不能被写入数据库

ENDLOOP

......

WHEN OTHERS.

ENDCASE.

ENDFORM.

2) 单行添加颜色。

已设置好的字段

TYPES: BEGIN OF TYP_SAMPLE.

.......

TYPES: ROWCOLOR     TYPE CHAR30.     "为添加某行数据整体颜色预留

TYPES: END OF TYP_SAMPLE.

GD_LAYOUT-INFO_FNAME = 'ROWCOLOR'.   “设置颜色名称        (定义字段)

PAI 出口中

如果遇到特定的提示情况,将值 C100  C200  .... C600 等等值付给ROWCOLOR. ALV自动就会输出颜色行。

五、双击单元格控制。

在ALV函数的PAI出口中。

双击 是OKCODE为空时候 默认响应事件。

所以实例代码如下:

FORM USER_COMMAND USING RF_UCOMM    LIKE SY-UCOMM
                        RS_SELFIELD TYPE SLIS_SELFIELD.
  RS_SELFIELD-REFRESH = 'X'.  "防止双击刷新
  CASE RF_UCOMM .
    WHEN 'APPROVE'.
      PERFORM  SUB_APPROVE_DATA TABLES GT_ALV.   "提交申
    WHEN 'REFRESH'.
      PERFORM SUB_GET_DATA.
      PERFORM SUB_SET_ALV.
    WHEN OTHERS.
      "双击
      IF  RS_SELFIELD-SEL_TAB_FIELD EQ '1-VBELN'.
        READ TABLE GT_ALV INTO GS_ALV INDEX RS_SELFIELD-TABINDEX.
        SET PARAMETER ID 'AUN' FIELD GS_ALV-VBELN.
        CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
      ELSEIF RS_SELFIELD-SEL_TAB_FIELD EQ '1-SQYY'.
        READ TABLE GT_ALV INTO GS_ALV INDEX RS_SELFIELD-TABINDEX.
        IF SY-SUBRC EQ 0.
          CALL SCREEN 9000 STARTING AT 60   6
                           ENDING   AT 102  19  .
          MODIFY GT_ALV FROM GS_ALV INDEX  RS_SELFIELD-TABINDEX.
        ENDIF.
      ENDIF.
  ENDCASE.
  CLEAR SY-UCOMM.
ENDFORM.

其中           RS_SELFIELD-SEL_TAB_FIELD EQ '1-测试字段名称'

解释如下:1 就是数字1. - 连接符-   后面就是VBELN.

1可以理解为 列的意思,双击哪一列的哪个格。

RS_SELFIELD-TABINDEX 是系统结构的内表INDEX.

六。自定义输入 输入编辑文本框。自己画好屏幕(凭感觉画)然后画一个控件CONTROL 命名为G_CONTAINER

9000屏幕流  9000屏幕属性 :方式对话框

PROCESS BEFORE OUTPUT.
 MODULE STATUS_9000.
*
PROCESS AFTER INPUT.
 MODULE USER_COMMAND_9000.

屏幕代码:

MODULE STATUS_9000 OUTPUT.
  SET PF-STATUS 'S9000'.
  CLEAR GT_SQYY[].
  APPEND GS_ALV-SQYY TO GT_SQYY.
  DATA L_SIGN TYPE C.
  IF GS_ALV-STAT NE ''.
    L_SIGN = 'X'.

ENDIF.
  CALL FUNCTION 'RH_EDITOR_SET'
    EXPORTING
      REPID          = SY-REPID
      DYNNR          = '9000'
      CONTROLNAME    = 'G_CONTAINER'
      MAX_COLS       = 43
      SHOW_STATUS    = 'X'
      DISPLAY_MODE   = L_SIGN
    TABLES
      LINES          = GT_SQYY[]
    EXCEPTIONS
      CREATE_ERROR   = 1
      INTERNAL_ERROR = 2
      OTHERS         = 3.
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
  CLEAR L_SIGN.
ENDMODULE.                 " STATUS_9000  OUTPUT

MODULE USER_COMMAND_9000 INPUT.
  DATA L_SQYY TYPE CHAR200.
  CASE SY-UCOMM.
    WHEN  'EXIT' OR 'BACK' OR 'CANCLE'.
      LEAVE TO SCREEN 0.
    WHEN 'SAVE'.
      CLEAR GT_SQYY[].
      CALL FUNCTION 'RH_EDITOR_GET'
        EXPORTING
          CONTROLNAME    = 'G_CONTAINER'
        TABLES
          LINES          = GT_SQYY[]
        EXCEPTIONS
          INTERNAL_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.
      LOOP AT GT_SQYY.
        CONCATENATE  L_SQYY GT_SQYY INTO L_SQYY .
        CONDENSE L_SQYY NO-GAPS .
        CLEAR GT_SQYY.
      ENDLOOP.
      GS_ALV-SQYY = L_SQYY.
      CLEAR L_SQYY.
      LEAVE TO SCREEN 0.
  ENDCASE.
ENDMODULE.                 " USER_COMMAND_9000  INPUT

这样效果就是双击可编辑单元格就会出现一个可编辑文本框,定义一个对话框属性的状态栏 定义两个按钮 SAVE 和 BACK。

来自: http://hi.baidu.com/xxcxxc001/blog/item/86af0240e35ec435cefca318.html

abap 单元格级别的操作ALV.相关推荐

  1. 记一次用iview实现表格合并单元格的具体操作

    记一次用iview实现表格"合并"单元格的具体操作 最近做项目使用iview框架做后台管理系统,第一次使用iview遇到过很多问题,有些小坑也都在网上找到解决方案了,可作为一个通用 ...

  2. python实现excel单元格合并_python进行excel单元格合并逆操作

    python进行excel单元格合并逆操作.利用anaconda3中的 pandas对包含合并单元格的表进行预处理,完成取消合并单元格的操作. 目标 通过处理表格A,得到表格B. 图1(通过处理表格A ...

  3. Excel列上相同的单元格进行合并操作!

    有的同学说了,这不很好操作吗,直接选中然后单击合并单元格不就行了,说的简单,关键是这列内容A有2个,B有3个,C有4个--,难道还有一个一个去合并单元格,有没有批量的操作 (方方格子插件) 1.首先打 ...

  4. SALV25 开启单元格级别的编辑模式

    ==> 参考(前置条件) SAP SALV15 增强SALV使SALV支持列级别.行级别.单元格级别的编辑模式切换 Editable CL_SALV_TABLE after release 75 ...

  5. abap al设置单元格可编辑 oo_OO ALV常用功能完整简例(热键单击,双击,帮助,编辑,自定义工具条等)...

    一.所用类: cl_gui_alv_grid cl_gui_docking_container 二.效果图: 执行: 单击 双击 F4帮助 航班单元格上F4或点击 后面的小按钮 (本功能在设置字段样式 ...

  6. python修改表格居中_Python使用openpyxl对xlsx表格合并单元格、设置单元格样式的操作...

    python对xlsx表格操作稍微有点麻烦,可以使用xlrd对表格进行读操作,但是如果用相应的xlwt写入表格,有时候会出现表格无法打开的情况.因此考虑openpyxl包对表格进行写操作. 导入: f ...

  7. [转]NPOI 单元格级别应用

    原文地址:http://hi.baidu.com/linrao/item/fadf96dce8770753d63aaef2 HSSFWorkbook hssfworkbook = new HSSFWo ...

  8. SAP ALV颜色代码对应颜色(整理列级别 行级别 单元格级别设置方法)

    1. ALV颜色代码规则 SAP颜色代码由三位控制码组成(如下所示) 2. ALV颜色代码和颜色的对应关系 颜色代码对应关系 3. ALV颜色代码的使用 列级别 1.设置FIELDCAT-EMPHAS ...

  9. REUSE_ALV_GRID_DISPLAY_LVC 实现单元格级别的编辑示例

    1.实现效果 开启编辑 关闭编辑 2.实现 代码 DATA: BEGIN OF GT_SFLIGHT OCCURS 0,BOX TYPE C.INCLUDE STRUCTURE SFLIGHT. DA ...

最新文章

  1. oracle修改连接数
  2. Windows Server 2008 之 终端服务TS WEB ACCESS
  3. mysql 备份大表 存储过程_mysql批量备份表的存储过程写法
  4. python引入自己写的文件_python引入自己写的Py文件
  5. mysql goldengate_oracle GoldenGate实现Oracle到MySQL数据平滑迁移
  6. c++排序算法ppt_C/C++学习教程:C语言排序算法—插入排序算法
  7. C++ 反射机制的简单实现
  8. java文件和xml文件_用Java分割大型XML文件
  9. Ansible,Linux应用程序,Jupyter笔记本,Raspberry Pi婴儿监视器,Python等
  10. Android软硬整合设计与框架揭秘教程
  11. k means sse python_python实现kMeans算法
  12. 树形背包O(n * v^2)入门
  13. python怎么导入sql数据库_如何用Python3写一段将Excel数据导入SQL数据库?
  14. 西门子二代精简屏如何使用U盘下载触摸屏程序
  15. Origin不显示零刻度
  16. 小甲鱼C++ 1 语言与思想介绍
  17. python实用程序育儿法下载_Python高级编程
  18. linux下静态库、动态库总结
  19. 跨平台Office文档预览原生插件,非腾讯X5,支持离线,稳定高可用
  20. Android 跳转到高德、百度、腾讯地图进行导航

热门文章

  1. 当React Native 遇到了Google reCAPTCHA
  2. vueRouter-命名视图
  3. Java开发过程中开发工具Eclipse中导入jar包的过程
  4. easyui validatebox验证
  5. 项目杂记——在后台获取Repeater控件里面的控件
  6. Lisp 的单行注释和多行注释
  7. 谷歌发安全警告:社交网络威胁用户隐私
  8. JQUERY 常用方法汇总
  9. [原创]Fluent NHibernate之旅
  10. .Net 应用程序体系结构—C#高级编程(第10版)学习笔记5