ABAP MM ME2M/ ME2L/ ME2J/ME2N/ME5A 标准报表增加字段

本文介绍了如何在IT技术背景下查找报表结构,如ME_CHANGE_OUTTAB_CUS和MEREP_OUTTAB_PURCHDOC,通过增强点和im_struct_name实现APPEND字段的添加,包括创建空类和指定结构名称的过程。

一、查找报表对应的结构 然后在结构APPEND字段

      ME_CHANGE_OUTTAB_CUS

     SE18  

   

   找到对应的增强点

    

 

MEREP_OUTTAB_PURCHDOC

*旧的版本有的没有以上实例,可以先创建一个实现类3步 然后im_struct_name值

2、APPEND 字段到MEREP_OUTTAB_PURCHDOC结构

3、增强给该字段赋值

<think>我们被要求使用ABAP调用事务代码ME2N来获取未清数据。在SAP中,使用ABAP调用事务代码通常有几种方式,例如使用`CALL TRANSACTION`或`SUBMIT`。但是,事务代码ME2N是一个报表事务码,通常用于显示采购订单的未清项目。因此,我们可以使用`SUBMIT`语句来执行相应的报表程序。 根据SAP的标准,事务代码ME2N对应的报表程序可能是`RM06EN00`(这是常见的,但具体程序名可能因版本而异,需要确认)。我们可以通过`SUBMIT`来运行这个报表,并将结果输出到内表或文件中,但通常这类标准报表的输出是直接显示到屏幕的。为了获取数据,我们需要将报表的输出结果重定向到内表中。 然而,标准报表`RM06EN00`并没有直接提供将结果输出到内表的参数。因此,我们可能需要使用`SUBMIT ... EXPORTING LIST TO MEMORY`然后使用`CL_ABAP_LIST_UTILITIES=>LIST_FROM_MEMORY`来获取列表数据,或者使用`SUBMIT ... EXPORTING LIST TO FILE`将结果输出到文件,然后再读取文件。但更常见的是使用内存列表方式。 但是,请注意,标准报表的输出格式是列表(ALV列表或简单列表),我们需要解析这个列表来获取所需的数据,这通常不是一种可靠的方式,因为列表格式可能会变化。 另一种方法是使用标准函数或者直接查询底层表。在用户提供的引用中提到了几种方式,比如: - 使用函数`MB_ADD_PURCHASE_ORDER_QUANTITY`(引用[1]中提到) - 查询视图MDBS(第3种方式) - 关联查询透明表EKPO和EKET(第4种方式) 因此,如果我们的目标是获取未清数据,建议使用更直接的方法,比如通过函数或直接查询数据库表。 但是,用户明确要求使用ABAP调用事务代码ME2N,所以我们先尝试使用`SUBMIT`来执行报表并获取输出。 步骤: 1. 使用`SUBMIT`运行报表程序(假设为RM06EN00),并传递选择屏幕参数。 2. 将输出结果保存到内存中。 3. 从内存中读取列表数据并解析。 然而,由于ME2N事务码可能有多个选择屏幕,我们需要传递的参数很多,而且我们不知道用户具体想要什么选择条件。因此,我们需要设定一些选择参数。这里我们假设用户需要根据采购组织、采购组等条件来获取数据。 注意:这种方法依赖于报表的输出格式,如果报表格式改变,解析逻辑可能会失效。因此,在实际应用中需要谨慎。 下面是一个示例代码框架: ```abap DATA: lt_list TYPE TABLE OF abaplist. PARAMETERS: p_ekorg TYPE ekorg OBLIGATORY DEFAULT 'XXXX'. START-OF-SELECTION. SUBMIT rm06en00 WITH s_ekorg EQ p_ekorg " 这里根据实际需要传递参数 WITH pa_ordpf EQ 'X' " 选择采购订单 WITH pa_ordpa EQ '' WITH pa_ordno EQ '' ... " 其他参数 AND RETURN EXPORTING LIST TO MEMORY. CALL FUNCTION 'LIST_FROM_MEMORY' TABLES listobject = lt_list EXCEPTIONS not_found = 1 OTHERS = 2. IF sy-subrc <> 0. MESSAGE 'List not found' TYPE 'E'. ENDIF. " 现在lt_list中包含了报表输出的每一行,我们需要解析这些行来获取未清数据 " 解析逻辑需要根据实际输出格式来编写,这里无法给出通用代码,因为格式复杂且可能变化。 ``` 由于解析报表输出非常复杂且不稳定,我们不推荐这种方法。因此,我们建议使用其他更稳定的方法,例如直接查询表或使用函数。 在引用[1]中提到,可以使用函数`MB_ADD_PURCHASE_ORDER_QUANTITY`来获取采购订单的未清数量。这个函数可以直接返回未清数量,而不需要调用事务码。 另外,还可以通过直接查询表的方式,例如关联表EKPO(采购订单行项目)和EKET(计划交货行)。未清数量可以通过计算EKET中的计划交货数量减去已交货数量来得到。 因此,如果用户坚持要调用ME2N,那么我们可以按照上述方法尝试,但需要警告用户这种方法的局限性。如果用户只是想要获取未清数据,我们建议使用函数或直接查询。 下面我们给出一个使用函数`MB_ADD_PURCHASE_ORDER_QUANTITY`的示例: ```abap DATA: lt_open_po TYPE TABLE OF mdezx. CALL FUNCTION 'MB_ADD_PURCHASE_ORDER_QUANTITY' EXPORTING i_ebeln = '4500000000' " 采购订单号 i_ebelp = '00010' " 行项目号 TABLES t_mdez = lt_open_po. " 然后lt_open_po中就包含了未清数量等信息 ``` 或者通过查询表: ```abap SELECT ebeln, ebelp, menge, wemng FROM eket INTO TABLE @DATA(lt_eket) WHERE ebeln = @lv_ebeln AND ebelp = @lv_ebelp. " 然后计算未清数量:未清数量 = menge(订单数量) - wemng(已收货数量) ``` 但是,请注意,未清数量可能分布在多个计划行上,所以需要根据业务需求进行汇总。 综上所述,我们提供了两种方法:调用事务码(不推荐)和函数/直接查询(推荐)。由于用户要求调用事务码,我们给出了SUBMIT的方法,但强调其风险。 现在,根据用户的问题,我们更倾向于建议使用函数或直接查询表,因为这样更稳定和高效。 如果用户确实需要调用ME2N并获取输出,那么我们需要进一步了解用户的具体需求(比如需要哪些字段),以便编写解析逻辑。但通常,这需要大量的调试和测试。 因此,我们回答如下:</think>### 在 SAP ABAP 中调用事务代码 ME2N 获取未清数据的实现方法 在 SAP 中调用事务代码 ME2N 获取采购订单未清数据,需通过 `SUBMIT` 语句执行其底层报表程序并捕获输出结果。以下是具体实现步骤: #### 1. **确定底层报表程序** 事务代码 ME2N 对应的标准报表程序是 **`RM06EN00`**(需在具体系统中验证)。 #### 2. **使用 SUBMIT 调用报表** 通过 `SUBMIT` 语句执行报表,将输出重定向到内表: ```abap DATA: lt_list TYPE TABLE OF abaplist. " 存储输出的内表 SUBMIT rm06en00 WITH so_ebeln IN s_ebeln " 采购订单范围 WITH pa_ordpf = 'X' " 选择采购订单 WITH pa_ordpa = space EXPORTING LIST TO MEMORY AND RETURN. CALL FUNCTION 'LIST_FROM_MEMORY' TABLES listobject = lt_list EXCEPTIONS not_found = 1. IF sy-subrc <> 0. MESSAGE '输出列表获取失败' TYPE 'E'. ENDIF. ``` #### 3. **解析输出数据** 从 `lt_list` 中提取未清数据(需根据实际输出格式调整): ```abap LOOP AT lt_list ASSIGNING FIELD-SYMBOL(<fs_line>). " 示例解析逻辑(需根据实际列位置调整) IF sy-tabix > 2. " 跳过表头 SPLIT <fs_line> AT cl_abap_char_utilities=>horizontal_tab INTO DATA(lv_ebeln) DATA(lv_ebelp) DATA(lv_open_qty). APPEND VALUE #( ebeln = lv_ebeln ebelp = lv_ebelp open_qty = lv_open_qty ) TO gt_output. ENDIF. ENDLOOP. ``` #### 4. **替代方案:直接查询表数据(推荐)** 更高效可靠的方式是直接查询底层表: ```abap SELECT ebeln, ebelp, menge AS po_qty, wemng AS gr_qty, ( menge - wemng ) AS open_qty FROM eket INTO TABLE @DATA(lt_open_po) WHERE ebeln IN @s_ebeln AND menge > wemng. " 筛选未清数量>0的行 ``` **优点**: - 避免屏幕交互和输出解析 - 直接访问实时数据 - 支持灵活的条件筛选[^1] #### 5. **增强处理(可选)** 若需扩展功能,可通过 BTE 增强: ```abap CALL FUNCTION 'OPEN_FI_PERFORM_00001140' " BTE 函数示例 EXPORTING i_ebeln = lv_ebeln. ``` > ⚠️ **注意事项** > 1. `SUBMIT` 方式依赖输出格式稳定性,SAP 版本升级可能导致解析失败 > 2. 直接表查询需确认业务逻辑完整性(如考虑退货场景) > 3. 生产环境建议使用权限对象 `S_TCODE` 控制事务代码访问权限 ### 关键表结构说明 | 表名 | 描述 | 关键字段 | |------|---------------|-----------------------| | EKPO | 采购订单行项目 | EBELN(订单号), EBELP(行号) | | EKET | 计划交货行 | MENGE(订单数量), WEMNG(已收数量) | | MDBS | 未清订单视图 | 可直接查询未清数量(需激活视图)[^1] | [^1]: SAP ABAP 获取采购订单未清数量的 6 种方式,包括透明表查询和 MDBS 视图应用。 [^2]: ABAP 增强技术总结,包含 BTE 在采购场景的应用。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值