《物理化学学报》

阅读 33

2024-11-09

一、批量查询采购信息记录

事务码:ME1L/ME1M/ME1P/ME1W

根据需要,在选择屏幕输入自己需要的查询信息,查询结果用于后续批量删除时使用,系统标准的采购信息记录报表实在比较丑,下面这个是我们自己开发的(代码我放到文章最后,有需要的自取)

物料11280020000099,供应商100165,工厂C050下,有两条记录,分别是标准采购0和委外加工3,采购信息记录编号为5300000046;

二、单个删除采购信息记录

ME15 - 将采购信息记录标记为删除

1、删除完整采购信息记录

同一个物料 +供应商,不管信息类别维护的是标准、还是外协加工,都只会有一个采购信息记录编号,所以当标记删除完整采购信息记录时,相当于所有信息类别都删除了。

2、删除采购组织数据

根据物料+供应商+采购组织+工厂,选择对应的信息类别来分别删除该类型的采购信息记录;

此时,我们查看委外加工的采购信息记录,可以发现,它的采购组织数据是没有勾选的;

三、批量删除采购信息记录

了解了以上ME15的单个标记删除的操作和逻辑后,下面我们来看一下批量删除的操作,原理和逻辑是一样的。事务码:MEMASSIN / MASS - BUS3003对象

1、输入事务码:MEMASSIN

输入事务码,选择需要更改的内容所在的系统后台表;

这个是批量更新采购信息记录的功能,首先选择需要批量处理的数据所在的后台数据表

2、选择需要更改的字段

这一步,主要是要确认批量维护的字段是哪些,如果需要维护多个字段,那么就多选字段即可;

这里需要注意,两个删除标识字段都是LOEKZ,但是所在的表是不一样的,上面那个是EINA-LOEKZ,下面这个是EINE-LOEKZ(一个是完整信息记录表EINA的删除标识,另外一个是采购组织记录EINE的删除标识)

3、筛选需要标记删除的数据

填写对应的信息,点击执行(从前面ZMM059报表查询到的采购信息记录编号填写进来)

4、显示需要删除的数据

执行后,出来的界面,如下图所示(因为我们前面选了两个表EINA和EINE,所以会出来两个页签,如果只想显示其中一个页签,那么第一步就只选择对应修改的表即可);最后一列可以修改的字段,就是标记删除的字段

5、标识删除

这里我来演示批量删除采购组织的数据;

(1)先勾选标记删除按钮

(2)选中对应需要修改的列;(如果鼠标不乱点,系统默认是已经帮你选择好,可以不用重复选择)

(3)点击批量执行按钮

(4)执行后,如下图所示

(5)保存即可

6、ME15:查看验证

四、总结

1、批量删除采购信息记录,操作原理与之前发布的MASS批量操作技巧是一样的;

2、采购信息记录分为整体删除,以及分采购组织和工厂删除,对应的表分别为EINA和EINE;

3、总体操作没有特殊,与前面编写的MASS的批量更新操作指引类似,更详细的操作指引可以查看之前写的MASS批量操作功能文案

4、批量查看采购信息记录报表源代码

*&---------------------------------------------------------------------*
*& Report ZMMR0059
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZMMR0059.

TABLES:EINA,EINE.

