ABAP OOALV模板(Custom Control)

news2025/1/15 17:48:20

该方法OOALV需要将ALV置入屏幕上的自定义控件中
alv较少时具有代码可读性可维护性高的特点,实现起来较为简单,但由于custom control固定了位置所以无法动态拖拽边框
创建报表程序后通过se80对象浏览器新建屏幕9001
在这里插入图片描述
点击布局进入屏幕制作器界面
将custom control定制控件丢到屏幕里面,保存激活
在这里插入图片描述
报表选择屏幕和取数逻辑和以往一样没什么区别
取数逻辑结束之后,通过CALL SCREEN ‘XXXX’.调用自开发屏幕
在这里插入图片描述
执行CALL SCREEN命令之后,就会进入选择屏幕的PBO(process before output)之中,在此处可以定义GUI STATUS、GUI TITLE、初始化容器信息(容器信息也可以在之前初始)等操作
在这里插入图片描述
在这里插入图片描述
到此时ALV就可以展现了
在这里插入图片描述
GUI STATUS如果是从标准的copy来的,所有的功能码只能展示但都不能使用,如果要对alv进行排序筛选等操作只能通过启用oo alv的layout属性中的notool_bar = ''来使用
一般是新建一个gui status,至少要实现退出的几个标准功能码
在这里插入图片描述
如果有额外的需求比如打印或者别的什么功能按钮,还是和以前一样在应用程序工具栏中新增
在这里插入图片描述
在PAI中监控功能码
在这里插入图片描述
关于内表更新,每次触发功能码时可以通过下述代码先获取选中的行目,再根据行目更新内表勾选标识
在这里插入图片描述
最后成品如下
在这里插入图片描述
成品代码如下

********************************************************************
* 事务代码:                                                       *
* 程序名称:                                                       *
* 程序目的:采购订单OO ALV                                         *
* 设 计 人:                                                       *
* 开 发 人:                                                       *
* 设计时间:                                                       *
* 程序类型: ABAP/4 程序 ,报表程序                                 *
* 应用类型: MM                                                     *
* 描    述:                                                        *
*(修改日志)--------------------------------------------------------*
*                                                                  *
* 日志号   修改人  修改时间       修改说明              传输号码   *
*  ----    ----    ------         -----------
*   001    Seele   2023-02-14     创建打印程序                     *
********************************************************************

REPORT zdemo_seele04.

*----------------------------------------------------------------------*
* 数据库表声明/Database table declaration
*----------------------------------------------------------------------*
TABLES:ekko,
       ekpo.

*----------------------------------------------------------------------*
* 结构声明类型/Structure type declaration
*----------------------------------------------------------------------*
*&---主表数据/master table data
TYPES:BEGIN OF ty_output,
        " 抬头
        ebeln TYPE ekko-ebeln, " 采购凭证号
        bukrs TYPE ekko-bukrs, " 公司代码
        bstyp TYPE ekko-bstyp, " 采购类别

        " 行项目
        ebelp TYPE ekpo-ebelp, " 采购凭证行项目号
        matnr TYPE ekpo-matnr, " 物料号
        netpr TYPE ekpo-netpr, " 净价
        menge TYPE ekpo-menge, " 数量
        meins TYPE ekpo-meins, " 订单单位

        box   TYPE c         , " 单选框

      END OF ty_output.

*----------------------------------------------------------------------*
* 全局变量定义/Global variable definition
*----------------------------------------------------------------------*
*&---全局内表定义
DATA:gt_output TYPE TABLE OF ty_output.  " 主数据表

*&---全局结构定义
DATA:gs_output TYPE ty_output.           " 主数据结构

*&---全局对象定义
DATA: gr_container TYPE REF TO cl_gui_custom_container." 功能A: 基本显示
DATA: gr_grid      TYPE REF TO cl_gui_alv_grid." 功能A: 基本显示

*&---------------------------------------------------------------------*
*& 字段串定义/Field-symbols                                            *
*&---------------------------------------------------------------------*
FIELD-SYMBOLS:<fs_output> TYPE ty_output.

*&---------------------------------------------------------------------*
*&  ALV TYPE/ALV 类型定义
*&---------------------------------------------------------------------*
*&---ALV数据组,类型池
TYPE-POOLS:slis,
           vrm.

