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)

甲鱼哥之所见:

查询结果:


(~~完完~~)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容