SD-物料属性的使用

本文介绍如何通过SAP系统的物料属性来控制特定物料不开具给指定客户的过程。通过配置产品属性消息、增强字段文本说明、维护物料及客户主数据等步骤,实现系统在开具订单时对不适用物料的警告。

在物料主数据的sales: sale org.2 视图中,有10个product attribute可以勾选,是用来描述货物的一些特殊性的。参见下图

 

我们可以使用这些属性控制具有某个特性的物料不能开具给某些客户,在开单是系统给出信息提示。

具体步骤 

一、配置订单类型的产品属性消息

路径:IMG-销售与分销-销售-销售单据-定义销售凭证类型

TCode:VOV8

如下图:

 

二、增强这些字段的文本说明

路径:IMG-销售与分销-系统修正-创建新字段(无条件技术)-在客户主记录中的保留字段

TCode:SE11

你可以将这些字段的文本说明改成你实际应用的属性文本

 

三、维护物料主数据

TCode:MM01,MM02

销售视图

 

四、维护客户主数据

TCode:XD01,XD02

在销售主数据的点击“产品属性”,将弹出产品属性对话框,选中表示用户拒绝维护了这类属性的产品。

 

 

 

五、开具订单

TCode:VA01,VA02

 这样,在给6477客户开具订单时,用户属于了用户不接受的属性物料,系统就会警告错误:“运达方拒绝产品属性1 对于 68777”。

