批量查询MD04库存/需求清单

SAP MD04用于MRP的结果查询,其功能强大,标准功能有:转换计划订单到生产订单/采购申请、查询/更改MRP元素对应的单据、查询/更改物料主数据等,还可以附加标准菜单或者自定义的事务码上去。

此报表按物料MRP的结果进行统计,以当前月份往后一年,动态显示未来每月的需求数。重要的是多物料多行显示。

先看效果如下:

图片

图片

图片

业务初学ABAP代码有点啰嗦,代码如下:


REPORT zpp004.
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*

TYPE-POOLS:abap.
TABLES:mara,marc,mdps,sscrfields.
TYPES:
  BEGIN OF ztpp_mrp_h,
    werks TYPE char30,
    matnr TYPE char18,
    datum TYPE char30,
    r_num TYPE char30,
    mtart TYPE char30,
    matkl TYPE char30,
    maktx TYPE char30,
    maabc TYPE char30,
    meins TYPE char30,
    plifz TYPE char30, "计划交货
    webaz TYPE char30, "交货处理
    bstmi TYPE char30,  "MOQ
    bstrf TYPE char30, "MPQ
    verpr TYPE char30,
    stprs TYPE char30,
    eisbe TYPE char30,  "安全库存
    sum01 TYPE char30, "可用库存
    sum02 TYPE char30,  "固定的收货 采购订单
    sum03 TYPE char30, "计划的收货
    sum04 TYPE char30,  "当前消耗总量 固定发货
    sum05 TYPE char30,  " 计划的发货
  END OF ztpp_mrp_h.

DATA: BEGIN OF ztpp_mrp_i OCCURS 0,
        dat00(8)  TYPE c, "  LIKE MDPS-DAT00,    "收货/需求日期
        werks     LIKE mard-werks,       "工厂
        matnr     LIKE mara-matnr,        "物料号
        datum     LIKE sy-datum,     "日期
        r_num(20) TYPE c,          "序号
        r_item    TYPE mdps-rsnum,       "行项目计数器
        delkz     LIKE mdps-delkz,  "MRP 元素
        plumi     LIKE mdps-plumi  ,    "收货/发货标识
        mng01     LIKE mdps-mng01 ,    "收货数量或需求数量
        umdat     LIKE sy-datum,      "再计划日期
        delnr     LIKE mdps-delnr,     "MRP元素号
        del12     LIKE mdps-del12,        "MRP元素号
        delps     LIKE mdps-delps,    "MRP元素项
        baugr     LIKE mdps-baugr,     "高层次组装的物料号
        mng03     LIKE mdps-mng03,
        tpmng     LIKE mdps-tpmng,
        sum04     LIKE  mdps-mng03,
      END OF  ztpp_mrp_i.

DATA:BEGIN OF it_mat_num OCCURS 0,
       werks     LIKE marc-werks,
       matnr     LIKE mara-matnr,
       matkl     TYPE mara-matkl,
       maktx     TYPE makt-maktx,
       meins     TYPE mara-meins,
       plifz     TYPE marc-plifz,   "计划交货
       webaz     TYPE marc-webaz,  "交货处理
       bstmi     TYPE marc-bstmi,   "批量大小
       verpr     TYPE mbew-verpr,
       stprs     TYPE mbew-stprs,
       sum04(13) TYPE p DECIMALS 3,
     END OF it_mat_num.

DATA:it_mrph TYPE TABLE OF  zpp_md04_strc  WITH HEADER LINE,
     it_mdps LIKE TABLE OF ztpp_mrp_i WITH HEADER LINE,
     ls_mdps LIKE TABLE OF it_mdps WITH HEADER LINE.

DATA:
  lt_headinfo  TYPE TABLE OF mt61d,
  ls_headinfo  LIKE LINE OF lt_headinfo,
  lt_mdsta     TYPE TABLE OF mdsta,
  ls_mdsta     LIKE LINE OF lt_mdsta,
  lt_mdkp      TYPE TABLE OF  mdkp,
  ls_mdkp      LIKE LINE OF  lt_mdkp,
  lt_innerinfo TYPE TABLE OF mdez,
  ls_innerinfo LIKE LINE OF lt_innerinfo.
