SAP 生产订单组件修改

1.使用新函数:CO_SE_PRODORD_CMP_CHANGE

直接使用CO_XT_COMPONENT_CHANGE门槛很高,CO_SE_PRODORD_CMP_CHANGE是对CO_XT_COMPONENT_CHANGE的封装。

简单测试能修改成功组件需求数量,不知道有没有坑

复制代码
DATA: lt_components TYPE cose_t_cmp_change,
      ls_component  TYPE cose_s_cmp_change,
      ls_return     TYPE bapiret2,
      lv_error      TYPE xfeld.

ls_component-reservation_no = '0000064367'.
ls_component-reservation_item = '0002'.
ls_component-reservation_type = space.

SELECT SINGLE werks matnr
  INTO ( ls_component-plant,ls_component-material )
  FROM resb
 WHERE rsnum = ls_component-reservation_no
  AND rspos = ls_component-reservation_item
  AND rsart = ls_component-reservation_type.

ls_component-plant_x = abap_true.
ls_component-material_x = abap_true.

ls_component-quantity = 417.
ls_component-quantity_x = abap_true.
APPEND ls_component TO lt_components.
CLEAR ls_component.

CALL FUNCTION 'CO_SE_PRODORD_CMP_CHANGE'
  EXPORTING
    iv_order_number  = '000040005104'
    it_components    = lt_components
*   IV_REFRESH       = ABAP_TRUE
    iv_commit        = 'X'
  IMPORTING
    es_return        = ls_return
    e_error_occurred = lv_error.

2.还可以使用传统BAPI

BAPI_NETWORK_COMP_CHANGE

BAPI_NETWORK_COMP_ADD

BAPI_NETWORK_COMP_REMOVE

复制代码
*&---------------------------------------------------------------------*
*& Report ZPPD006
*&---------------------------------------------------------------------*
*& 生产订单组件批量导入
*&---------------------------------------------------------------------*
REPORT zppd006.

TABLES: sscrfields.


TYPES: BEGIN OF ty_out,
*        sel            TYPE char01,
         icon             TYPE char4,
         pre_check_type   TYPE bapiret2-type,
         aufnr            TYPE afko-aufnr, "生产订单号
         werks            TYPE werks_d,   "工厂
         lgort            TYPE lgort_d,   "库存地点
         matnr            TYPE matnr,     "物料
         maktx            TYPE makt-maktx,
         charg            TYPE charg_d,   "批次
         entry_quantity   TYPE co_menge,  "数量
         base_uom         TYPE meins,     "单位
         backflush        TYPE rgekz,     "反冲标识
         type_of_pur_resv TYPE type_of_pur_resv, "采购需求类型
         type             TYPE bapiret2-type,
         message          TYPE bapiret2-message,
       END OF ty_out.


DATA:gt_out  TYPE  TABLE OF ty_out.

* ALV相关的变量
DATA: go_grid     TYPE REF TO cl_gui_alv_grid,
      gs_layout   TYPE lvc_s_layo,
      gt_fieldcat TYPE lvc_t_fcat,
      gs_variant  TYPE disvariant,
      gs_fieldcat LIKE LINE OF gt_fieldcat,
      gt_exclude  TYPE slis_t_extab,
      gv_repid    TYPE syrepid.



SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-t01.

PARAMETERS:p_file TYPE rlgrap-filename.

SELECTION-SCREEN END OF BLOCK b1.

SELECTION-SCREEN:FUNCTION KEY 1.

INITIALIZATION.
  PERFORM initializtion.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
  PERFORM frm_file_path USING p_file.


AT SELECTION-SCREEN.
  CASE sscrfields-ucomm.
    WHEN 'FC01'.
      PERFORM frm_download_template.
  ENDCASE.


START-OF-SELECTION.

  IF p_file IS INITIAL.
    MESSAGE s001(00) WITH '请选择导入模板' DISPLAY LIKE 'E'.
    LEAVE LIST-PROCESSING.
  ENDIF.

  PERFORM frm_upload.
  PERFORM frm_call_bapi.
  PERFORM frm_proc_data.
  PERFORM frm_display_alv.





