批量删除采购信息记录可用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 nbsp; 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