*ALV字段列表。
DATA: gt_fieldcat TYPE lvc_t_fcat.

DATA : BEGIN OF iinv OCCURS 0 ,
         matnr LIKE mard-matnr,
         qty   LIKE mard-labst,
       END OF iinv.
DATA zmmlist LIKE TABLE OF zmm6002b_ta_2  WITH HEADER LINE.
DATA zmoqlist LIKE TABLE OF zmm6002b_ta_3  WITH HEADER LINE.
DATA:l_menge TYPE p DECIMALS 3.
DATA:it_mdpsx LIKE TABLE OF mdps WITH HEADER LINE,
     it_mdezx LIKE TABLE OF mdez WITH HEADER LINE,
     it_mdsux LIKE TABLE OF mdsu WITH HEADER LINE.

DATA: g_lfgja LIKE marv-lfgja. "當期年度
DATA: i_lfmon TYPE zmm6002b_ta_1-lfmon.

FIELD-SYMBOLS:
  <fs_tab_load> TYPE STANDARD TABLE,
  <fs_load>     TYPE any,
  <fs_tab_alv>  TYPE STANDARD TABLE,
  <fs_alv>      TYPE any,
  <fs_itab_alv> TYPE STANDARD TABLE,
  <ft_alv>      TYPE any.
DATA:
  gs_fieldcat TYPE lvc_s_fcat,
  gs_functxt  TYPE smp_dyntxt.
DATA:p_col TYPE i.
DATA:
  gw_layout  TYPE slis_layout_alv,
  t_fieldcat TYPE slis_t_fieldcat_alv,
  w_fieldcat TYPE LINE OF slis_t_fieldcat_alv,
  gw_glay    TYPE lvc_s_glay.
DEFINE field_frame.
  CLEAR W_FIELDCAT.
  W_FIELDCAT-FIELDNAME = &1.
  W_FIELDCAT-SELTEXT_S = &2.
  W_FIELDCAT-NO_ZERO   = &3.
  W_FIELDCAT-EMPHASIZE = &4.
  APPEND W_FIELDCAT TO T_FIELDCAT.
END-OF-DEFINITION.

FIELD-SYMBOLS: <fs_table> TYPE STANDARD TABLE,
               <fs_line>  TYPE any.
DATA: lr_table TYPE REF TO data,
      lr_line  TYPE REF TO data.
CONSTANTS:message_error TYPE c VALUE 'E',
          true          TYPE c VALUE 'X'.

SELECTION-SCREEN BEGIN OF BLOCK b1 .
PARAMETERS:
  p_bukrs LIKE marv-bukrs OBLIGATORY DEFAULT '1000',
  p_werks LIKE marc-werks OBLIGATORY DEFAULT '1000'.
SELECT-OPTIONS:
      p_budat FOR sy-datum,
      s_matnr   FOR marc-matnr .
SELECTION-SCREEN END OF BLOCK b1.

START-OF-SELECTION.

  PERFORM frm_create_dyn_alv .
  PERFORM get_material.
  PERFORM fs_table.
  PERFORM display_alv .
*&---------------------------------------------------------------------*
*&      FORM  GET_DATA
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*  -->  P1        TEXT
*  <--  P2        TEXT
*----------------------------------------------------------------------*
FORM get_material .
  FIELD-SYMBOLS:<dyn_table> TYPE STANDARD TABLE,
                <dyn_wa>    TYPE any,
                <dyn_field> TYPE any.
  DATA:it_structure TYPE lvc_t_fcat,
       wa_structure TYPE lvc_s_fcat.
  DATA: gs_mrph LIKE it_mrph.

  SELECT a~werks a~matnr INTO CORRESPONDING FIELDS OF TABLE     it_mrph  FROM marc AS a
       INNER JOIN mara AS b ON a~matnr = b~matnr
  WHERE a~werks = p_werks
  AND a~matnr IN s_matnr.
ENDFORM. " GET_DATA