*&---------------------------------------------------------------------*
*& Form INITIALIZTION
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM initializtion .

  sscrfields-functxt_01 = icon_export && '下载模板'.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_FILE_PATH
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*      -->p_path  text
*&---------------------------------------------------------------------*
FORM frm_file_path USING p_path.
  CALL FUNCTION 'F4_FILENAME'
    EXPORTING
      program_name  = syst-cprog
      dynpro_number = syst-dynnr
*     FIELD_NAME    = ' '
    IMPORTING
      file_name     = p_path.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DOWNLOAD_TEMPLATE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_download_template.

  DATA: lv_file              TYPE rlgrap-filename,
        lv_objid             TYPE wwwdata-objid,
        ls_key               LIKE wwwdatatab,
        lv_subrc             TYPE sy-subrc,
        lv_filename          TYPE string,
        lv_path              TYPE string,
        lv_fullpath          TYPE string,
        lv_default_file_name TYPE string,
        lv_fname             TYPE string.

  CASE sscrfields-ucomm..
    WHEN 'FC01'.

      lv_fname = |生产订单组件导入模板{ sy-datum }{ sy-uzeit }.xlsx|.

      DATA:lv_title TYPE string.

      lv_title = '选择文件'.
      CALL METHOD cl_gui_frontend_services=>file_save_dialog
        EXPORTING
*         window_title         = '请选择路径'
          window_title         = lv_title
          default_file_name    = lv_fname
          file_filter          = 'Excel (*.xlsx)'
        CHANGING
          filename             = lv_filename
          path                 = lv_path
          fullpath             = lv_fullpath
        EXCEPTIONS
          cntl_error           = 1
          error_no_gui         = 2
          not_supported_by_gui = 3
          OTHERS               = 4.
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                   WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.

      IF lv_fullpath IS INITIAL.
        RETURN.
*        LEAVE LIST-PROCESSING.
      ENDIF.

      lv_file = lv_fullpath.
      lv_objid = 'ZPPD006'.


      SELECT SINGLE *
        FROM wwwdata
        INTO CORRESPONDING FIELDS OF ls_key
        WHERE objid = lv_objid
          AND relid = 'MI'.

      CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
        EXPORTING
          key         = ls_key
          destination = lv_file
        IMPORTING
          rc          = lv_subrc.
      IF lv_subrc = 0.
        MESSAGE s000(zmm001).

      ENDIF.
    WHEN OTHERS.
  ENDCASE.

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


  DATA:lt_file   TYPE STANDARD TABLE OF alsmex_tabline,
       ls_file   TYPE alsmex_tabline,
       lv_filenm LIKE rlgrap-filename.


  TYPES: BEGIN OF ty_data,
           aufnr            TYPE afko-aufnr, "生产订单号
           werks            TYPE werks_d,   "工厂
           lgort            TYPE lgort_d,   "库存地点
           matnr            TYPE matnr,     "物料
           charg            TYPE charg_d,   "批次
           entry_quantity   TYPE co_menge,  "数量
           base_uom         TYPE meins,     "单位
           backflush        TYPE rgekz,     "反冲标识
           type_of_pur_resv TYPE type_of_pur_resv, "采购需求类型
         END OF ty_data.

  DATA: lt_data TYPE TABLE OF ty_data,
        ls_data TYPE ty_data,
        ls_out  TYPE ty_out.


  FIELD-SYMBOLS: <fs> TYPE any.


