LIST动态表格画线(动态列)

声明:原创作品,转载时请注明文章来自SAP师太技术博客:www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将追究法律责任!原文链接:http://www.cnblogs.com/jiangzhengjun/p/4291398.html


TABLES: mara,
        makt,
        mard.

DATA: BEGIN OF gx_mara,
      matnr LIKE mara-matnr,
      meins LIKE mara-meins,
END OF gx_mara,
gt_mara LIKE TABLE OF gx_mara.

DATA: BEGIN OF gx_makt,
      matnr LIKE makt-matnr,
      maktx LIKE makt-maktx,
END OF gx_makt,
gt_makt LIKE TABLE OF gx_makt.

DATA: BEGIN OF gx_mard,"Storage Location Data for M
      "由于werks字段用在了循环中的AT...ENDAT语句中了,所以需要声明在最前面
      werks LIKE mard-werks,"Plant 工厂
      lgort LIKE mard-lgort,"Storage Location 库位
      matnr LIKE mard-matnr,
      labst LIKE mard-labst,"库存
END OF gx_mard,
gt_mard LIKE TABLE OF gx_mard WITH KEY werks lgort,

gx_uniq LIKE gx_mard,
gt_uniq LIKE TABLE OF gx_uniq.

TYPES: BEGIN OF gx_plant,
      werks LIKE mard-werks,
      cols TYPE i,
END OF gx_plant.
DATA: gt_plant TYPE HASHED TABLE OF gx_plant WITH HEADER LINE WITH UNIQUE KEY werks.

*error message table
DATA: BEGIN OF check_msg OCCURS 0,
      no   TYPE i,
      line(100),
END OF check_msg.

DATA: c_err_no TYPE i,
      c_l_error.
DATA: g_line TYPE i,g_line2 TYPE i.

CONSTANTS: p_char_x VALUE ‘X‘.

SELECTION-SCREEN BEGIN OF BLOCK rad1 WITH FRAME TITLE text-001.
SELECT-OPTIONS: s_matnr FOR mard-matnr,
                s_werks FOR mard-werks,
                s_lgort FOR mard-lgort,
                s_labst FOR mard-labst.
SELECTION-SCREEN END OF BLOCK rad1.

DEFINE ins_msg.
  add 1 to c_err_no.
  check_msg-no = c_err_no.
  append check_msg.
  clear check_msg.
  c_l_error = ‘X‘.
END-OF-DEFINITION.

DEFINE write_screen.
  call function ‘SAPGUI_PROGRESS_INDICATOR‘
    exporting
      text   = &1
    exceptions
      others = 1.
END-OF-DEFINITION.

INITIALIZATION.

START-OF-SELECTION.
  PERFORM frm_get_data.
  CHECK c_l_error IS INITIAL.

PERFORM frm_process_data.
  CHECK c_l_error IS INITIAL.

PERFORM frm_disp_data.

FORM frm_get_data .
  DATA: g_lines TYPE i.

*mara
*  SELECT matnr werks lgort labst INTO CORRESPONDING FIELDS OF TABLE gt_mard
*         FROM mard WHERE
*         matnr IN s_matnr AND
*         werks IN s_werks AND
*         lgort IN s_lgort AND
*         labst IN s_labst.
*  IF sy-subrc NE 0.
*    check_msg-line = ‘no data‘.
*    ins_msg.
*  ENDIF.
*  CHECK c_l_error IS INITIAL.
*模拟数据
  gx_mard-matnr = ‘M001‘.
  gx_mard-werks = ‘W001‘.
  gx_mard-lgort = ‘L001‘.
  gx_mard-labst = 1.

APPEND gx_mard TO gt_mard.
  gx_mard-matnr = ‘M001‘.
  gx_mard-werks = ‘W002‘.
  gx_mard-lgort = ‘L001‘.
  gx_mard-labst = 2.
  APPEND gx_mard TO gt_mard.

gx_mard-matnr = ‘M001‘.
  gx_mard-werks = ‘W002‘.
  gx_mard-lgort = ‘L002‘.
  gx_mard-labst = 3.
  APPEND gx_mard TO gt_mard.

gx_mard-matnr = ‘M002‘.
  gx_mard-werks = ‘W003‘.
  gx_mard-lgort = ‘L001‘.
  gx_mard-labst = 4.
  APPEND gx_mard TO gt_mard.

