勾选某一行的勾选框,更改当前行的颜色,ALV数据发生变化的事件

文章目录

  • 屏幕
  • ALV的创建
  • 定义变量
  • 注册事件
  • 方法定义
  • 方法实现
    • frm_data_change
  • 效果

屏幕

在这里插入图片描述

ALV的创建

DATA: g_gui_custom_container   TYPE REF TO cl_gui_custom_container.
DATA: g_gui_alv_grid TYPE REF TO cl_gui_alv_grid.DATA: gt_listheader TYPE slis_t_listheader, "ALV 表头gs_layout     TYPE lvc_s_layo.        "ALV布局工作区DATA: gs_fieldcat TYPE lvc_s_fcat, "字段工作区gt_fieldcat TYPE TABLE OF lvc_s_fcat.DATA: gt_toolbar TYPE ui_functions.DATA: gs_variant TYPE disvariant.
DATA: gv_variant TYPE disvariant .DATA: gs_events TYPE slis_alv_event,gt_events TYPE slis_t_event.DATA: gs_fieldinfo TYPE slis_fieldinfo2,gt_fieldinfo TYPE TABLE OF slis_fieldinfo2.DATA: gr_table_alv  TYPE REF TO cl_salv_table.
DATA: g_event_class TYPE REF TO lcl_event_class.

在这里插入图片描述

*&---------------------------------------------------------------------*
*& Module SET_SCREEN_ALV OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE set_screen_alv OUTPUT.DATA: lt_filter TYPE lvc_t_filt.PERFORM frm_alv_variant CHANGING gv_variant.IF g_gui_custom_container IS INITIAL." 创建容器对象CREATE OBJECT g_gui_custom_containerEXPORTINGcontainer_name = 'CONTAINER_ALV'.ENDIF.IF g_gui_alv_grid IS INITIAL." 创建alv对象CREATE OBJECT g_gui_alv_gridEXPORTINGi_parent = g_gui_custom_container."字段设置PERFORM frm_pre_fieldcat TABLES gt_fieldcat USING gs_item 'GS_ITEM'."布局gs_layout-cwidth_opt = 'X'.gs_layout-info_fname = 'COLOR'.gs_layout-stylefname = 'FIELD_STYLE'." 设置按钮REFRESH: gt_toolbar.PERFORM frm_alv_funcodes CHANGING gt_toolbar.CREATE OBJECT g_event_class.SET HANDLER g_event_class->handle_toolbarg_event_class->handle_user_commandg_event_class->handle_changeg_event_class->handle_double_clickFOR g_gui_alv_grid.IF gt_fieldcat[] IS NOT INITIAL.CALL METHOD g_gui_alv_grid->set_table_for_first_displayEXPORTINGis_layout            = gs_layouti_save               = 'A'is_variant           = gv_variantit_toolbar_excluding = gt_toolbarCHANGINGit_filter            = lt_filterit_outtab            = gt_item[]it_fieldcatalog      = gt_fieldcat.ENDIF.CALL METHOD g_gui_alv_grid->check_changed_data. "控制ALV显示界面刷新CALL METHOD g_gui_alv_grid->register_edit_eventEXPORTINGi_event_id = cl_gui_alv_grid=>mc_evt_modifiedEXCEPTIONSerror      = 1OTHERS     = 2.CALL METHOD g_gui_alv_grid->register_edit_eventEXPORTINGi_event_id = cl_gui_alv_grid=>mc_evt_enterEXCEPTIONSerror      = 1OTHERS     = 2.CALL METHOD cl_gui_alv_grid=>set_focusEXPORTINGcontrol           = g_gui_alv_gridEXCEPTIONScntl_error        = 1cntl_system_error = 2OTHERS            = 3.ELSE.PERFORM frm_refresh_alv_data.ENDIF.
ENDMODULE.

定义变量

在这里插入图片描述

