ABAP OOALV 字段修改同时其它字段跟着修改

1.按钮间隔 butn_type
2.
原文地址


*&---------------------------------------------------------------------*
*& Program Name     : ZMMF_246                                      *
*& Title            : 调拨采购订单创建                                  *
*& Module Name      : MM                                               *
*& Sub-Module       :                                                  *
*& Author           : CJH                                              *
*& Create Date      : 2021-08-30                                       *
*& Logical DB       : NOTHING                                          *
*& Program Type     : FUNCTION                                         *
*&---------------------------------------------------------------------*
*& REVISION LOG                                                        *
*& LOG#     DATE       AUTHOR        DESCRIPTION                       *
*& ----     ----      ----------    -----------                        *
*& 0000  2021-08-30    CJH            CREATE                           *
************************************************************************
REPORT zmmf_246.

TABLES:ekko,ekpo.
*----------------------------------------------------------------------*
* 内表/工作区定义
*----------------------------------------------------------------------*
TYPES:BEGIN OF ty_out,
        box(1)   TYPE  c,                                              "勾选
        znum(5)  TYPE  n,                                           "序号
        matnr    TYPE  matnr,
        txz01    TYPE  makt-maktx,
        menge    TYPE  ekpo-menge,
        meins    TYPE  ekpo-meins,
        zbreadth TYPE  ztbc_001-zbreadth,
        zlength  TYPE  ztbc_001-zlength,
        zsjjs1   TYPE  ztbc_001-zsjjs1,
        inco2    TYPE  ztbc_001-zbzfs1,                                         "包装方式
        tdline   TYPE  /atl/kpsp_t-msgtxt,                                              "备注
        eindt    TYPE  sy-datum,
        werks    TYPE  ekpo-werks,
        reslo    TYPE  lgort_d,
        lgobe1   TYPE  t001l-lgobe,
        lgort    TYPE  mseg-lgort,
        lgobe2   TYPE  t001l-lgobe,
        matkl    TYPE  mara-matkl,
        wgbez    TYPE  t023t-wgbez,
        vbeln    TYPE  vbak-vbeln,
        vbelp    TYPE  posnr,
        ebeln    TYPE  ekko-ebeln,
        ebelp    TYPE  ekpo-ebelp,
        zstatus  TYPE  char1,
        zmesg    TYPE  bapi_msg,
        zzgg01   TYPE  mara-zzgg01, "物料长文本
      END OF ty_out.



DATA:gs_out TYPE ty_out,
     gt_out TYPE STANDARD TABLE OF ty_out.


*ALV相关变量
DATA:gs_alv      TYPE REF TO cl_gui_alv_grid,                           "ALV类
     gs_con      TYPE REF TO cl_gui_custom_container,                   "容器类
     gt_fieldcat TYPE lvc_t_fcat,                                       "列格式
     gs_fieldcat TYPE lvc_s_fcat,                                       "列格式-结构
     gs_stable   TYPE lvc_s_stbl,                                       "光标
     gs_layout   TYPE lvc_s_layo,                                       "输出格式
     gt_output   TYPE STANDARD TABLE OF sflight,
     ok_code     TYPE sy-ucomm.


DATA: BEGIN OF itab OCCURS 0 ,
        lgort LIKE t001l-lgort,
        lgobe LIKE t001l-lgobe,
      END OF itab.
DATA: return_tab TYPE ddshretval OCCURS 0 .


DATA:gv_flg TYPE c.

CONSTANTS:gc_con TYPE c VALUE 'X'.

*&---------------------------------------------------------------------*
*       CLASS lcl_event_receiver DEFINITION
*&---------------------------------------------------------------------*
CLASS lcl_event_receiver DEFINITION .

  PUBLIC SECTION .
    METHODS handle_modify
      FOR EVENT data_changed_finished OF cl_gui_alv_grid
      IMPORTING e_modified et_good_cells.

    " 声明Toolbar事件方法
    METHODS handle_toolbar
      FOR EVENT toolbar OF cl_gui_alv_grid
      IMPORTING e_object e_interactive.
    " 声明USER-COMMAND 事件方法
    METHODS handle_command
      FOR EVENT user_command OF cl_gui_alv_grid
      IMPORTING e_ucomm.
ENDCLASS .

DATA:gt_event_receiver  TYPE REF TO lcl_event_receiver.
*----------------------------------------------------------------------*
*       CLASS lcl_event_receiver IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_event_receiver  IMPLEMENTATION .

  METHOD handle_modify.
    DATA: stbl          TYPE lvc_s_stbl,
          ls_out        TYPE ty_out,
          es_good_cells TYPE lvc_s_modi.

    LOOP AT et_good_cells INTO es_good_cells WHERE fieldname = 'MATNR' OR fieldname = 'ZBREADTH' OR fieldname = 'ZLENGTH' OR fieldname = 'ZSJJS1' OR
                                                   fieldname = 'RESLO' OR fieldname = 'LGORT' .
      CASE es_good_cells-fieldname.
        WHEN'ZBREADTH' OR 'ZLENGTH' OR 'ZSJJS1'.
          READ TABLE gt_out ASSIGNING FIELD-SYMBOL(<fs_event>) INDEX es_good_cells-row_id.
          DATA: lv_zbreadth TYPE string.
          lv_zbreadth = <fs_event>-zbreadth.
          REPLACE ALL OCCURRENCES OF ',' IN lv_zbreadth WITH ''.
          CONDENSE lv_zbreadth.
          <fs_event>-zbreadth = lv_zbreadth.

          lv_zbreadth = <fs_event>-zlength.
          REPLACE ALL OCCURRENCES OF ',' IN lv_zbreadth WITH ''.
          CONDENSE lv_zbreadth.
          <fs_event>-zlength = lv_zbreadth.

          lv_zbreadth = <fs_event>-zsjjs1.
          REPLACE ALL OCCURRENCES OF ',' IN lv_zbreadth WITH ''.
          CONDENSE lv_zbreadth.
          <fs_event>-zsjjs1 = lv_zbreadth.
        WHEN OTHERS.
      ENDCASE.
      IF es_good_cells-fieldname = 'MATNR'.
        READ TABLE gt_out INTO ls_out INDEX es_good_cells-row_id.
        IF sy-subrc = 0.
          "取物料名称
          SELECT SINGLE maktx
            INTO @ls_out-txz01
            FROM makt
            WHERE matnr = @ls_out-matnr.
          "取单位,宽度,物料组
          SELECT SINGLE meins,zzkd01,matkl,zzgg01
            INTO @DATA(ls_mara)
            FROM mara
            WHERE matnr = @ls_out-matnr.
          IF sy-subrc = 0 .
            ls_out-meins = ls_mara-meins.
            ls_out-zbreadth = ls_mara-zzkd01.
            ls_out-matkl = ls_mara-matkl.
            ls_out-zzgg01 = ls_mara-zzgg01.
          ENDIF.
          SELECT SINGLE wgbez
            INTO ls_out-wgbez
            FROM t023t
            WHERE matkl = ls_out-matkl.