* File
  lv_filenm = p_file.

  CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      filename                = lv_filenm
      i_begin_col             = 1
      i_begin_row             = 2       "
      i_end_col               = 10     " 最大列数
      i_end_row               = 10000   "最大行数
    TABLES
      intern                  = lt_file
    EXCEPTIONS
      inconsistent_parameters = 1
      upload_ole              = 2
      OTHERS                  = 3.

  IF sy-subrc <> 0.
    MESSAGE s002(zmm001) DISPLAY LIKE 'E'.
    LEAVE LIST-PROCESSING.
  ENDIF.

  TRY.
      LOOP AT lt_file INTO ls_file.
        ASSIGN COMPONENT ls_file-col OF STRUCTURE ls_data TO <fs>.  "动态方法将值传到相应的内表
        IF <fs> IS ASSIGNED.
          <fs> = ls_file-value.
        ENDIF.

        AT END OF row.
          APPEND ls_data TO lt_data.
          CLEAR ls_data.
        ENDAT.
      ENDLOOP.

    CATCH cx_root INTO DATA(lo_ex).

      MESSAGE lo_ex->get_text( ) TYPE 'S' DISPLAY LIKE 'E'.
      LEAVE LIST-PROCESSING.
  ENDTRY.

  DATA: lv_msg TYPE string.

  LOOP AT lt_data INTO ls_data.

    MOVE-CORRESPONDING ls_data TO ls_out.

    ls_out-aufnr = |{ ls_out-aufnr ALPHA = IN }|.

    CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
      EXPORTING
        input        = ls_out-matnr
      IMPORTING
        output       = ls_out-matnr
      EXCEPTIONS
        length_error = 1
        OTHERS       = 2.


    SELECT COUNT(*)
      FROM afko
     WHERE aufnr = ls_out-aufnr.
    IF sy-subrc NE 0.
      ls_out-pre_check_type = 'E'.
      ls_out-icon = icon_red_light.
      ls_out-message = |生产订单:{ ls_data-aufnr }不存在|.
      CONDENSE ls_out-message NO-GAPS.

    ENDIF.


    IF ls_out-pre_check_type IS INITIAL.
      SELECT COUNT(*)
        FROM t001l
       WHERE werks = ls_out-werks
        AND  lgort = ls_out-lgort.
      IF sy-subrc NE 0.
        ls_out-pre_check_type = 'E'.
        ls_out-icon = icon_red_light.
        ls_out-message = |工厂{ ls_out-werks },库存地点{ ls_out-lgort }不存在|.
      ENDIF.
    ENDIF.

    IF ls_out-pre_check_type IS INITIAL.
      SELECT SINGLE meins INTO @DATA(lv_meins)
        FROM mara
       WHERE matnr = @ls_out-matnr.
      IF sy-subrc NE 0.
        ls_out-pre_check_type = 'E'.
        ls_out-icon = icon_red_light.
        ls_out-message = |物料{ ls_out-matnr }不存在|.
        CONDENSE ls_out-message NO-GAPS.
      ENDIF.
    ENDIF.


    IF ls_out-entry_quantity IS INITIAL.
      ls_out-pre_check_type = 'E'.
      ls_out-icon = icon_red_light.

      IF ls_out-message IS INITIAL.
        ls_out-message = '数量必填'.
      ELSE.
        ls_out-message = ls_out-message && '/数量必填'.
      ENDIF.
    ENDIF.

    IF ls_out-base_uom IS INITIAL.
      ls_out-base_uom = lv_meins.
    ELSE.

      CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
        EXPORTING
          input          = ls_out-base_uom
        IMPORTING
          output         = ls_out-base_uom
        EXCEPTIONS
          unit_not_found = 1
          OTHERS         = 2.
      IF sy-subrc NE 0.
        ls_out-pre_check_type = 'E'.
        ls_out-icon = icon_red_light.

        IF ls_out-message IS INITIAL.
          ls_out-message = |单位{ ls_out-base_uom }不存在|.
        ELSE.
          ls_out-message = ls_out-message && |/单位{ ls_out-base_uom }不存在|.
        ENDIF.

      ENDIF.


    ENDIF.


    APPEND ls_out TO gt_out.

    CLEAR:
    ls_data,
    lv_meins,
    ls_out.
  ENDLOOP.

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

  DATA: "lt_comp           TYPE TABLE OF bapi_network_comp_list,
    "ls_comp           TYPE bapi_network_comp_list,
    lt_comp1          TYPE TABLE OF bapi_order_component,
    lt_comp_remove    TYPE TABLE OF bapi_network_comp_id,
    ls_comp_remove    TYPE bapi_network_comp_id,
    lt_message        TYPE TABLE OF bapi_meth_message,
    ls_message        TYPE bapi_meth_message,
    lt_comp_add       TYPE TABLE OF bapi_network_comp_add,
    ls_comp_add       TYPE bapi_network_comp_add,
    lt_comp_change    TYPE TABLE OF bapi_network_comp_change,
    ls_comp_change    TYPE bapi_network_comp_change,
    lt_comp_change_ud TYPE TABLE OF bapi_network_comp_cng_upd,
    ls_comp_change_ud TYPE bapi_network_comp_cng_upd,
    ls_order_objects  TYPE bapi_pp_order_objects,
    lt_operation      TYPE TABLE OF bapi_order_operation1,
    lv_vornr          TYPE cn_vornr,
    lv_itemno         TYPE aposn,
    lv_maxno          TYPE aposn,
    lv_msg            TYPE string,
    lv_msgty          TYPE bapiret2-type.

  DATA: BEGIN OF lt_change OCCURS 0,
          matnr TYPE matnr,
          charg TYPE resb-charg,
        END OF lt_change.


  DATA: BEGIN OF lt_add OCCURS 0,
          matnr TYPE matnr,
          charg TYPE resb-charg,
        END OF lt_add.

  LOOP AT gt_out INTO DATA(ls_group) WHERE pre_check_type NE 'E'
                                      GROUP BY ( aufnr = ls_group-aufnr ).

    CLEAR:
    ls_order_objects,
    lt_operation[],
    lt_comp1[],
