动态内表

很多时候我们的alv报表列是动态的不确定,这样的话如果用平时那种办法肯定是不可行的。

最近有个需求刚好是alv动态的报表,所以现学现卖,总结经验一下:

有一般的列是固定的,还有一些列是动态的

必须要定义的语法如下

*存储动态字段
DATA: IT_STRUCTURE TYPE LVC_T_FCAT,                 "存储动态内表列的内表,其中的每一行代表动态内表的一列
         WA_STRUCTURE TYPE LVC_S_FCAT.                 "lvc_t_fact的工作区

取出数据存储在内表IT_DATA中,其中内表IT_DATA中的部分值是动态内表的描述和字段。

这边循环内表IT_DATA把值赋给IT_STRUCTURE 

   loop  IT_DATA

   TRANSLATE IT_DATA-ATNAM TO UPPER CASE.            把字段转换为大写
    WA_STRUCTURE-FIELDNAME IT_DATA-ATNAM.         "动态字段
    WA_STRUCTURE-SCRTEXT_L IT_DATA-ATBEZ.          "描述
    WA_STRUCTURE-SCRTEXT_M IT_DATA-ATBEZ.         "描述
    WA_STRUCTURE-SCRTEXT_S IT_DATA-ATBEZ.          "描述

       WA_STRUCTURE-INTLEN    60  .                             "字段长度
       WA_STRUCTURE-OUTPUTLEN 30 .                          "字段长度

    APPEND WA_STRUCTURE TO IT_STRUCTURE.
    CLEAR IT_DATA.

  endloop.

************************************下面是指定 组件COL_POS,类似于alv下面的输出列位置

 CLEAR WA_STRUCTURE.
  LOOP AT IT_STRUCTURE INTO WA_STRUCTURE.
    I_COL I_COL + 1.
    WA_STRUCTURE-COL_POS I_COL.
    MODIFY IT_STRUCTURE FROM WA_STRUCTURE TRANSPORTING COL_POS.
    CLEAR WA_STRUCTURE.
  ENDLOOP.

还有关于固定的那些字段的定义如:

  CLEAR WA_STRUCTURE.
  WA_STRUCTURE-FIELDNAME 'AUFNR'.          "    字段
  WA_STRUCTURE-SCRTEXT_L '订单号码'.        "    描述,可用于alv显示时候赋给SELTEXT_L 
  WA_STRUCTURE-SCRTEXT_M '订单号码'.
  WA_STRUCTURE-SCRTEXT_S '订单号码'.
  WA_STRUCTURE-ICON      ''.
  WA_STRUCTURE-REF_TABLE 'AUFK'.           "参考数据表  很重要
  WA_STRUCTURE-REF_FIELD 'AUFNR'.         " 参考字段     很重要  这两个如果不写的话 会默认都是字符类型,需要定义长度,而且alv不会有                                                                           汇总按钮
  WA_STRUCTURE-COL_POS   TEMP.            "定义变量用于alv显示时候的输出位置

WA_STRUCTURE-OUTPUTLEN 13.                  "特别需要注意的是这种生成动态字段的方式如果没有定义长度的时候alv的筛选是没有用的所以需要添加
  APPEND WA_STRUCTURE TO IT_STRUCTURE.
  CLEAR IT_DATA.

************接下来就需要顶用一个类的静态方法实现这个动态内表

  DATA: P_TABLE   TYPE  REF TO DATA.    “定义引用
  CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE   ”调用此静态方法
    EXPORTING
      IT_FIELDCATALOG  IT_STRUCTURE    “输入值为存了字段的内表
      I_LENGTH_IN_BYTE 'X'                        ”这个不知道
    IMPORTING
      EP_TABLE         P_TABLE.                  “输出该引用
  ASSIGN  P_TABLE->TO <TABLE>.        ”接触引用并且把表赋值给指针<table>

*************给内表赋值

 DATA:P_LINE TYPE REF TO DATA.  “定义引用

LOOP AT GT_TAB INTO GS_TAB.

 CREATE DATA P_LINE LIKE LINE OF <TABLE>.  "根据内表<TABLE>.创建行的引用

 ASSIGN P_LINE->TO <LINE>.  "接触引用并且指向指针<line>.

    ASSIGN COMPONENT 'AUFNR' OF STRUCTURE <LINE> TO <DY_FIELD>.   "把结构<line>中的AUFNR地址指向指针<DY_FIELD>.
    <DY_FIELD> GS_TAB-AUFNR.     ”把 GS_TAB-AUFNR赋值给字段符号<DY_FIELD> ,也就是此时说<line>中的AUFNR的值就是GS_TAB-AUFNR.

 

      LOOP AT IT_DATA WHERE AUFNR GS_TAB-AUFNR
                         AND MATNR GS_TAB-MATNR
                         AND CHARG GS_TAB-CHARG.
        ASSIGN COMPONENT IT_DATA-ATNAM OF STRUCTURE  <LINE> TO <DY_FIELD>.   循环内表方法同上
        <DY_FIELD> IT_DATA-ATWRT.
      ENDLOOP.

