MM ABAP采购资讯记录批量删除

采购资讯记录批量删除可以使用MASS操作,但是涉及到很多权限问题,经常需要单独开发程式,给到用户单独使用。

完整程式,复制即可使用

*&---------------------------------------------------------------------*
*&      liuyang 20211118
*&---------------------------------------------------------------------*
*       Thursday, November 18, 2021 13:15:00
*----------------------------------------------------------------------*
REPORT ZMM_RPT1031_TA.

TABLES:EINA,EINE.

TYPES: BEGIN OF TYS_DATA,
         LIFNR        TYPE EINA-LIFNR, 
         MATNR        TYPE  EINA-MATNR,   
         EKORG        TYPE EINE-EKORG,  
         NORTY        TYPE EINE-ESOKZ,  
         WERKS        TYPE EINE-WERKS,
         LIFAB        TYPE D,  
         LIFBI        TYPE D, 
         APLFZ        TYPE EINE-APLFZ,  
         EKGRP        TYPE EINE-EKGRP,  
         NORBM        TYPE EINE-NORBM,   
         MINBM        TYPE EINE-MINBM,  
         MEINS        TYPE EINA-MEINS ,   
         WEBRE        TYPE EINE-WEBRE,  
         MWSKZ        TYPE EINE-MWSKZ, 
         " aut_source(001),  
         NETPR        TYPE EINE-NETPR,  
         WAERS        TYPE EINE-WAERS, 
         LOEKZ        TYPE EINA-LOEKZ,  
         PEINH        TYPE EINE-PEINH,  
         KNUMH        TYPE A017-KNUMH, 
         MSG(255),
         SEL,
         LIFNR_T(120),
         MATNR_T(40),
         NORTY_T(10),
         INFNR(10),
         LADDER_PRICE,
         CELLSTAB     TYPE LVC_T_STYL,
       END OF TYS_DATA.
TYPE-POOLS:SLIS.
TYPES:TYT_DATA TYPE TABLE OF TYS_DATA.
DATA:GT_DATA TYPE TYT_DATA.
DATA:REF_GRID TYPE REF TO CL_GUI_ALV_GRID.

SELECTION-SCREEN BEGIN OF BLOCK ZB1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS:
       S_WERKS FOR EINE-WERKS,
       S_EKORG FOR EINE-EKORG,
        S_INFNR FOR EINA-INFNR,
        S_LIFNR FOR EINA-LIFNR,
        S_MATNR FOR EINA-MATNR,
        S_ESOKZ FOR EINE-ESOKZ,
        S_ERDAT FOR EINA-ERDAT,
        S_ERDAE FOR EINE-ERDAT.
SELECTION-SCREEN END OF BLOCK ZB1.

START-OF-SELECTION.

  PERFORM FRM_CLEAR_DATA.

  PERFORM FRM_QUERY_DATA.
  PERFORM FRM_SHOW_DATA.

