20191002 SAPERP数据报表展示应用ABAP_ALV(阅读等级>=高中)

开篇无话。

拟从用户需求、代码实现、最终所见所得三方面进行阐释。

第1—— 用户需求:

假有甲鱼哥所需的如下图所示的业务数据报表:(贴图pict.1)

需求分析过程:

初看得是一个自定义数据报表展示的需求,所需字段描述(字段名)包含:

工单生产工厂(字段:WERKS ),  工单类型(字段:AUART )

工单编号(字段:AUFNR ),           产成品物料号(字段:PLNBEZ )

产成品物料描述(字段:MAKTX ), 计划完工日期(字段:GLTRS )

计划开始日期(字段:GSTRS),     工单总数(字段:GAMNG )

已报工良品数(字段:GMNGA ),    已报工废品数(字段:XMNGA  )

 工单的系统状态(字段:ORSTATUS )


第2—— ABAP 代码实现(完整)  

【SQL 数据运算获取部分】

*&---------------------------------------------------------------------*

form getdata.

  clear: git_tab0, wa_tab0.

  select * from afko inner join aufk  on  afko~aufnr = aufk~aufnr  into corresponding fields of  wa_tab0  where

                  aufk~werks in s_werks  and

                  aufk~auart in s_auart  and

                  aufk~aufnr in s_aufnr  and

                afko~plnbez in s_plnbez and

                afko~gltrs  in  s_gltrs  and

                afko~gstrs  in  s_gstrs

        order by    aufk~werks  descending    afko~gstrs    descending      aufk~aufnr      descending.

    select single  maktx  from  makt into corresponding fields of  wa_tab0 where  makt~matnr =  wa_tab0-plnbez.

    select single  gmnga  xmnga  from  afru into corresponding fields of  wa_tab0 where  afru~meilr = 'X'        and

                                                                                          afru~aufnr = wa_tab0-aufnr.

    perform  get_order_status.

    perform  get_unit_conversion.

    append wa_tab0  to  git_tab0.

    clear wa_tab0.

  endselect.

endform.                    "getdata

*&---------------------------------------------------------------------*


■▲▲▲▲▲■完整代码内容:(注释,后期计划无限注释以便 高2学生阅读理解)

REPORT yyyymmdd MESSAGE-ID s05.

tables: afko, "工单表头数据

        aufk, "工单基本数据

        makt,  "物料描述表

      onror.  "工单状态描述

types: begin of  ty_gs0,

werks  like aufk-werks,  "工厂

auart  like aufk-auart,  "工单类型

aufnr  like aufk-aufnr,  "工单编号

plnbez like afko-plnbez,  "产成品物料号

maktx  like makt-maktx,  "产成品物料描述

gltrs  like afko-gltrs,  "计划完工日期

gstrs  like afko-gstrs,  "计划开始日期

gamng  like afko-gamng,  "订单总数量

gmein    like afko-gmein,    "计量单位转换前

gmeinaft like afko-gmein,    "基本计量单位(转换之后)

orstatus like bsvx-sttxt,    "工单状态

objnr    like onror-objnr,    "工单对象号

gmnga    like afru-gmnga,    "已确认良品数

xmnga    like afru-xmnga,    "已报工废品数

rowx    type c1,            "整行选中的标记

end of ty_gs0.

data:  git_tab0 type standard table of ty_gs0 with non-unique key aufnr,

      wa_tab0  like line of git_tab0.      "data:  wa_tab1  type  ty_s1.

type-pools:slis.

data:

      i_layout      type  slis_layout_alv,

      i_fieldcat    type  slis_fieldcat_alv,"定义列名工作区

      i_fieldcat_alv type  slis_t_fieldcat_alv,"定义列标题内表

      i_events      type  slis_t_event,"alv事件

      w_events      like line of i_events,  "定义alv事件的工作区

      w_repid        like sy-repid."当前程序名

* 选择屏幕

selection-screen begin of block blk1 with frame title btitle1.

select-options:

s_werks  for  aufk-werks  memory id wer default  '1000' to '3000',  "生产工厂

