【ABAP系列】SAP ABAP 物料凭证增强

公众号: SAP Technical
本文作者: matinal
 

 

前言部分

大家可以关注我的公众号,公众号里的排版更好,阅读更舒适。

正文部分

  BADI:MB_DOCUMENT_BADI

  USER-EXIT:MBCF0002

  实现功能1、当参照预留过帐时,检查填入数量是否小于预留数量

  2、移动类型是***的时候,查看RSNUM是否为空

  3、检查原始单据工厂和库存地点与物料凭证的工厂和库存地点一致

  MBCF0009

  实现功能1、当移动类型是***的时候,库存地点只能是****

  2、工单下达日期+时间小于预留需求日期+时间,警告

  ENHANCEMENT SPOT

  1、标准程序MM07MFB0  实现功能:如果移动类型是***,特殊库存标识必须是*,工厂必须是****

  2、标准程序MM07MFK0_KONTIERUNG_INIT

  SPOT是ENHANCEMENT-POINT KONTIERUNG_INIT_01 SPOTS ES_SAPMM07M.实现功能:如果移动类型是***,特殊库存标识变成灰,工厂变成灰

  3、标准程序FM07MED0_DYNPRO_MODIFIZIEREN

  SPOT是ENHANCEMENT-POINT DYNPRO_MODIFIZIEREN_06

  SPOTS ES_FM07MED0_DYNPRO_MODIFIZIEREINCLUDE BOUND

  实现功能:移动类型是***,则根据采购订单找到库存地点,讲库存地点描述替代到物料凭证的收货方WEMPF字段

  4、标准程序MM07MFF0_FUSSZEILE_WE

  SPOT是ENHANCEMENT-POINT FUSSZEILE_WE_01 SPOTS ES_SAPMM07M.实现功能:如果移动类型是***,且特殊库存标志是*,库存地点只能是****

转载于:https://www.cnblogs.com/SAPmatinal/p/11181369.html