*&---------------------------------------------------------------------*
*& Form FRM_QUERY_DATA
*&---------------------------------------------------------------------*
FORM FRM_QUERY_DATA .
  SELECT EINE~INFNR,EINE~EKORG,EINE~WERKS,EINE~ESOKZ AS NORTY,EINA~MATNR,EINA~LIFNR,EINA~LOEKZ,EINE~APLFZ,EINE~EKGRP
    ,EINE~NORBM,EINE~MINBM,EINA~MEINS,EINE~WEBRE,EINE~MWSKZ,EINE~NETPR,EINE~WAERS,EINE~PEINH
    INTO TABLE @DATA(LT_EINE) FROM EINA INNER JOIN EINE ON EINA~INFNR = EINE~INFNR
        WHERE EINA~INFNR IN @S_INFNR AND  EINA~MATNR IN @S_MATNR
        AND   EINA~LIFNR IN @S_LIFNR
        AND   EINA~ERDAT IN @S_ERDAT
        AND   EINE~EKORG IN @S_EKORG
        AND   EINE~ESOKZ IN @S_ESOKZ
        AND   EINE~WERKS IN @S_WERKS
        AND   EINE~ERDAT IN @S_ERDAE.

  MOVE-CORRESPONDING LT_EINE[] TO GT_DATA[].
  CHECK GT_DATA[] IS NOT INITIAL.

  SELECT LIFNR ,NAME1,NAME2,NAME3,NAME4 INTO TABLE @DATA(LT_LFA1) FROM LFA1 FOR ALL ENTRIES IN @GT_DATA
        WHERE LIFNR = @GT_DATA-LIFNR.


  SELECT * INTO TABLE @DATA(LT_MAKT) FROM MAKT FOR ALL ENTRIES IN @GT_DATA
        WHERE MATNR = @GT_DATA-MATNR
        AND   SPRAS = '1'.

  DATA:LT_DD07V TYPE TABLE OF DD07V.
  CALL FUNCTION 'DDIF_DOMA_GET'
    EXPORTING
      NAME          = 'ESOKZ'
      LANGU         = '1'
    TABLES
      DD07V_TAB     = LT_DD07V
    EXCEPTIONS
      ILLEGAL_INPUT = 1.

  "读取A017条件记录数据
  SELECT * INTO TABLE @DATA(LT_A017) FROM A017 FOR ALL ENTRIES IN @GT_DATA
    WHERE  KAPPL  = 'M'
    AND    KSCHL   = 'PB00'
    AND    LIFNR   = @GT_DATA-LIFNR
    AND    MATNR   = @GT_DATA-MATNR
    AND    EKORG   = @GT_DATA-EKORG
    AND    WERKS   = @GT_DATA-WERKS
    AND    ESOKZ   = @GT_DATA-NORTY
    AND    DATBI GE @SY-DATUM
    AND    DATAB LE @SY-DATUM.

  "读取A018
  SELECT * INTO TABLE @DATA(LT_A018) FROM A018 FOR ALL ENTRIES IN @GT_DATA
        WHERE  KAPPL  = 'M'
        AND    KSCHL   = 'PB00'
        AND    LIFNR   = @GT_DATA-LIFNR
        AND    MATNR   = @GT_DATA-MATNR
        AND    EKORG   = @GT_DATA-EKORG
      "  AND    WERKS     = @GT_DATA-WERKS
        AND    ESOKZ   = @GT_DATA-NORTY
        AND    DATBI GE @SY-DATUM
        AND    DATAB LE @SY-DATUM..

  LOOP AT GT_DATA ASSIGNING FIELD-SYMBOL(<FS_DATA>).
    DATA(WA_DATA) = <FS_DATA>.

    "读取供应商
    READ TABLE LT_LFA1 INTO DATA(LS_LFA1) WITH KEY LIFNR = <FS_DATA>-LIFNR.
    IF SY-SUBRC = 0.
      <FS_DATA>-LIFNR_T = LS_LFA1-NAME1 && LS_LFA1-NAME2 && LS_LFA1-NAME3 && LS_LFA1-NAME4.

    ENDIF.

    READ TABLE LT_MAKT INTO DATA(LS_MAKT) WITH KEY MATNR = <FS_DATA>-MATNR.
    IF SY-SUBRC = 0.
      <FS_DATA>-MATNR_T = LS_MAKT-MAKTX.
    ENDIF.
 
    READ TABLE LT_DD07V INTO DATA(LS_DD07V) WITH KEY DOMNAME = 'ESOKZ' DOMVALUE_L =  <FS_DATA>-NORTY.
    IF SY-SUBRC = 0.
      <FS_DATA>-NORTY_T = LS_DD07V-DDTEXT.
    ENDIF.

  
    IF <FS_DATA>-WERKS IS INITIAL .
      READ TABLE LT_A018 INTO DATA(LS_A018) WITH KEY LIFNR = <FS_DATA>-LIFNR MATNR = <FS_DATA>-MATNR EKORG = <FS_DATA>-EKORG ESOKZ = <FS_DATA>-NORTY.
      IF SY-SUBRC = 0.
        <FS_DATA>-LIFAB  = LS_A018-DATAB.
        <FS_DATA>-LIFBI =  LS_A018-DATBI.
      ENDIF.
    ELSE.
      READ TABLE LT_A017 INTO DATA(LS_A017) WITH KEY LIFNR = <FS_DATA>-LIFNR MATNR = <FS_DATA>-MATNR EKORG = <FS_DATA>-EKORG WERKS = <FS_DATA>-WERKS ESOKZ = <FS_DATA>-NORTY.
      IF SY-SUBRC = 0.
        <FS_DATA>-LIFAB  = LS_A017-DATAB.
        <FS_DATA>-LIFBI =  LS_A017-DATBI.
      ENDIF.
    ENDIF.
  ENDLOOP.

  SORT   GT_DATA BY LIFNR  MATNR EKORG WERKS NORTY.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CLEAR_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM FRM_CLEAR_DATA .
  REFRESH:GT_DATA.