s_auart for aufk-auart  memory id aua default 'pp01',  "工单类型

s_aufnr for aufk-aufnr  memory id auf,    "工单编号

s_plnbez for afko-plnbez memory id pln,  "产成品料号

s_matxt  for makt-maktx  memory id mak,  "产成品物料描述

s_gltrs  for afko-gltrs  memory id glt,  "计划完工日期

s_gstrs  for afko-gstrs  memory id gst.    "计划开始日期

selection-screen end of block blk1.

initialization.

  btitle1 =  '生产工单信息查询'.

start-of-selection.

  perform getdata.

  perform layout_build.

  perform fieldcat_build.

  perform final_alv_display.

*&---------------------------------------------------------------------*

*&      Form  getdata

*&---------------------------------------------------------------------*

*      text

*----------------------------------------------------------------------*

form getdata.

  clear: git_tab0, wa_tab0.

  select * from afko inner join aufk  on  afko~aufnr = aufk~aufnr  into corresponding fields of  wa_tab0  where

                  aufk~werks in s_werks  and

                  aufk~auart in s_auart  and

                  aufk~aufnr in s_aufnr  and

                afko~plnbez in s_plnbez and

                afko~gltrs  in  s_gltrs  and

                afko~gstrs  in  s_gstrs

        order by    aufk~werks  descending    afko~gstrs    descending      aufk~aufnr      descending.

    select single  maktx  from  makt into corresponding fields of  wa_tab0 where  makt~matnr =  wa_tab0-plnbez.

    select single  gmnga  xmnga  from  afru into corresponding fields of  wa_tab0 where  afru~meilr = 'X'        and

                                                                                          afru~aufnr = wa_tab0-aufnr.

    perform  get_order_status.

    perform  get_unit_conversion.

    append wa_tab0  to  git_tab0.

    clear wa_tab0.

  endselect.

endform.                    "getdata

*&---------------------------------------------------------------------*

*&      Form  unit_exchange

*&---------------------------------------------------------------------*

*      text

*----------------------------------------------------------------------*

form get_unit_conversion.  "此处通过函数'CONVERSION_EXIT_CUNIT_OUTPUT'获取从内部值(程序和数据库)到外部值(显示)的转换

  call function 'CONVERSION_EXIT_CUNIT_OUTPUT'

    exporting

      input  = wa_tab0-gmein

    importing

      output = wa_tab0-gmeinaft.

endform.                    "unit_exchange

*&---------------------------------------------------------------------*

*&      Form  get_order_status

*&---------------------------------------------------------------------*

*      text

*----------------------------------------------------------------------*

form get_order_status.  " 此处通过函数 'STATUS_TEXT_EDIT' 获取工单的系统状态

  select single objnr  from  onror  into corresponding fields of  wa_tab0  where  onror~aufnr =  wa_tab0-aufnr.

  call function 'STATUS_TEXT_EDIT'

    exporting  "  client = sy-mandt

      objnr = wa_tab0-objnr              " 单据号码

      spras = 'E'                "  BYPASS_BUFFER = ' '

    importing

      line  = wa_tab0-orstatus.    " 返回状态描述文本

endform.                    "get_order_status

*&---------------------------------------------------------------------*

*&      Form  layout_build

*&---------------------------------------------------------------------*

*      text

*----------------------------------------------------------------------*

form layout_build.

  i_layout-zebra = 'X'. "ALV表格按斑马线条纹显示

  i_layout-colwidth_optimize = 'X'. "将ALV字段宽度设置为最优化

  " i_layout-info_fieldname = 'COLOR'. "設置顏色FIELD

  i_layout-no_colhead = ''.    "显示列名

  i_layout-box_fieldname = 'ROWX'.

  w_repid = sy-repid.

*"i_layout-info_fieldname = 'COLOR'.  "設置顏色FIELD

*"i_layout-no_colhead = 'X'.

endform.                    "layout_build

*&---------------------------------------------------------------------*

*&      Form  fieldcat_build

*&---------------------------------------------------------------------*

*      text

*----------------------------------------------------------------------*