**美的客户
          IF ls_out-lgort = '1530'.
*            SELECT SINGLE zlength,zwidth
*              INTO @DATA(ls_midea)
*              FROM ztsd_midea
*              WHERE matnr = @ls_out-matnr.
*            IF sy-subrc = 0.
*              ls_out-zlength = ls_midea-zlength / 1000 .
*              ls_out-zbreadth = ls_midea-zwidth.
*            ENDIF.


          ENDIF.
        ENDIF.
        MODIFY gt_out FROM ls_out INDEX es_good_cells-row_id TRANSPORTING matnr txz01 meins zbreadth matkl wgbez zlength zzgg01.

      ENDIF.

      IF es_good_cells-fieldname = 'ZBREADTH' OR es_good_cells-fieldname = 'ZLENGTH' OR es_good_cells-fieldname = 'ZSJJS1'.
        READ TABLE gt_out INTO ls_out INDEX es_good_cells-row_id.
        IF sy-subrc = 0.
          ls_out-menge = ls_out-zbreadth / 1000 * ls_out-zlength * ls_out-zsjjs1 .
        ENDIF.
        MODIFY gt_out FROM ls_out INDEX es_good_cells-row_id TRANSPORTING zbreadth zlength zsjjs1  menge.

      ENDIF.

      IF es_good_cells-fieldname = 'RESLO'.
        READ TABLE gt_out INTO ls_out INDEX es_good_cells-row_id.
        IF sy-subrc = 0.
          "取发出库位名称
          SELECT SINGLE lgobe
            INTO @ls_out-lgobe1
            FROM t001l
            WHERE werks = @ls_out-werks AND lgort = @ls_out-reslo.
        ENDIF.
        MODIFY gt_out FROM ls_out INDEX es_good_cells-row_id TRANSPORTING reslo lgobe1.
      ENDIF.

      IF es_good_cells-fieldname = 'LGORT'.
        READ TABLE gt_out INTO ls_out INDEX es_good_cells-row_id.
        IF sy-subrc = 0.
          "取接收库位名称
          SELECT SINGLE lgobe
            INTO @ls_out-lgobe2
            FROM t001l
            WHERE werks = @ls_out-werks AND lgort = @ls_out-lgort.
        ENDIF.
        MODIFY gt_out FROM ls_out INDEX es_good_cells-row_id TRANSPORTING lgort lgobe2.
      ENDIF.

    ENDLOOP.

    "HANDLE_COMMAND


    PERFORM frm_refresh_alv.

  ENDMETHOD.

  " 实现Toolbar事件方法
  METHOD handle_toolbar.
    DATA: ls_toolbar TYPE stb_button.
    CLEAR: ls_toolbar.
    ls_toolbar-butn_type = 3. " 分隔符
    APPEND ls_toolbar TO e_object->mt_toolbar.

    CLEAR: ls_toolbar.
    ls_toolbar-function = 'ADD'.    " 功能码
    ls_toolbar-icon = icon_insert_row.  " 图标名称
    ls_toolbar-quickinfo = '添加行'.   " 图标的提示信息
    ls_toolbar-butn_type = 0.        " 0表示正常按钮
    ls_toolbar-disabled = ''.        " X表示灰色,不可用
    ls_toolbar-text = '添加行'.       " 按钮上显示的文本
    APPEND ls_toolbar TO e_object->mt_toolbar.

    CLEAR: ls_toolbar.
    ls_toolbar-function = 'DEL'.    " 功能码
    ls_toolbar-icon = icon_delete_row.  " 图标名称
    ls_toolbar-quickinfo = '添加行'.   " 图标的提示信息
    ls_toolbar-butn_type = 0.        " 0表示正常按钮
    ls_toolbar-disabled = ''.        " X表示灰色,不可用
    ls_toolbar-text = '删除行'.       " 按钮上显示的文本
    APPEND ls_toolbar TO e_object->mt_toolbar.

    CLEAR: ls_toolbar.
    ls_toolbar-function = 'CREA'.    " 功能码
    ls_toolbar-icon = icon_create.  " 图标名称
    ls_toolbar-quickinfo = '创建'.   " 图标的提示信息
    ls_toolbar-butn_type = 0.        " 0表示正常按钮
    ls_toolbar-disabled = ''.        " X表示灰色,不可用
    ls_toolbar-text = '创建调拨PO'.       " 按钮上显示的文本
    APPEND ls_toolbar TO e_object->mt_toolbar.

  ENDMETHOD.                    "handle_toolbar
  " 实现USER-COMMAND 事件方法
  METHOD handle_command.
    CASE e_ucomm.
      WHEN 'ADD'.
        DATA(lv_line) = lines( gt_out ).
        READ TABLE gt_out INTO DATA(ls_out) INDEX lv_line.
        IF sy-subrc = 0.
          gs_out-werks = ls_out-werks.
          gs_out-reslo = ls_out-reslo.
          gs_out-lgort = ls_out-lgort.
          gs_out-lgobe1 = ls_out-lgobe1.
          gs_out-lgobe2 = ls_out-lgobe2.
        ENDIF.
        gs_out-box = 'X'.


        gs_out-znum = lv_line + 1.
        APPEND gs_out TO gt_out.
      WHEN 'DEL'.
        DATA: v_row TYPE i,  "行
              v_col TYPE i.         "列
        CALL METHOD gs_alv->get_current_cell
          IMPORTING
            e_row = v_row
            e_col = v_col.
        DELETE gt_out WHERE box = 'X' .
        LOOP AT gt_out ASSIGNING FIELD-SYMBOL(<fs_out>) WHERE znum > v_row.
          <fs_out>-znum = <fs_out>-znum - 1 .
        ENDLOOP.
      WHEN 'CREA'  .
        PERFORM frm_check_select.
        PERFORM frm_create_order.
    ENDCASE.
    PERFORM frm_refresh_alv.
  ENDMETHOD.