ENDFORM.

*&---------------------------------------------------------------------*
*& Form FRM_SHOW_DATA
*&---------------------------------------------------------------------*
FORM FRM_SHOW_DATA .

  DATA : LS_LAYOUT   TYPE LVC_S_LAYO,
         LT_FCAT     TYPE LVC_T_FCAT,
         LS_VARIANT  TYPE DISVARIANT,
         LT_EVENTCAT TYPE SLIS_T_EVENT..
  "  DATA:ls_GRID_SETTINGS TYPE  LVC_S_GLAY.
  "  ls_GRID_SETTINGS-EDT_CLL_CB = 'X'.
  PERFORM FRM_BUILD_LAYOUT CHANGING LS_LAYOUT.
  PERFORM FRM_BUILD_FCAT CHANGING LT_FCAT.
  PERFORM FRM_BUILD_VARIANT CHANGING LS_VARIANT.
  " PERFORM frm_build_event TABLES lt_eventcat.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      I_CALLBACK_PROGRAM       = SY-REPID
      I_CALLBACK_PF_STATUS_SET = 'FRM_PF_STATUS'
      I_CALLBACK_USER_COMMAND  = 'FRM_USER_COMMAND'
 "    i_grid_settings          = ls_grid_setting
      IS_LAYOUT_LVC            = LS_LAYOUT
      IT_FIELDCAT_LVC          = LT_FCAT
      I_SAVE                   = 'A'
      IS_VARIANT               = LS_VARIANT
   "  it_events                = LT_eventcat[]
"     I_GRID_SETTINGS          = ls_grid_settingS
    TABLES
      T_OUTTAB                 = GT_DATA
    EXCEPTIONS
      PROGRAM_ERROR            = 1
      OTHERS                   = 2.
ENDFORM.

FORM FRM_BUILD_LAYOUT  CHANGING PS_LAYOUT TYPE  LVC_S_LAYO.

  PS_LAYOUT-ZEBRA = 'X'.
  "  ps_layout-cwidth_opt = 'X'.
  PS_LAYOUT-STYLEFNAME = 'CELLSTAB'.
  "ps_layout-EDIT = 'X'.

ENDFORM.                    " FRM_BUILD_LAYOUT

FORM FRM_BUILD_VARIANT  CHANGING PS_VARIANT TYPE DISVARIANT.
  PS_VARIANT-USERNAME = SY-UNAME.
  PS_VARIANT-REPORT = SY-REPID.
  PS_VARIANT-HANDLE = 1.
ENDFORM.                    " FRM_BUILD_VARIANT


