IF_EX_ME_PROCESS_REQ_CUST〜OPEN方法创建的行灰显

2020-09-17 02:12发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我需要创建ALV报告。 用户希望从那里选择几行数据,其中包含零件编号,文本,价格等信息。然后,他们希望我用所选数据调用ME51N,并用所选信息预填充详细信息网格。 这样他们就可以在最终保存并创建请求之前完成ME51N中的数据输入。

我正在使用BAdI ME_PROCESS_REQ_CUST的OPEN方法。 通过使用IM_HEADER-> CREATE_ITEM从调用者存储在内存中的某些数据中添加一些项目,然后在ME51N的打开时间使用SET_DATA方法将默认字段添加为默认字段。 我以为我有解决方案,但是不幸的是,创建的行实际上是灰色的。

用户必须单击检查按钮并弹出错误消息。 他们得到这个是因为我没有填写数量或日期字段。 点击弹出窗口上的绿色箭头后,将打开这些行以进行数据输入。 这是期望的结果。 如果有人知道我所缺少的内容,我将在此处包括我的代码,这将允许在屏幕的开头打开行以进行输入,而无需额外的手动步骤。

方法if_ex_me_process_req_cust〜open。

 数据:i_mereq_item TYPE mereq_item,
       i_mereq_head TYPE mereq_header。

 数据:ld_im_item类型参考if_purchase_requisition_item,
       ld_re_item类型参考if_purchase_requisition_item。

 数据:zmmprprice_me51n_wa的t_me51n类型标准表,
       x_me51n TYPE zmmprprice_me51n_wa,
       v_bnfpo TYPE bnfpo。

 刷新t_me51n。
 从内存ID'ZMMPRICE_ME51N'导入t_me51n到t_me51n。
 检查t_me51n []不初始化。

 清除i_mereq_head。
 i_mereq_head-bsart ='ID'。
 im_header-> set_data(导出im_data = i_mereq_head)。

 清除v_bnfpo。
 将t_me51n循环到x_me51n中。
   呼叫方法im_header-> create_item(
     出口
        im_item = ld_im_item
     接收
        re_item = ld_re_item)。

   清除i_mereq_item。
   v_bnfpo = v_bnfpo + 10
   i_mereq_item-bnfpo = v_bnfpo。
   i_mereq_item-bsart ='ID'。
   i_mereq_item-lifnr = x_me51n-lifnr。
   i_mereq_item-txz01 = x_me51n-indmatcod。
   i_mereq_item-ekgrp = x_me51n-ekgrp。
   i_mereq_item-preis = x_me51n-netpr。
   i_mereq_item-waers = x_me51n-waers。
   i_mereq_item-werks = x_me51n-werks。

   ld_re_item-> set_data(导出im_data = i_mereq_item)。
 结局。

 终结法。
 

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我需要创建ALV报告。 用户希望从那里选择几行数据,其中包含零件编号,文本,价格等信息。然后,他们希望我用所选数据调用ME51N,并用所选信息预填充详细信息网格。 这样他们就可以在最终保存并创建请求之前完成ME51N中的数据输入。

我正在使用BAdI ME_PROCESS_REQ_CUST的OPEN方法。 通过使用IM_HEADER-> CREATE_ITEM从调用者存储在内存中的某些数据中添加一些项目,然后在ME51N的打开时间使用SET_DATA方法将默认字段添加为默认字段。 我以为我有解决方案,但是不幸的是,创建的行实际上是灰色的。

用户必须单击检查按钮并弹出错误消息。 他们得到这个是因为我没有填写数量或日期字段。 点击弹出窗口上的绿色箭头后,将打开这些行以进行数据输入。 这是期望的结果。 如果有人知道我所缺少的内容,我将在此处包括我的代码,这将允许在屏幕的开头打开行以进行输入,而无需额外的手动步骤。

方法if_ex_me_process_req_cust〜open。

 数据:i_mereq_item TYPE mereq_item,
       i_mereq_head TYPE mereq_header。

 数据:ld_im_item类型参考if_purchase_requisition_item,
       ld_re_item类型参考if_purchase_requisition_item。

 数据:zmmprprice_me51n_wa的t_me51n类型标准表,
       x_me51n TYPE zmmprprice_me51n_wa,
       v_bnfpo TYPE bnfpo。

 刷新t_me51n。
 从内存ID'ZMMPRICE_ME51N'导入t_me51n到t_me51n。
 检查t_me51n []不初始化。

 清除i_mereq_head。
 i_mereq_head-bsart ='ID'。
 im_header-> set_data(导出im_data = i_mereq_head)。

 清除v_bnfpo。
 将t_me51n循环到x_me51n中。
   呼叫方法im_header-> create_item(
     出口
        im_item = ld_im_item
     接收
        re_item = ld_re_item)。

   清除i_mereq_item。
   v_bnfpo = v_bnfpo + 10
   i_mereq_item-bnfpo = v_bnfpo。
   i_mereq_item-bsart ='ID'。
   i_mereq_item-lifnr = x_me51n-lifnr。
   i_mereq_item-txz01 = x_me51n-indmatcod。
   i_mereq_item-ekgrp = x_me51n-ekgrp。
   i_mereq_item-preis = x_me51n-netpr。
   i_mereq_item-waers = x_me51n-waers。
   i_mereq_item-werks = x_me51n-werks。

   ld_re_item-> set_data(导出im_data = i_mereq_item)。
 结局。

 终结法。
 