FORM fs_table .
  DATA: p_num(6) TYPE n VALUE 0,
        number   TYPE p DECIMALS 3,
        pomenge  TYPE p DECIMALS 3.
  CLEAR:   p_num.
  DATA: gs_mrph LIKE it_mrph.
  DATA:   gt_fieldcat    TYPE abap_compdescr_tab.
  FIELD-SYMBOLS:<dyn_table> TYPE STANDARD TABLE,
                <dyn_wa>    TYPE any,
                <dyn_field> TYPE any.

  LOOP AT it_mrph .
    p_num = p_num + 1.
    CALL FUNCTION 'MD_STOCK_REQUIREMENTS_LIST_API'
      EXPORTING
        matnr                    = it_mrph-matnr
        werks                    = p_werks
      IMPORTING
        e_mt61d                  = ls_headinfo
        e_mdkp                   = ls_mdkp
        e_mdsta                  = ls_mdsta
      TABLES
        mdpsx                    = it_mdpsx
      EXCEPTIONS
        material_plant_not_found = 1
        plant_not_found          = 2
        OTHERS                   = 3.
    IF sy-subrc <> 0.
* IMPLEMENT SUITABLE ERROR HANDLING HERE
    ENDIF.
    it_mrph-beskz = ls_headinfo-beskz.
    it_mrph-datum = sy-datum.        "保存日期
    it_mrph-r_num = sy-datum && p_num.
    it_mrph-maktx =  ls_headinfo-maktx.
    it_mrph-matkl = ls_headinfo-matkl.
    it_mrph-mtart = ls_headinfo-mtart.
    it_mrph-meins = ls_headinfo-meins.
    it_mrph-plifz = ls_headinfo-plifz.
    it_mrph-stprs = ls_headinfo-stprs.
    it_mrph-verpr = ls_headinfo-verpr.
    it_mrph-webaz = ls_headinfo-webaz.
    it_mrph-bstmi = ls_headinfo-bstmi.
    it_mrph-bstrf  = ls_mdkp-bstrf.
    it_mrph-maabc  = ls_headinfo-maabc.
    it_mrph-eisbe = ls_headinfo-eisbe.
    it_mrph-sum01 = ls_mdsta-sum01.
    it_mrph-sum02 = ls_mdsta-sum02.
    it_mrph-sum03  = ls_mdsta-sum03.
    it_mrph-sum04 = ls_mdsta-sum04.
    it_mrph-sum05 = ls_mdsta-sum05.
    MODIFY it_mrph.
    CLEAR it_mrph.

    DELETE it_mdpsx WHERE plumi <> '-'.
    LOOP AT it_mdpsx.
      CLEAR:it_mdps.
      it_mdps-werks = p_werks.
      it_mdps-matnr = it_mrph-matnr.
      it_mdps-datum = sy-datum.
      it_mdps-r_num = sy-datum && p_num.
      it_mdps-r_item = p_num.
      it_mdps-dat00 = it_mdpsx-dat00+0(6)."收货/需求日期
      IF it_mdps-dat00 IS INITIAL.
        it_mdps-dat00 = sy-datum.
      ENDIF.
      it_mdps-mng01 = it_mdpsx-mng01."收货数量或需求数量
      it_mdps-tpmng = it_mdpsx-tpmng.