SORT gt_mard BY matnr werks lgort.
  gt_uniq = gt_mard.
  SORT gt_uniq BY werks lgort.
  DELETE ADJACENT DUPLICATES FROM gt_uniq COMPARING werks lgort.
  "计算每个工厂下面有多少个库位
  DATA: count TYPE i .
  LOOP AT gt_uniq INTO gx_uniq.
    AT NEW  werks.
      count = 0.
    ENDAT.
    count = count + 1.
    AT END OF werks.
      gt_plant-werks = gx_uniq-werks.
      gt_plant-cols = count.
      INSERT gt_plant INTO TABLE gt_plant.
    ENDAT.
  ENDLOOP.

g_line = 52.
  DESCRIBE TABLE gt_uniq LINES g_lines.

g_line2 = g_lines * 14."每列占14个位置
  g_line = g_line + g_line2.

*mara
*  SELECT matnr meins INTO CORRESPONDING FIELDS OF TABLE gt_mara FROM mara
*         FOR ALL ENTRIES IN gt_mard WHERE
*         matnr EQ gt_mard-matnr.
*模拟数据
  gx_mara-matnr = ‘M001‘.
  gx_mara-meins = ‘EA‘.
  APPEND gx_mara TO gt_mara.
  gx_mara-matnr = ‘M002‘.
  gx_mara-meins = ‘ST‘.
  APPEND gx_mara TO gt_mara.

SORT gt_mara BY matnr.

*makt
  SELECT matnr maktx INTO CORRESPONDING FIELDS OF TABLE gt_makt FROM makt
         FOR ALL ENTRIES IN gt_mard WHERE
         matnr EQ gt_mard-matnr.
  SORT gt_makt BY matnr.

*  DELETE ADJACENT DUPLICATES FROM gt_makt COMPARING matnr maktx.

DELETE ADJACENT DUPLICATES FROM gt_makt COMPARING matnr.
ENDFORM. " frm_Get_data

FORM frm_process_data .

ENDFORM. " frm_process_data
FORM frm_disp_data .
*header
  DATA: g_name(13),len TYPE i VALUE 0,l_len TYPE i VALUE 0.
  ULINE AT /02(g_line).
  "标题第一行
  WRITE:/02(01) ‘|‘ NO-GAP, (18) ‘‘ NO-GAP,
           (01) ‘|‘ NO-GAP, (25) ‘‘ NO-GAP,
           (01) ‘|‘ NO-GAP, (05) ‘‘ NO-GAP.                 "共占52

WRITE: (01) ‘|‘ NO-GAP.
  LOOP AT gt_plant.
    len = 13 * gt_plant-cols.
    WRITE: AT (len) gt_plant-werks CENTERED NO-GAP.
    l_len = gt_plant-cols - 1.
    WRITE: AT (l_len) ‘‘ NO-GAP.
    WRITE: (01) ‘|‘ NO-GAP.
  ENDLOOP.

"标题第二行
  WRITE:/02(01) ‘|‘ NO-GAP, (18) ‘MAterial Number‘ NO-GAP,
           (01) ‘|‘ NO-GAP, (25) ‘Material Desc.‘  NO-GAP,
           (01) ‘|‘ NO-GAP, (05) ‘Unit‘            NO-GAP.
  ULINE AT 53(g_line2) NO-GAP.
  WRITE:(01) ‘|‘.

"标题第三行
  WRITE:/02(01) ‘|‘ NO-GAP, (18) ‘‘ NO-GAP,
           (01) ‘|‘ NO-GAP, (25) ‘‘ NO-GAP,
           (01) ‘|‘ NO-GAP, (05) ‘‘ NO-GAP.
  LOOP AT gt_uniq INTO gx_uniq.
    WRITE: (01) ‘|‘ NO-GAP, (13) gx_uniq-lgort CENTERED NO-GAP.
  ENDLOOP.
  WRITE: (01) ‘|‘ NO-GAP.
  ULINE AT /02(g_line).

*主表内容
  LOOP AT gt_mara INTO gx_mara.
    CLEAR: gx_makt.
    READ TABLE gt_makt INTO gx_makt WITH KEY matnr = gx_mara-matnr.
    WRITE:/02(01) ‘|‘ NO-GAP, (18) gx_mara-matnr NO-GAP,
             (01) ‘|‘ NO-GAP, (25) gx_makt-maktx NO-GAP,
             (01) ‘|‘ NO-GAP, (05) gx_mara-meins NO-GAP.
    "针对每个动态列进行动态取值
    LOOP AT gt_uniq INTO gx_uniq.
      CLEAR: gx_mard.
      READ TABLE gt_mard INTO gx_mard WITH KEY
           matnr = gx_mara-matnr
           werks = gx_uniq-werks
           lgort = gx_uniq-lgort.
      IF sy-subrc = 0.
        WRITE: (01) ‘|‘ NO-GAP, (13) gx_mard-labst NO-GAP.
      ELSE.
        WRITE: (01) ‘|‘ NO-GAP, (13) ‘-‘ NO-GAP.
      ENDIF.
    ENDLOOP.
    WRITE: (01) ‘|‘ NO-GAP.
    ULINE AT /02(g_line).
  ENDLOOP.