ENDCLASS.
*&---------------------------------------------------------------------*
*& SELECTION SCREEN/选择屏幕
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK blk WITH FRAME TITLE TEXT-001.
  PARAMETERS:p_werks TYPE mseg-werks  OBLIGATORY,                    "工厂
             p_reslo TYPE lgort_d,
             p_lgort TYPE lgort_d,
             p_rows  TYPE int1.

SELECTION-SCREEN END OF BLOCK blk.


*&---------------------------------------------------------------------*
*& INITIALIZATION/初始化事件
*&---------------------------------------------------------------------*
INITIALIZATION.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_reslo .
  PERFORM read_werks_values.
  PERFORM f4_2 .

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_lgort .
  PERFORM read_werks_values.
  PERFORM f4_1 .



*---------------------------------------------------------------------*
*  AT SELECTION-SCREEN/开始选择屏幕前                                 *
*---------------------------------------------------------------------*
AT SELECTION-SCREEN.
  IF sy-ucomm = 'ONLI'.
    AUTHORITY-CHECK OBJECT 'M_BEST_WRK'
*      ID 'ACTVT' FIELD '03'
     ID 'WERKS' FIELD p_werks.
    IF sy-subrc <> 0.
      MESSAGE '您没有查看该工厂的权限!' TYPE 'E'.
    ENDIF.
  ENDIF.

*&---------------------------------------------------------------------*
*& Start-of-selection/开始选择屏幕                                     *
*&---------------------------------------------------------------------*
START-OF-SELECTION.
  "获取数据
  PERFORM frm_get_data.

*&---------------------------------------------------------------------*
*& end-of-selection/结束选择屏幕(程序结束处理,输出等)               *
*&---------------------------------------------------------------------*
END-OF-SELECTION.
  CALL SCREEN 9000.                                         "调用屏幕9000

*&---------------------------------------------------------------------*
*& Form frm_get_data
*&------------------------------------- --------------------------------*
*& 获取数据
*&---------------------------------------------------------------------*
FORM frm_get_data.
  DATA lv_num TYPE int1.

  DO  p_rows TIMES.

    lv_num = lv_num + 1 .
    gs_out-znum = lv_num.
    gs_out-werks = p_werks.
    IF p_reslo IS NOT INITIAL.
      gs_out-reslo = p_reslo.
      SELECT SINGLE lgobe
        INTO gs_out-lgobe1
        FROM t001l
        WHERE werks = p_werks AND lgort = p_reslo.

    ENDIF.
    IF p_lgort IS NOT INITIAL.
      gs_out-lgort = p_lgort.
      SELECT SINGLE lgobe
        INTO gs_out-lgobe2
        FROM t001l
        WHERE werks = p_werks AND lgort = p_lgort.

    ENDIF.
    gs_out-box = 'X'.

    APPEND gs_out TO gt_out.
    CLEAR gs_out.

  ENDDO.

ENDFORM.
*&---------------------------------------------------------------------*
*& Module STATUS_9000 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE status_9000 OUTPUT.
  SET PF-STATUS 'STATUS_9000'.
  SET TITLEBAR 'TEXT01'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module INIT OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE init OUTPUT.

  IF gs_alv IS INITIAL.
    PERFORM frm_create_alv.
    "设置布局
    PERFORM frm_set_layout.
    "设置字段目录
    PERFORM frm_set_fieldcat.
    "ALV展示
    PERFORM frm_alv_out.
  ELSE.
    PERFORM frm_refresh_alv.
  ENDIF.

ENDMODULE.

*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_9000  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_9000 INPUT.
  DATA(lv_code) = ok_code.
  CLEAR ok_code.
  CASE lv_code.
    WHEN '&F03' OR '&F12' OR '&F15'.
      LEAVE TO SCREEN 0.
    WHEN '&ALL'. "全选
      PERFORM frm_sel_all.
    WHEN '&SAL'. "取消全选
      PERFORM frm_clear_all.
    WHEN '&CREATE'. "生成条码
      PERFORM frm_check_select.
      PERFORM frm_create_order.
      PERFORM frm_refresh_alv.
    WHEN OTHERS.
  ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Form frm_sel_all
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_sel_all.
  DATA: wlt_lines TYPE slis_t_filtered_entries,
        wls_line  TYPE LINE OF slis_t_filtered_entries.
  REFRESH wlt_lines.



  CALL FUNCTION 'REUSE_ALV_GRID_LAYOUT_INFO_GET'
    IMPORTING
      et_filtered_entries = wlt_lines
    EXCEPTIONS
      no_infos            = 1
      program_error       = 2
      OTHERS              = 3.
  SORT wlt_lines BY table_line.
  LOOP AT gt_out INTO gs_out WHERE box = ''.
    READ TABLE wlt_lines INTO wls_line WITH KEY table_line = sy-tabix BINARY SEARCH.
    IF sy-subrc <> 0.
      gs_out-box = 'X'.
      MODIFY gt_out FROM gs_out TRANSPORTING box.
    ENDIF.
  ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_clear_all
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_clear_all.
  DATA: wlt_lines TYPE slis_t_filtered_entries,
        wls_line  TYPE LINE OF slis_t_filtered_entries.
  REFRESH wlt_lines.
  CALL FUNCTION 'REUSE_ALV_GRID_LAYOUT_INFO_GET'
    IMPORTING
      et_filtered_entries = wlt_lines
    EXCEPTIONS
      no_infos            = 1
      program_error       = 2
      OTHERS              = 3.
  SORT wlt_lines BY table_line.
  LOOP AT gt_out INTO gs_out WHERE box = 'X'.
    READ TABLE wlt_lines INTO wls_line WITH KEY table_line = sy-tabix BINARY SEARCH.
    IF sy-subrc <> 0.
      gs_out-box = ''.
      MODIFY gt_out FROM gs_out TRANSPORTING box.
    ENDIF.
  ENDLOOP.