<think>我们之前讨论过SD模块的物料号如何通过标准流程传递到FI凭证(通过评估类等属性间接影响科目)。但用户现在明确要求将物料号本身(而非其派生的会计科目)传入FI财务凭证,这超出了标准功能范围。需要结合增强技术实现。 用户提供了两个BAPI引用(BAPI_ACC_DOCUMENT_POST和BAPI_GLX_GETDOCITEMS),但这两个BAPI主要用于FI凭证过账和查询,与物料号传递无直接关系。不过,BAPI_ACC_DOCUMENT_POST的EXTENSION2参数可用于传递自定义字段,这可能是关键突破口。 ### 解决方案:通过增强将物料号写入FI凭证 标准SAP中,FI凭证行项目不存储物料号。若强制要求,需使用以下增强方法之一: #### 方法1:使用BAPI_ACC_DOCUMENT_POST的扩展字段(推荐) 当SD开票自动生成FI凭证时,系统底层也调用类似BAPI的过账函数。我们可通过增强在凭证创建时插入物料号到扩展字段。 1. **原理**:利用BAPI_ACC_DOCUMENT_POST的EXTENSION2参数传递自定义数据(如物料号)到FI凭证的扩展字段(如文本字段或自定义字段)[^1]。 2. **实施步骤**: - **步骤1:创建自定义字段** - 使用事务码CI_COBL或SE11在FI凭证行项目表(BSEG)或凭证增强表(如COBL)中添加字段(例如ZMATNR)。需申请Access Key。 - **步骤2:实现BADI增强** - 使用BADI:`AC_DOCUMENT`(FI凭证增强点)或`ACC_DOCUMENT`(更灵活)。 - 在方法`IF_EX_ACC_DOCUMENT~CHANGE`中编写逻辑: ```abap METHOD if_ex_acc_document~change. LOOP AT c_document->item ASSIGNING FIELD-SYMBOL(<item>). " 从SD开票凭证获取物料号(需关联到FI行项目) " 示例:假设通过销售订单号关联物料号(实际需根据业务设计取值逻辑) IF <item>-sales_order IS NOT INITIAL. SELECT SINGLE matnr FROM vbap INTO <item>-zmatnr " 自定义字段 WHERE vbeln = <item>-sales_order AND posnr = <item>-sales_item. ENDIF. ENDLOOP. ENDMETHOD. ``` - **步骤3:在开票时调用增强** - SD开票使用函数`RV_INVOICE_CREATE`,其内部会触发FI过账。确保BADI激活后,系统自动将物料号写入自定义字段。 3. **优点**:直接修改凭证结构,数据可查询。 #### 方法2:写入FI凭证行项目文本(标准字段) 若不修改表结构,可将物料号写入FI凭证的“行项目文本”(SGTXT字段): - **使用用户出口**:SD开票时,在凭证保存前(USEREXIT_SAVE_DOCUMENT_PREPARE)将物料号追加到文本。 ```abap DATA: lv_matnr TYPE matnr. " 获取当前行物料号(示例) lv_matnr = vbap-matnr. " 修改FI行项目文本(COBL-SGTXT) CONCATENATE cobl-sgtxt lv_matnr INTO cobl-sgtxt SEPARATED BY space. ``` - **缺点**:文本长度有限(最多50字符),且可能破坏原始文本。 #### 方法3:通过替代(Substitution)自动填充 使用事务码GGB1创建替代规则,将物料号映射到FI凭证的某个字段(如分配字段ZUONR): 1. 规则:当凭证类型为SD发票(如RV)时,将销售订单行项目的物料号写入ZUONR。 2. **限制**:ZUONR字段仅18字符,可能截断长物料号。 ### 关键配置和验证 1. **测试流程**: - 创建开票凭证(VF01) → 生成FI凭证(FB03) → 检查行项目是否包含物料号。 2. **权限**:增强开发需ABAP权限,表修改需SAP Access Key。 3. **性能**:避免在BADI中使用低效SELECT,建议用缓冲区或内表优化。 ### 注意事项 - **数据一致性**:物料号在FI凭证中仅为参考信息,不影响过账逻辑。 - **增强复杂性**:需准确关联SD行项目与FI行项目(通常通过销售订单号+行号)。 - **备选方案**:若不必须存储在FI凭证中,可开发报表通过凭证流(VF03→FB03)关联查询。 若需代码示例或详细配置步骤,请提供具体场景(如物料号来源是销售订单行或交货单行)。 §§相关问题§§ 1. 如何为SAP FI凭证添加自定义字段? 2. 使用BADI ACC_DOCUMENT增强FI凭证时需要注意哪些问题? 3. SAP中如何通过销售订单号关联物料号和财务凭证? 4. 将长文本信息写入FI凭证行项目有哪些限制?</think>### 将SD模块物料号传入FI财务凭证的解决方案 在SAP标准流程中,物料号本身**不会直接存储**在FI财务凭证中,但可通过以下方法实现物料号与FI凭证的关联或传递: --- ### 一、核心实现方法(通过增强技术) #### 1. **使用BAPI_ACC_DOCUMENT_POST扩展字段** 在SD开票生成FI凭证时,通过增强将物料号写入BAPI的扩展字段: ```abap DATA: lt_extension2 TYPE TABLE OF bapiextc, " 扩展字段结构 ls_extension2 TYPE bapiextc. " 获取开票凭证中的物料号(示例) SELECT matnr FROM vbap INTO @DATA(lv_matnr) WHERE vbeln = @billing_doc_number. " 填充扩展字段 ls_extension2-structure = 'ZMATNR_INFO'. " 自定义结构 ls_extension2-valuepart1 = lv_matnr. " 物料号 APPEND ls_extension2 TO lt_extension2. " 调用FI过账BAPI CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST' EXPORTING documentheader = ls_header TABLES accountgl = lt_gl_items extension2 = lt_extension2 " 传入物料号 return = lt_return. ``` **关键配置**: 1. 创建自定义结构`ZMATNR_INFO`(事务码SE11) 2. 在FI凭证表中添加扩展字段(事务码OMSF) #### 2. **通过BADI增强ACC_DOCUMENT** 使用标准BADI `ACC_DOCUMENT` 在FI凭证生成时插入物料号: ```abap METHOD if_ex_acc_document~change. LOOP AT c_document->item ASSIGNING FIELD-SYMBOL(<fs_item>). " 从SD开票凭证获取物料号(需实现取值逻辑) <fs_item>-zuonr = get_matnr_from_billing( <fs_item>-vbeln ). " 写入分配字段 ENDLOOP. ENDMETHOD. ``` **字段选择**: - 写入`BSEG-ZUONR`(分配字段) - 或写入`BSEG-SGTXT`(行项目文本) --- ### 二、标准配置补充(间接传递) 物料号通过主数据属性间接影响FI科目: 1. **评估类映射** 在物料主数据(MM03)设置评估类(Valuation Class)→ 通过事务码VKOA映射到收入科目 $$ \text{物料号} \xrightarrow{\text{评估类}} \text{会计科目} $$ 2. **科目确定配置**(事务码VKOA) ```plaintext 条件类型:ERL(收入) 科目键 = 物料组 + 科目分配组 ``` --- ### 三、验证与监控 1. **FI凭证查看**(事务码FB03) 检查行项目的"分配"字段或文本字段是否包含物料号 2. **凭证流追溯** `VF03(开票凭证)→ FB03(FI凭证)` ![凭证流](https://via.placeholder.com/400x200?text=SD-FI+Document+Flow) 3. **表关联查询** ```sql SELECT a~matnr, b~belnr FROM vbap AS a " 销售订单行 JOIN rbkp AS b ON a~vbeln = b~xref3 " 通过参考字段关联 WHERE b~belnr = @fi_doc_number ``` --- ### 四、注意事项 1. **性能影响** 大量数据时避免在BADI中使用SELECT循环,建议使用缓冲区表 2. **字段限制** - `ZUONR`字段最大长度18字符 - `SGTXT`字段最大长度50字符 3. **主数据一致性** 确保物料主数据的评估类配置正确(事务码MM17批量检查)[^1] 4. **增强冲突** 测试其他BADI(如AC_DOCUMENT)是否影响逻辑 > ✅ **推荐方案**:对实时性要求高时用BADI写入`ZUONR`字段;若需完整信息存储,用BAPI扩展字段。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值