前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >ABAP ALV之同一屏幕显示两个关联性表单

ABAP ALV之同一屏幕显示两个关联性表单

作者头像
百里丶落云
发布于 2022-12-02 06:54:49
发布于 2022-12-02 06:54:49
86400
代码可运行
举报
文章被收录于专栏:享~方法享~方法
运行总次数:0
代码可运行

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第7天,点击查看活动详情

HELLO ,这里是百里,一个学习中的ABAPER ,在SAP系统ALV报表展示中,经常会遇到下钻数据到新的关联报表或者标准界面展示内容.前篇讲述了下钻数据通过窗口展示关联ALV报表数据,此项内容存在优点也存在缺点,优点就是配置简单,展示内容不影响元数据内容可以横项对比展示. 缺点,就是无法过分定制化配置,如编辑,按钮,usercomed等数据内容都不可以使用.此项讲的内容就为在数据互动下钻基础上展示关联ALV,同时可以完全跟ALV内容一致,可以增加按钮及用户事件 .

下钻简介

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

技术介绍

本篇内容在ALV基础上,通过数据下钻关联字段内容展示新ALV数据.关键单就是刷新界面函数及用户事件操作.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"ALV展示报表数据配置"
DATA :gt_event TYPE slis_t_event,  
        gs_event TYPE slis_alv_event.  
  
  
  
 " MOVE 'DATA_CHANGED'     TO gs_event-name.  
"  MOVE 'ALV_DATA_CHANGED' TO gs_event-form.  
"  APPEND gs_event TO gt_event.  
  
  
  "CALL METHOD gs_grid->check_changed_data.  
  gs_glay-edt_cll_cb = abap_true.     " 选中复选款,立刻触发data changed 事件  
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'  
    EXPORTING  
      i_callback_program       = sy-repid           "回调程序  
      i_callback_pf_status_set = 'SET_PF_STATUS'  
      i_callback_user_command  = 'USER_COMMAND'  
      i_grid_settings          = gs_glay  
      is_layout_lvc            = wa_layout  
   "  i_grid_settings          = gs_grid "新  
      it_fieldcat_lvc          = gt_fieldcat        "需要显示的内表的列  
      i_save                   = 'A'    "这个需要问下  
      it_events                = gt_event  
    TABLES  
      t_outtab                 = gt_Data          "需要显示的数据  
    EXCEPTIONS  
      program_error            = 1  
      OTHERS                   = 2.  
  IF sy-subrc <> 0.  
  ENDIF.
  
  "用户事件子例程,通过获取单机行内容,将数据存入到内表数据,在进行操作"
  
  
  FORM user_command  USING r_ucomm LIKE sy-ucomm  
                         rs_selfield TYPE slis_selfield.  
  CASE r_ucomm.  
*  
  
  
  
    WHEN '&amp;IC1'.  
      CASE rs_selfield-fieldname.  
        WHEN   'ZROWTT' or 'DMBTR1' .  
  
          CHECK rs_selfield-value IS NOT INITIAL.  
          READ TABLE gt_data INDEX rs_selfield-tabindex INTO DATA(l_temp).  "获取单击行  
  
  IF  l_temp-zcashcode is  NOT  INITIAL  .  
      PERFORM show_item USING l_temp-zcashcode .  
     ELSE .  
       MESSAGE '该行没有科目明细' TYPE 'I' .  
  
  ENDIF.  
        WHEN  'DMBTR2' .  
      CHECK rs_selfield-value IS NOT INITIAL.  
          READ TABLE gt_data INDEX rs_selfield-tabindex INTO DATA(l_temp2).  "获取单击行  
  
  IF  l_temp2-zcashcode is  NOT  INITIAL  .  
      PERFORM show_item_sum USING l_temp2-zcashcode .  
     ELSE .  
       MESSAGE '该行没有科目明细' TYPE 'I' .  
ENDIF .  
  endcase .

实例展示