*-----保存所有数据避免报表数据结构错误-------
      IF it_mdps-mng01 NE 0.
        APPEND it_mdps.
      ENDIF.
    ENDLOOP.
    SORT it_mdps BY dat00.
    LOOP AT it_mdps.
      AT END OF dat00.
        SUM.
        MOVE-CORRESPONDING it_mdps TO ls_mdps.
        ls_mdps-matnr  =     it_mdps-matnr.
        ls_mdps-r_item = p_num.
        ls_mdps-r_num = sy-datum && p_num.
        APPEND ls_mdps.
      ENDAT.
    ENDLOOP.
    sy-index   = sy-index + 1.
    READ TABLE it_mrph INTO  DATA(ls_mrph) INDEX sy-index.
    MOVE-CORRESPONDING ls_mrph  TO gs_mrph. "AT事件后被loop字段为*需要从 LS_INCOME 转存到 GS_INCOME
    ASSIGN COMPONENT 'WERKS' OF STRUCTURE <fs_alv> TO <dyn_field>.
    <dyn_field> = gs_mrph-werks.
    ASSIGN COMPONENT 'MATNR' OF STRUCTURE <fs_alv> TO <dyn_field>.
    <dyn_field> = gs_mrph-matnr.
    ASSIGN COMPONENT 'BESKZ' OF STRUCTURE <fs_alv> TO <dyn_field>.
    <dyn_field> = gs_mrph-beskz.
    ASSIGN COMPONENT 'DATUM' OF STRUCTURE <fs_alv> TO <dyn_field>.
    <dyn_field> = gs_mrph-datum.
    ASSIGN COMPONENT 'R_NUM' OF STRUCTURE <fs_alv> TO <dyn_field>.
    <dyn_field> = gs_mrph-r_num.
    ASSIGN COMPONENT 'MTART' OF STRUCTURE <fs_alv> TO <dyn_field>.
    <dyn_field> = gs_mrph-mtart.
    ASSIGN COMPONENT 'MATKL' OF STRUCTURE <fs_alv> TO <dyn_field>.
    <dyn_field> = gs_mrph-matkl.
    ASSIGN COMPONENT 'MAKTX' OF STRUCTURE <fs_alv> TO <dyn_field>.
    <dyn_field> = gs_mrph-maktx.
    ASSIGN COMPONENT 'MAABC' OF STRUCTURE <fs_alv> TO <dyn_field>.
    <dyn_field> = gs_mrph-maabc.
    ASSIGN COMPONENT 'MEINS' OF STRUCTURE <fs_alv> TO <dyn_field>.
    <dyn_field> = gs_mrph-meins.
    ASSIGN COMPONENT 'PLIFZ' OF STRUCTURE <fs_alv> TO <dyn_field>.
    <dyn_field> = gs_mrph-plifz.
    ASSIGN COMPONENT 'WEBAZ' OF STRUCTURE <fs_alv> TO <dyn_field>.
    <dyn_field> = gs_mrph-webaz.
    ASSIGN COMPONENT 'BSTMI' OF STRUCTURE <fs_alv> TO <dyn_field>.
    <dyn_field> = gs_mrph-bstmi.
    ASSIGN COMPONENT 'BSTRF' OF STRUCTURE <fs_alv> TO <dyn_field>.
    <dyn_field> = gs_mrph-bstrf.
    ASSIGN COMPONENT 'VERPR' OF STRUCTURE <fs_alv> TO <dyn_field>.
    <dyn_field> = gs_mrph-verpr.
    ASSIGN COMPONENT 'STPRS' OF STRUCTURE <fs_alv> TO <dyn_field>.
    <dyn_field> = gs_mrph-stprs.
    ASSIGN COMPONENT 'EISBE' OF STRUCTURE <fs_alv> TO <dyn_field>.
    <dyn_field> = gs_mrph-eisbe.
    ASSIGN COMPONENT 'SUM01' OF STRUCTURE <fs_alv> TO <dyn_field>.
    <dyn_field> = gs_mrph-sum01.
    ASSIGN COMPONENT 'SUM02' OF STRUCTURE <fs_alv> TO <dyn_field>.
    <dyn_field> = gs_mrph-sum02.
    ASSIGN COMPONENT 'SUM03' OF STRUCTURE <fs_alv> TO <dyn_field>.
    <dyn_field> = gs_mrph-sum03.
    ASSIGN COMPONENT 'SUM04' OF STRUCTURE <fs_alv> TO <dyn_field>.
    <dyn_field> = gs_mrph-sum04.
    ASSIGN COMPONENT 'SUM05' OF STRUCTURE <fs_alv> TO <dyn_field>.
    <dyn_field> = gs_mrph-sum05.