TYPES:BEGIN OF TY_DATA,
INFNR TYPE EINA-INFNR,
MATNR TYPE EINA-MATNR,
MAKTX TYPE MAKT-MAKTX,
LIFNR TYPE EINA-LIFNR,
NAME1 TYPE LFA1-NAME1,
WERKS TYPE EINE-WERKS,
EKORG TYPE EINE-EKORG,
ESOKZ TYPE EINE-ESOKZ,
NETPR TYPE CHAR10,
WAERS TYPE EINE-WAERS,
MWSKZ TYPE EINE-MWSKZ,
PEINH TYPE EINE-PEINH,
BPRME TYPE EINE-BPRME,
PRDAT TYPE EINE-PRDAT,
ERNAM TYPE EINE-ERNAM,
LOEKZ TYPE EINE-LOEKZ,
EKGRP TYPE EINE-EKGRP,
MINBM TYPE EINE-MINBM,
MEINS TYPE EINA-MEINS,
NORBM TYPE EINE-NORBM,
APLFZ TYPE EINE-APLFZ,
UEBTK TYPE EINE-UEBTK,
BSTYP TYPE EINE-BSTYP,
EBELN TYPE EINE-EBELN,
EBELP TYPE EINE-EBELP,
DATLB TYPE EINE-DATLB,
WEBRE TYPE EINE-WEBRE,
EFFPR TYPE EINE-EFFPR,
MMSTA TYPE MARC-MMSTA,
ERDAT TYPE EINE-ERDAT,
PRICETYPE TYPE CHAR10,
CHANGEDATE TYPE DATS,
CHANGEUSER TYPE CHAR12,
IVTYPE TYPE CHAR4,
NETPR_PEINH TYPE CHAR20,
VERID TYPE EINE-VERID,
TEXT1 TYPE MKAL-TEXT1,
BESKZ TYPE MARC-BESKZ,
SOBSL TYPE MARC-SOBSL,
END OF TY_DATA.

TYPES:BEGIN OF TY_CDHDR_CDPOS,
OBJECTID TYPE CDHDR-OBJECTID,
VALUE_NEW TYPE CHAR10,
UDATE TYPE CDHDR-UDATE,
USERNAME TYPE CDHDR-USERNAME,
END OF TY_CDHDR_CDPOS.

DATA: GT_CDHDR_CDPOS TYPE TABLE OF TY_CDHDR_CDPOS.
DATA: GS_CDHDR_CDPOS TYPE TY_CDHDR_CDPOS.

DATA: GT_DATA TYPE TABLE OF TY_DATA.
DATA: GS_DATA TYPE TY_DATA.

DATA:
GS_SLIS_LAYOUT_ALV TYPE SLIS_LAYOUT_ALV,
GT_SLIS_T_FIELDCAT_ALV TYPE SLIS_T_FIELDCAT_ALV,
GS_SLIS_FIELDCAT_ALV TYPE SLIS_FIELDCAT_ALV.

INITIALIZATION.

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

AT SELECTION-SCREEN .


START-OF-SELECTION.

PERFORM FRM_GET_DATA.
PERFORM FRM_EXECUTE_LOGIC.
PERFORM FRM_SET_LAYOUT.
PERFORM FRM_SET_FIELDCAT.
PERFORM FRM_DISPLAY_DATA.

END-OF-SELECTION.

*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_GET_DATA.
DATA:LV_EKGRP TYPE T024-EKGRP.
DATA:LV_WHERE TYPE STRING.
CLEAR:GT_DATA,LV_EKGRP,LV_WHERE,GT_CDHDR_CDPOS.

LV_WHERE = 'EINA~INFNR in @S_INFNR and EINA~MATNR in @S_MATNR and EINA~LIFNR in @S_LIFNR and EINE~WERKS in @S_WERKS and EKORG in @S_EKORG and ESOKZ in @S_ESOKZ'.

***注释BY ZGY AT 240716,不控制权限
* SELECT SINGLE EKGRP INTO LV_EKGRP FROM T024 WHERE TELFX = SY-UNAME.
*
* IF LV_EKGRP IS NOT INITIAL.
* LV_WHERE = LV_WHERE and MARC~EKGRP = @LV_EKGRP'.
* ENDIF.
***END ADD BY ZGY