本项实例是财务相关数据内容,ALV一内容展示科目汇总数据,下钻数据内容对应的科目明细内容,再次下钻内容为对应的行明细内容的详细表单 .

数据定义

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
TABLES : acdoca ,ZSSD001 .  
  
  
  
"数据准备  
"跳转data  
TYPES : BEGIN OF ty_item_data ,  
  
          rbukrs    TYPE  bukrs , "公司代码  
          gjahr     TYPE  gjahr  , "会计年度  
          poper     TYPE poper , "会计期间  
          txt50     TYPE txt50_skat  , "科目名称  
          racct     TYPE  racct ,   "会计科目  
          belnr     TYPE  belnr_d,  "凭证编号  
          bktxt     TYPE bktxt  , "凭证抬头文本  
          zcashcode TYPE  zcashcode , " 现金流量表项  
          zcstxt    TYPE zcstxt , "现金流量表项描述  
          rtcur     TYPE fins_currt,  "货币  
          drcrk     TYPE  shkzg , "借贷标识  
          HSL       TYPE  fins_vtcur12 , "余额  
  
          BUDAT   TYPE acdoca-BUDAT ,  
          BLDAT   TYPE acdoca-BLDAT ,  
          BLART   TYPE acdoca-BLART  ,  
          USNAM   TYPE acdoca-USNAM ,  
  
        END OF ty_item_data .  
  
TYPES : BEGIN OF ty_DMBTR1 ,  
  ZCASHCODE  type  ZCASHCODE,  
  FISCYEARPER  TYPE  acdoca-FISCYEARPER,  
  
  gjahr TYPE  gjahr ,  
  HSL TYPE  FINS_VTCUR12 ,  
  
 END OF  ty_DMBTR1 .  
  
DATA : GT_item_Data TYPE TABLE of ty_item_data  .  
  
  
DATA  :  gs_dmbtr1  TYPE  ty_DMBTR1 .  
DATA  :  gt_dmbtr1  TYPE  TABLE of  ty_DMBTR1 .

获取数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
data : l_year_low TYPE  gjahr .  
data : l_year_high TYPE  gjahr .  
  
l_year_high =  p_FISC-high+0(4)  .  
l_year_low =  p_FISC-low+0(4)  .  
  
  select  ZCASHCODE,  FISCYEARPER  
    ,gjahr   , SUM( HSL )  as HSL from   ACDOCA  
     where  
    RLDNR =  '0L'    and RACCT >='1001000000'  and  RACCT <='1012999999'  
  
    and   gjahr >= @l_year_low and gjahr <=  @l_year_high  
   " and  gjahr in @p_gjahr     " and  SUBSTRING( BUDAT , 1, 6 ) in    @p_FISC    "  
  "  and FISCYEARPER in  @p_FISC  
  
    and RBUKRS = @s_RBUKRS  
  GROUP BY   ZCASHCODE,FISCYEARPER ,gjahr  
   into TABLE @gt_DMBTR1  .  
SORT  gt_DMBTR1  by ZCASHCODE FISCYEARPER gjahr   .

一层数据展示

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
FORM call_alv_func .  
 DATA :gt_event TYPE slis_t_event,  
        gs_event TYPE slis_alv_event.  
  
  
  
 " MOVE 'DATA_CHANGED'     TO gs_event-name.  
"  MOVE 'ALV_DATA_CHANGED' TO gs_event-form.  
"  APPEND gs_event TO gt_event.  
  
  
  "CALL METHOD gs_grid->check_changed_data.  
  gs_glay-edt_cll_cb = abap_true.     " 选中复选款,立刻触发data changed 事件  
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'  
    EXPORTING  
      i_callback_program       = sy-repid           "回调程序  
      i_callback_pf_status_set = 'SET_PF_STATUS'  
      i_callback_user_command  = 'USER_COMMAND'  
      i_grid_settings          = gs_glay  
      is_layout_lvc            = wa_layout  
   "  i_grid_settings          = gs_grid "新  
      it_fieldcat_lvc          = gt_fieldcat        "需要显示的内表的列  
      i_save                   = 'A'    "这个需要问下  
      it_events                = gt_event  
    TABLES  
      t_outtab                 = gt_Data          "需要显示的数据  
    EXCEPTIONS  
      program_error            = 1  
      OTHERS                   = 2.  
  IF sy-subrc <> 0.  
  ENDIF.  
