HELLO, 这里是百里一个学习中的ABAPER,这里记录工作学习中遇到的bug,知识内容等内容.今天讲的是在工作中经常会使用的数据下钻,通过跳出小界面的方式展示关联数据.今天结合工作经验这里做下技术总结.

下钻简介

在ALV报表展示中.会出现关键字段下钻,展示某个界面或者系统自带界面.此时需要给增加 user_command 事件. 下钻内容包括,展示具体某个界面,系统界面,与关键字对应的ALV界面.

技术介绍

下钻弹窗数据展示的关键技术为调用函数 cl_salv_table=>factory 展示一个新的ALV容器数据. 首先先跟本身第一层开发ALV方式一样, 定义默认基础数据集,权限检查,定义ALV layout ,fieldcat 等相关属性内容. 同时设定对应的staus 及usercommd 方便操作用户事件.设定第一层ALV展示数据的基础上,设定hot字段,在按照关键字段关联对应下一级ALV展示数据.

TRY.
cl_salv_table=>factory(
IMPORTING r_salv_table = go_alv "导出ALV的容器对象
CHANGING t_table = lt_item[] ). "内容表
CATCH cx_root INTO cxroot.
excmsg = cxroot->get_text( ).
MESSAGE e000(oo) WITH excmsg.
ENDTRY.
go_funlst = go_alv->get_functions( ).
go_funlst->set_all( 'X' ).

实例展示

此例子第一层为VBAK 表 VBELN 字段,第二层内容为对应VBELN 单号对应的 料号数据及料号长描述例子.

创建数据集

设定ALV 定义相关结构,工作区内表.同时定义必要字段如ALV展示相关变量.usercomed 变量.格式及样式变量字段.

TYPE-POOLS: slis.TYPE-POOLS: kcde.*&---------------------------------------------------------------------*
*&      TABLES*&---------------------------------------------------------------------*
TABLES: vbap,vbak.*----------------------------------------------------------------------*
* GLOBAL INTERNAL TABLES DECLARATION*----------------------------------------------------------------------*
DATA: gt_file TYPE filetable.*----------------------------------------------------------------------*
* GLOBAL VARIANTS DECLARATION*----------------------------------------------------------------------*
DATA: g_repid TYPE sy-repid.DATA: gt_field TYPE slis_t_fieldcat_alv.*定义读入EXCEL的内表TYPES : BEGIN OF typ_alv ,          vbeln TYPE vbak-vbeln,          erdat TYPE vbak-erdat, "创建日期          vkorg TYPE vbak-vkorg, "销售组织          vkbur TYPE vbak-vkbur, "销售办事处          ernam TYPE vbak-ernam, "创建人          sel   TYPE c , "    复选框        END OF typ_alv .DATA : gs_alv   TYPE typ_alv,       gt_print TYPE TABLE OF typ_alv,       gt_alv   TYPE TABLE OF typ_alv.* ALV 用DATA:  gs_layout   TYPE lvc_s_layo,  gv_repid    TYPE repid,  gt_fieldcat TYPE lvc_t_fcat,  ls_fieldcat TYPE lvc_s_fcat.DATA: g_grid TYPE REF TO cl_gui_alv_grid.*创建字段宏定义DEFINE add_field.  ls_fieldcat-fieldname = '&1' .  "字段名称  ls_fieldcat-ref_table = &2. "关联表格  ls_fieldcat-ref_field = &3."参考字段  ls_fieldcat-coltext = &4. "描述文本  APPEND ls_fieldcat TO gt_fieldcat.  CLEAR ls_fieldcat.END-OF-DEFINITION.

设定选择屏幕

筛选关键字段,where 条件.

*--------选择条件
SELECTION-SCREEN BEGIN OF BLOCK bl01 WITH FRAME TITLE TEXT-001.  SELECT-OPTIONS:                    s_vkorg  FOR     vbak-vkorg OBLIGATORY,"销售组织                    s_vkbur  FOR     vbak-vkbur ,"销售办公室                    s_ernam  FOR     vbak-ernam."创建人SELECTION-SCREEN END OF BLOCK bl01.