*   lt_comp[],
    lt_comp_change[],
    lt_comp_change_ud[],
    lt_message[],
    lt_change[],
    lt_add[],
    lv_maxno,
    lv_itemno,
    lv_vornr.

    ls_order_objects-operations = abap_true.
    ls_order_objects-components = abap_true.

    CALL FUNCTION 'BAPI_PRODORD_GET_DETAIL'
      EXPORTING
        number        = ls_group-aufnr
        order_objects = ls_order_objects
      TABLES
        operation     = lt_operation
        component     = lt_comp1.


    READ TABLE lt_operation INTO DATA(ls_operation) INDEX 1.
    IF sy-subrc = 0.
      lv_vornr = ls_operation-operation_number.
    ENDIF.

    SORT lt_comp1 BY item_number DESCENDING.
    READ TABLE lt_comp1 INTO DATA(ls_comp1) INDEX 1.
    IF sy-subrc = 0.
      lv_maxno = ls_comp1-item_number.
    ELSE.
      lv_maxno = '0000'.
    ENDIF.

    lv_itemno = lv_maxno.


*    CALL FUNCTION 'BAPI_NETWORK_COMP_GETLIST'
*      EXPORTING
*        number            = ls_group-aufnr
*      TABLES
*        e_components_list = lt_comp.
*
** 排除已删除的行
*    PERFORM frm_filter_deldata TABLES lt_comp1
*                                      lt_comp.
*
*    SORT lt_comp BY material_long.

    DELETE lt_comp1 WHERE deletion_indicator = abap_true.
    SORT lt_comp1 BY material_long batch.


    LOOP AT gt_out INTO DATA(ls_out) WHERE pre_check_type NE 'E'
                                     AND aufnr = ls_group-aufnr.
      CLEAR:
      ls_comp1,
      ls_comp_change,ls_comp_change_ud.

      TRANSLATE ls_out-backflush TO UPPER CASE.

      READ TABLE lt_comp1 INTO ls_comp1 WITH KEY material_long = ls_out-matnr
                                                 batch = ls_out-charg
      BINARY SEARCH.
      IF sy-subrc = 0.    "修改

        ls_comp_change-component = ls_comp1-reservation_number && ls_comp1-reservation_item && ls_comp1-reservation_type.
        ls_comp_change_ud-component = ls_comp_change-component.

        ls_comp_change-entry_quantity = ls_out-entry_quantity.
        ls_comp_change_ud-entry_quantity = abap_true.

        ls_comp_change-base_uom = ls_out-base_uom.
        ls_comp_change_ud-base_uom = abap_true.

        ls_comp_change-stge_loc = ls_out-lgort.
        ls_comp_change_ud-stge_loc = abap_true.

        ls_comp_change-batch = ls_out-charg.
        ls_comp_change_ud-batch = abap_true.

        ls_comp_change-backflush = ls_out-backflush.
        ls_comp_change_ud-backflush = abap_true.

        lt_change-matnr = ls_out-matnr.
        lt_change-charg = ls_out-charg.
        APPEND ls_comp_change TO lt_comp_change.
        APPEND ls_comp_change_ud TO lt_comp_change_ud.
        APPEND lt_change.
        CLEAR: lt_change.


      ELSE.               "新增

        lv_itemno = lv_itemno + 10.

        CALL FUNCTION 'CONVERSION_EXIT_NUMCV_INPUT'
          EXPORTING
            input  = lv_itemno
          IMPORTING
            output = lv_itemno.

        ls_comp_add-item_number = lv_itemno.
        ls_comp_add-activity = lv_vornr.
        ls_comp_add-material_long =  ls_out-matnr.
        ls_comp_add-entry_quantity = ls_out-entry_quantity.
        ls_comp_add-type_of_pur_resv  = ls_out-type_of_pur_resv. "采购需求类型
        ls_comp_add-base_uom = ls_out-base_uom.
        ls_comp_add-backflush = ls_out-backflush.
        ls_comp_add-item_cat = 'L'."项目类别
        ls_comp_add-plant = ls_out-werks.
        ls_comp_add-stge_loc = ls_out-lgort.
        ls_comp_add-batch = ls_out-charg.
        APPEND ls_comp_add TO lt_comp_add.
        CLEAR: ls_comp_add.

        lt_add-matnr = ls_out-matnr.
        lt_add-charg = ls_out-charg.
        APPEND lt_add.
        CLEAR: lt_add.

      ENDIF.

    ENDLOOP.

    CLEAR:
    lv_msg,
    lv_msgty.

    IF lt_comp_change[] IS NOT INITIAL.

      SORT lt_change BY matnr charg.

      CALL FUNCTION 'BAPI_PS_INITIALIZATION'.

      SET UPDATE TASK LOCAL.
      CALL FUNCTION 'BAPI_NETWORK_COMP_CHANGE'
        EXPORTING
          number                     = ls_group-aufnr