ENDFORM.

二层数据展示

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
add_col 'RBUKRS'     space space '公司代码'          space space space space space.  
  add_col 'GJAHR'     space space '会计年度'          space space space space space.  
  add_col 'POPER'     space space '会计期间'         space space space  space  space.  
    add_col 'BUDAT'     space space '过账日期'          space space space space space.  
  add_col 'BLDAT'     space space '凭证日期'          space space space space space.  
   add_col 'USNAM'     space space '用户名'          space space space space space.  
  add_col 'BLART'     space space '凭证类型'          space space space space space.  
  
     add_col 'BELNR'     space space '凭证编号'         space space space space space.  
   add_col 'RACCT'     space space '会计科目'           space space space space space.  
  add_col 'TXT50'     space space '科目名称'         space space space space space.  
  
  
  
  add_col 'BKTXT'     space space '凭证抬头文本'          space space space  space space.  
 add_col 'DRCRK'     space space '借贷标识'           space space space space space.  
    add_col 'RTCUR'     space space '货币'         space space space space space.  
  
  
  
    add_col 'HSL'     space space '余额'          space space space space space.  
  add_col 'ZCASHCODE'     space space '现金流量表项'         space space space space space.  
  add_col 'ZCSTXT'     space space '现金流量表项描述'         space space space space space.  
  
  
  
  
  g_layout-cwidth_opt = 'X'.  
  
  gs_glay-edt_cll_cb = abap_true.     " 选中复选款,立刻触发data changed 事件    " 选中复选款,立刻触发data changed 事件  
  
  data : ls_msg  TYPE char20  .  
  
  ls_msg =  '现金流量表累计明细'   . "&amp;&amp; zcashcode .  
   "MOVE-CORRESPONDING   lt_zcashcode  to  GT_item_Data .  
  
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'  
    EXPORTING  
      i_callback_program = sy-repid  
*     i_callback_pf_status_set = 'USER_STATUS'  
   i_callback_user_command  = 'USER_COMMAND1'  
*     i_grid_settings    = gs_glay  
      is_layout_lvc      = g_layout  
      it_fieldcat_lvc    = lt_fieldcat_item  
      i_default          = 'X'  
      I_GRID_TITLE  =    '现金流量表累计明细'  
      i_save             =   ''  
*     it_events          = gt_event  
    TABLES  
      t_outtab           = GT_item_Data  
    EXCEPTIONS  
      program_error      = 1  
      OTHERS             = 2.  
  IF sy-subrc <> 0.  
* Implement suitable error handling here  
  ENDIF.  
  
"REFRESH  lt_zcashcode .  
CLEAR  ls_msg .  
ENDFORM.


FORM user_command1  USING r_ucomm LIKE sy-ucomm  
                         rs_selfield TYPE slis_selfield.  
  CASE r_ucomm.  
*  
  
    WHEN '&amp;IC1'.  
      CASE rs_selfield-fieldname.  
        WHEN   'BELNR' .  
  
  
          CHECK rs_selfield-value IS NOT INITIAL.  
              READ TABLE GT_item_Data INDEX rs_selfield-tabindex INTO DATA(l_temp2).  "获取单击行  
          SET PARAMETER ID 'BLN' FIELD rs_selfield-value.  
          SET PARAMETER ID 'BUK' FIELD l_temp2-RBUKRS.  
          SET PARAMETER ID 'GJR' FIELD l_temp2-GJAHR.  
          CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.  
  
  
          ENDCASE .  
    ENDCASE .  
 endform .