获取数据内容

INITIALIZATION .AT SELECTION-SCREEN OUTPUT .*----------------------------------------------------------------------*
* EVENT OCCURS AFTER THE SELECTION SCREEN HAS BEEN PROCESSED*----------------------------------------------------------------------*
START-OF-SELECTION.  PERFORM frm_auth_check.  "权限检查  PERFORM frm_getdata .    "获取数据  --GETTING DATA PERFORM frm_display_data.  "展示ALVEND-OF-SELECTION.*&------------------FORM frm_getdata .  SELECT vbak~vbeln,         vbak~erdat,"创建日期         vbak~vkorg,"销售组织         vbak~vkbur, "销售办事处         vbak~ernam    FROM vbak   WHERE vbak~vkorg IN @s_vkorg    AND  vbak~vkbur IN @s_vkbur    AND  vbak~ernam IN @s_ernam    INTO CORRESPONDING FIELDS OF TABLE @gt_alv.ENDFORM.

ALV展示内容

FORM frm_display_data .  DATA : lv_html_header TYPE slis_formname  .*定义输出模式  CLEAR:gs_layout,gt_fieldcat.  gs_layout-cwidth_opt         = 'X'.  gs_layout-zebra              = 'X'.  gs_layout-box_fname              = 'SEL'.  gv_repid = sy-repid.  PERFORM frm_set_fieldcat.  .*  TRY .  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'    EXPORTING      i_callback_program       = gv_repid      i_callback_user_command  = 'FRM_USER_COMMAND'      i_callback_pf_status_set = 'FRM_PF_STATUS'      is_layout_lvc            = gs_layout      it_fieldcat_lvc          = gt_fieldcat      i_save                   = 'A'    TABLES      t_outtab                 = gt_alv    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.
FORM frm_set_fieldcat .  add_field:          vbeln   'VBAK'   'VBELN' '销售订单',          erdat   'VBAK'   'ERDAT' '创建日期',          vkorg   'VBAK'   'VKORG' '销售组织',          vkbur   'VBAK'   'VKBUR' '销售办事处',          ernam   'VBAK'   'ERNAM' '创建人'.ENDFORM.FORM frm_pf_status USING extab TYPE slis_t_extab.  DATA: fcode TYPE TABLE OF sy-ucomm.  CLEAR:fcode[].  SET PF-STATUS 'STANDARD' EXCLUDING fcode[] .ENDFORM.*&---------------------------------------------------------------------**&      FORM  FRM_USER_COMMAND*&---------------------------------------------------------------------**       自定义用户动作*----------------------------------------------------------------------**  -->  P1        TEXT*  <--  P2        TEXT*----------------------------------------------------------------------**自定义用户动作FORM frm_user_command USING p_ucomm TYPE sy-ucomm rs_selfield TYPE slis_selfield.  DATA : l_ucomm TYPE sy-ucomm  .  IF g_grid IS INITIAL.    CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'      IMPORTING        e_grid = g_grid.  ENDIF.  "失去焦点触发更新内表  CALL METHOD g_grid->register_edit_event    EXPORTING      i_event_id = cl_gui_alv_grid=>mc_evt_modified.  CALL METHOD g_grid->check_changed_data.  rs_selfield-refresh     = 'X'.  rs_selfield-col_stable  = 'X'.  rs_selfield-row_stable  = 'X'.  l_ucomm = p_ucomm .  CLEAR p_ucomm .  DATA : l_uname TYPE sy-uname,         l_datum TYPE sy-datum,         l_uzeit TYPE sy-uzeit.  CASE l_ucomm.    WHEN '&IC1'. "双击      READ TABLE gt_alv INDEX rs_selfield-tabindex INTO DATA(wa_sel_temp).  "双击行      IF sy-subrc = 0 .*        SET PARAMETER ID 'VL' FIELD WA_SEL_TEMP-VBELN .*        CALL TRANSACTION 'VL03N' AND SKIP FIRST SCREEN ."SKIP FIRST SCREEN 忽略SELECTION SCREEN        PERFORM displat_item USING wa_sel_temp-vbeln.      ENDIF.      CLEAR:wa_sel_temp.    WHEN OTHERS.  ENDCASE.ENDFORM.*&---------------------------------------------------------------------**&---------------------------------------------------------------------**&---------------------------------------------------------------------**& FORM DISPLAT_ITEM*&---------------------------------------------------------------------**& TEXT*&---------------------------------------------------------------------**& -->  P1        TEXT*& <--  P2        TEXT*&---------------------------------------------------------------------*FORM displat_item  USING p_vbeln.  DATA: go_alv    TYPE REF TO cl_salv_table,        go_funlst TYPE REF TO cl_salv_functions_list.  DATA: cxroot TYPE REF TO cx_root,        excmsg TYPE c.  CLEAR:go_alv,go_funlst.  SELECT vbap~vbeln,         vbap~posnr,         vbap~matnr,         vbap~ZMENG,         makt~maktx    FROM vbap    LEFT JOIN makt ON makt~matnr EQ vbap~matnr AND makt~spras = '1'   WHERE vbeln = @p_vbeln    INTO TABLE @DATA(lt_item).  IF sy-subrc = 0.    TRY.        cl_salv_table=>factory(        IMPORTING        r_salv_table = go_alv   "导出ALV的容器对象        CHANGING        t_table = lt_item[] ).  "内容表      CATCH cx_root INTO cxroot.        excmsg = cxroot->get_text( ).        MESSAGE e000(oo) WITH excmsg.    ENDTRY.    go_funlst = go_alv->get_functions( ).    go_funlst->set_all( 'X' ).    "重新设置列名称    go_alv->get_columns( )->get_column( 'MAKTX' )->set_long_text( 'TES删除' )."    IF go_alv IS BOUND."设置窗口大小与位置-      go_alv->set_screen_popup(      start_column = 30      end_column = 160      start_line = 5      end_line = 20 ).      go_alv->display( ).    ENDIF.  ENDIF.ENDFORM.