*&---定义ALV显示的字段列及其描述等属性
DATA:gt_fieldcat TYPE TABLE OF lvc_s_fcat, " ALV 控制: 字段目录
     gs_fieldcat TYPE lvc_s_fcat,          " ALV 控制: 字段目录
     gs_layout   TYPE lvc_s_layo.          " ALV 控制: 布局结构

*&---------------------------------------------------------------------*
*&  Macro 宏定义
*&---------------------------------------------------------------------*
DEFINE mcr_set_catalog.
  gs_fieldcat-fieldname  = &1. " 字段技术名称
  gs_fieldcat-coltext    = &2. " 显示名称
  gs_fieldcat-ref_table  = &3. " 参照表
  gs_fieldcat-ref_field  = &4. " 参照表字段
  gs_fieldcat-qfieldname = &5. " 参考计量单位的字段名称
  gs_fieldcat-key        = &6. " key 值
  gs_fieldcat-edit       = &7. " 可编辑

  APPEND gs_fieldcat TO gt_fieldcat.
  CLEAR  gs_fieldcat.
END-OF-DEFINITION.

*&---------------------------------------------------------------------*
*& Selection Screen/选择屏幕
*&---------------------------------------------------------------------*
*&---选择屏幕块
SELECTION-SCREEN BEGIN OF BLOCK blk01 WITH FRAME TITLE TEXT-101.

*&---范围
SELECT-OPTIONS:s_ebeln FOR ekko-ebeln ." 采购订单号

SELECTION-SCREEN END OF BLOCK blk01.

*&---------------------------------------------------------------------*
*& Start-of-selection/开始选择屏幕                                     *
*&---------------------------------------------------------------------*
START-OF-SELECTION.
*&---内表数据获取

  PERFORM frm_get_data.

  IF gt_output IS INITIAL.
    MESSAGE s008(zmm001) DISPLAY LIKE 'E'.
    EXIT.
  ENDIF.

*&---------------------------------------------------------------------*
*& end-of-selection/结束选择屏幕(程序结束处理,输出等)               *
*&---------------------------------------------------------------------*
END-OF-SELECTION.

*&===ALV 输出
**&---设置ALV输出格式
*  PERFORM frm_init_layout.
**&---设置ALV输出字段
*  PERFORM frm_init_fieldcat.
**&---ALV 显示
*  PERFORM frm_display_alv.

  PERFORM frm_call_screen.

*&---------------------------------------------------------------------*
*&      Form  frm_get_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_10     text
*----------------------------------------------------------------------*
FORM frm_get_data.

  DATA:lv_tabix TYPE i.
  FREE:gt_output.

  SELECT
    ekko~ebeln, " 采购凭证号
    ekko~bukrs, " 公司代码
    ekko~bstyp, " 采购类别
    ekpo~matnr, " 物料号
    ekpo~netpr, " 净价
    ekpo~menge, " 数量
    ekpo~meins  " 订单单位
  FROM ekko
    LEFT JOIN ekpo ON ekko~ebeln = ekpo~ebeln
  WHERE
    ekko~ebeln IN @s_ebeln
  INTO TABLE @DATA(lt_data).

  LOOP AT lt_data INTO DATA(ls_data).
    MOVE-CORRESPONDING ls_data TO gs_output.
    APPEND gs_output TO gt_output.
  ENDLOOP.

ENDFORM.                    " frm_get_data
*&---------------------------------------------------------------------*
*&      Form  frm_init_layout
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_init_layout .
  CLEAR gs_layout.
  gs_layout-zebra      = 'X' .    " 斑马线
  gs_layout-cwidth_opt = 'X' .    " 自动调整ALVL列宽
  gs_layout-no_toolbar = '' .    " 隐藏工具栏
  gs_layout-sel_mode   = 'A'.     "A: 多选行列 B: 单选行列 C: 多选行列+单选单元格 D: 多选行列+多选单元格
