zoukankan      html  css  js  c++  java
  • ME51N, ME52N 创建采购申请的一个BADI

    ME51N ME52N创建修改采购申请时的一个BADI

    (2013-07-11 16:50:58)
    转载
    怎样找badi不做介绍
    无论是类里打断点、或者st05跟踪,或者是spro里找都行
    我这个badi比较简单,网上一搜或者群里一问大家都知道
    ME_PROCESS_REQ_CUST
    这里简单实现里面的check
     

    FM内具体代码见最后
     
    这里说下不借助其他帮助的时候,怎么找到想要的方法,怎么找到需要的值

     显示参数




    双击进入im_header 

    一般都会有get_data.此处还有个get_tiems 


    打开参数

    双击查看该结构


    就是想要的采购申请号和行项目号,不过描述是:last item number

    说明是一条数据,而不是个表

    注意看看后面的描述

    然后看get_items,一般情况这两个方法是常用的


    会发现re_itmes是 个内表

    而且这个内表参考类型,是个类IF_PURCHASE_REQUISITION_ITEM


    一般也会有get_data.

     一层层跟下去,调用的时候定义类对象,调用其方法即可

    另外:ME53N查看时,点编辑按钮,进入编辑状态,可以在ME_PROCESS_REQ_CUST -- open方法中写逻辑

    FM内代码:

    FUNCTION zlm_fm_me52n.

    *"----------------------------------------------------------------------

    *"*"Local interface:

    *"  IMPORTING

    *"     VALUE(IM_HEADER) TYPE REF TO  IF_PURCHASE_REQUISITION OPTIONAL

    *"  EXPORTING

    *"     VALUE(E_ITEM_DATA) TYPE  MEREQ_ITEM

    *"  EXCEPTIONS

    *"      ERROR

    *"----------------------------------------------------------------------

    *"*"Local interface:

    *"  IMPORTING

    *"     VALUE(IM_HEADER) TYPE REF TO  IF_PURCHASE_REQUISITION OPTIONAL

    *

    *1、  通过Tcode:ME52N进行采购申请修改时,

    *     更改行项目物料编码保存时需判断已更换物料是否未冻结物料,

    *     如果为冻结物料,则禁止采购申请保存并给与错误提示:行项目XXX新更换物料XXXXXXX已冻结,请选择其他物料。

    *2、  冻结物料判断逻辑如下:

    *     当物料主数据MARA-MATNR的跨工厂物料状态MARA-MSTAE为非空时表示该物料已经冻结;

    *     当物料主数据MARA-MATNR的MARA-LVORM字段为“X”表示该物料已删除

    *"----------------------------------------------------------------------

      DATA: wa_head     TYPE mereq_header.                           "表头数据:采购申请号等

      DATA: it_item     TYPE mmpur_requisition_items.                "行项目表:采购申请下各行项目

      DATA  wa_item     LIKE LINE OF it_item.                        "行项目工作区

      DATA  cl_item     TYPE REF TO if_purchase_requisition_item.    "获取行项目数据的类

      DATA  l_item_data TYPE mereq_item.                             "行项目中具体值

      DATA: l_matnr     TYPE matnr.

      DATA:

            BEGIN OF str_dongjie,

            mstae     TYPE mstae,

            lvorm     TYPE lvorm,

             END OF str_dongjie,

            wa_dongjie LIKE str_dongjie.

      "获取头数据

      CALL METHOD im_header->get_data

        RECEIVING

          re_data = wa_head.

      "如果不是ME52N进入,没有采购申请单号,采购申请单号第一位是‘#’,不需要进行后续校验

      IF wa_head-banfn(1) = '#'.

        RETURN.

      ENDIF.

      "获取行项目

      CALL METHOD im_header->get_items

        RECEIVING

          re_items = it_item.

      "解析行项目

      LOOP AT it_item INTO wa_item.

        "获取行项目数据的类

        cl_item = wa_item-item.

        "获取行项目值

        CALL METHOD cl_item->get_data

          RECEIVING

            re_data = l_item_data.

        CLEAR l_matnr.

        "获取采购申请物料号

        SELECT SINGLE matnr

          FROM eban

          INTO l_matnr

          WHERE banfn = wa_head-banfn AND

                bnfpo = l_item_data-bnfpo.

        "如果修改了物料,检查更新的物料是否被冻结,冻结则输出物料信息、抛出异常并退出

        IF l_item_data-matnr <> l_matnr.

          SELECT SINGLE mstae lvorm

            INTO wa_dongjie

            FROM mara

            WHERE matnr = l_item_data-matnr.

          IF sy-subrc = 0 AND ( wa_dongjie-mstae IS NOT INITIAL OR wa_dongjie-lvorm = 'X'  ) .

            e_item_data = l_item_data.

            RAISE error.

            RETURN.

          ENDIF.

        ENDIF.

      ENDLOOP.

    ENDFUNCTION.

  • 相关阅读:
    R 语言
    Maven
    IntelliJ IDEA
    Windows Terminal
    pip
    批处理编程案例
    Windows DOS命令批处理脚本
    Day15 T1 库特的向量
    Day12 T1 少女觉
    Day10 T2 邦德
  • 原文地址:https://www.cnblogs.com/rainysblog/p/3673722.html
Copyright © 2011-2022 走看看