*       IMPORTING
*         RETURN                     =
        TABLES
          i_components_change        = lt_comp_change
          i_components_change_update = lt_comp_change_ud
          e_message_table            = lt_message.


      LOOP AT lt_message INTO ls_message WHERE message_type CA 'AEX'.

        lv_msg = lv_msg && ls_message-message_text.

        CLEAR:ls_message.
      ENDLOOP.

      IF sy-subrc = 0.
        lv_msgty = 'E'.
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

      ELSE.

        lv_msgty = 'S'.
        lv_msg = '修改成功'.

        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait = abap_true.
      ENDIF.


      LOOP AT gt_out ASSIGNING FIELD-SYMBOL(<fs_out>) WHERE aufnr = ls_group-aufnr
                                                       AND pre_check_type NE 'E'.
        READ TABLE lt_change TRANSPORTING NO FIELDS WITH KEY matnr = <fs_out>-matnr
                                                             charg = <fs_out>-charg
        BINARY SEARCH.
        IF sy-subrc = 0.
          <fs_out>-type = lv_msgty.
          <fs_out>-message = lv_msg.

          IF lv_msgty = 'E'.
            <fs_out>-icon = icon_red_light.
          ELSE.
            <fs_out>-icon = icon_green_light.
          ENDIF.
        ENDIF.
      ENDLOOP.
    ENDIF.


    CLEAR: lv_msg,lv_msgty,lt_message.
    IF lt_comp_add[] IS NOT INITIAL.

      SORT lt_add BY matnr charg.

      CALL FUNCTION 'BAPI_PS_INITIALIZATION'.

      SET UPDATE TASK LOCAL.
      CALL FUNCTION 'BAPI_NETWORK_COMP_ADD'
        EXPORTING
          number           = ls_group-aufnr
        TABLES
          i_components_add = lt_comp_add
          e_message_table  = lt_message.


      LOOP AT lt_message INTO ls_message WHERE message_type CA 'AEX'.
        lv_msg = lv_msg && ls_message-message_text.
        CLEAR:ls_message.
      ENDLOOP.
      IF sy-subrc = 0.
        lv_msgty = 'E'.
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
      ELSE.
        lv_msgty = 'S'.
        lv_msg = '新增成功'.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait = abap_true.
      ENDIF.

      LOOP AT gt_out ASSIGNING <fs_out> WHERE aufnr = ls_group-aufnr
                                         AND pre_check_type NE 'E'.
        READ TABLE lt_add TRANSPORTING NO FIELDS WITH KEY matnr = <fs_out>-matnr
                                                          charg = <fs_out>-charg
        BINARY SEARCH.
        IF sy-subrc = 0.
          <fs_out>-type = lv_msgty.
          <fs_out>-message = lv_msg.

          IF lv_msgty = 'E'.
            <fs_out>-icon = icon_red_light.
          ELSE.
            <fs_out>-icon = icon_green_light.
          ENDIF.
        ENDIF.
      ENDLOOP.

    ENDIF.

    CLEAR: ls_group.

  ENDLOOP.


ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_FILTER_DELDATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*      -->P_LT_COMP1  text
*      -->P_LT_COMP  text
*&---------------------------------------------------------------------*
*FORM frm_filter_deldata  TABLES   lt_comp1 STRUCTURE bapi_order_component
*                                  lt_comp STRUCTURE bapi_network_comp_list.
*
*
*  DATA:lt_comp_del TYPE TABLE OF bapi_network_comp_list,
*       ls_comp     TYPE bapi_network_comp_list.
*
*
*  LOOP AT lt_comp1 INTO DATA(ls_comp1) WHERE deletion_indicator = abap_true.
*    ls_comp-component = ls_comp1-reservation_number && ls_comp1-reservation_item.
*    ls_comp-material = ls_comp1-material.
*    ls_comp-material_long = ls_comp1-material_long.
*    ls_comp-plant = ls_comp1-prod_plant.
*    APPEND ls_comp TO lt_comp_del.
*    CLEAR: ls_comp.
*  ENDLOOP.
*
*  SORT lt_comp_del BY component.
*
*  LOOP AT lt_comp INTO ls_comp.
*    READ TABLE lt_comp_del TRANSPORTING NO FIELDS WITH KEY component = ls_comp-component BINARY SEARCH.
*    IF sy-subrc = 0.
*      DELETE lt_comp.
*    ENDIF.
*  ENDLOOP.
*
*
*ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_ALV
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_display_alv .

  DATA:ls_layout TYPE lvc_s_layo.

  ls_layout-zebra      = abap_true.
  ls_layout-sel_mode   = 'A'.
  ls_layout-cwidth_opt = abap_true.

  PERFORM frm_build_fieldcat.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program = sy-cprog
      i_bypassing_buffer = abap_true
      is_layout_lvc      = ls_layout
      it_fieldcat_lvc    = gt_fieldcat