*  gs_layout-box_fname  = 'BOX'.   "选择字段
ENDFORM.                    " frm_init_layout
*&---------------------------------------------------------------------*
*&      Form  frm_fieldcat
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_init_fieldcat .
*&---ALV 输出字段目录,涉及字段必须大写
  mcr_set_catalog:  'EBELN'  TEXT-a01    'EKKO'  'EBELN'   '' ''  '', " 采购凭证号
                    'BUKRS'  TEXT-a02    'EKKO'  'BUKRS'   '' ''  '', " 公司代码
                    'BSTYP'  TEXT-a03    'EKKO'  'BSTYP'   '' ''  '', " 采购类别
                    'EBELP'  TEXT-a04    'EKPO'  'EBELP'   '' ''  '', " 采购凭证行项目号
                    'MATNR'  TEXT-a05    'EKPO'  'MATNR'   '' ''  '', " 物料号
                    'NETPR'  TEXT-a06    'EKPO'  'NETPR'   '' ''  '', " 净价
                    'MENGE'  TEXT-a07    'EKPO'  'MENGE'   '' ''  '', " 数量
                    'MEINS'  TEXT-a08    'EKPO'  'MEINS'   '' ''  ''. " 订单单位

ENDFORM.                    " frm_fieldcat

*&---------------------------------------------------------------------*
*&      Form  frm_display_alv
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_display_alv .
*&---ALV 显示函数
  CALL METHOD gr_grid->set_table_for_first_display     " 功能A: 基本显示
    EXPORTING
      i_save                        = 'X'
      i_default                     = 'X'
      is_layout                     = gs_layout   " 功能B: 设定layout
*     IT_TOOLBAR_EXCLUDING          = GT_EXCLUDE  " 功能G: 设定屏蔽标准ALV 工具栏的按钮
    CHANGING
      it_outtab                     = gt_output[]
      it_fieldcatalog               = gt_fieldcat[] " 功能C: 设定fieldcat
    EXCEPTIONS
      invalid_parameter_combination = 1
      program_error                 = 2
      too_many_lines                = 3
      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.
ENDFORM.                    " frm_display_alv

*&---------------------------------------------------------------------*
*& Form frm_refresh
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_refresh .

* 将更新后的数据传到alv所对应的内表
  DATA: lr_grid TYPE REF TO cl_gui_alv_grid.
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      e_grid = lr_grid.

  CLEAR gt_output.

  PERFORM frm_get_data.
  "Refresh ALV
  "Reset the layout
  lr_grid->set_frontend_layout( is_layout = gs_layout ).

  "Refresh ALV display
  lr_grid->refresh_table_display( is_stable = VALUE lvc_s_stbl( row = 'X'
                                                                col = 'X' ) ).

ENDFORM.

*&---------------------------------------------------------------------*
*& Form FRM_CALL_SCREEN
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_call_screen .
  CALL SCREEN '9001'.
ENDFORM.

*&---------------------------------------------------------------------*
*& Module STATUS_9001 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE status_9001 OUTPUT.
  " 设置菜单状态栏
  SET PF-STATUS 'STATUS_9001'.
  " 可以在描述处填占位符&1 &2...实现动态标题栏,在该语句后加上WITH 'XXX'.
  SET TITLEBAR 'TITLE_9001'.

  " 设置ALV
  IF gr_container IS INITIAL.

    PERFORM frm_init_object.   " 初始化ALV

    PERFORM frm_init_layout.   " 设置layout

    PERFORM frm_init_fieldcat. " 设置fieldcat

    PERFORM frm_display_alv.   " 显示ALV

  ENDIF.


ENDMODULE.

*&---------------------------------------------------------------------*
*& Form frm_init_object
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_init_object .
  CREATE OBJECT gr_container  "创建容器对象
    EXPORTING
      container_name = 'CC_ALV'.

  CREATE OBJECT gr_grid "   创建 ALV_GRID 对象
    EXPORTING
      i_parent          = gr_container
    EXCEPTIONS
      error_cntl_create = 1
      error_cntl_init   = 2
      error_cntl_link   = 3
      error_dp_create   = 4
      OTHERS            = 5.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_9001  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_9001 INPUT.
  DATA : lt_row TYPE lvc_t_roid, "内表
         ls_row TYPE lvc_s_roid. "工作区


  CALL METHOD gr_grid->get_selected_rows
    IMPORTING
      et_row_no = lt_row. "将更新后的数据传到alv所对应的内表

  LOOP AT lt_row INTO ls_row.
    READ TABLE gt_output INTO gs_output INDEX ls_row-row_id .
    IF  sy-subrc EQ  0 .
      gs_output-box = 'X'.

      MODIFY gt_output FROM gs_output  INDEX sy-tabix  TRANSPORTING box.
      CLEAR : gs_output.
    ENDIF .
  ENDLOOP .

  CASE sy-ucomm.
    WHEN 'EXIT'.
      LEAVE TO SCREEN 0.
    WHEN 'PRINT'.
      MESSAGE '触发打印按钮' TYPE 'S'.
    WHEN OTHERS.
  ENDCASE.