结果

一级界面

下钻二级界面

再次下钻三级界面

技术总结

本篇文章讲解了数据在同一界面内多次下钻数据及二次下钻内容可附带用户操作及usercomd,hot等技术操作.通过学习本篇文章可以熟练应对工作中的多次下钻的业务需求.可以实现客户工作中的大部分需求 .

书卷多情似故人,晨昏忧乐每相亲.这里是百里一个努力的学习者.努力学习好好记录,点滴进步,就是成功.

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-11-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Hexo搭建个人博客(三)—— Hexo博客的美化
通过前两节的学习,我们已经搭建好自己的博客,就像盖房子一样要对内部进行装修,也就是对博客进行美化。 ---- 安装Hexo博客主题 Hexo博客可以安装不同的主题,这里我们只说最火的Next主题。首先我们在自己电脑里的博客文件夹内(即username.github.io文件夹内)右键选择Git Bash here,在终端窗口内输入以下代码: $ git clone https://github.com/iissnan/hexo-theme-next themes/next 稍等片刻,安装完成后你的them
木制robot
2018/04/13
3.4K0
Hexo搭建个人博客(三)—— Hexo博客的美化
Hexo-完全免费全平台搭建个人博客(2)-域名主题设置
2017-03-1011:01:58 发表评论 913℃热度 Hexo-完全免费全平台搭建个人博客(1)-整体搭建 上一篇文章把 Hexo 博客整体搭建一遍了,能通过  xxxxx.github.io
timhbw
2018/05/03
1.5K0
Hexo-完全免费全平台搭建个人博客(2)-域名主题设置
使用Gitee+Hexo搭建个人博客
目前国内访问GitHub速度慢,还可能被墙,所以Gitee来构建个人博客。Gitee类似国内版的GitHub,访问速度有保证。
公号:咻咻ing
2019/08/06
8310
使用Gitee+Hexo搭建个人博客
hexo 搭建博客
通常我们可以使用github pages 来搭建静态博客,建立一个username.github.io的项目就可以了,如果要将其他项目也作为页面展示,可以将代码推送到gh-pages分支。
苏生不惑
2019/08/14
1.3K0
Hexo博客搭建(二)
日更前语3. 环境搭建4. 初始化Hexo:5. 本地访问6. 个性化配置7. 引用日更结语
efonfighting
2019/09/17
4340
使用hexo在GitHub上搭建个人博客
Hexo是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页。
没有故事的陈师傅
2019/07/27
6600
建站神器:Hexo+Kaze+Gitee Pages 搭建静态博客网站
建网站本身是一个很大的工程,涉及前端页面的搭建,网站数据的存储,还要购置服务器资源,甚至是后期的维护,过程相当繁琐。
蜗牛互联网
2021/02/26
1.4K0
建站神器:Hexo+Kaze+Gitee Pages 搭建静态博客网站
Hexo的安装及重置恢复
Hexo博客已经使用挺长时间了,其出色的静态网页渲染能力深得我的喜欢,然鹅也是因为 Hexo 基本完全依赖渲染模板的原因,如果在整博客的过程中引入了错误的代码段或者和已有代码发生了冲突,会直接影响博客的正常渲染,对于Hexo来说,不能渲染就等于完全废了;针对出现的错误,有时候我们还不一定能找得出来。经常是改一处错两处,那么到了迫不得已的时候,就有必要对博客进行重置了。
ZONGLYN
2019/08/08
2.6K0
如何使用hexo与github搭建自己的博客(2)
hexo的配置文件是_config.yml,整个hexo项目里面有两个这样的文件,一个是在根目录下面,另一个是在文件夹theme里面,根目录的主要是对整个项目的配置,而theme里面的则主要是对你当前所应用的主题的一个设置。
踏浪
2019/07/31
4970
如何在Ubuntu 14.04上使用Hexo创建博客
Hexo是一个基于Node.js的静态博客框架。使用Hexo,您可以以博客文章的形式发布Markdown文档。博客帖子和内容被处理并转换为HTML / CSS,它来自默认或自定义模板主题文件(很像其他静态博客生成器,如Jekyll和Ghost)。Hexo中的所有软件都是模块化的,因此您可以准确安装和设置所需的软件。
木纸鸢
2018/09/25
1.3K0
[还不会搭建博客吗?]centos7系统部署hexo博客新手入门-进阶,看这一篇就够了
前者适合新手,后者适合老手(方便大家查找,从而过滤掉某些步骤,节约时间成本) 所以大家按需查看哟。
秋意零
2022/04/16
1.1K0
[还不会搭建博客吗?]centos7系统部署hexo博客新手入门-进阶,看这一篇就够了
使用Hexo+Next主题搭建Blog
之前试过了很多Hexo主题,但是都不太合胃口,就又又又转回了Next这种简单简约的主题。我的博客搭建在GitHub上,使用Vercel加速,完全白嫖真的快乐。
GOOPHER
2022/03/30
7900
使用Hexo+Next主题搭建Blog
Hexo博客搭建步骤
下载地址:https://nodejs.org/zh-cn/ ,选长期支持版本进行下载安装。
砒霜拌辣椒
2023/08/23
1890
Hexo博客搭建步骤
搭建一个Hexo博客
0x00 背景 一直想搭建一个自己的博客,之前在Aliyun虚拟主机上搭了一个WordPress+MySQL的个人博客。后来维护成本太大,主机和域名都没有续费被回收了。最近再看别人在写,自己也想搞一个试试水。研究了几天,发现Hexo还真不错,所以就选了这个。 目前,博客搭建在coding.net上,使用万网的域名。 Hexo介绍 Hexo是一款基于Node.js的博客框架,可以将Markdown格式的文本渲染为HTML代码。所以,博客基本就是纯静态,维护相对方便。但是缺点也很明显——经常换编写环境使用不便,
WeaponX
2018/05/04
2.6K0
搭建一个Hexo博客
Hexo搭建博客 - nexmoe主题
因为自己对Volantis主题设置过于复杂,反而丢弃了博客的本意,就是多记录遇到的问题。所以改为用简单的noxmoe.
繁华是客
2023/03/03
5500
Linux下使用 github+hexo 搭建个人博客01-hexo搭建
原因有好几个吧,归类如下: 1、自己搭建博客系统很有成就感,可以自己选定页面风格和页面排版;
踏歌行
2020/10/15
2.4K0
Linux下使用 github+hexo 搭建个人博客01-hexo搭建
WebMaster 123 - 如何简单地搭建 Hexo 博客
因为惶心的 Wordpress 博客数据库崩掉了,但是有有些东西实在很想写下来,于是就搭建了个临时博客。然而不能重蹈覆辙,所以就选择了不依赖数据库,文章全部以 Markdown 形式存储并且可以依赖 Git 的博客系统 - Hexo。
惶心
2019/01/27
9560
【JS】基于hexo搭建个人博客并添加域名
快速搭建博客的框架有Hexo,Jekyll,Wordpress等等。下面就用Hexo来实现一下。
DevFrank
2024/07/24
2020
【JS】基于hexo搭建个人博客并添加域名
Mac/Linux/Windows如何从零开始搭建Hexo静态博客并部署到远程平台
本文同步博客图文( ´▽`):https://www.mintimate.cn/2020/03/19/hexo
Mintimate
2021/01/29
2.3K0
Mac/Linux/Windows如何从零开始搭建Hexo静态博客并部署到远程平台
【玩转腾讯云】使用Hexo在Cloudbase上搭建自己的静态博客
Mintimate's Blog:https://www.mintimate.cn
Mintimate
2021/04/13
3K0
【玩转腾讯云】使用Hexo在Cloudbase上搭建自己的静态博客
推荐阅读
相关推荐
Hexo搭建个人博客(三)—— Hexo博客的美化
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档