SELECT
EINA~INFNR,
EINA~MATNR,
MAKT~MAKTX,
EINA~LIFNR,
LFA1~NAME1,
EINE~WERKS,
EINE~EKORG,
EINE~ESOKZ,
CAST( EINE~NETPR AS CHAR ) AS NETPR,
EINE~WAERS,
EINE~MWSKZ,
EINE~PEINH,
EINE~BPRME,
EINE~PRDAT,
EINE~ERNAM,
EINE~LOEKZ,
EINE~EKGRP,
EINE~MINBM,
EINA~MEINS,
EINE~NORBM,
EINE~APLFZ,
EINE~UEBTK,
EINE~BSTYP,
EINE~EBELN,
EINE~EBELP,
EINE~DATLB,
EINE~WEBRE,
EINE~EFFPR,
MARC~MMSTA,
EINE~ERDAT,
CASE EINA~URZZT
WHEN '
1' THEN '发货结算'
ELSE '
收货结算'
END AS IVTYPE,
CONCAT( CONCAT( CAST( EINE~NETPR AS CHAR ),'
/' ),CAST( EINE~PEINH AS CHAR ) ) AS NETPR_PEINH,
EINE~VERID,
MKAL~TEXT1,
MARC~BESKZ,
MARC~SOBSL
FROM EINA
INNER JOIN EINE ON EINA~INFNR = EINE~INFNR AND EINE~LOEKZ <> '
X'
INNER JOIN MAKT ON EINA~MATNR = MAKT~MATNR AND MAKT~SPRAS = '
1'
INNER JOIN LFA1 ON EINA~LIFNR = LFA1~LIFNR
INNER JOIN MARC ON EINA~MATNR = MARC~MATNR AND EINE~WERKS = MARC~WERKS
LEFT JOIN MKAL ON EINA~MATNR = MKAL~MATNR AND EINE~WERKS = MKAL~WERKS AND EINE~VERID = MKAL~VERID
WHERE (LV_WHERE)
INTO CORRESPONDING FIELDS OF TABLE @GT_DATA.

SELECT
CDHDR~OBJECTID,
CAST( LTRIM( CDPOS~VALUE_NEW,'
' ) AS CHAR ) AS VALUE_NEW,
CDHDR~UDATE,
CDHDR~USERNAME
FROM CDHDR INNER JOIN CDPOS ON CDHDR~OBJECTCLAS = CDPOS~OBJECTCLAS AND CDHDR~OBJECTID = CDPOS~OBJECTID
AND CDHDR~CHANGENR = CDPOS~CHANGENR AND CDHDR~OBJECTCLAS = '
INFOSATZ' AND FNAME = 'NETPR'
ORDER BY CDHDR~CHANGENR DESCENDING
INTO TABLE @GT_CDHDR_CDPOS.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_EXECUTE_LOGIC
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_EXECUTE_LOGIC.
DATA:LV_INFNR TYPE CDHDR-OBJECTID.
CLEAR:GS_DATA.
LOOP AT GT_DATA INTO GS_DATA..
CLEAR:LV_INFNR.
LV_INFNR = GS_DATA-INFNR.
CLEAR GS_CDHDR_CDPOS.
READ TABLE GT_CDHDR_CDPOS INTO GS_CDHDR_CDPOS WITH KEY OBJECTID = LV_INFNR VALUE_NEW = GS_DATA-NETPR.
IF GS_CDHDR_CDPOS IS NOT INITIAL.
GS_DATA-CHANGEDATE = GS_CDHDR_CDPOS-UDATE.
GS_DATA-CHANGEUSER = GS_CDHDR_CDPOS-USERNAME.
ENDIF.

SELECT COUNT(*) FROM ZZT_PUR_SP_LOG WHERE LIFNR = GS_DATA-LIFNR AND MATNR = GS_DATA-MATNR.
IF SY-SUBRC = 0.
GS_DATA-PRICETYPE = '
结算价'.
ELSE.
SELECT COUNT(*) FROM ZZT_MM_I_R_LOG WHERE LIFNR = GS_DATA-LIFNR AND MATNR = GS_DATA-MATNR AND ZDY01 = '
1'.
IF SY-SUBRC = 0.
GS_DATA-PRICETYPE = '
结算价'.
ELSE.
SELECT COUNT(*) FROM ZZT_INFORECORD_L WHERE LIFNR = GS_DATA-LIFNR AND MATNR = GS_DATA-MATNR AND ZDY01 = '
1'.
IF SY-SUBRC = 0.
GS_DATA-PRICETYPE = '
结算价'.
ELSE.
GS_DATA-PRICETYPE = '
暂估价'.
ENDIF.
ENDIF.
ENDIF.
MODIFY GT_DATA FROM GS_DATA.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SET_LAYOUT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_SET_LAYOUT .
GS_SLIS_LAYOUT_ALV-COLWIDTH_OPTIMIZE = '
X'. "自动缩进
GS_SLIS_LAYOUT_ALV-ZEBRA = '
X'. "斑马线
*LT_LAYO-INFO_FIELDNAME = '
ROW_COLOR'. "OUTTAB,
"GS_SLIS_LAYOUT_ALV-BOX_FIELDNAME = '
ZBOX'."选择标记的字段名称选择该行时能够自动刷新
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SET_FIELDCAT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_SET_FIELDCAT .
CLEAR GT_SLIS_T_FIELDCAT_ALV.
PERFORM ADD_FIELDCAT USING:
'
INFNR' '采购信息记录',
'
MATNR' '物料',
'
MAKTX' '物料名称',
'
LIFNR' '供应商',
'
NAME1' '供应商名称',
'
WERKS' '工厂',
'
EKORG' '采购组织',
'
ESOKZ' '采购类别',
'
NETPR' '净价',
'
WAERS' '货币码',
'
MWSKZ' '税代码',
'
PEINH' '数量单位',
'
BPRME' '订单价格单位',
'
PRDAT' '有效至',
'
ERNAM' '创建者',
'
LOEKZ' '删除标识',
'
EKGRP' '采购组',
'
MINBM' '最小数量',
'
MEINS' '采购订单计量单位',
'
NORBM' '标准数量',
'
APLFZ' '计划交货天数',
'
UEBTK' '过量交货',
'
BSTYP' '采购订单类别',
'
EBELN' '采购凭证',
'
EBELP' '项目',
'
DATLB' '凭证日期',
'
WEBRE' '基于收货的IV',
'
EFFPR' '有效价格',
'
MMSTA' '冻结',
'
ERDAT' '创建日期',
'
PRICETYPE' '价格类型',
'
CHANGEDATE' '修改日期',
'
CHANGEUSER' '修改账号',
'
IVTYPE' '结算方式',
'
NETPR_PEINH' '净价/数量单位',
'
VERID' '生产版本',
'
TEXT1' '生产版本文本',
'
BESKZ' '采购类型',
'
SOBSL' '特殊采购类'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form ADD_FIELDCAT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> P_
*& --> P_
*&---------------------------------------------------------------------*
FORM ADD_FIELDCAT USING P_FIELDNAME TYPE SLIS_FIELDNAME
P_SELTEXT TYPE CHAR100.
CLEAR GS_SLIS_FIELDCAT_ALV.
GS_SLIS_FIELDCAT_ALV-FIELDNAME = P_FIELDNAME.
GS_SLIS_FIELDCAT_ALV-OUTPUTLEN = 20.
IF GS_SLIS_FIELDCAT_ALV-FIELDNAME = '
MEINS' OR GS_SLIS_FIELDCAT_ALV-FIELDNAME = 'BPRME'.
GS_SLIS_FIELDCAT_ALV-EDIT_MASK = '
==CUNIT'.
ELSEIF GS_SLIS_FIELDCAT_ALV-FIELDNAME = '
MATNR'.
GS_SLIS_FIELDCAT_ALV-EDIT_MASK = '
==MATN1'.
ELSEIF GS_SLIS_FIELDCAT_ALV-FIELDNAME = '
LIFNR'.
GS_SLIS_FIELDCAT_ALV-EDIT_MASK = '
==ALPHA'.
ENDIF.
GS_SLIS_FIELDCAT_ALV-SELTEXT_L = P_SELTEXT.
APPEND GS_SLIS_FIELDCAT_ALV TO GT_SLIS_T_FIELDCAT_ALV.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_DISPLAY_DATA .
CALL FUNCTION '
REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
I_DEFAULT = '
X' "用于设置用户是否可以定义默认的布局: 'X' 可以定义默认布局, 'SPACE' 不可以定义默认布局 (默认:'X');
I_SAVE = '
A' "保存表格布局: 'X' 只能保存全局变式、 'U' 只能保存特定变式、 'A' 都可以保存、 'SPACE' 不能保存变式 (默认:space);
IS_LAYOUT = GS_SLIS_LAYOUT_ALV "输出格式
IT_FIELDCAT = GT_SLIS_T_FIELDCAT_ALV "字段输出格式
TABLES
T_OUTTAB = GT_DATA "输出的内表
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
ENDFORM.

精彩评论(0)

0 0 举报