ENDMODULE.

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

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

相关文章

Cy5.5-PEG2000-NHS; NHS-PEG-Cy5.5,活性荧光标记材料,可用于标记抗体多肽

CY5.5-PEG-NHS&#xff0c;CY5.5-聚乙二醇-活性酯 中文名称&#xff1a;CY5.5-聚乙二醇-活性酯 英文名称&#xff1a;CY5.5-PEG-NHS 性状&#xff1a;粉末或固体&#xff0c;取决于分子量 溶剂&#xff1a;溶于水和大部分常规有机溶剂 分子量&#xff1a;1k、2k、3.4k、5k…

YouCompleteMe(YCM)安装

vim在各个linux版本中是个比较好编辑器&#xff0c;反正nano我是用不惯。但这个ycm的安装也是不断的在变&#xff0c;现在的安装比之前要简单的多&#xff0c;基本个几命令就搞定了&#xff0c;而且 也不用关心系统里有没有vim,ycm已经可以自动安装。具体安装步骤如下&#xff…

第一届6G智能无线通信系统大赛分享会暨颁奖典礼顺利举办

5月17日&#xff0c;第一届6G智能无线通信系统大赛分享交流会暨颁奖典礼在上海顺利举行&#xff0c;宣告大赛圆满收官。 颁奖典礼现场合影 本次大赛在6G研究的关键发展阶段适时提出&#xff0c;旨在向社会各界推广6G愿景、先进技术和概念&#xff0c;广泛吸引全社会的优秀人才…

前端换肤,聊一聊主题切换那些事

一些网站通常会提供白天、夜间模式&#xff0c;以及自定义主题等等&#xff0c;这种主题切换也就是本文说的前端换肤。 这次案例用的是白天和夜间模式的切换&#xff0c;在做换肤之前&#xff0c;得先知道一件事情&#xff1a;css的变量定义&#xff0c;对变量定义不熟悉的同学…

DINO损失函数构造解析

损失函数 首先看下模型的输出结果&#xff1a; output_cls&#xff1a;torch.Size([2, 900, 3]) output_box&#xff1a;torch.Size([2, 900, 4]) 即设置batch-size2&#xff0c;900个预测框 真值信息如下&#xff1a;第一张图片内有4个真值框&#xff0c;第二张图片亦然 随后…

面试官:前端如果 100 个请求,你怎么用 Promise 去控制并发?

摘要&#xff1a; 时隔两年半&#xff0c;我&#xff0c;一个卑微的前端菜鸡&#xff0c;又来写面经了&#xff01;以为钱是程序员年轻奋斗的动力&#xff01;作为一个程序员&#xff0c;在一个地方慢慢成长后会产生一个能力小提升的一种傲娇&#xff01;希望你们一跳涨好几丈。…

【问题总结】不使用回滚,如何删除/剔除/回退 远程仓库的错误commit。

场景描述 某次使用IDEA操作GIT时&#xff0c;将一些【被忽略】的文件都提交到commit中&#xff0c;并且被push到远程仓库&#xff0c;甚至还被合并到了主分支中该怎么办&#xff1f; 解决思路 分享两种思路 删除/回退/剔除 掉远程错误的分支重新commit一次正确的分支 删除…

企业落地数字化转型,如何部署战略规划

当前环境下&#xff0c;各领域企业通过数字化相关的一切技术&#xff0c;以数据为基础、以用户为核心&#xff0c;创建一种新的&#xff0c;或对现有商业模式进行重塑就是数字化转型。这种数字化转型给企业带来的效果就像是一次重构&#xff0c;会对企业的业务流程、思维文化、…

降低 Spark 计算成本 50.18 %,使用 Kyligence 湖仓引擎构建云原生大数据底座,为计算提速 2x

2023 中国开源未来发展峰会于 5 月 13 日成功举办。在大会开源原生商业分论坛&#xff0c;Kyligence 解决方案架构高级总监张小龙发表《云原生大数据底座演进 》主题演讲&#xff0c;向与会嘉宾介绍了他对开源发展的见解&#xff0c;数据底座向云原生湖仓一体架构演进的趋势&am…

建立在Safe生态的—GameFi SocialFi双赛道项目No.1头号玩家