ENDFORM.

*&---------------------------------------------------------------------*
*& Form create_alv
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_create_alv.
  "创建容器
  CREATE OBJECT gs_con
    EXPORTING
      container_name = 'GC_CON'.   "customer control控件的名称

  "将ALV植入到容器中
  CREATE OBJECT gs_alv
    EXPORTING
      i_parent = gs_con.

  CREATE OBJECT gt_event_receiver.
  " 注册事件handler方法
  SET HANDLER gt_event_receiver->handle_modify FOR gs_alv.

  SET HANDLER gt_event_receiver->handle_toolbar FOR gs_alv.
  SET HANDLER gt_event_receiver->handle_command FOR gs_alv.

  CALL METHOD gs_alv->register_edit_event
    EXPORTING
      i_event_id = cl_gui_alv_grid=>mc_evt_enter. "回车触发事件
  CALL METHOD gs_alv->register_edit_event
    EXPORTING
      i_event_id = cl_gui_alv_grid=>mc_evt_modified. "修改完成后光标移动触发事件


ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_set_layout
*&---------------------------------------------------------------------*
*& 设置布局
*&---------------------------------------------------------------------*
FORM frm_set_layout .
  gs_layout-zebra = 'X'.
  gs_layout-cwidth_opt = 'X'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_set_fieldcat
*&---------------------------------------------------------------------*
*& 设置字段目录
*&---------------------------------------------------------------------*
FORM frm_set_fieldcat.
  DATA: lv_name    TYPE lvc_s_fcat-fieldname,
        lv_scrtext TYPE lvc_s_fcat-scrtext_l.

  REFRESH:gt_fieldcat.
  PERFORM frm_build_fieldcat USING :
    'BOX'         'X'  '' ''     ''              ''            ''    '勾选'       ,
    'ZNUM'        ''   '' ''     ''              ''            ''    '序号'  ,
    'MATNR'       'X'  '' 'X'    'MARA'          'MATNR'       ''    '物料编码' ,
    'TXZ01'       ''   '' ''     'MAKT'          'MAKTX'       ''    '物料名称' ,
    'ZZGG01'      ''   '' ''     'MARA'          'ZZGG01'      ''    '物料长文本' ,
    'MENGE'       'X'  '' 'X'    'EKPO'          'MENGE'       ''    '数量' ,
    'MEINS'       ''   '' ''     'EKPO'          'MEINS'       ''    '单位' ,
    'ZBREADTH'    'X'  '' 'X'    'ZTBC_001'      'ZBREADTH'    ''    '宽度MM' ,
    'ZLENGTH'     'X'  '' 'X'    'ZTBC_001'      'ZLENGTH'     ''    '长度M' ,
    'ZSJJS1'      'X'  '' 'X'    'ZTBC_001'      'ZSJJS1'      ''    '卷数' ,
    'INCO2'       'X'  '' 'X'    'ZTBC_001'      'ZBZFS1'      ''    '包装方式' ,
    'TDLINE'      'X'  '' 'X'    '/ATL/KPSP_T'   'MSGTXT'      ''    '备注'  ,
    'EINDT'       'X'  '' 'X'    'EKPO'          'AEDAT'       ''    '交货日期' ,
    'WERKS'       ''   '' 'X'    'EKPO'          'WERKS'       ''    '工厂' ,
    'RESLO'       'X'  '' 'X'    'T001L'         'LGORT'       ''    '发出库位' ,
    'LGOBE1'      ''   '' 'X'    'T001L'         'LGOBE'       ''    '发出库位名称' ,
    'LGORT'       'X'  '' 'X'    'T001L'         'LGORT'       ''    '接收库位' ,
    'LGOBE2'      ''   '' 'X'    'T001L'         'LGOBE'       ''    '接收库位名称' ,
    'MATKL'       ''   '' 'X'    'MARA'          'MATKL'       ''    '物料组' ,
    'WGBEZ'       ''   '' 'X'    'T023T'         'WGBEZ'       ''    '物料组名称' ,
    'VBELN'       'X'  '' 'X'    'VBAK'          'VBELN'       ''    '销售订单' ,
    'VBELP'       'X'  '' 'X'    'VBAP'          'POSNR'       ''    '销售订单项目' ,
    'EBELN'       ''   '' ''     ''              ''            ''    '采购订单' ,
    'EBELP'       ''   '' ''     ''              ''            ''    '订单项目' ,
    'ZSTATUS'     ''   '' ''     ''              ''            ''    '状态' ,
    'ZMESG'       ''   '' ''     ''              ''            ''    '消息' .

ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_build_fieldcat
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_build_fieldcat USING pv_fieldname
                              pv_edit
                              pv_no_out
                              pv_no_zero
                              pv_ref_table
                              pv_ref_field
                              pv_f4
                              pv_reptext.


  CLEAR gs_fieldcat.
  gs_fieldcat-fieldname    =  pv_fieldname.
  gs_fieldcat-edit         =  pv_edit.
  gs_fieldcat-no_out       =  pv_no_out.
  gs_fieldcat-no_zero      =  pv_no_zero.
  gs_fieldcat-ref_table    =  pv_ref_table.
  gs_fieldcat-ref_field    =  pv_ref_field.
  gs_fieldcat-f4availabl   =  pv_f4.
  gs_fieldcat-coltext      =  pv_reptext.
  gs_fieldcat-reptext      =  pv_reptext.
  gs_fieldcat-scrtext_l    =  pv_reptext.
  gs_fieldcat-scrtext_m    =  pv_reptext.
  gs_fieldcat-scrtext_s    =  pv_reptext.

  IF pv_fieldname = 'BOX'.
    gs_fieldcat-checkbox = 'X'.
    gs_fieldcat-intlen = 1.
  ENDIF.

  IF pv_fieldname = 'INCO2'  .
    gs_fieldcat-edit     = 'X'.               "可编辑
    gs_fieldcat-drdn_hndl = '1'.               "下拉框句柄1
  ENDIF.

  APPEND gs_fieldcat TO gt_fieldcat.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_alv_out