DATA:BEGIN OF gs_item,sel,zicon       TYPE icon_d,    "状态auart       TYPE vbak-auart,bezei       TYPE tvakt-bezei,vbeln_dn    TYPE likp-vbeln,posnr_dn    TYPE lips-posnr,vbeln_so    TYPE vbak-vbeln,posnr_so    TYPE vbap-posnr,zddxq       TYPE char10,bstkd       TYPE vbkd-bstkd, "客户POkunnr       TYPE vbak-kunnr,name1       TYPE kna1-name1, "售达方名称kunnr_sh    TYPE vbpa-kunnr, "送达方name1_sh    TYPE kna1-name1, "送达方名称名称matnr       TYPE vbap-matnr,arktx       TYPE vbap-arktx, "物料描述kdmat       TYPE vbap-kdmat, "客户物料maktx       TYPE makt-maktx,kwmeng      TYPE vbap-kwmeng,lfimg       TYPE lips-lfimg, "已交货数量zmenge      TYPE lips-lfimg, "未交货数量zbdmng      TYPE lips-lfimg, "已过账数量vrkme       TYPE vbap-vrkme, "销售单位zbzzl       TYPE lips-lfimg, "标准重量werks       TYPE vbap-werks,lgort_a     TYPE mska-lgort, "前陇成品仓zkalab_a    TYPE mska-kalab, "可用库存数量lgort_b     TYPE mska-lgort, "西山成品仓zkalab_b    TYPE mska-kalab, "可用库存数量lgort_c     TYPE mska-lgort, "客供成品仓zkalab_c    TYPE mska-kalab, "可用库存数量lgmng       TYPE lips-lgmng, "计划交货数量wadat       TYPE vbep-edatu, "计划交货日期ernam       TYPE vbak-ernam,kvgr4       TYPE vbak-kvgr4,kvgr5       TYPE vbak-kvgr5,audat       TYPE vbak-audat,vkorg       TYPE vbak-vkorg,vtweg       TYPE vbak-vtweg,spart       TYPE vbak-spart,zmseg       TYPE bapiret2-message, "错误消息color(4)    TYPE c, "定义行颜色字段field_style TYPE lvc_t_styl,lv_line     TYPE i, "行号标识
*--------------------------------------------------------------------*change by JT-ZZY AT 20221210 新增三个仓库对应的库存数量lgort_d     TYPE mska-lgort, "安徽新马成品一库zkalab_d    TYPE mska-kalab, "可用库存数量vrkme_d     TYPE vbap-vrkme, "可用库存数量单位lgort_e     TYPE mska-lgort, "安徽新马成品二库zkalab_e    TYPE mska-kalab, "可用库存数量vrkme_e     TYPE vbap-vrkme, "可用库存数量单位lgort_f     TYPE mska-lgort, "安徽新马成品三库zkalab_f    TYPE mska-kalab, "可用库存数量vrkme_f     TYPE vbap-vrkme, "可用库存数量单位lgort_g     TYPE mska-lgort, "新能源成品仓zkalab_g    TYPE mska-kalab, "可用库存数量vrkme_g     TYPE vbap-vrkme, "可用库存数量单位zverid      TYPE vbap-zverid,"ADD "27.06.2023 11:08:20 jt-zzylgort_h     TYPE mska-lgort, "新能源成品仓                      广东新能源成品仓:1100 工厂,1109111011111112 库位zkalab_h    TYPE mska-kalab, "可用库存数量vrkme_h     TYPE vbap-vrkme, "可用库存数量单位lgort_i     TYPE mska-lgort, "新能源成品仓zkalab_i    TYPE mska-kalab, "可用库存数量vrkme_i     TYPE vbap-vrkme, "可用库存数量单位lgort_j     TYPE mska-lgort, "新能源成品仓zkalab_j    TYPE mska-kalab, "可用库存数量vrkme_j     TYPE vbap-vrkme, "可用库存数量单位lgort_k     TYPE mska-lgort, "新能源成品仓zkalab_k    TYPE mska-kalab, "可用库存数量vrkme_k     TYPE vbap-vrkme, "可用库存数量单位lgort_l     TYPE mska-lgort, "新能源成品仓                      江苏新能源一厂成品仓: 1700 工厂,17031717 库位zkalab_l    TYPE mska-kalab, "可用库存数量vrkme_l     TYPE vbap-vrkme, "可用库存数量单位lgort_m     TYPE mska-lgort, "新能源成品仓zkalab_m    TYPE mska-kalab, "可用库存数量vrkme_m     TYPE vbap-vrkme, "可用库存数量单位lgort_n     TYPE mska-lgort, "新能源成品仓                      安徽新能源成品仓:1800 工厂,1803 库位zkalab_n    TYPE mska-kalab, "可用库存数量vrkme_n     TYPE vbap-vrkme, "可用库存数量单位lgort_o     TYPE mska-lgort, "精密BU-平埔成品仓  "精密事业部需求添加 ADD BY LHY 20250407zkalab_o    TYPE mska-kalab, "可用库存数量(3003) "精密事业部需求添加 ADD BY LHY 20250407vrkme_o     TYPE vbap-vrkme, "可用库存数量单位   "精密事业部需求添加 ADD BY LHY 20250407END OF gs_item.
DATA:gt_item LIKE TABLE OF gs_item.DATA: g_event_class TYPE REF TO lcl_event_class.