付费偷看设置
发送
4条回答
大简至美
1楼-- · 2020-09-17 02:44

你好

如果我没记错的话,您必须通过调用采购申请的方法流程将更改传播到所有相关对象:

 ...
   结局。

   im_header-> process()。

 ENDMETHOD。

最诚挚的问候,

Nicolas

DafaDDDa
2楼-- · 2020-09-17 02:48

该处理方法也应应用于im_header,以执行检查并创建相关数据,例如记帐容器等。

NB:同样,不要犹豫将get/set_datax与get/set_data一起使用。

SAP浪
3楼-- · 2020-09-17 02:27
 im_header-> process()。 解决了一个问题,似乎又造成了另一个问题。 我要做的最后一步是默认显示某些项目文本。 每当通过调用方法自动执行"过程"或单击按钮手动完成"过程"时,该文本就会消失。 这是我来自open方法的最新代码。 底部的文本问题设置是问题

   方法if_ex_me_process_req_cust〜打开。

     数据:i_mereq_item TYPE mereq_item,
           i_mereq_head TYPE mereq_header。
     数据:lt_textlines TYPE mmpur_t_textlines,
            ls_textlines TYPE mmpur_textlines。
     数据:ld_im_item类型参考if_purchase_requisition_item,
           ld_re_item类型参考if_purchase_requisition_item。
     数据:zmmprprice_me51n_wa的t_me51n类型标准表,
           x_me51n TYPE zmmprprice_me51n_wa,
           v_bnfpo TYPE bnfpo。

     数据:lv_tdobject TYPE tdobject,
            lv_metafield TYPE mmpur_metafield,
            lt_texttypes TYPE mmpur_t_texttypes,
            ls_texttypes TYPE mmpur_texttypes。

     刷新t_me51n。
     从内存ID'ZMMPRICE_ME51N'导入t_me51n到t_me51n。
     检查t_me51n []不初始化。

     清除i_mereq_head。
     i_mereq_head-bsart ='ID'。
     im_header-> set_data(导出im_data = i_mereq_head)。

     清除v_bnfpo。
     将t_me51n循环到x_me51n中。
       呼叫方法im_header-> create_item(
         出口
           im_item = ld_im_item
         接收
           re_item = ld_re_item)。

       清除i_mereq_item。
 *基本订单项数据
       v_bnfpo = v_bnfpo + 10
       i_mereq_item-bnfpo = v_bnfpo。
       i_mereq_item-bsart ='ID'。
       i_mereq_item-lifnr = x_me51n-lifnr。
       i_mereq_item-txz01 = x_me51n-indmatcod。
       i_mereq_item-ekgrp = x_me51n-ekgrp。
       i_mereq_item-preis = x_me51n-netpr。
       i_mereq_item-waers = x_me51n-waers。
       i_mereq_item-werks = x_me51n-werks。
       ld_re_item-> set_data(导出im_data = i_mereq_item)。

 *获取文本对象**
       清除:lv_metafield,lv_tdobject。
       ld_re_item-> if_longtexts_mm〜get_textobject(
             输入
               ex_tdobject = lv_tdobject
               ex_metafield = lv_metafield)。

 *获取文本ID **
       刷新:lt_texttypes。
       清除:ls_texttypes。
       ld_re_item-> if_longtexts_mm〜get_types(
             输入
               ex_texttypes = lt_texttypes)。

 *将描述保存到项目文本
       清除:ls_textlines。
       刷新:lt_textlines。
       ls_textlines-tdobject ='EBAN'。
       ls_textlines-tdid ='B01'。
       ls_textlines-tdformat ='*'。
       ls_textlines-tdline = x_me51n-说明。
       附加ls_textlines至lt_textlines。

       ld_re_item-> if_longtexts_mm〜set_text(
           出口
             im_tdid ='B01'
             im_textlines = lt_textlines)。
     结局。

 *在编辑模式下打开->这将清除文本
     im_header-> process()。

   终结法。


 
骆驼绵羊
4楼-- · 2020-09-17 02:45

我想我明白了。 这是我阅读并复制以下文本代码的博客:

https://wiki.scn.sap.com/wiki/display/ABAP/购买+要求+线+项+数据+操纵+使用+ BADI +-+ ME_PROCESS_REQ_CUST

用于PROCESS_ITEM方法。 我假设文本方法也可以在OPEN方法中使用。 我将代码复制到PROCESS_ITEM方法中,根据我的需要进行了修改,并且看起来工作正常。

感谢您的帮助。 我现在将关闭该项目。

一周热门 更多>