ME51N屏幕增强——添加历史订单价格字段

参考:

资料:SAP所有模块用户出口(User Exits) _coopa003-CSDN博客

SAP ABAP常用增强记录文档_sap自动过账增强-CSDN博客

https://www.cnblogs.com/zyhcs/p/15759434.html

需求:

增加给OA传输接口的字段。 采购申请增加历史价格显示。

ME51N屏幕增强——添加历史订单价格字段_第1张图片

已经有的信息:

SE11字段信息

ME51N屏幕增强——添加历史订单价格字段_第2张图片

cmod中已经有了增强Zmm002

增强分配:

ME51N屏幕增强——添加历史订单价格字段_第3张图片

组件:

ME51N屏幕增强——添加历史订单价格字段_第4张图片

分别双击对应的功能出口:

001

ME51N屏幕增强——添加历史订单价格字段_第5张图片

包含文件zxm02u01双击

ME51N屏幕增强——添加历史订单价格字段_第6张图片

代码功能:

将PRitem的值写入Ci_ebandb表。

增强exit_saplmereq_003, 包含 ZXM02U03.

ZXM02U03的代码如下。

ME51N屏幕增强——添加历史订单价格字段_第7张图片

代码功能, 将CI_EBANDB的数据写入PRitem.

exit_saplmereq_005内容为空。

exit_sapLMEREQ_010, 包含 ZXM02U12。

 ZXM02U12的代码如下:

ME51N屏幕增强——添加历史订单价格字段_第8张图片

检查对应数据是否发送OA、

分别打上断点,运行ME52N,检查系统运行逻辑。

先进入ZXM02U01断点,从PR中读取数据写入CI_EBANDB中。F8执行后进入主界面。

修改字段信息:

ME51N屏幕增强——添加历史订单价格字段_第9张图片

回车后进入另一个断点ZXM02U03

ME51N屏幕增强——添加历史订单价格字段_第10张图片

CI_EBANDB信息为屏幕信息,PRitem信息为之前信息。

运行之后,PRitem信息变更。《可以在这里通过select查询显示历史订单信息。》

之后重新调用增强01. 进入PR屏幕。

保存时,先调用增强03。然后调用增强010 include ZXM02U012检查OA传递报表。

重新调用增强01。运行后进入“显示采购申请”主界面。退回F3,重新调用增强03.然后清屏返回主界面。

创建PR时,每次回车,系统同先调用增强03,再调用增强01.

通过zflg跟踪, 推送OA的信息。

在zMMFU004实施断点,检查堆栈,推送给OA的信息,在ZCL_IM_ME_PROCESS_REQ里面实施。在这个类的方法中构造传给OA的数据。

ME51N屏幕增强——添加历史订单价格字段_第11张图片

在对应的方法上断点看程序:

ME51N屏幕增强——添加历史订单价格字段_第12张图片

推送的信息,可以在这个方法中实施。

需要做的事情:

1, CI_EBANDB增加字段. SE11

2,  ME51N 屏幕增加字段。CMOD

3,屏幕字段查询赋值

4, 增加推送OA字段。 

实施过程

1, 增加字段。

增加四个字段

ME51N屏幕增强——添加历史订单价格字段_第13张图片

组件类型zlowestpr需要创建数据元素

ME51N屏幕增强——添加历史订单价格字段_第14张图片

ME51N屏幕增强——添加历史订单价格字段_第15张图片

创建curr类型的字段需要特殊设置。

ME51N屏幕增强——添加历史订单价格字段_第16张图片

2,  ME51N 屏幕增加字段。CMOD

双击屏幕出口,

ME51N屏幕增强——添加历史订单价格字段_第17张图片

选择布局,选择表,字段,放入屏幕。

ME51N屏幕增强——添加历史订单价格字段_第18张图片

双击对应四个字段的显示位置,修改属性。

ME51N屏幕增强——添加历史订单价格字段_第19张图片

