0
点赞
收藏
分享

微信扫一扫

《物理化学学报》

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

事务码: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 条评论