注册事件

在这里插入图片描述

方法定义

在这里插入图片描述

CLASS lcl_event_class IMPLEMENTATION."双击事件METHOD handle_double_click.READ TABLE gt_item INTO DATA(gs_item) INDEX e_row.IF sy-subrc = 0.CASE  e_column-fieldname.WHEN 'VBELN_SO'.CALL METHOD zcl_common_utils=>leave_to_va03EXPORTINGlv_vbeln = gs_item-vbeln_so.WHEN 'VBELN_DN'.CALL METHOD zcl_common_utils=>leave_to_vl03EXPORTINGlv_vbeln = gs_item-vbeln_dn.WHEN OTHERS.ENDCASE.ENDIF.ENDMETHOD.METHOD handle_toolbar.DATA: ls_toolbar TYPE stb_button.CLEAR: ls_toolbar.ls_toolbar-butn_type = 3. " 分隔符APPEND ls_toolbar TO e_object->mt_toolbar.CLEAR: ls_toolbar.ls_toolbar-function  = 'CNS_ALL'.    " 功能码ls_toolbar-icon      =  icon_select_all.  " 图标名称ls_toolbar-quickinfo = '全选'.   " 图标的提示信息ls_toolbar-text      = '全选'.       " 按钮上显示的文本APPEND ls_toolbar TO e_object->mt_toolbar.CLEAR: ls_toolbar.ls_toolbar-function  = 'CNS_SAL'.    " 功能码ls_toolbar-icon      =  icon_deselect_all.  " 图标名称ls_toolbar-quickinfo = '取消全选'.   " 图标的提示信息ls_toolbar-text      = '取消全选'.       " 按钮上显示的文本APPEND ls_toolbar TO e_object->mt_toolbar.CLEAR: ls_toolbar.ls_toolbar-function  = 'CNS_HIST'.    " 功能码ls_toolbar-icon      =  icon_history.  " 图标名称ls_toolbar-quickinfo = '转单历史'.   " 图标的提示信息ls_toolbar-text      = '转单历史'.       " 按钮上显示的文本APPEND ls_toolbar TO e_object->mt_toolbar.CLEAR: ls_toolbar.ls_toolbar-butn_type = 3. " 分隔符APPEND ls_toolbar TO e_object->mt_toolbar.CLEAR: ls_toolbar.ENDMETHOD.                    "handle_toolbarMETHOD handle_user_command.CALL METHOD g_gui_alv_grid->check_changed_data. "触发数据变更CASE e_ucomm.WHEN 'CNS_ALL'.PERFORM frm_all_data_line USING 'X'.WHEN 'CNS_SAL'.PERFORM frm_all_data_line USING ' '.WHEN 'CNS_HIST'."查找历史行PERFORM frm_show_hist_data.WHEN OTHERS.ENDCASE.PERFORM frm_refresh_alv_data.ENDMETHOD.                           "handle_user_commandMETHOD handle_change.PERFORM handle_data_changed USING er_data_changed.PERFORM frm_refresh_alv_data.ENDMETHOD.
*-----------------------------------------------------------------
ENDCLASS.