*&---------------------------------------------------------------------*
*& ALV展示
*&---------------------------------------------------------------------*
FORM frm_alv_out.
  DATA: lt_dropdown TYPE lvc_t_drop,
        ls_dropdown TYPE lvc_s_drop.
  DATA : gt_exclude TYPE ui_functions.
  DATA : ls_exclude TYPE ui_func.
  DATA : lv_save,
         ls_variant TYPE  disvariant.

  lv_save = 'A'.
  CONCATENATE sy-repid sy-dynnr INTO ls_variant-report.

  ls_exclude = cl_gui_alv_grid=>mc_fc_loc_insert_row .
  APPEND ls_exclude TO gt_exclude.
  ls_exclude = cl_gui_alv_grid=>mc_fc_loc_delete_row .
  APPEND ls_exclude TO gt_exclude.
  ls_exclude = cl_gui_alv_grid=>mc_fc_loc_append_row .
  APPEND ls_exclude TO gt_exclude.
  ls_exclude = cl_gui_alv_grid=>mc_fc_loc_copy_row .
  APPEND ls_exclude TO gt_exclude.

  SELECT domvalue_l,
  ddtext,
  valpos
  INTO TABLE @DATA(gt_dd07t)
  FROM dd07t
  WHERE domname = 'ZD_BAOZ' .

  SORT gt_dd07t BY valpos .
  LOOP AT gt_dd07t INTO DATA(gs_dd07t) .
*    lv_num = lv_num + 1 .
    CLEAR ls_dropdown .
    ls_dropdown-handle = '1'.                          "指定下拉框句柄
*    ls_dropdown-value = gs_dd07t-ddtext.
    CONCATENATE gs_dd07t-domvalue_l gs_dd07t-ddtext INTO ls_dropdown-value SEPARATED BY ' ' .
    APPEND ls_dropdown TO lt_dropdown.

  ENDLOOP .

*  ls_dropdown-handle = '1'.                          "指定下拉框句柄
*  ls_dropdown-value = '1 皇冠包装'.
*  APPEND ls_dropdown TO lt_dropdown.
*  ls_dropdown-handle = '1'.                          "指定下拉框句柄
*  ls_dropdown-value = '2 TSC红色印刷纸管,空白纸箱'.
*  APPEND ls_dropdown TO lt_dropdown.
*  ls_dropdown-handle = '1'.                          "指定下拉框句柄
*  ls_dropdown-value = '3 包装无要求'.
*  APPEND ls_dropdown TO lt_dropdown.
*  ls_dropdown-handle = '1'.                          "指定下拉框句柄
*  ls_dropdown-value = '4 出口空白包装'.
*  APPEND ls_dropdown TO lt_dropdown.
*  ls_dropdown-handle = '1'.                          "指定下拉框句柄
*  ls_dropdown-value = '5 出口空白包装 红色OPP'.
*  APPEND ls_dropdown TO lt_dropdown.
*  ls_dropdown-handle = '1'.                          "指定下拉框句柄
*  ls_dropdown-value = '6 出口空白包装 黄色OPP'.
*  APPEND ls_dropdown TO lt_dropdown.
*  ls_dropdown-handle = '1'.                          "指定下拉框句柄
*  ls_dropdown-value = '7 出口空白包装 蓝色OPP'.
*  APPEND ls_dropdown TO lt_dropdown.
*  ls_dropdown-handle = '1'.                          "指定下拉框句柄
*  ls_dropdown-value = '8 出口空白包装 绿色OPP'.
*  APPEND ls_dropdown TO lt_dropdown.
*  ls_dropdown-handle = '1'.                          "指定下拉框句柄
*  ls_dropdown-value = '9 出口空白包装,黑色OPP'.
*  APPEND ls_dropdown TO lt_dropdown.
*  ls_dropdown-handle = '1'.                          "指定下拉框句柄
*  ls_dropdown-value = '10 打托盘'.
*  APPEND ls_dropdown TO lt_dropdown.
*  ls_dropdown-handle = '1'.
*  ls_dropdown-value = '11 打成托盘,空白包装'.
*  APPEND ls_dropdown TO lt_dropdown.
*  ls_dropdown-handle = '1'.
*  ls_dropdown-value = '12 蒂森专用箱'.
*  APPEND ls_dropdown TO lt_dropdown.
*  ls_dropdown-handle = '1'.
*  ls_dropdown-value = '13 定制Stokvis纸管,空白箱'.
*  APPEND ls_dropdown TO lt_dropdown.
*  ls_dropdown-handle = '1'.
*  ls_dropdown-value = '14 独立包装'.
*  APPEND ls_dropdown TO lt_dropdown.
*  ls_dropdown-handle = '1'.
*  ls_dropdown-value = '15 广州张氏专用纸箱(美国出口)'.
*  APPEND ls_dropdown TO lt_dropdown.
*  ls_dropdown-handle = '1'.
*  ls_dropdown-value = '16 皇冠包装缠绕膜'.
*  APPEND ls_dropdown TO lt_dropdown.
*  ls_dropdown-handle = '1'.
*  ls_dropdown-value = '17 皇冠纸管,空白箱'.
*  APPEND ls_dropdown TO lt_dropdown.
*  ls_dropdown-handle = '1'.
*  ls_dropdown-value = '18 皇冠纸箱,空白纸管'.
*  APPEND ls_dropdown TO lt_dropdown.
*  ls_dropdown-handle = '1'.
*  ls_dropdown-value = '19 皇冠纸箱,空白纸管'.
*  APPEND ls_dropdown TO lt_dropdown.
*  ls_dropdown-handle = '1'.
*  ls_dropdown-value = '20 胶管复卷,泡泡膜包装'.
*  APPEND ls_dropdown TO lt_dropdown.
*  ls_dropdown-handle = '1'.
*  ls_dropdown-value = '21 空白包装用临时合格证'.
*  APPEND ls_dropdown TO lt_dropdown.
*  ls_dropdown-handle = '1'.
*  ls_dropdown-value = '22 空白纸管,牛皮纸包装'.
*  APPEND ls_dropdown TO lt_dropdown.
*  ls_dropdown-handle = '1'.
*  ls_dropdown-value = '23 空白纸管,泡泡膜包装'.
*  APPEND ls_dropdown TO lt_dropdown.
*  ls_dropdown-handle = '1'.
*  ls_dropdown-value = '24 气泡膜、空白瓦楞纸、缠绕膜'.
*  APPEND ls_dropdown TO lt_dropdown.
*  ls_dropdown-handle = '1'.
*  ls_dropdown-value = '25 空白包装'.
*  APPEND ls_dropdown TO lt_dropdown.
*  ls_dropdown-handle = '1'.
*  ls_dropdown-value = '26 悬空卡板,空白包装'.
*  APPEND ls_dropdown TO lt_dropdown.
*  ls_dropdown-handle = '1'.
*  ls_dropdown-value = '27 巨大牌纸箱'.
*  APPEND ls_dropdown TO lt_dropdown.
*  ls_dropdown-handle = '1'.
*  ls_dropdown-value = '28 气泡膜+珍珠棉+缠绕膜'.
*  APPEND ls_dropdown TO lt_dropdown.

  CALL METHOD gs_alv->set_drop_down_table        "调用alv类的下拉框方法
    EXPORTING
      it_drop_down = lt_dropdown.

  CALL METHOD gs_alv->set_table_for_first_display
    EXPORTING