FORM FRM_BUILD_FCAT  CHANGING PT_FCAT TYPE LVC_T_FCAT.
  DATA : LW_FCAT TYPE LVC_S_FCAT,
         LT_FCAT TYPE LVC_T_FCAT.
  DEFINE  FCAT.
    CLEAR lw_fcat.
    lw_fcat-fieldname = &1.
    lw_fcat-tabname = &2.
    lw_fcat-qfieldname = &3.
    lw_fcat-checkbox = &4.
   lw_fcat-edit = &5.
    lw_fcat-scrtext_l = lw_fcat-scrtext_m = lw_fcat-scrtext_s = &6.
    lw_fcat-convexit = &7.
    lw_fcat-outputlen = &8.
    lw_fcat-colddictxt =  lw_fcat-selddictxt  = lw_fcat-tipddictxt = 'L'.
    APPEND lw_fcat TO lt_fcat.
  END-OF-DEFINITION.

  FCAT  'SEL' 'GT_DATA' SPACE 'X' 'X' '选择' SPACE 4.
  FCAT  'INFNR' 'GT_DATA' SPACE '' '' '信息记录号' '' 0.
  FCAT  'LIFNR' 'GT_DATA' SPACE '' '' '供应商' 'ALPHA' 0.
  FCAT  'LIFNR_T' 'GT_DATA' SPACE '' '' '供应商描述' SPACE 0.
  FCAT  'MATNR' 'GT_DATA' SPACE '' '' '物料编码' 'MATN1' 0.
  FCAT  'MATNR_T' 'GT_DATA' SPACE '' '' '物料描述' SPACE 20.
  FCAT  'EKORG' 'GT_DATA' SPACE '' '' '采购组织' SPACE 0.
  FCAT  'WERKS' 'GT_DATA' SPACE '' '' '工厂' SPACE 0.
  FCAT  'NORTY' 'GT_DATA' SPACE '' '' '信息类别' SPACE 0.
  FCAT  'NORTY_T' 'GT_DATA' SPACE '' '' '信息类别描述' SPACE 0.
  FCAT  'LOEKZ' 'GT_DATA' SPACE 'X' 'X' '删除标记' SPACE 0.
  FCAT  'LIFAB' 'GT_DATA' SPACE '' '' '开始日期' SPACE 0.
  FCAT  'LIFBI' 'GT_DATA' SPACE '' '' '截止日期' SPACE 0.
  FCAT  'NETPR' 'GT_DATA' SPACE '' '' '价格' SPACE 0.
  FCAT  'WAERS' 'GT_DATA' SPACE '' '' '币别' SPACE 0.
  FCAT  'PEINH' 'GT_DATA' SPACE '' '' '价格单位' SPACE 0.
  FCAT  'MSG' 'GT_DATA' SPACE '' '' '消息' SPACE  30.
  REFRESH PT_FCAT.
  PT_FCAT[] = LT_FCAT[].

  LOOP AT PT_FCAT ASSIGNING FIELD-SYMBOL(<FS_FCAT>).
    CASE <FS_FCAT>-FIELDNAME .
      WHEN 'NORBM' OR 'MINBM'.
        <FS_FCAT>-DECIMALS = 3.
      WHEN 'EKGRP'.
        <FS_FCAT>-REF_FIELD = 'EKGRP'.
        <FS_FCAT>-REF_TABLE = 'EINE'.
    ENDCASE.
  ENDLOOP.
ENDFORM.

FORM FRM_PF_STATUS USING P_EXTAB TYPE SLIS_T_EXTAB .

  DATA:LT_EXTAB TYPE SLIS_T_EXTAB.
  SET PF-STATUS 'ZMM_TOOLS' EXCLUDING LT_EXTAB.
  " SET PF-STATUS 'STANDARD_FULLSCREEN' OF PROGRAM 'SAPLKKBL'.
ENDFORM.
FORM FRM_USER_COMMAND USING    P_UCOMM TYPE SY-UCOMM
      P_RS_SELFIELD TYPE SLIS_SELFIELD .

  DATA:LS_DATA TYPE TYS_DATA.
  P_RS_SELFIELD-REFRESH = 'X'.
  P_RS_SELFIELD-COL_STABLE = 'X'.
  P_RS_SELFIELD-ROW_STABLE = 'X'.
  IF REF_GRID IS INITIAL.
    CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
      IMPORTING
        E_GRID = REF_GRID.
  ENDIF.

  IF NOT REF_GRID IS INITIAL.
    CALL METHOD REF_GRID->CHECK_CHANGED_DATA .
  ENDIF.
  "  BREAK FITDEV04.
  CASE  P_UCOMM.
    WHEN 'SAL'. "取消全选
      LS_DATA-SEL = ''.
      LS_DATA-LOEKZ = ''.
      MODIFY GT_DATA FROM LS_DATA TRANSPORTING SEL  LOEKZ  WHERE SEL IS NOT  INITIAL AND  LOEKZ   IS NOT  INITIAL  AND CELLSTAB IS INITIAL.

    WHEN 'ALL'. "全选
      LS_DATA-SEL = 'X'.
      LS_DATA-LOEKZ = 'X'.
      MODIFY GT_DATA FROM LS_DATA TRANSPORTING SEL   LOEKZ WHERE SEL IS INITIAL AND LOEKZ   IS INITIAL  AND CELLSTAB IS INITIAL.

    WHEN 'CRT1' .""更新信息记录
      PERFORM FRM_UPDATE_INFO_RECORD.
  ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_UPDATE_INFO_RECORD