方法实现

在这里插入图片描述

*----------------------------------------------------------------------*
*         FORM handle_data_changed IMPLEMENTATION
*----------------------------------------------------------------------*
FORM handle_data_changed  USING p_er_data_changed TYPE REF TO cl_alv_changed_data_protocol.DATA: ls_row TYPE LINE OF lvc_t_modi .LOOP AT p_er_data_changed->mt_mod_cells INTO ls_row .READ TABLE gt_item  ASSIGNING FIELD-SYMBOL(<fs_item>) INDEX ls_row-row_id.IF sy-subrc = 0.PERFORM frm_data_change USING ls_row p_er_data_changed.ENDIF.ENDLOOP .
ENDFORM.                    "handle_data_changed

frm_data_change

FORM frm_data_change USING ps_row TYPE LINE OF lvc_t_modip_er_data_changed TYPE REF TO cl_alv_changed_data_protocol.DATA:mod_data        TYPE lvc_t_modi,gs_out_mod_data TYPE lvc_s_modi.FIELD-SYMBOLS:<fs_field> TYPE any .DATA: lv_decimal TYPE p DECIMALS 3.mod_data = p_er_data_changed->mt_mod_cells.LOOP AT mod_data INTO gs_out_mod_data.READ TABLE gt_item  ASSIGNING FIELD-SYMBOL(<fs_item>) INDEX gs_out_mod_data-row_id.IF sy-subrc = 0.CASE gs_out_mod_data-fieldname.WHEN 'LGMNG'.CLEAR lv_decimal.CALL FUNCTION 'UNITS_STRING_CONVERT'EXPORTINGunits_string = gs_out_mod_data-valuedcpfm        = 'X'
*             MLLN         = 'M'
*             TSND         = 'T'IMPORTINGunits        = lv_decimalEXCEPTIONSinvalid_type = 1OTHERS       = 2.IF sy-subrc <> 0.
* Implement suitable error handling hereENDIF.IF lv_decimal > <fs_item>-zmenge.CALL METHOD p_er_data_changed->add_protocol_entryEXPORTINGi_msgid     = '00'i_msgty     = 'E'i_msgno     = '001'i_msgv1     = '计划发货数量不能大于未交货数量'i_fieldname = gs_out_mod_data-fieldname.CALL METHOD p_er_data_changed->modify_cellEXPORTINGi_value     = <fs_item>-lgmngi_row_id    = gs_out_mod_data-row_idi_fieldname = gs_out_mod_data-fieldname.ELSE.TRY.ASSIGN COMPONENT gs_out_mod_data-fieldname OF STRUCTURE <fs_item> TO <fs_field>.<fs_field> = lv_decimal.CATCH cx_sy_arithmetic_error INTO myref.err_text = myref->get_text( ).ENDTRY.ENDIF.WHEN 'SEL'.IF gs_out_mod_data-value NE <fs_item>-sel.<fs_item>-color = COND #( WHEN gs_out_mod_data-value = 'X' THEN 'C210' ELSE ' ' ).
*       Check: 勾选整单时,单据行要保持一制IF gs_head-zflg = 'X'.LOOP AT gt_item ASSIGNING FIELD-SYMBOL(<fs_data>)  WHERE vbeln_so = <fs_item>-vbeln_so.<fs_data>-sel   = gs_out_mod_data-value.<fs_data>-color = <fs_item>-color.ENDLOOP.ENDIF.ENDIF.WHEN OTHERS.ENDCASE.ENDIF.ENDLOOP.
ENDFORM.      