*     i_buffer_active               =
*     i_bypassing_buffer            =
*     i_consistency_check           =
*     i_structure_name              =
      is_variant                    = ls_variant
      i_save                        = lv_save
*     i_default                     = 'X'
      is_layout                     = gs_layout
*     is_print                      =
*     it_special_groups             =
      it_toolbar_excluding          = gt_exclude
*     it_hyperlink                  =
*     it_alv_graphics               =
*     it_except_qinfo               =
*     ir_salv_adapter               =
    CHANGING
      it_outtab                     = gt_out
      it_fieldcatalog               = gt_fieldcat
*     it_sort                       =
*     it_filter                     =
    EXCEPTIONS
      invalid_parameter_combination = 1
      program_error                 = 2
      too_many_lines                = 3
      OTHERS                        = 4.
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form refresh_alv
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_refresh_alv.

  "获取ALV变化过后的布局参数
  CALL METHOD gs_alv->get_frontend_layout
    IMPORTING
      es_layout = gs_layout.
  "重新回写自适应宽度
  gs_layout-cwidth_opt = 'X'.
  CALL METHOD gs_alv->set_frontend_layout
    EXPORTING
      is_layout = gs_layout.

  gs_stable-row = 'X'.
  gs_stable-col = 'X'.

  CALL METHOD gs_alv->refresh_table_display
    EXPORTING
      is_stable = gs_stable.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_check_select
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_check_select.

  IF NOT line_exists( gt_out[ box = 'X' ] ).
    MESSAGE '请至少选择一个行项目' TYPE 'E'.
  ENDIF.


ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_create_order
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_create_order .
  DATA : lv_log TYPE c.
  LOOP AT  gt_out INTO DATA(gs_out3) WHERE box =  'X'.
    IF gs_out3-zstatus = 'S'.
      gs_out3-zstatus = 'E'.
      gs_out3-zmesg = '已经创建成功,不允许重复创建'.
      MODIFY gt_out FROM gs_out3.
      lv_log = 'X'.
    ENDIF.
  ENDLOOP.

  IF lv_log = 'X'.
    MESSAGE '已经创建成功,不允许重复创建' TYPE 'E'.
  ENDIF.

  DATA: poheader       TYPE bapimepoheader,   "采购订单抬头数据
        poheaderx      TYPE bapimepoheaderx,
        return         LIKE TABLE OF bapiret2  WITH HEADER LINE,
        poitem         LIKE TABLE OF bapimepoitem WITH HEADER LINE,       "采购订单项目
        poitemx        LIKE TABLE OF bapimepoitemx WITH HEADER LINE,
        poschedule     LIKE TABLE OF bapimeposchedule WITH HEADER LINE,  "采购订单交货计划行的字段
        poschedulex    LIKE TABLE OF bapimeposchedulx WITH HEADER LINE,
        poaccount      LIKE TABLE OF bapimepoaccount WITH HEADER LINE,    "采购订单的帐户分配字段
        poaccountx     LIKE TABLE OF bapimepoaccountx WITH HEADER LINE,
        potextitem     LIKE TABLE OF bapimepotext WITH HEADER LINE,
        lt_extensionin TYPE TABLE OF bapiparex,
        ls_extensionin TYPE  bapiparex,
        ls_mepoitem    TYPE bapi_te_mepoitem,
        ls_mepoitemx   TYPE bapi_te_mepoitemx.

  DATA lv_vbeln TYPE bapimepoheader-po_number.
  DATA lv_msg TYPE bapi_msg.
  FIELD-SYMBOLS: <wa>   TYPE any.

  DATA: lv_inco1 TYPE string,
        lv_inco2 TYPE string.

  CLEAR poheader.
  SELECT SINGLE bukrs INTO @DATA(lv_bukrs) FROM t001k WHERE bwkey = @p_werks.
  SELECT SINGLE ekorg INTO @DATA(lv_ekorg) FROM t001w WHERE werks = @p_werks.
  poheader-comp_code  = lv_bukrs.
  poheader-doc_type   = 'ZP50'.
  poheader-purch_org  = lv_ekorg.
  poheader-pur_group  = 'H00'.
  poheader-doc_date   = sy-datum.
  poheader-suppl_plnt = p_werks.

  poheaderx-comp_code   = 'X'.
  poheaderx-doc_type    = 'X'.
  poheaderx-purch_org   = 'X'.
  poheaderx-pur_group   = 'X'.
  poheaderx-doc_date    = 'X'.
  poheaderx-suppl_plnt  = 'X'.

  LOOP AT gt_out INTO  DATA(ls_out) WHERE box = 'X'.
    CLEAR : poitem ,poitemx , poschedule ,poschedulex,  poaccount ,poaccountx ,potextitem.
    poitem-po_item     = ls_out-znum.
    poitemx-po_item    = ls_out-znum.
    poitem-short_text  = ls_out-txz01.
    poitemx-short_text = 'X'.
    poitem-material    = ls_out-matnr.
    poitemx-material   = 'X'.
    poitem-plant       = p_werks.
    poitemx-plant      = 'X'.
    poitem-stge_loc    = ls_out-lgort.
    poitemx-stge_loc   = 'X'.
    poitem-po_unit     = ls_out-meins.
    poitemx-po_unit    = 'X'.
    IF ls_out-vbeln IS NOT INITIAL.
      poitem-acctasscat = 'M'.
      poitemx-acctasscat = 'X'.
    ENDIF.
    poitem-suppl_stloc  = ls_out-reslo.
    poitemx-suppl_stloc = 'X'.