属性区域,选择程序, 取消输入字段选项。

保存激活。

测试屏幕:

ME51N屏幕增强——添加历史订单价格字段_第20张图片

3,屏幕字段查询赋值

CMOD进入增强用户出口, EXIT_SAPLMEREQ_003的包含文件ZXM02U03中增加下面的代码。

ME51N屏幕增强——添加历史订单价格字段_第21张图片

激活运行ME51N输入零件号和数量,回车后屏幕显示如下:

ME51N屏幕增强——添加历史订单价格字段_第22张图片

ME51N屏幕增强——添加历史订单价格字段_第23张图片

4, 增加推送OA字段。

按照之前debug的信息,找到增强类 ZCL_IM_ME_PROCESS_REQ_CUST。

ME51N屏幕增强——添加历史订单价格字段_第24张图片

post方法的代码如下:

 METHOD if_ex_me_process_req_cust~post.
    DATA: lo_s0001  TYPE REF TO zco_si_sap_purchase_odr_out,
          ls_output TYPE zcreat_purchase_requisition_w1,
          ls_input  TYPE zcreat_purchase_requisition_wo,
          lt_item   TYPE zpurchase_requisition_deta_tab,
          ls_item   TYPE zpurchase_requisition_detail_r.
    DATA lt_zmmt002 TYPE TABLE OF zmmt002.
    DATA ls_zmmt002 TYPE zmmt002.
    DATA:gs_item TYPE mmpur_requisition_item.
    DATA:gt_item TYPE mmpur_requisition_items.
    DATA:ls_eban TYPE mereq_item.
    DATA is_req TYPE  /zjt/sappo_req_info.
    DATA es_ret  TYPE  /zjt/sappo_ret_info.

    IF sy-ucomm = 'MESAVE'.
      SELECT SINGLE COUNT(*) FROM zmmt002 WHERE banfn EQ im_banfn AND zbj = 'X'.
      IF sy-subrc EQ 0.
        MESSAGE '订单已推送OA' TYPE 'E'.
      ENDIF.
    ENDIF.

    CALL METHOD im_header->get_items
      RECEIVING
        re_items = gt_item.

    IF sy-ucomm = 'MESAVE' AND ( sy-tcode = 'ME51N' OR sy-tcode = 'ME52N' ).

      LOOP AT gt_item INTO gs_item.
        CLEAR ls_eban.
        CALL METHOD gs_item-item->get_data
          RECEIVING
            re_data = ls_eban.

        ls_item-bnfpo = ls_eban-bnfpo. "采购申请行项目号
        ls_item-ekgrp = ls_eban-ekgrp. " 采购组
        ls_item-frgkz = ls_eban-frgkz. "批准标识
        ls_item-knttp = ls_eban-knttp. "科目分配类别
        ls_item-kostl = ls_eban-kostl. "成本中心
        ls_item-lfdat = ls_eban-lfdat. "交货日期
        ls_item-loekz = ls_eban-loekz. "删除标识
        ls_item-matkl = ls_eban-matkl. "物料组
        ls_item-matnr = ls_eban-matnr. "物料编码
        ls_item-meins = ls_eban-meins. "单位
        ls_item-menge = ls_eban-menge. "申请数量
        ls_item-peinh = ls_eban-peinh. "价格单位
        ls_item-preis = ls_eban-preis. "采购申请中的价格
        ls_item-pstyp = ls_eban-pstyp. "项目类别
        ls_item-txz01 = ls_eban-txz01. "物料描述
        ls_item-werks = ls_eban-werks. "工厂
        ls_item-afnam = ls_eban-afnam. "申请人
        ls_item-zbrand = ls_eban-zbrand. "品牌
        ls_item-zbudget = ls_eban-zbudget. "是否已签合同
        ls_item-zcontract = ls_eban-zcontract. "所属预算
        ls_item-zreason = ls_eban-zreason. "申请理由
        ls_item-zshychx = ls_eban-zshychx. "使用产线
        ls_item-zshyshb = ls_eban-zshyshb. "具体使用设备



        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
          EXPORTING
            input  = ls_item-matnr
          IMPORTING
            output = ls_item-matnr.

        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
          EXPORTING
            input  = ls_item-bnfpo
          IMPORTING
            output = ls_item-bnfpo.

        APPEND ls_item TO lT_item.

        ls_output-in0-banfn = im_banfn. "采购申请编号

        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
          EXPORTING
            input  = ls_output-in0-banfn
          IMPORTING
            output = ls_output-in0-banfn.

        ls_zmmt002-banfn = im_banfn. "采购申请编号
        ls_output-in0-bname = ls_eban-ernam. "创建人
        CLEAR ls_item.
      ENDLOOP.