在这里插入图片描述

效果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/79836.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI-02a5a6.神经网络-与学习相关的技巧-批量归一化

批量归一化 Batch Normalization 设置合适的权重初始值&#xff0c;则各层的激活值分布会有适当的广度&#xff0c;从而可以顺利的进行学习。那么&#xff0c;更进一步&#xff0c;强制性的调整激活值的分布&#xff0c;是的各层拥有适当的广度呢&#xff1f;批量归一化&#…

解决SQL Server SQL语句性能问题(9)——合理使用表分区

9.2. 合理使用表分区 本专栏4.1.4节中,我们对表分区相关的概念和机制等基础理论进行了较为详细的介绍和论述,读者可以参考该节中内容,或者,读者也可以参考官方或其他相关资料。与其他关系库类似,SQL Server 2005版本中引进的真正意义上的表分区技术,绝对是解决海量数据环…

C语言学习之文件操作

经过前面的学习&#xff0c;我们已经基本掌握了如何去写一个C语言的代码了。但是在实际的项目中&#xff0c;我们不可能不需要文件去操作。因为如果没有文件&#xff0c;我们写的程序是存储在电脑的内存中的。如果程序推出&#xff0c;内存回收数据就随之丢失了。如果我们要对数…

2025年PMP 学习十三 第9章 项目资源管理(9.1,9.2)

2025年PMP 学习十三 第9章 项目资源管理&#xff08;9.1,9.2&#xff09; 序号过程过程组9.1规划资源管理规划9.2估算活动资源规划9.3获取资源执行9.4建设团队执行9.5管理团队执行9.6控制资源监控 文章目录 2025年PMP 学习十三 第9章 项目资源管理&#xff08;9.1,9.2&#xf…

蓝桥杯13届国B 完全日期

题目描述。 如果一个日期中年月日的各位数字之和是完全平方数&#xff0c;则称为一个完全日期。 例如&#xff1a;2021 年 6 月 5 日的各位数字之和为 20216516&#xff0c;而 16 是一个完全平方数&#xff0c;它是 4 的平方。所以 2021 年 6 月 5 日是一个完全日期。 例如&…

某某霸翻译逆向分析[JS逆向]

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;不提供完整代码&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 本文章未经…

开源Heygem本地跑AI数字人视频教程

图文教程&#xff1a; 点击跳转 视频教程 资料包下载 点击下载&#xff1a;

C++之fmt库介绍和使用(1)

C之fmt库介绍与使用(1) Author: Once Day Date: 2025年5月12日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文章可参考专栏: 源码分析_Once-Day的博客-CSDN博客 …

设计模式(9)——创建型模式之工厂方法

设计模式(9)——创建型模式之工厂方法 工厂方法作用结构伪代码适用场景工厂方法 作用 工厂方法是一种创建型设计模式,其在父类中提供一个创建对象的方法,允许子类决定实例化对象的类型。 结构 产品(Product)将会对接口进行声明。对于所有由创建者及其子类构建的对象,…

Docker 疑难杂症解决指南:从入门到进阶的全面剖析

Docker 作为容器化技术的代表&#xff0c;凭借其轻量级、可移植性和高效资源利用率&#xff0c;已成为开发、测试和部署应用的标准工具。然而&#xff0c;在实际使用中&#xff0c;用户常常会遇到镜像构建失败、容器启动异常、网络配置问题等疑难杂症。本文将从镜像构建、容器生…

抢跑「中央计算+区域控制」市场,芯驰科技高端智控MCU“芯”升级

伴随着整车EE架构的加速变革&#xff0c;中国高端车规MCU正在迎来“新格局”。 在4月23日开幕的上海国际车展期间&#xff0c;芯驰科技面向新一代AI座舱推出了X10系列芯片&#xff0c;以及面向区域控制器、电驱和动力域控、高阶辅助驾驶和舱驾融合系统等的高端智控MCU产品E3系…