最近大家关注的重点在BRC-20和MEME项目&#xff0c;人们似乎更在意短期的投机回报。而在这之外&#xff0c;一个web3的游戏——No.1头号玩家却得到了大量的玩家支持。 据了解&#xff0c;No.1是一个GameFi & SocialFi的双赛道web3游戏&#xff0c;中文名称为头号玩家。它是…

系统分析师上午题,经典易错题目

CRC即循环冗余校验码(Cyclic Redundancy Check)是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。在CRC校验方法中,进行多项式除法(模2除法)运算后的余数为校验字段。第一个空的分析,系统读记录的时间为33/11=3ms,对第一种情况:…

计算机毕业论文选题推荐|软件工程|系列七

文章目录 导文题目导文 计算机毕业论文选题推荐|软件工程 (***语言)==使用其他任何编程语言 例如:基于(***语言)门窗账务管理系统的设计与实现 得到:基于JAVA门窗账务管理系统的设计与实现 基于vue门窗账务管理系统的设计与实现 等等 题目 基于(***语言)的家政服务系统…

Android 打开webView黑屏闪烁问题排查

______ NO.1 ______ 前言 最近在研发项目的时候&#xff0c;有个模块调用webView功能&#xff1b; 点击搜索框&#xff0c;进入webView页面&#xff0c;出现了黑色过渡页面&#xff0c;效果如下&#xff1a; ______ NO.2 ______ 排查问题 个人在排查此问题的时候&#xff0c;用…

Redis缓存双写一致性之更新策略

Redis缓存双写一致性之更新策略 一 面试题引入二 缓存双写一致性三 双写双检加锁策略四 数据库和缓存一致性的集中更新策略4.1 最终一致性4.2 可以关机的情况下4.3 不能关机的情况下&#xff0c;四种更新策略4.3.1 先更新数据库&#xff0c;再更新缓存4.3.2 先更新缓存&#xf…

【算法学习系列】03 - 由[1-5]等概率随机实现[2-10]等概率随机

文章目录 约定条件说明解决方案构造 0 1 发生器函数 f2()计算需要几个二进制位验证 2-10 等概率返回某个整数 总结 约定条件说明 假定 f() 是一个函数&#xff0c;保证 [1, 5] 范围内等概率返回一个整数实现 2-10 等概率随机不能使用 Math.random() 函数&#xff0c;只能使用函…

栈与队列的性质互换

本期内容&#xff1a;栈&#xff0c;队列的定义性质&#xff0c;性质转换 栈&#xff0c;队列的定义性质&#xff0c;性质转换 认识栈实现栈 队列实现 性质转换 认识栈 栈&#xff08;stack&#xff09;又名堆栈&#xff0c;它是一种运算受限的线性表。限定仅在表尾进行插入和…

【渗透测试】web日志、linux命令、常用知识

文章目录 web日志分析基础知识1. 编码2. 解码工具3. 数据提交方式4. 常见脚本语言5. 日志还原 分析日志1. 分析日志的目的2. 攻击出现的位置3. 攻击常见的语句4. 攻击常见的特点5. 攻击日志分析流程 相关linux命令常用命令系统状态检测命令工作目录切换命令文本文件编辑命令文件…

BlueZ自动连接蓝牙耳机

问题&#xff1a;调好蓝牙之后&#xff0c;出现了一个客户问题&#xff0c;第一次连接好之后&#xff0c;开关机后没法自动连了。 解决方法&#xff1a; 针对这个情况&#xff0c;实际定位一下问题原因&#xff0c;原来是蓝牙耳机每次连时&#xff0c;都要求授权服务: Author…

sqlmap

1、Sqlmap简介&#xff1a; Sqlmap是一个开源的渗透测试工具&#xff0c;可以用来自动化的检测&#xff0c;利用SQL注入漏洞&#xff0c;获取数据库服务器的权限。它具有功能强大的检测引擎&#xff0c;针对各种不同类型数据库的渗透测试的功能选项&#xff0c;包括获取数据库…

Maven安装和配置(详细版)

Maven安装和配置 Maven安装1、安装链接&#xff1a;2、配置环境变量&#xff1a; Maven配置1、修改Maven仓库下载镜像及修改仓库位置&#xff1a;2、在Idea上配置Maven&#xff1a; 测试Maven安装能否安装jar包 Maven安装 1、安装链接&#xff1a; Maven – Download Apache …