*    poitem-trackingno   = ls_out-zbreadth.
*    poitemx-trackingno  = 'X'.
*    poitem-preq_name    =  ls_out-zlength.
*    poitemx-preq_name   =  'X'.
*    poitem-vendrbatch   =  ls_out-zsjjs1.
*    poitemx-vendrbatch  =  'X'.
    poitem-incoterms1   = 'FH'.
    poitemx-incoterms1  = 'X'.
*    poitem-incoterms2   = ls_out-inco2.
*    poitemx-incoterms2  = 'X'.
    poitem-quantity = ls_out-menge.
    poitemx-quantity = 'X'.
    APPEND poitem.
    APPEND poitemx.

    poschedule-po_item  = ls_out-znum.
    poschedulex-po_item = ls_out-znum.
    poschedule-delivery_date  = ls_out-eindt.
    poschedulex-delivery_date = 'X'.
    poschedule-quantity  = ls_out-menge.
    poschedulex-quantity = 'X'.
    APPEND poschedule.
    APPEND poschedulex.

    poaccount-po_item =  ls_out-znum.
    poaccountx-po_item =  ls_out-znum.
    poaccount-sd_doc =  ls_out-vbeln.
    poaccountx-sd_doc =  'X'.
    poaccount-itm_number =  ls_out-vbelp.
    poaccountx-itm_number =  'X'.
    APPEND poaccount.
    APPEND poaccountx.

    potextitem-po_item = ls_out-znum.
    potextitem-text_line = ls_out-tdline.
    APPEND potextitem.


**BAPI增强字段
    ls_mepoitem-po_item = ls_out-znum.

    SPLIT ls_out-inco2 AT '' INTO lv_inco1 lv_inco2.
    ls_mepoitem-zpack   = lv_inco1.               "包装方式


    CLEAR :lv_inco1,lv_inco2.

    ls_mepoitem-zvolume = ls_out-zsjjs1.              "卷数
    ls_mepoitem-zlength = ls_out-zlength.             "长度M
    ls_mepoitem-zwidth  = ls_out-zbreadth.            "宽度MM
    ls_extensionin-structure = 'BAPI_TE_MEPOITEM'.
    CALL METHOD cl_abap_container_utilities=>fill_container_c
      EXPORTING
        im_value     = ls_mepoitem
      IMPORTING
        ex_container = ls_extensionin-valuepart1.                        "增强结构数据
    APPEND ls_extensionin TO lt_extensionin.


    ls_mepoitemx-po_item = ls_out-znum.
    ls_mepoitemx-zpack = 'X'.
    ls_mepoitemx-zvolume = 'X'.
    ls_mepoitemx-zlength = 'X'.
    ls_mepoitemx-zwidth = 'X'.
    ls_extensionin-structure = 'BAPI_TE_MEPOITEMX'.
    ls_extensionin-valuepart1 = ls_mepoitemx.
    APPEND ls_extensionin TO lt_extensionin.




  ENDLOOP.


  CALL FUNCTION 'BAPI_PO_CREATE1'
    EXPORTING
      poheader         = poheader
      poheaderx        = poheaderx
    IMPORTING
      exppurchaseorder = lv_vbeln
    TABLES
      return           = return
      poitem           = poitem
      poitemx          = poitemx
      poschedule       = poschedule
      poschedulex      = poschedulex
      poaccount        = poaccount
      poaccountx       = poaccountx
      potextitem       = potextitem
      extensionin      = lt_extensionin.

  IF line_exists( return[ type = 'E' ] ).
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    LOOP AT return INTO DATA(ls_return) WHERE type = 'E' .
      lv_msg = lv_msg && ls_return-message.
    ENDLOOP.
    LOOP AT gt_out ASSIGNING FIELD-SYMBOL(<fs_out>).
      <fs_out>-zstatus = 'E'.
      <fs_out>-zmesg = lv_msg.
    ENDLOOP.
  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait = 'X'.
*    MESSAGE lv_vbeln && '创建成功' TYPE 'S'.
    LOOP AT gt_out ASSIGNING FIELD-SYMBOL(<fs_out2>).
      <fs_out2>-zstatus = 'S'.
      lv_msg = '采购订单' && lv_vbeln && '创建成功!' .
      <fs_out2>-zmesg = lv_msg.
      <fs_out2>-ebeln = lv_vbeln.
      <fs_out2>-ebelp = <fs_out2>-znum.
    ENDLOOP.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form f4
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM f4_1 .

  SELECT  lgort lgobe
   INTO TABLE itab
   FROM t001l
   WHERE werks = p_werks.

  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      retfield         = 'LGORT'
      dynpprog         = sy-repid
      dynpnr           = sy-dynnr
      dynprofield      = 'P_LGORT'
      value_org        = 'S'
      callback_program = sy-repid