endloop.

append <line > to <table>

 

到这一步动态内表已经定义好并赋值完毕

接下来只需要输出alv,方法和一般的一样

甚至更简单些,

*layout control
  GS_LAYOUT-ZEBRA 'X'.                              "显示斑马线
  GS_LAYOUT-COLWIDTH_OPTIMIZE 'X'.                  " 自动调整列宽


  CLEAR: WA_STRUCTURE,GS_FIELDCAT.
  LOOP AT  IT_STRUCTURE INTO WA_STRUCTURE.
    MOVE-CORRESPONDING  WA_STRUCTURE TO GS_FIELDCAT.
    GS_FIELDCAT-SELTEXT_L WA_STRUCTURE-SCRTEXT_L.
    GS_FIELDCAT-SELTEXT_M WA_STRUCTURE-SCRTEXT_M.
    GS_FIELDCAT-SELTEXT_M WA_STRUCTURE-SCRTEXT_M.
    IF GS_FIELDCAT-FIELDNAME 'AUFNR' OR GS_FIELDCAT-FIELDNAME 'ZMATNR' OR GS_FIELDCAT-FIELDNAME 'MATNR'.
      GS_FIELDCAT-NO_ZERO          'X'.
    ENDIF.
    APPEND GS_FIELDCAT TO GT_FIELDCAT.
    CLEAR: WA_STRUCTURE,GS_FIELDCAT.
  ENDLOOP.

 

  GF_REPID SY-REPID.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      I_CALLBACK_PROGRAM GF_REPID
      IS_LAYOUT          GS_LAYOUT
      IT_FIELDCAT        GT_FIELDCAT
                                                                                                                                                                                " I_SAVE             = 'A '                                    "保存标准格式和用户特定格式
    TABLES
      T_OUTTAB           <TABLE>
    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.

 

 

 

转载于:https://www.cnblogs.com/caizjian/p/3312158.html

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

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

相关文章

.net core 下的分布式事务锁

系统分布式锁的用法公司框架新增功能分布式锁&#xff1a;锁的性能之王&#xff1a;缓存 > Zookeeper > 数据库锁的实现实现原理&#xff1a;核心采用StackExchange.Redis的LockTake方法实现。支持同步获取锁&#xff0c;或者等待直到超时获取锁。/// <summary>///…

困死我了

又是周一,真想回到周六重新睡個大懶覺..提起來就有氣,可惡的施工負責人....困到現在,還沒精神做事情 转载于:https://www.cnblogs.com/LisaLiu/archive/2006/09/25/514132.html

n以内的素数c语言,关于求N以内素数的一点小问题(N小于一亿)

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼我个人觉得第二个可能是因为内存不够的缘故&#xff0c;于是照着网上的办法弄了一个辅助布尔型数组来改进一下&#xff0c;然后就变成这样了……结果是2The total of the primes are: 1代码如下#include#include#define N 10000usi…

刚刚!华为mate30 pro全球首发,三星黯然失色,iPhone11甚至都被吓降价了

全世界只有3.14 % 的人关注了青少年数学之旅众望所归&#xff0c;9月19日&#xff0c;华为在德国慕尼黑发布了Mate30系列。看完发布会&#xff0c;数据汪给大家总结了几个看点&#xff1a;1.全球一样的版本本次华为mate30系列采用的是EMUI 10系统&#xff0c;不会搭载谷歌旗下的…

cocos2d-x 实现跨平台的目录遍历

可能各位看官们有更好的方法&#xff0c;请不吝赐教。 #ifdef _WIN32 #include <io.h> #else #include <unistd.h> #include <stdio.h> #include <dirent.h> #include <sys/stat.h> #endif win32平台引用io.h里面的信息。 主要定义了一个void df…

c语言埃尔米特插值思路,【数学建模算法】(26)插值和拟合:埃尔米特(Hermite)插值和样条插值...

1.埃尔米特(Hermite)插值1.1.Hermite插值多项式如果对插值函数&#xff0c;不仅要求它在节点处与函数同值&#xff0c;而且要求它与函数有相同的一阶、二阶甚至更高阶的导数值&#xff0c;这就是 Hermite 插值问题。本节主要讨论在节点处插值函数与函数的值及一阶导数值均相等的…

剖析XAML语言