* 获取字段结构列表
    PERFORM frm_get_comp(zpp_rpt1310_ta)
      USING <fs_alv>
      CHANGING gt_fieldcat  IF FOUND.
    LOOP AT gt_fieldcat INTO DATA(gs_fieldcat) FROM 25.
      READ TABLE ls_mdps INTO DATA(gs_mdps) WITH KEY dat00 = gs_fieldcat-name  .
      IF sy-subrc = 0.
        ASSIGN COMPONENT gs_fieldcat-name OF STRUCTURE <fs_alv> TO  <dyn_field>.
        IF sy-subrc = 0.
          <dyn_field> = gs_mdps-mng01.
        ENDIF.
      ENDIF.
      CLEAR: gs_mdps.
    ENDLOOP.
    APPEND <fs_alv>  TO <fs_tab_alv> .
    CLEAR  <fs_alv> .
    CLEAR:ls_headinfo,ls_mdsta,ls_mdkp,it_mdpsx[], it_mdps[],ls_mdps[].

  ENDLOOP.
ENDFORM. " READ_MRP

*&---------------------------------------------------------------------*
*& Form FRM_GET_COMP
*&---------------------------------------------------------------------*
*& 获取字段结构列表
*&---------------------------------------------------------------------*
FORM frm_get_comp USING     us_data
                  CHANGING  ct_comp TYPE abap_compdescr_tab.
  DATA:
    lo_descr_ref TYPE REF TO cl_abap_typedescr,
    lo_struc     TYPE REF TO cl_abap_structdescr.

  CALL METHOD cl_abap_structdescr=>describe_by_data
    EXPORTING
      p_data      = us_data
    RECEIVING
      p_descr_ref = lo_descr_ref.

  lo_struc ?= lo_descr_ref.

  ct_comp = lo_struc->components.
ENDFORM.

*&---------------------------------------------------------------------*
*& Form FRM_CREATE_DYN_ALV
*&---------------------------------------------------------------------*
*& 构建动态ALV
*&---------------------------------------------------------------------*
FORM frm_create_dyn_alv .
  DATA:    ls_string     TYPE string.
  DATA: dyear    LIKE marv-lfgja, "當期年度
        dmon     LIKE marv-lfmon, "當期月份
        nyear    LIKE marv-lfgja, "下一年年度
        nmon     LIKE marv-lfmon, "當期月份
        e_month  TYPE i,
        lv_fname TYPE string,
        yyyy     LIKE sy-datum.
  DATA:
    lo_tab       TYPE REF TO data,
    la_tab       TYPE REF TO data,
    lo_ws        TYPE REF TO data,
    lo_wa        TYPE REF TO data,
    lv_index     TYPE i,
    lv_datefname TYPE char9,
    lt_split     TYPE STANDARD TABLE OF string,
    lv_year      TYPE n LENGTH 4,
    lv_month     TYPE n LENGTH 2,
    lv_day       TYPE n LENGTH 2,
    lv_col_pos   TYPE lvc_colpos.
  "  CLEAR <FS_LOAD>.
  "READ TABLE <FS_TAB_LOAD> INTO <FS_LOAD> INDEX 1.

* 设置字段控制(固定列部分)
  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
    EXPORTING
      i_structure_name       = 'ZPP_MD04_STRC'
      i_bypassing_buffer     = 'X'
    CHANGING
      ct_fieldcat            = gt_fieldcat
    EXCEPTIONS
      inconsistent_interface = 1
      program_error          = 2
      OTHERS                 = 3.

* 从第23列开始为动态列
  lv_index = 23.
  lv_col_pos = lines( gt_fieldcat ).

  dyear = sy-datum+0(4). "年度
  dmon = sy-datum+4(2).   "月度
  yyyy = dyear && '1231'.
  CALL FUNCTION 'FIMA_DAYS_AND_MONTHS_AND_YEARS'
    EXPORTING
      i_date_from = sy-datum
      i_date_to   = yyyy
    IMPORTING
      e_months    = e_month.

  DO e_month  TIMES.        "从当前月度,动态添加当年的月度
    lv_col_pos = lv_col_pos + 1.
    IF sy-index = 1.
      lv_fname = |{ dyear }{ dmon }|.
      PERFORM frm_fill_fieldcat USING lv_col_pos  lv_fname lv_fname.
    ELSE.
      dmon = dmon + 1.
      lv_fname =   |{ dyear }{ dmon }|.
      PERFORM frm_fill_fieldcat USING lv_col_pos  lv_fname lv_fname.
    ENDIF.
  ENDDO.

  nyear = dyear + 1 .
  DATA: yy TYPE string VALUE '下一年'.