form fieldcat_build.

  define  macron.

    i_fieldcat-col_pos = &1.

    i_fieldcat-fieldname = &2.

    i_fieldcat-seltext_s = &3.

    i_fieldcat-lzero = &4.  "字义字段前导以"0"的形式显示

    i_fieldcat-key = &5.

    i_fieldcat-hotspot = &6.  "热点显示

    append i_fieldcat to i_fieldcat_alv.

    clear i_fieldcat.

  end-of-definition.

  macron  1 'WERKS' '生产工厂'  'X'  ''    ''  .

  macron  2 'AUART' '工单类型' 'X'  ''    ''  .

  macron  3 'AUFNR' '工单编号'  'X'  ''    'X'  .

  macron  4 'PLNBEZ' '产成品物料号' 'X'  ''    'X'  .

  macron  5 'MAKTX' '产成品的物料描述'  'X'  ''    ''  .

  macron  6 'GLTRS' '计划完工日期'    'X'  ''    ''  .

  macron  7 'GSTRS' '计划开始日期'    'X'  ''    ''  .

  macron  8 'GAMNG' '工单总数'    'X'  ''    ''  .

  macron  10 'XMNGA' '报工废品数'  'X'  ''    ''  .

  macron  9 'GMNGA' '报工良品数量'  'X'  ''    ''  .

  macron  11'GMEINAFT' '计量单位'  'X'  ''    ''  .

  macron  12 'ORSTATUS' '工单的系统状态'  'X'  ''    ''  .

endform.                    "fieldcat_build

*&---------------------------------------------------------------------*

*&      Form  final_alv_display

*&---------------------------------------------------------------------*

*      text

*----------------------------------------------------------------------*

form final_alv_display.

  call function 'REUSE_ALV_GRID_DISPLAY'

    exporting

      i_callback_program      = w_repid

      is_layout              = i_layout

      it_fieldcat            = i_fieldcat_alv[]

      i_callback_user_command = 'USER_COMMAND' "USER_COMMAND EVENT

    tables

      t_outtab                = git_tab0[]  "将内表赋值给输出表

    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.                    "final_alv_display

*&---------------------------------------------------------------------*

*&      Form  user_command

*&---------------------------------------------------------------------*

*      text

*----------------------------------------------------------------------*

*      -->I_UCOMM    text

*      -->I_SELFIELD text

*----------------------------------------------------------------------*

form user_command using i_ucomm type sy-ucomm i_selfield type slis_selfield.

  case i_ucomm.

    when '&IC1'.  "对于热点链接,所对应的动作码为"&IC1"

      if i_selfield-fieldname = 'AUFNR' or

        i_selfield-fieldname = 'PLNBEZ'.

        perform call_tran using i_selfield. "调用自定义事务

      endif.

  endcase.

endform.                    "user_command

*&---------------------------------------------------------------------*

*&      Form  call_tran

*&---------------------------------------------------------------------*

*      text

*----------------------------------------------------------------------*

*      -->I_SELFIELD text

*----------------------------------------------------------------------*

form call_tran using i_selfield type slis_selfield.

  read table git_tab0  into  wa_tab0  index i_selfield-tabindex.  "i_selfield-tabindex 当击行索引,从内表中提取数据

  case i_selfield-fieldname.

    when 'AUFNR'.

      set parameter id 'ANR' field wa_tab0-aufnr. " 工单编号的参数ID 为ANR

      call transaction 'CO03'."AND SKIP FIRST SCREEN "调用CO03事务码

    when  'PLNBEZ'.

      set parameter id 'MAT' field wa_tab0-plnbez. " 物料编号的参数ID 为MAT

      call transaction 'MM03'."AND SKIP FIRST SCREEN "调用MM03事务码

  endcase.

endform.                    "call_tran







第3—— 用户之所见:(贴图 pict.2    贴图 pict.3)

甲鱼哥之所见:

查询结果:


(~~完完~~)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,657评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,889评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,057评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,509评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,562评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,443评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,251评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,129评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,561评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,779评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,902评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,621评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,220评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,838评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,971评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,025评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,843评论 2 354