这节剖析一下XAML(读作&#xff1a;zaml)——这一WPF中的UI设计语言。XAML在wpf中&#xff0c;UI部分使用xaml语言来编写&#xff0c;xaml语言是由xml语言派生而来的语言&#xff0c;所以在xaml中我们可以看到很多熟悉的特点&#xff1a;它也是使用标签构建页面&#xff0c;一个…

又是一年国庆日

祝伟大祖国繁荣昌盛! 愿伟大祖国的人民幸福安康! 转载于:https://www.cnblogs.com/Farseer1215/archive/2006/09/30/519256.html

中国最神秘的一所大学,它只存在过8年,却成了永远的第一

全世界只有3.14 % 的人关注了青少年数学之旅本文授权转载于公众号&#xff1a;物道精致生活&#xff08;wudaojieqi&#xff09;&#xff0c;转载请联系物道中国曾经有过这么一所大学&#xff1a;在抗日战争中仓促搭起&#xff0c;被称为“史上最穷”&#xff0c;校舍破旧得梁思…

ibatise 没有大于等于吗_库里+杜兰特并没有大于等于2!或许他和库里搭配将更强...

NBA历史风卷云涌&#xff0c;巨星层出不穷&#xff0c;就算是称霸一时的巨星组合亦是多不胜数。默契的魔术师与贾巴尔&#xff0c;强悍的斯托克顿与马龙&#xff0c;绝对统治的乔丹与皮蓬&#xff0c;飞天遁地的科比与奥尼尔。就算是近十年&#xff0c;有如韦德与詹姆斯&#x…

Dotnet Core 优雅的命令行实现

介绍一个命令行的实现库&#xff0c;可以优雅而简单的实现命令行应用。前言控制台应用 Console&#xff0c;在我们开发中用处很多。小到一个简单的功能测试&#xff0c;或一组不需要复杂 UI 的工具类应用&#xff0c;大到后端的服务&#xff0c;都会用到 Console。在这里面&…

android 获取当前画布,Android硬件位图填坑之获取硬件画布

前言Hardware Bitmap(硬件位图)是Android8.0加入的新功能&#xff0c;通过设置Bitmap的config为Bitmap.Config.HARDWARE&#xff0c;创建所谓的Hardware Bitmap&#xff0c;它不同与其他Config的Bitmap&#xff0c;Hardware Bitmap对应的像素数据是存储在显存中&#xff0c;并对…

JSP数据库连接方式总结

现在有好多初学jsp的网友经常会问数据库怎么连接啊&#xff0c;怎么老出错啊&#xff1f;所以我集中的在这写篇文章供大家参考&#xff0c;其实这种把数据库逻辑全部放在jsp里未必是好的做法&#xff0c;但是有利于初学者学习&#xff0c;所以我就这样做了&#xff0c;当大家学…

Java中Filter的理解

Filter工作原理当客户端发出Web资源的请求时&#xff0c;Web服务器根据应用程序配置文件设置的过滤规则进行检查&#xff0c;若客户请求满足过滤规则&#xff0c;则对客户请求&#xff0f;响应进行拦截&#xff0c;对请求头和请求数据进行检查或改动&#xff0c;并依次通过过滤…

一句话征服了美国人,这位饱受争议的数学博士竟从未上过学?

全世界只有3.14 % 的人关注了青少年数学之旅前两天&#xff0c;有位不愿意透露姓名的模友问了超模君一个问题&#xff1a;虽然这个问题超模君已经解答过无数遍了&#xff0c;但看到模友如此虔诚的态度&#xff0c;超模君决定今天再给模友们讲一个犹太小伙用数学征服美国军官的故…

使用 C# 开发浏览器扩展

使用 C# Blazor 开发浏览器扩展Intro前段时间听了 Justin 大佬分享的 Blazor 开发浏览器扩展&#xff0c;觉得很不错&#xff0c;C# 可以做更多有趣的事情了&#xff0c;很多需要在服务器端做的事情可能就可以在客户端里实现了&#xff0c;而且高度可以复用已有的 C# 代码&…

一个设置ip的vbs脚本

经常在两个网段间转换 常改ip&#xff0c;找了一个改ip的脚本稍微改了一下&#xff0c;让他适合我的情况&#xff08;自动判断我的ip&#xff09;strComputer "."SetobjWMIService GetObject("winmgmts:\\"&strComputer &"\root\cimv2")…

心动的本质是什么_《心动的信号3》:在“烟火气”里嗑糖,素人恋爱究竟有多上头?...

文 | 土豆2018年&#xff0c;一档画风清新&#xff0c;以素人恋爱为主体、辅之以明星观察为核心的恋爱社交真人秀节目&#xff0c;走红于市场。彼时国内综艺市场&#xff0c;尚且还处于竞技类真人秀、偶像综艺的爆发期——《心动的信号》播出以后&#xff0c;不仅成功开启了国内…

android 如何动态设置margin,Android 动态设置margin

android的view中有setPadding&#xff0c;但是没有直接的setMargin方法。如果要在代码中设置该怎么做呢&#xff1f;可以通过设置view里面的LayoutParams设置&#xff0c;而这个LayoutParams是根据该view在不同的GroupView而不同的。布局文件如下:xmlns:tools"http://sche…

公司服务器iSCSI网络硬盘连接故障

今天检查备份服务器工作状态&#xff0c;发现iSCSI硬盘连接出现了故障。然后刷新了一下系统状态&#xff0c;发现过了几秒钟后又重新连接上了。心里很疑惑&#xff0c;于是开始检查服务器日志。发现在9月13日凌晨4点20分左右有两个来源为l2nd的消息。稍前的一个信息告知网络控制…