ABAP报表中处理物料凭证冲销的情况,通常需要识别冲销凭证(反向操作)、获取原始凭证信息,并确保报表逻辑正确反映冲销前后的库存或财务影响。以下是详细步骤和示例代码: --- ### **1. 识别冲销凭证** 物料凭证冲销时,SAP会生成一个新的反向凭证(类型为`WL`或`WR`),并在原始凭证的`MBLNR`字段中记录冲销关系。可通过以下方式判断: - **反向凭证类型**:冲销凭证的`BWART`(移动类型)通常为原始移动类型的反向值(如`101`的反向是`102`)。 - **冲销标志**:检查`MKPF`表中的`XBLNR`字段(参考凭证号),若等于原始凭证号,则为冲销凭证。 - **取消日期**:`MKPF-BLDAT`(凭证日期)可能晚于原始凭证日期。 #### **示例代码:查询冲销凭证** ```ABAP REPORT zmm_reverse_material_doc. PARAMETERS: p_mblnr TYPE mblnr OBLIGATORY, " 原始凭证号 p_mjahr TYPE mjahr OBLIGATORY. " 原始凭证年度 DATA: lv_reversed_mblnr TYPE mblnr, lv_reversed_mjahr TYPE mjahr. * 查询冲销凭证(通过参考凭证号XBLNR) SELECT SINGLE mblnr mjahr FROM mkpf INTO (lv_reversed_mblnr, lv_reversed_mjahr) WHERE xblnr = p_mblnr AND mjahr = p_mjahr AND bwart LIKE 'W%'. " 冲销凭证类型通常以W开头 IF sy-subrc = 0. WRITE: / '原始凭证', p_mblnr, p_mjahr, '已被冲销,冲销凭证号为:', lv_reversed_mblnr, lv_reversed_mjahr. ELSE. WRITE: / '未找到冲销凭证,原始凭证可能未被冲销。'. ENDIF. ``` --- ### **2. 获取原始凭证与冲销凭证的详细信息** 通过`MSEG`表关联`MKPF`表,获取物料、数量、移动类型等详细信息。 #### **示例代码:对比原始与冲销凭证** ```ABAP DATA: lt_original TYPE TABLE OF mseg, lt_reversed TYPE TABLE OF mseg. * 查询原始凭证行项目 SELECT * FROM mseg INTO TABLE lt_original WHERE mblnr = p_mblnr AND mjahr = p_mjahr. * 查询冲销凭证行项目(若存在) IF lv_reversed_mblnr IS NOT INITIAL. SELECT * FROM mseg INTO TABLE lt_reversed WHERE mblnr = lv_reversed_mblnr AND mjahr = lv_reversed_mjahr. ENDIF. * 输出对比结果 WRITE: / '原始凭证行项目:'. LOOP AT lt_original INTO DATA(ls_original). WRITE: / ls_original-matnr, ls_original-werks, ls_original-shkzg, ls_original-erfmg. " SHKZG:借贷标识,ERFMG:数量 ENDLOOP. IF lt_reversed IS NOT INITIAL. WRITE: / '冲销凭证行项目:'. LOOP AT lt_reversed INTO DATA(ls_reversed). WRITE: / ls_reversed-matnr, ls_reversed-werks, ls_reversed-shkzg, ls_reversed-erfmg. ENDLOOP. ENDIF. ``` --- ### **3. 在报表中处理冲销逻辑** 根据业务需求,报表可能需要: - **排除冲销凭证**:仅显示未被冲销的凭证。 - **标记冲销状态**:在结果中标注哪些凭证已被冲销。 - **计算净影响**:合并原始凭证与冲销凭证的数量(如`原始数量 - 冲销数量`)。 #### **示例代码:计算净库存影响** ```ABAP DATA: lt_net_stock TYPE TABLE OF mseg, ls_net_stock LIKE LINE OF lt_net_stock. LOOP AT lt_original INTO ls_original. " 检查是否被冲销 READ TABLE lt_reversed INTO DATA(ls_reversed) WITH KEY matnr = ls_original-matnr werks = ls_original-werks lgort = ls_original-lgort. " 可根据需要添加更多条件 IF sy-subrc = 0. " 计算净数量(原始数量 - 冲销数量) ls_net_stock-matnr = ls_original-matnr. ls_net_stock-werks = ls_original-werks. ls_net_stock-erfmg = ls_original-erfmg - ls_reversed-erfmg. APPEND ls_net_stock TO lt_net_stock. ELSE. " 未被冲销,直接记录 ls_net_stock = ls_original. APPEND ls_net_stock TO lt_net_stock. ENDIF. ENDLOOP. * 输出净影响结果 WRITE: / '净库存影响:'. LOOP AT lt_net_stock INTO ls_net_stock. WRITE: / ls_net_stock-matnr, ls_net_stock-werks, ls_net_stock-erfmg. ENDLOOP. ``` --- ### **4. 关键字段说明** | 字段 | 说明 | |-------------|-------------------------------| | `MBLNR` | 物料凭证号 | | `MJAHR` | 物料凭证年度 | | `BWART` | 移动类型(冲销类型通常为反向)| | `SHKZG` | 借贷标识(H=借方,S=贷方) | | `ERFMG` | 数量 | | `XBLNR` | 参考凭证号(冲销时指向原始凭证)| --- ### **5. 注意事项** 1. **性能优化**:对大批量凭证查询,使用索引字段(如`MBLNR`+`MJAHR`)避免全表扫描。 2. **权限检查**:确保用户有权限访问`MKPF`和`MSEG`表。 3. **事务一致性**:若涉及库存更新,需在报表中调用`BAPI`或事务码(如`MBST`)而非直接修改数据库。 4. **冲销时间点**:冲销操作可能跨期间,需考虑会计期间的库存影响。 --- ### **6. 扩展功能** - **ALV报表展示**:使用`REUSE_ALV_GRID_DISPLAY`输出带颜色的冲销状态标记。 - **批量冲销处理**:通过`BAPI_MATERIAL_DOCUMENT_POST`实现自动化冲销。 - **日志记录**:将冲销操作记录到自定义日志表,便于审计。 --- ### **总结** - **识别冲销**:通过`XBLNR`或反向移动类型关联原始凭证。 - **数据对比**:联合查询`MKPF`和`MSEG`表获取详细信息。 - **业务逻辑**:根据需求排除、标记或计算净影响。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值