* 添加动态列(预留,预留至当年年底至下一年的月份)
  DO 12  TIMES.
    lv_col_pos = lv_col_pos + 1.
    nmon = sy-index.
    lv_fname = |{ nyear }{ nmon }|.
    PERFORM frm_fill_fieldcat USING lv_col_pos  lv_fname lv_fname.
  ENDDO.

  SORT gt_fieldcat BY col_pos.
  " 根据列创建动态内表
  CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
      it_fieldcatalog           = gt_fieldcat
    IMPORTING
      ep_table                  = lo_tab
    EXCEPTIONS
      generate_subpool_dir_full = 1
      OTHERS                    = 2.
  ASSIGN lo_tab->* TO <fs_tab_alv> .
  CREATE DATA lo_ws LIKE LINE OF <fs_tab_alv>.
  ASSIGN lo_ws->* TO <fs_alv>.
ENDFORM.
*&---------------------------------------------------------------------*
*&      --> UV_FIELDDESC   字段描述
*&      --> UV_FIELDNAME   字段名
*&      --> UV_REF_TABLE   参考表
*&      --> UV_REF_FIELD   参考字段
*&      --> UV_COLPOS      列位置
*&---------------------------------------------------------------------*
FORM frm_add_fieldcat  USING    uv_fielddesc
                                uv_fieldname
                                VALUE(uv_ref_table)
                                VALUE(uv_ref_field)
                                uv_colpos.
  gs_fieldcat-fieldname = uv_fieldname.
  gs_fieldcat-col_pos   = uv_colpos.
  gs_fieldcat-reptext   = uv_fielddesc.
  gs_fieldcat-scrtext_l = uv_fielddesc.
  gs_fieldcat-scrtext_m = uv_fielddesc.
  gs_fieldcat-scrtext_s = uv_fielddesc.
  gs_fieldcat-ref_table = uv_ref_table.
  gs_fieldcat-ref_field = uv_ref_field.
  APPEND gs_fieldcat TO gt_fieldcat.
  CLEAR gs_fieldcat.
ENDFORM.
*&---------------------------------------------------------------------*
*& 添加动态字段
*&---------------------------------------------------------------------*
*&      --> UV_FNAME
*&      --> UV_REF_FIELD
*&      <-- CT_COMPONENTS
*&---------------------------------------------------------------------*
FORM frm_change_comp  USING    VALUE(uv_fname)
                               VALUE(uv_ref_field)
                      CHANGING ct_components TYPE abap_component_tab.
  DATA:
    lo_type       TYPE REF TO cl_abap_typedescr,
    ls_compoments TYPE abap_componentdescr.
  ls_compoments-name = uv_fname.
  CALL METHOD cl_abap_datadescr=>describe_by_name
    EXPORTING
      p_name         = uv_ref_field
    RECEIVING
      p_descr_ref    = lo_type
    EXCEPTIONS
      type_not_found = 1
      OTHERS         = 2.
  ls_compoments-type ?= lo_type.
  APPEND ls_compoments TO ct_components.
  CLEAR ls_compoments.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  TABLE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_fill_fieldcat USING p_col p_fieldname p_text.
  APPEND INITIAL LINE TO gt_fieldcat ASSIGNING FIELD-SYMBOL(<fs_field>).
  IF <fs_field> IS ASSIGNED.
    <fs_field>-col_pos = p_col.
    <fs_field>-fieldname = p_fieldname.
    <fs_field>-scrtext_m = p_text.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_ALV
*&---------------------------------------------------------------------*
*& 展示ALV
*&---------------------------------------------------------------------*
FORM display_alv .
  DATA:
    ls_layout    TYPE lvc_s_layo,
    lt_fieldcat  TYPE lvc_t_fcat,
    lt_excluding TYPE slis_t_extab,
    lt_event     TYPE slis_t_event,
    ls_event     TYPE slis_alv_event,
    ls_ddval     TYPE lvc_s_drop.