*&---------------------------------------------------------------------*
FORM FRM_UPDATE_INFO_RECORD .

  DATA(LT_DATA) = GT_DATA[].
  DELETE LT_DATA WHERE SEL IS INITIAL.

  IF LT_DATA[] IS INITIAL.
    "MESSAGE '请至少选择一行数据!'  TYPE 'S' DISPLAY LIKE 'E'.
    MESSAGE i899(mm) WITH '请同时勾选"选择"和"删除" 至少选择一行数据!'.
    RETURN.
  ENDIF.
  " BREAK FITDEV04.
  LOOP AT LT_DATA INTO DATA(LS_DATA).
    SELECT SINGLE * INTO @DATA(LS_EINA) FROM EINA WHERE MATNR = @LS_DATA-MATNR AND LIFNR = @LS_DATA-LIFNR.
    DATA(LS_EINA_Y) = LS_EINA.
    MOVE-CORRESPONDING LS_DATA TO LS_EINA.
    SELECT SINGLE * INTO @DATA(LS_EINE) FROM EINE WHERE INFNR = @LS_EINA-INFNR AND EKORG = @LS_DATA-EKORG AND ESOKZ = @LS_DATA-NORTY
     AND WERKS = @LS_DATA-WERKS.
    DATA(LS_EINE_Y) = LS_EINE.
    MOVE-CORRESPONDING LS_DATA TO LS_EINE.
    CALL FUNCTION 'ME_UPDATE_INFORECORD' "IN UPDATE TASK
      EXPORTING
        XEINA    = LS_EINA      
        XEINE    = LS_EINE     
        YEINA    = LS_EINA_Y   
        YEINE    = LS_EINE_Y 
        REG_EINA = LS_EINA.
*       XSGT_RPT =
*       SGT_STK_DAT  =
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        WAIT = 'X'.

    READ TABLE GT_DATA ASSIGNING FIELD-SYMBOL(<FS_DATA>) WITH KEY  LIFNR = LS_DATA-LIFNR  MATNR = LS_DATA-MATNR
    EKORG = LS_DATA-EKORG  NORTY = LS_DATA-NORTY WERKS = LS_DATA-WERKS.
    IF SY-SUBRC = 0.
      <FS_DATA>-MSG  = '更新成功!'.
    ENDIF.
  ENDLOOP.
ENDFORM.

QQ交流群:17381976

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ABAP采购信息记录批导完美版是一个用于管理采购信息的工具,它能够提高采购过程的效率和准确性。它通过自动化数据输入和处理,减少了人工操作的复杂性和错误的风险。 ABAP采购信息记录批导完美版具有以下特点: 1. 界面友好:它采用直观的界面设计,使操作者能够轻松地理解和使用系统。关键信息和功能按钮都能一目了然,提高了用户的操作效率。 2. 自动化导入:该系统能够自动导入采购信息,减少人工输入的时间和精力。用户只需要将采购信息以指定的格式准备好,然后系统将自动导入并进行处理。 3. 数据校验:在导入采购信息之前,系统能对数据进行校验,确保数据的完整性和准确性。如果数据不符合规定的格式或条件,系统将提醒用户进行修改。 4. 批量处理:ABAP采购信息记录批导完美版支持批量处理多个采购信息。用户只需要一次性导入多个采购信息,系统将自动逐个进行处理,大大提高了处理效率。 5. 错误提示和回滚:当系统发现错误或异常情况时,会及时向用户提供错误提示信息,帮助用户快速定位和修复问题。同时,系统还支持回滚操作,即取消已导入的采购信息,确保数据的一致性和准确性。 总之,ABAP采购信息记录批导完美版是一个功能强大、操作简便的采购信息管理工具。它能够帮助企业提高采购过程的效率,减少人为错误,提升工作效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值