DeepPrep:深度学习提升神经影像预处理

DeepPrep&#xff1a;深度学习提升神经影像预处理 一、DeepPrep介绍和BIDS格式介绍 神经影像预处理的痛点&#xff1a;传统工具&#xff08;如fMRIPrep&#xff09;在大规模数据处理时效率低下&#xff0c;临床样本鲁棒性不足。DeepPrep通过深度学习工作流管理实现突破&#…

pytorch 数据预处理和常用工具

文章目录 NumPyNumpy数据结构安装和使用NumPy Matplotlib的安装和导入安装和导入Matplotlib绘制基础图画折线图散点图柱状图图例 数据清洗据清洗的作用Pandas进行数据清洗Pandas数据结构Series 数据结构DataFrame数据结构 Pandas数据清洗常用代码 特征工程主成分分析线性判别分…

MATLAB 中常用的微分函数介绍

MATLAB 中常用的微分函数介绍 在 MATLAB 中&#xff0c;微分运算是数值计算和符号计算中常用的功能。无论是在进行数据分析、优化算法&#xff0c;还是数学建模时&#xff0c;微分都扮演着重要的角色。本文将介绍 MATLAB 中常用的微分函数&#xff0c;并通过简单的示例帮助大家…

按指定位置或关键字批量删除工作表-Excel易用宝

在一个工作簿中有多个工作表&#xff0c;有些工作表不需要了&#xff0c;如果一个一个手动删除&#xff0c;那实在是太慢了&#xff0c;有没有什么好的方法可以批量删除工作表。 批量删除工作表很简单&#xff0c;单击【易用宝】→【工作表】→【批量删除工作表】。 在打开的批…

TypeScript装饰器:从入门到精通

TypeScript装饰器&#xff1a;从入门到精通 什么是装饰器&#xff1f; 装饰器&#xff08;Decorator&#xff09;是TypeScript中一个非常酷的特性&#xff0c;它允许我们在不修改原有代码的情况下&#xff0c;给类、方法、属性等添加额外的功能。想象一下装饰器就像给你的代码…

【SSL证书系列】客户端如何检查中间CA签名是否由根CA签发

客户端通过以下步骤检查中间CA的签名是否由受信任的根CA签发&#xff1a; 1. 证书链的构建 服务器发送的证书链通常包含&#xff1a; • 服务器证书&#xff08;由中间CA签发&#xff09; • 中间CA证书&#xff08;由根CA签发&#xff09; • 根CA证书&#xff08;通常不发送…

【android bluetooth 协议分析 12】【A2DP详解 1】【车机侧蓝牙音乐免切源介绍】

“车机蓝牙音乐免切源” 是近年来车载系统&#xff08;IVI&#xff0c;In-Vehicle Infotainment&#xff09;中常见的一个用户体验优化功能。它主要是为了简化蓝牙音乐播放流程、减少用户操作&#xff0c;提升使用便捷性。 一、什么是“切源”&#xff1f; 在车机系统中&#…

Android usb网络共享详解

Android usb网络共享详解 文章目录 Android usb网络共享详解一、前言二、USB网络共享使用的前提1、Android设备支持adb 并且打开usb开关2、原生Settings能看到USB网络共享开关3、代码中检测USB网络共享是否支持 三、Settings 中USB网络共享代码的部分代码1、Settings\res\xml\t…

Step1

项目 SchedulerSim 已搭建完成 ✅ ⸻ ✅ 你现在拥有的&#xff1a; • &#x1f527; 两种调度器&#xff08;Round Robin SJF&#xff09; • &#x1f4e6; 模拟进程类 Process • &#x1f9f1; 清晰结构&#xff1a;OOP 风格 便于扩展 • ✍️ 主函数已演示调度器运行效…