* 设置布局控制
  ls_layout-zebra      = 'X'.                     "颜色间隔
  ls_layout-sel_mode   = 'D'.                     "选择模式
  ls_layout-cwidth_opt = 'X'.                     "列宽自适应
  ls_layout-stylefname = 'STYLE'.                 "控制字段

* 展示ALV
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program = sy-repid
      is_layout_lvc      = ls_layout
      it_fieldcat_lvc    = gt_fieldcat
      it_excluding       = lt_excluding
      i_save             = 'A'
    TABLES
      t_outtab           = <fs_tab_alv>
    EXCEPTIONS
      program_error      = 1
      OTHERS             = 2.
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ENDIF.
ENDFORM.

固定栏位结构定义如下:

MANDT1 类型MANDTCLNT30集团
WERKS1 类型WERKS_DCHAR40工厂
MATNR1 类型MATNRCHAR180物料号 
BESKZ1 类型BESKZCHAR10采购类型
DATUM1 类型DAT00DATS80收货/需求日期 
R_NUM1 类型PLANRCHAR200计划段数
MTART1 类型MTARTCHAR40物料类型
MATKL1 类型MATKLCHAR90物料组 
MAKTX1 类型MAKTXCHAR400物料描述(短文本) 
MAABC1 类型MAABCCHAR10ABC标识
MEINS1 类型MEINSUNIT30基本计量单位
PLIFZ1 类型PLIFZDEC30计划的天数内交货
WEBAZ1 类型WEBAZDEC30以天计的收货处理时间
BSTMI1 类型BSTMIQUAN133最小批量 
BSTRF1 类型BSTRFQUAN133采购订单数量的舍入值 
VERPR1 类型VERPRCURR112移动平均价格/周期单价
STPRS1 类型STPRSCURR112标准价格
EISBE1 类型EISBEQUAN133安全库存
SUM011 类型SUM01QUAN133仓库存货/总计(包括特殊库存地点)
SUM021 类型SUM02QUAN133总承诺收货数
SUM031 类型SUM03QUAN133总计划收货数
SUM041 类型SUM04QUAN133总承诺发出数
SUM051 类型SUM05QUAN133总计划发出数

  • 15
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在PL/SQL中,有几种方法可以提高批量操作的性能: 1. 使用FORALL语句进行批量操作:FORALL语句可以用于在单个SQL语句中执行多个绑定变量的批量操作。相比于逐条执行SQL语句,使用FORALL可以减少与数据库的交互次数,从而提高性能。 2. 使用BULK COLLECT语句进行数据集合的批量读取:BULK COLLECT语句可以将查询结果一次性读取到集合中,而不是逐条读取。这样可以减少与数据库的交互次数,提高读取性能。 3. 使用合适的索引:合适的索引可以加速特定条件下的数据库查询。通过分析查询语句和数据访问模式,选择合适的索引可以优化查询性能。 4. 使用合适的数据类型和数据结构:选择合适的数据类型和数据结构可以减少存储空间和I/O操作,从而提高性能。例如,使用紧凑型数据类型(如BINARY_INTEGER)代替大型数据类型(如NUMBER),使用PL/SQL记录类型代替独立的变量等。 5. 使用合适的缓存:缓存可以降低对数据库的访问次数,提高性能。例如,可以使用PL/SQL表或集合来缓存中间结果,避免频繁查询数据库。 6. 优化SQL语句:优化SQL语句可以提高数据库查询的性能。使用合适的查询条件、索引和JOIN语句,避免不必要的数据排序和过滤,可以减少查询时间。 7. 使用合适的事务管理:合理管理事务可以提高批量操作的性能。例如,可以使用适当的事务隔离级别、合理控制事务的范围和持有时间,避免不必要的锁和冲突。 8. 适当处理异常:合理处理异常可以避免不必要的回滚和重复操作,提高性能。使用EXCEPTION子句捕获和处理特定异常,采取合适的补救措施。 这些方法可以根据具体情况选择和组合使用,以提高PL/SQL批量操作的性能。同时,根据实际需求进行性能测试和优化,可以进一步提升性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值