*     callback_form    = 'CB_FORM'
    TABLES
      value_tab        = itab
      return_tab       = return_tab
    EXCEPTIONS
      parameter_error  = 1
      no_values_found  = 2
      OTHERS           = 3.
  READ TABLE return_tab INTO DATA(ls_ret) INDEX 1 .
  p_lgort = ls_ret-fieldval.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form f4
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM f4_2 .

  SELECT  lgort lgobe
   INTO TABLE itab
   FROM t001l
   WHERE werks = p_werks.

  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      retfield         = 'LGORT'
      dynpprog         = sy-repid
      dynpnr           = sy-dynnr
      dynprofield      = 'P_RESLO'
      value_org        = 'S'
      callback_program = sy-repid
*     callback_form    = 'CB_FORM'
    TABLES
      value_tab        = itab
      return_tab       = return_tab
    EXCEPTIONS
      parameter_error  = 1
      no_values_found  = 2
      OTHERS           = 3.
  READ TABLE return_tab INTO DATA(ls_ret) INDEX 1 .
  p_reslo = ls_ret-fieldval.
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  cb_form
*&---------------------------------------------------------------------*
FORM cb_form TABLES record_tab STRUCTURE seahlpres
              CHANGING shlp TYPE shlp_descr
                       callcontrol LIKE ddshf4ctrl.
  DATA: interface LIKE LINE OF shlp-interface.
  READ TABLE shlp-interface INTO interface INDEX 1.
  interface-shlpfield+4(1) = '2'.
  interface-valfield = 'P_RESLO'.
  APPEND interface TO shlp-interface.
ENDFORM.                    "bo_callback_form
*&---------------------------------------------------------------------*
*& Form read_werks_values
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM read_werks_values .
  DATA: dynpfields TYPE TABLE OF dynpread WITH HEADER LINE.

  CLEAR:
  dynpfields, dynpfields[].
  dynpfields-fieldname = 'P_WERKS'. "填入需要读值的字段名

  APPEND dynpfields.

  CALL FUNCTION 'DYNP_VALUES_READ'
    EXPORTING
      dyname             = sy-repid
      dynumb             = sy-dynnr
      translate_to_upper = 'X'
    TABLES
      dynpfields         =
                           dynpfields
    EXCEPTIONS
      OTHERS             = 9.
  IF sy-subrc = 0.

    READ TABLE dynpfields WITH KEY fieldname = 'P_WERKS'.
    p_werks =
  dynpfields-fieldvalue. "备注
  ENDIF.
ENDFORM.


原文地址:https://www.cnblogs.com/Hao9933/p/16173264.html


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ABAP OOALV是一种在ABAP编程语言中面向对象的方式实现的ALV(ABAP List Viewer)报表。它提供了更灵活和可扩展的方式来创建和展示报表数据。 以下是ABAP OOALV的一些关键步骤和示例代码[^1][^2]: 1. 定义变量和选择屏幕定义:在ABAP程序中定义所需的变量,并选择适当的屏幕定义。 2. 创建类:创建一个类来处理ALV报表的逻辑和功能。这个类应该继承自`CL_GUI_ALV_GRID`类。 3. 调用函数:在类中定义一个方法来调用ALV函数模块,例如`REUSE_ALV_GRID_DISPLAY`。 4. 获取数据并展示:在类中定义一个方法来获取报表数据,并将数据传递给ALV函数模块。 5. 表头字段设置:在类中定义一个方法来设置ALV报表的表头字段。 6. ALV输出格式:在类中定义一个方法来设置ALV报表的输出格式,例如列宽、对齐方式等。 7. 展示ALV:在类中定义一个方法来展示ALV报表。 8. 其他:根据需要,可以在类中定义其他方法来处理特定的功能,例如处理单击事件、排序等。 下面是一个简单的示例代码,演示了如何使用ABAP OOALV来创建和展示一个简单的报表: ```abap CLASS lcl_alv_report DEFINITION. PUBLIC SECTION. METHODS: constructor, display_alv. PRIVATE SECTION. DATA: lo_alv_grid TYPE REF TO cl_gui_alv_grid. METHODS: get_data, set_field_catalog, set_layout. ENDCLASS. CLASS lcl_alv_report IMPLEMENTATION. METHOD constructor. CREATE OBJECT lo_alv_grid EXPORTING i_parent = cl_gui_container=>screen0. ENDMETHOD. METHOD display_alv. CALL METHOD lo_alv_grid->set_table_for_first_display EXPORTING i_structure_name = 'SPFLI' CHANGING it_outtab = lt_spfli. ENDMETHOD. METHOD get_data. SELECT * FROM spfli INTO TABLE lt_spfli. ENDMETHOD. METHOD set_field_catalog. DATA: lt_fieldcat TYPE lvc_t_fcat. FIELD-SYMBOLS: <fs_fieldcat> TYPE lvc_s_fcat. CALL METHOD lo_alv_grid->get_frontend_fieldcatalog RECEIVING rt_fieldcatalog = lt_fieldcat. LOOP AT lt_fieldcat ASSIGNING <fs_fieldcat>. <fs_fieldcat>-outputlen = 20. ENDLOOP. CALL METHOD lo_alv_grid->set_frontend_fieldcatalog EXPORTING it_fieldcatalog = lt_fieldcat. ENDMETHOD. METHOD set_layout. DATA: lo_layout TYPE REF TO cl_gui_alv_layout. CREATE OBJECT lo_layout EXPORTING i_grid_title = 'ALV Report'. CALL METHOD lo_alv_grid->set_layout EXPORTING is_layout = lo_layout. ENDMETHOD. ENDCLASS. DATA: lo_report TYPE REF TO lcl_alv_report. START-OF-SELECTION. CREATE OBJECT lo_report. lo_report->get_data( ). lo_report->set_field_catalog( ). lo_report->set_layout( ). lo_report->display_alv( ). ``` 这是一个简单的ABAP OOALV报表的示例,它获取了`SPFLI`表中的数据,并展示在ALV报表中。你可以根据自己的需求进行修改和扩展。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值