结果展示

如图展示内容结果,一级对应的字段为,VBAK 表中的 销售订单,创建日期,销售组织,销售办事处,创建人等字段, 通过usercomed ,双击数据VBELN下钻到下一层ALV数据. 下层ALV数据展示内容为 销售订单凭证,行号,料号,目标数量,同时可以使用 go_alv->get_columns( )->get_column( 'MAKTX' )->set_long_text( 'TES删除' )." 给对应的字段附加更换列名.

技术总结

ALV数据下钻是在工作中经常使用的必要内容.能够熟练使用ALV下钻并按照关键字展示下级相关ALV数据是一个ABAPER 必会内容. 此文详细讲解了必要技术.希望能够帮助大家 .

贵有恒何必三更起五更睡,最无益只怕一日曝十日寒。 这里是百里,一个年近30的中年程序员.希望能够帮到您.

最后

最近找到一个VUE的文档,它将VUE的各个知识点进行了总结,整理成了《Vue 开发必须知道的36个技巧》。内容比较详实,对各个知识点的讲解也十分到位。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

ABAP 之ALV展示及下钻弹窗数据页面相关推荐

  1. 【SAP】ABAP开发——ALV展示后字段的下划线连接

    在ALV展示后,在很多情况下需要根据字段进一步展开内容,如点击金额展开科目明细,点击采购订单号进入该采购订单,根据销售订单号进入该销售订单等...... 点击字段的下划线进入下一步,在USER_COM ...

  2. ABAP ALV检查单元格更新数据

    ABAP ALV检查单元格更新数据 将ALV单元格设置为可输入后,通常我们需要对单元格输入的值做一个检查,一般来说用循环内表的方法可以实现上述操作,不过如果ALV中有大量数据,而我们只更新了少量的单元 ...

  3. SAP ABAP EXCEL 下载模板并导入(数据批导)

    SAP ABAP EXCEL 下载模板并导入(数据批导) 文章目录 SAP ABAP EXCEL 下载模板并导入(数据批导) 前言 上传 EXCEL 模板 下载 EXCEL 模板 定义屏幕 初始化设置 ...

  4. ABAP - OO ALV基本实现步骤

    ABAP - OO ALV基本实现步骤 新建程序 定义屏幕 PBO实现 PAI实现 完整代码 新建程序 使用T-code:SE38 新建Report: ZOOALV 为新建的Report分配一个pac ...

  5. SAP ABAP 创建 ALV 报表详细教程含示例

    1.事务代码输入 SE80 输入程序名,点击创建.PS:命名要以 Z 开头. 2.填写标题,类型选择 "1 可执行程序".点击保存. 3.在弹出的界面中,包填写对应的开发包(按照自 ...

  6. SAP FBL1H/FBL3H/FBL5H/FAGLL03H等事务代码远程调用时ALV展示与标准不同时布局问题增强修改 (SE38:FAGL_LINE_ITEM_BROWSER_P03)

    原文链接:https://blog.csdn.net/Qunending/article/details/127443449 已FBL5H客户行项目浏览器为例子,正常标准事务代码进报表展示的alv格式 ...

  7. SAP-ABAP-FBL1H/FBL3H/FBL5H/FAGLL03H等事务代码远程调用时ALV展示与标准不同时布局问题增强修改

    已FBL5H客户行项目浏览器为例子,正常标准事务代码进报表展示的alv格式如下图,正常ALV展示,有默认布局可以选择. 但是如果是程序submit调用这个程序,跳过选择屏幕直接展示报表了话展示的就是另 ...

  8. 海量大数据大屏分析展示一步到位:DataWorks数据服务对接DataV最佳实践

    概述 数据服务(https://ds-cn-shanghai.data.a... 是DataWorks产品家族的一员,提供了快速将数据表生成API的能力,通过可视化的向导,一分钟"零代码&q ...

  9. 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...

    概述 数据服务(https://ds-cn-shanghai.data.a... 是DataWorks产品家族的一员,提供了快速将数据表生成API的能力,通过可视化的向导,一分钟"零代码&q ...

最新文章

  1. fastText实现文本分类
  2. PyCharm 2018 for mac 数据库实战:链接SQLite、建表、添加、查询数据
  3. 题目1254:N皇后问题(DFS)
  4. JSR 303 – Bean Validation 介绍及最佳实践
  5. apollo集群部署_ribbon+apollo实现灰度发布
  6. scheme 学习:pair 和 list
  7. 【车牌识别】+【模板匹配】基于智能交通的车牌识别系统
  8. tensorflow实现余弦cosine相似度
  9. 如何测网络稳定性_讲座|复杂网络上的非线性动力学:网络结构如何决定系统稳定性?...
  10. 1.转子动力学——引言
  11. 百战程序员-人工智能从入门到开发教程(60万下载量)
  12. Python数据处理Tips数据预处理操作方法汇总
  13. CE游戏修改器制作游戏修改器教程
  14. 阿里云实践训练营第七天——Class6 NAS快速搭建个人网盘
  15. hbase 问题之 File system needs to be upgraded. You have version null and I want ver
  16. 献给那些没有自信的人。
  17. concat特征融合_小目标检测文献相关(特征融合)
  18. coco数据集大小分类_2019-08-15 COCO数据集
  19. 用python创建你自己的命令行地址簿程序
  20. SPSSAU综合评价方法汇总

热门文章

  1. HTTP CHUNKED
  2. 牛学长智能AI图片处理工具,轻松提高工作效率
  3. 商城倒计时(时分秒倒计时、分秒毫秒倒计时)
  4. Java自定义异常及统一处理,信息返回
  5. 51单片机的特殊寄存器
  6. 代码随想录第二天|977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II ,总结
  7. 一人之下ios扫码_一人之下ios
  8. 第二篇:个案管理师之执行篇-台湾最佳医院信息化及管理实践
  9. 2020年磺化工艺多少钱及磺化工艺实操考试视频
  10. 《advanced fpga designed》