ME_UPDATE_SOURCES_OF_SUPPLY更改货源清单

本文介绍了一个用于SAP系统的ABAP程序,该程序能够根据输入条件批量修改EORD表中的MRP(物料需求计划)字段,实现对特定物料、工厂及采购组织的货源清单的自动化调整。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

*----------------------------------------------------------------------*
* 程序的事务代码:
* 程序名称: Z_MM_EXEC_MODIFYSOURCE
* 时间    : 2018-01-25
* 描述    : 根据输入条件修改货源清单中的MRP字段
*----------------------------------------------------------------------*

REPORT  z_mm_exec_modifysource.
TABLESeord.
* ALV定义
TYPE-POOLSslis.
TABLESmmim_rep_print.
* Global variables for handling ALV functionality
DATAalv_keyinfo         TYPE slis_keyinfo_alv,
      alv_variant         LIKE disvariant,
      alv_layout          TYPE slis_layout_alv,
      alv_repid           LIKE sy-repid,
      alv_print           TYPE slis_print_alv,
      alv_events          TYPE slis_t_event,
      alv_detail_func(30).
DATAfieldcat TYPE slis_t_fieldcat_alv,
      fcs      TYPE slis_fieldcat_alv.
DATAw_index LIKE sy-tabix.
DATAi_xeord LIKE eordu OCCURS WITH HEADER LINE.   "存放要修改的数据
DATAi_yeord LIKE eord OCCURS WITH HEADER LINE.    "数据库中的未修改前的数据
DATABEGIN OF i_result OCCURS 0,
        matnr    LIKE eord-matnr,
        werks    LIKE eord-werks,
        ekorg    LIKE eord-ekorg,
        autet    LIKE eord-autet,
        info(30TYPE c,
      END OF i_result.
****************** 输入屏幕 ********************************************
SELECTION-SCREEN BEGIN OF BLOCK bk1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONSs_matnr FOR eord-matnr,
                s_werks FOR eord-werks,
                s_ekorg FOR eord-ekorg.
PARAMETERS:     p_autet LIKE eord-autet.
SELECTION-SCREEN END OF BLOCK bk1.

INITIALIZATION.

TOP-OF-PAGE.



START-OF-SELECTION.
  PERFORM get_eord_data.
  PERFORM modify_eord.

END-OF-SELECTION.
  PERFORM alv_output.
*&---------------------------------------------------------------------*
*&      Form  GET_EORD_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_eord_data .
  SELECT *
    FROM eord
    INTO TABLE i_yeord
  WHERE matnr IN s_matnr
  AND werks IN s_werks
  AND ekorg IN s_ekorg
  AND vdatu <= sy-datum
  AND bdatu >= sy-datum.
  IF i_yeord[] IS INITIAL.
    MESSAGE '没有对应的货源清单!请检查...' TYPE 'S'.
    LEAVE LIST-PROCESSING.
  ENDIF.
* 更改autet字段为指定值
  LOOP AT i_yeord.
    CLEAR i_xeord.
    MOVE-CORRESPONDING i_yeord TO i_xeord.
    i_xeord-autet p_autet.
    APPEND i_xeord.
  ENDLOOP.
ENDFORM.                    " GET_EORD_DATA
*&---------------------------------------------------------------------*
*&      Form  MODIFY_EORD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM modify_eord .
  CLEARi_yeordi_xeord.
  CHECK NOT i_yeord[] IS INITIAL.
* 更改货源清单
  CALL FUNCTION 'ME_UPDATE_SOURCES_OF_SUPPLY'
    EXPORTING
      i_changedocument 'X'
    TABLES
      xeord            i_xeord
      yeord            i_yeord.
  IF sy-subrc 0.
    COMMIT WORK AND WAIT.
  ELSE.
    ROLLBACK WORK.
  ENDIF.
* 取未更新成功的记录
  SELECT matnr
         werks
         ekorg
         autet
    FROM eord
    INTO TABLE i_result
    WHERE matnr IN s_matnr
  AND werks IN s_werks
  AND ekorg IN s_ekorg
  AND autet <> p_autet
  AND vdatu <= sy-datum
  AND bdatu >= sy-datum.
  LOOP AT i_result.
    w_index sy-tabix.
    i_result-info '修改货源清单不成功!'.
    MODIFY i_result INDEX w_index TRANSPORTING info.
  ENDLOOP.
  IF i_result[] IS INITIAL.
    LOOP AT i_yeord.
      CLEAR i_result.
      MOVE-CORRESPONDING i_yeord TO i_result.
      i_result-autet p_autet.
      i_result-info '更改货源清单成功!'.
      APPEND i_result.
    ENDLOOP.
  ENDIF.
  CLEARi_yeordi_xeord.
  REFRESHi_yeordi_xeord.
ENDFORM.                    " MODIFY_EORD
*&---------------------------------------------------------------------*
*&      Form  ALV_OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM alv_output .
* Define fieldcat initail macro
  DEFINE ftaddg.
    CLEAR fcs.
    fcs-fieldname &1.
    fcs-tabname   &2.
    fcs-seltext_l &3.
    fcs-outputlen &4.
    fcs-inttype   &5.
    fcs-key       &6.
    fcs-do_sum    &7.
    APPEND fcs TO fieldcat.
  END-OF-DEFINITION.
  REFRESH fieldcat.
  ftaddg 'MATNR' 'I_RESULT' '物料号'    '18' '' '' ''.
  ftaddg 'WERKS' 'I_RESULT' '工厂'      '04' '' '' ''.
  ftaddg 'EKORG' 'I_RESULT' '采购组织'  '08' '' '' ''.
  ftaddg 'AUTET' 'I_RESULT' 'MRP'      '04' '' '' ''.
  ftaddg 'INFO'  'I_RESULT' '信息'     '30' '' '' ''.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program alv_repid
      is_layout          alv_layout
      it_events          alv_events
      is_variant         alv_variant
*     i_callback_pf_status_set = 'STATUS'
*     i_callback_user_command  = 'USER_COMMAND'
      it_fieldcat        fieldcat
      i_default          'X'
      i_save             'A'
    TABLES
      t_outtab           i_result
    EXCEPTIONS
      program_error      1
      OTHERS             2.
ENDFORM.                    " ALV_OUTPUT
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ChampaignWolf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值