*     i_callback_pf_status_set = 'FRM_PF_STATUS'
*     i_callback_user_command  = 'FRM_USER_COMMAND'
*     it_events          = lt_event
    TABLES
      t_outtab           = gt_out
    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.
*&---------------------------------------------------------------------*
*& Form FRM_BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_build_fieldcat.


  DEFINE mcr_fieldcat.

    CLEAR gs_fieldcat.

    gs_fieldcat-fieldname  = &1.
    gs_fieldcat-coltext = &2.
    gs_fieldcat-scrtext_s = &2.
    gs_fieldcat-scrtext_l  = &2.
    gs_fieldcat-scrtext_m  = &2.
    gs_fieldcat-key        = &3.
    gs_fieldcat-checkbox   = &4.
    gs_fieldcat-edit       = &5.
    gs_fieldcat-hotspot    = &6.
    gs_fieldcat-ref_table  = &7.
    gs_fieldcat-ref_field  = &8.
    gs_fieldcat-icon       = &9.

    APPEND gs_fieldcat TO gt_fieldcat.

  END-OF-DEFINITION.

  mcr_fieldcat 'ICON'  '消息状态' '' '' '' '' '' '' ''.
  mcr_fieldcat 'MESSAGE'  '消息' '' '' '' '' '' '' ''.
  mcr_fieldcat 'AUFNR'  '生产订单号' '' '' '' '' 'AFKO' 'AUFNR' ''.
  mcr_fieldcat 'WERKS'  '工厂' '' '' '' '' 'T001L' 'WERKS' ''.
  mcr_fieldcat 'LGORT'  '库存地点' '' '' '' '' 'T001L' 'LGORT' ''.
  mcr_fieldcat 'MATNR'  '组件物料编码' '' '' '' '' 'MARA' 'MATNR' ''.
  mcr_fieldcat 'MAKTX'  '组件物料描述' '' '' '' '' 'MAKT' 'MAKTX' ''.
  mcr_fieldcat 'CHARG'  '批次' '' '' '' '' 'MCH1' 'CHARG' ''.
  mcr_fieldcat 'ENTRY_QUANTITY'  '数量' '' '' '' '' 'MSEG' 'MENGE' ''.
  mcr_fieldcat 'BASE_UOM'  '单位' '' '' '' '' 'MARA' 'MEINS' ''.
  mcr_fieldcat 'BACKFLUSH'  '反冲标识' '' '' '' '' '' '' ''.
  mcr_fieldcat 'TYPE_OF_PUR_RESV'  '采购类型' '' '' '' '' '' '' ''.


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

  IF gt_out[] IS NOT INITIAL.
    SELECT matnr,maktx
      INTO TABLE @DATA(lt_makt)
      FROM makt
      FOR ALL ENTRIES IN @gt_out
     WHERE matnr = @gt_out-matnr
      AND spras = @sy-langu.

    SORT lt_makt BY matnr.
  ENDIF.

  LOOP AT gt_out ASSIGNING FIELD-SYMBOL(<fs_out>).
    READ TABLE lt_makt INTO DATA(ls_makt) WITH KEY matnr = <fs_out>-matnr BINARY SEARCH.
    IF sy-subrc = 0.
      <fs_out>-maktx = ls_makt-maktx.
    ENDIF.
  ENDLOOP.
ENDFORM.
相关推荐
HeathlX3 小时前
SAP-Fiori:Gateway ODATA(V2)
abap
HeathlX3 小时前
SAP-Fiori:Gateway ODATA (V2) CURD之Query
abap
爱喝水的鱼丶9 天前
SAP-ABAP:深入浅出 SAP AFVC 表:生产订单工序的核心数据仓库
运维·服务器·数据仓库·sap·abap·pp
爱喝水的鱼丶9 天前
SAP-ABAP: 深入浅出 SAP 经典可执行程序:从零开始掌握
运维·服务器·数据库·sap·abap·开发交流
LilySesy16 天前
【与AI+】英语day4——数据库与性能优化
数据库·oracle·性能优化·sap·abap·自动翻译
除了辣条不吃辣1 个月前
ABAP 正则表达式
开发语言·正则表达式·abap·alv
LilySesy1 个月前
【与AI+】英语day1——ABAP基础与数据类型
开发语言·ai·sap·abap
LilySesy1 个月前
【案例总结】震撼巨作——SAP连接钉钉WEBHOOK
运维·人工智能·ai·钉钉·sap·abap·webhook
Jack.Huangjh1 个月前
SAP ODATA
abap