*      DATA(lt_item_two) = lt_item.
*      SORT lt_item_two BY bnfpo loekz.
*      DELETE ADJACENT DUPLICATES FROM lt_item_two COMPARING bnfpo loekz.
*      SORT lt_item BY bnfpo.
*
*      LOOP AT  lt_item_two INTO DATA(ls_item_two).
*
*
*      ENDLOOP.

      ls_output-in0-item-purchase_requisition_detail_re = lt_item.

      DELETE lt_item WHERE loekz = 'X'.
      IF lt_item IS NOT INITIAL.

        CALL FUNCTION 'ZMMFU004'
          EXPORTING
            output = ls_output
*           is_req = is_req
          IMPORTING
            input  = ls_input.
*          es_ret = es_ret.

      ENDIF.

*      CALL FUNCTION 'ZMMFU004'
*        EXPORTING
*          output = ls_output
**         is_req = is_req
*        IMPORTING
*          input  = ls_input.
**          es_ret = es_ret.

*      TRY .
*          CREATE OBJECT lo_s0001.
*          lo_s0001->si_sap_purchase_odr_out(
*            EXPORTING
*              output = ls_output
*            IMPORTING
*              input  = ls_input
*             ).
*
*          COMMIT WORK .

      IF ls_input-out-flag = '0'.
        ls_zmmt002-zbj = 'X'.
*      ELSE.
*        MESSAGE ls_input-out-message TYPE 'S' DISPLAY LIKE 'E'.
      ENDIF.

*        CATCH cx_root INTO DATA(cx_root).
*          DATA(lv_msg) = cx_root->get_text( ).
*          MESSAGE ls_input-out-message TYPE 'S' DISPLAY LIKE 'E'.
*      ENDTRY.

      ls_zmmt002-zname = sy-uname.
      ls_zmmt002-zdate = sy-datum.
      ls_zmmt002-ztime = sy-uzeit.
      ls_zmmt002-zmes = ls_input-out-message.
      APPEND ls_zmmt002 TO lt_zmmt002.

      IF lt_zmmt002 IS NOT INITIAL.

        MODIFY zmmt002 FROM TABLE lt_zmmt002.
        IF sy-subrc = 0.
          COMMIT WORK.
        ELSE.
          ROLLBACK WORK.
        ENDIF.
      ENDIF.

    ENDIF.

  ENDMETHOD.

对应的字段信息可以在如图位置插入。

ME51N屏幕增强——添加历史订单价格字段_第25张图片

但是,ls_item类型定义中并没有对应的字段设置。

zpurchase_requisition_detail_r,系统内的属性为 Proxy structure (generated),不可增加字段。

ME51N屏幕增强——添加历史订单价格字段_第26张图片

点击代理编辑器:

ME51N屏幕增强——添加历史订单价格字段_第27张图片

结论,数据结构是通过接口定义的。另外zpurchase_requisition_detail_r内部所有字段类型都是String。下一步需要在接口定义的地方增加新字段。

你可能感兴趣的:(SAP,SAP_MM,数据库)