ENDFORM.

时间: 2024-08-03 01:29:18

LIST动态表格画线(动态列)的相关文章

element ui的表格列设置fixed后做动态表格出现表格错乱

最近使用element-UI时,使用table做动态表格,当操作列使用fixed时,动态切换表格列设置设置时就会出现错乱,情况如下: 解决方法: 把el-table-column上的key设成一个随机数Math.random(),每次表头设置完都要更新一下就正常,如下 这样,显示结果就正常了 原文地址:https://www.cnblogs.com/lwming/p/12074579.html

OpenGL进阶示例1——动态画线(虚线、实线、颜色、速度等)

用OpenGL动态绘制线段,其实很简单,但到现在为止,网上可参考资料并不多.于是亲自动手写一个函数,方便动态绘制线段.代码如下: #include<GL/glut.h> //OpenGL实用工具包 #include <Windows.h> /*所遇问题: 1.系统API函数Sleep()不听话,睡眠时快时慢(可能跟我计算机当前运行程序有关吧) 解决方案:重写Sleep()函数,实质为空循环.仅用于Debug下,Release会将其优化 2.动态画直线,朝某些方向画线时出现块状 解决

js实现表格行的动态添加------Day56

现代页面通常都是用div+css来进行设计,几乎很少再有用table来进行布局的了,但是这并不意味着table的重要性就降低了,事实上,table在数据处理上有着它独特的优势,所以对table的掌握还是很有必要的. 我们首先要记录的问题是:js动态的添加表格的行和列 我们先给定一个table,先用html语言编写下: <table width="100%" height="300px" border="1px" id="tad&q

achartengine画出动态折线图

achartengine画出动态折线图的效果最近有个项目需要用到实时曲线图,我也上网搜索了一下,最后还是选择使用achartengine这个现成的东西,毕竟自己再canvas一下实在是太麻烦,而且项目时间上也不允许,虽然这个画图引擎比较简单,不过勉强够用了. 下一步问题就来了,我仓促上手,只会画静态图,就是事先定义好几个坐标,然后activity载入的时候折线就已经画好了,可是我的项目要求我每隔一秒种都要把新搜集到的数据添加到图表中去,类似于windows中那个任务管理器里的性能统计图,网上搜来

5.11-5.15javascript制作动态表格

制作动态表格的主要是运用js中表格类的insertRow.insertCell简易添加行和列的代码,不过要注意每行添加的表格是有位置行编号的,每行的编号为rows.length-1,增加的表格内的标签属性内容注意把原来的双引号变为单引号: <script language="javascript" type="text/javascript"> var id = 5; function addtr(){ //增加表格 var tem = ++id; va

Java利用poi生成word(包含插入图片,动态表格,行合并)

转: Java利用poi生成word(包含插入图片,动态表格,行合并) 2018年12月20日 09:06:51 wjw_11093010 阅读数:70 Java利用poi生成word(包含插入图片,动态表格,行合并) 测试模板样式: Word生成结果: 图表 2需要的jar包:(具体jar可自行去maven下载) 注意:需要严格按照上面版本下载jar包,否则可能出现jar包之间不能匹配的导致代码报错 各种 jar包都可以在这里下载: https://mvnrepository.com/ Tes

JS 动态表格(添加、删除行)

用JS实现表格的增删功能,添加或删除一列: 实现结果如下图: 1)添加行: 2)删除行: 实现代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>动态表格</title> <style> a{ text-decoration: none; } .one{ margin: 0 auto;

js的动态表格的增删改查思路

1. 首先我们要知道,动态添加,肯定不是 在页面上写死得,而是通过js调用循环放入到页面上的,我们在写动态表格的时候不要先着急写,我们第一步要做的就是构思,要把自己的逻辑先弄清楚,不然的话,前面是好写,到最后你就不好写了,到最后有可能要推倒重来,因为我之前就是这样. 2.接下来我们开始来完成代码部分 我们写死在页面上的的东西应该有查询按钮 全部删除 添加  还要给它一个form表单用于添加和修改数据,其实可以换别的添加和修改的方法,这里只给一个参考 代码如下: Html: css: table{

jQuery的下面是动态表格动态表单中的HTML代码

动态表格动态表单中的Jquery代码 <script type="text/javascript" src="/include/jquery/jquery-1.1.3.1.pack.js"></script><script language="javascript">$("#addjobline").css("cursor","pointer");$(