BSEG

本文详细介绍了SAP系统中未清项管理的核心概念及其应用。解释了BSID、BSIK、BSIS等表的功能及如何记录应收、应付及总账明细。探讨了BSEG表与其他相关表的关系,以及在读取时可能遇到的性能问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

BSAD Accounting: Secondary index for customers (cleared items)
BSID Accounting: Secondary index for customers
BSAS Accounting: Secondary index for G/L accounts(cleared items)
BSIS
BSAK Accounting : Secondary index for vendors (cleared items)
BSIK Accounting: Secondary index for vendors

BSAD:应收明细(已清帐)
BSID:应收明细(未清帐)
BSAS:总帐明细(已清帐)
BSIS:总帐明细(未清帐)
BSAK:应付明细(已清帐)
BSIK:应付明细(未清帐)
BSEG主要通过“凭证号”“会计年度”“行号”和这六张表关联
一般情况下一笔业务产生的凭证都是未清的,那么:如果该业务行是客户相关的,则被记录到BSID;
如果该业务行是供应商相关的,则被记录到BSIK;
无论和客户相关还是和供应商相关,都是和总帐相关,所以也会有记录到BSIS;
但是如果这笔业务被清帐了,则相应的记录会从BSIS转移到BSAS
一般情况下:应收账款、预收账款、其他应收款、应收汇票等科目既和客户相关,又和未清项管理的总帐科目相关;
应付账款、预付账款、其他应付款、应付汇票等科目既和供应商相关,又和未清项管理的总帐科目相关;
其他总帐科目一般不启用未清项管理,所以记录一般都放在BSIS中。
BSEG本身是一个 Cluster Table(簇表),BSEG就是由上述的六大表的集成,当要读取”BSEG”Table时就等于去读取那六个表,这样你可以想像它读起来会就多慢。对於簇表或Pool Table,都是SAP系统本身在使用的,因此簇表本身是不存在资料库实体的,虽然是可以在ABAP使用,不过还是有一些限制: 1.不能使用select distinct or group by语法 2.不能使用Native SQL 3.不能使用specify field names after the order by clause 4.不能在建立次索引 5.查询时一定要用KEY FIELD

 

<think>我们之前讨论的是将物料号复制到FI凭证的ZUONR字段。但用户现在明确要求传递到BSEG-MATNR字段(物料主数据字段),这是不同的需求。 注意:标准SAP中,BSEG并不包含MATNR字段(物料号通常存储在COEP等中)。但用户可能使用了扩展字段或自定义字段。因此需要分情况讨论: 情况1:用户实际指的是将物料号传递到财务凭证的某个字段(如分配字段ZUONR或文本字段SGTXT),但误称为BSEG-MATNR。 情况2:用户确实在BSEG中自定义了一个字段(例如ZZ_MATNR)来存储物料号,并希望传递到该字段。 由于用户明确提到“BSEG-MATNR”,我们假设是情况2(自定义字段)。但标准方案中,财务凭证行项目BSEG没有MATNR字段。因此,我们需要: 1. 确认用户是否有自定义字段(例如:在BSEG中追加了字段,或在财务凭证中使用了替代字段) 2. 如果用户确实自定义了一个字段(比如命名为ZZ_MATNR),那么我们需要在VOFM例程中将物料号赋值给该字段在RV60A结构中对应的映射字段。 标准SAP中,开票凭证到财务凭证的字段映射是通过结构RV60A(开票凭证的会计传输结构)来完成的。RV60A中的字段会传递到财务凭证的对应字段。 因此,步骤是: 1. 在财务凭证行项目BSEG中追加自定义字段(假设为ZZ_MATNR),这需要开发完成。 2. 通过配置将RV60A的某个字段映射到BSEG-ZZ_MATNR。这通常通过财务会计的凭证格式配置(TCODE: OBYC或OBC4)完成,但更常见的是通过复制控制中的字段映射(TCODE: OVU8)来定义。 然而,用户要求通过SD的VOFM来实现,所以我们重点在VOFM中如何将物料号赋值给RV60A的某个字段(该字段最终映射到BSEG的自定义字段)。 具体步骤: 步骤1:在VOFM中创建复制需求例程(事务代码VOFM -> 需求 -> 凭证到凭证) 例程代码示例: ```abap FORM FRM_KODI_901. " 假设例程号901 * 将开票行项目物料号传递到RV60A结构中的自定义字段 * 假设用户已经在RV60A结构中追加了一个字段,比如ZZ_MATNR(注意:实际开发中需要在结构RV60A中追加字段) * 但更常见的做法是:利用RV60A中已有的某个字段(如ZUONR或SGTXT)来传递,然后在财务凭证中通过配置将ZUONR映射到BSEG的自定义字段。 * 如果用户已经在RV60A中追加了一个字段(比如ZZ_MATNR),则可以直接赋值: RV60A-ZZ_MATNR = VBRP-MATNR. * 如果没有追加,则考虑使用一个已有的字段(比如ZUONR)作为中转,然后在财务凭证中再将ZUONR的值赋给自定义字段(这需要ABAP开发,比如在过账增强中完成)。 ENDFORM. ``` 步骤2:将例程分配给开票类型(事务代码VOFA) 但是,标准RV60A结构中没有物料号字段,也不支持直接传递到BSEG-MATNR(因为BSEG没有MATNR字段)。因此,我们需要先确认以下前提: 前提条件: 1. 财务凭证行项目BSEG已通过增强追加了自定义字段(如ZZ_MATNR)。 2. 结构RV60A也追加了同名字段(或通过其他方式映射)。 如何将RV60A中的字段映射到BSEG的自定义字段? 这需要在财务会计的凭证过账程序中实现。通常有两种方法: 方法1:使用凭证增强(如BADI AC_DOCUMENT)将RV60A中的字段值赋给BSEG的自定义字段。 方法2:通过复制控制配置(TCODE OVU8)将RV60A的字段映射到BSEG的字段(但标准映射中可能没有自定义字段,因此需要先增强结构)。 因此,完整的解决方案需要跨模块(SD和FI)的增强和配置。 考虑到用户可能没有增强BSEG和RV60A,我们提供备选方案:使用财务凭证的文本字段(SGTXT)或分配字段(ZUONR)来存储物料号。 备选方案(不增强结构): 在VOFM例程中将物料号赋值给RV60A-SGTXT(文本字段)或RV60A-ZUONR(分配字段),这样物料号会出现在财务凭证行项目的文本或分配字段中。 例程代码: ```abap FORM FRM_KODI_902. RV60A-SGTXT = VBRP-MATNR. " 传递到文本字段 " 或者 " RV60A-ZUONR = VBRP-MATNR. " 传递到分配字段 ENDFORM. ``` 总结: 如果用户坚持要传递到BSEG-MATNR(假设已增强),则必须: 1. 增强RV60A结构(添加字段ZZ_MATNR) 2. 增强BSEG结构(添加字段ZZ_MATNR) 3. 在FI凭证过账时,将RV60A-ZZ_MATNR的值赋给BSEG-ZZ_MATNR(通过BADI AC_DOCUMENT) 4. 在VOFM例程中将物料号赋给RV60A-ZZ_MATNR 由于步骤复杂,且涉及ABAP开发,这里仅提供VOFM部分的例程代码(假设RV60A已增强): ```abap FORM FRM_KODI_903. " 确保物料号不为空,且长度符合自定义字段要求 IF VBRP-MATNR IS NOT INITIAL. RV60A-ZZ_MATNR = VBRP-MATNR. ENDIF. ENDFORM. ``` 然后通过VOFA分配给开票类型。 因此,用户需要根据自身系统情况选择方案。如果用户没有增强BSEG,建议使用备选方案(传递到文本或分配字段)。 相关问题: 1. 如何增强RV60A结构? 2. 如何增强BSEG? 3. 如何使用BADI AC_DOCUMENT将RV60A中的自定义字段传递到BSEG? 4. 除了VOFM,还有哪些方法可以将物料号传递到财务凭证? 注意:由于用户要求传递到BSEG-MATNR,但BSEG标准没有MATNR字段,因此我们在回答时需要明确这一点,避免误导。</think>### 将Billing单据物料号传递到FI凭证BSEG-MATNR字段的完整方案 在SAP系统中,标准功能**不支持**直接将开票凭证(VBRP)的物料号传递到FI凭证的BSEG-MATNR字段,因为BSEG本身**不存储物料号**(物料数据通常在COEP/MSEG等中)。但可通过以下扩展方案实现类似需求: --- ### 方案1:通过VOFM传递到替代字段(推荐) #### 步骤1:创建VOFM复制需求例程 ```abap FORM FRM_KODI_901. " 例程901 * 将物料号传递到财务凭证的分配字段(ZUONR)或文本字段(SGTXT) IF VBRP-MATNR IS NOT INITIAL. RV60A-ZUONR = VBRP-MATNR. " 传递到分配字段 " RV60A-SGTXT = VBRP-MATNR. " 或传递到文本字段 ENDIF. ENDFORM. ``` [^1] #### 步骤2:映射到财务凭证字段 | 源字段 | VOFM目标字段 | FI凭证字段 | 最大长度 | |----------------|------------|------------|---------| | `VBRP-MATNR` | `RV60A-ZUONR` | `BSEG-ZUONR` | 18字符 | | `VBRP-MATNR` | `RV60A-SGTXT` | `BSEG-SGTXT` | 50字符 | #### 步骤3:分配例程到开票类型 事务代码 **VOFA** → 选择开票类型 → "凭证到凭证"页签 → 在"项目数据"分配例程编号 --- ### 方案2:增强BSEG后传递(需开发) 若必须使用BSEG-MATNR字段(需先增强结构): #### 步骤1:增强BSEG 1. 使用事务码 **SE11** 扩展结构 `CI_BSEG` 添加字段 `ZZ_MATNR` 2. 通过隐式增强点添加字段到 `BSEG` #### 步骤2:创建VOFM例程映射到增强字段 ```abap FORM FRM_KODI_902. * 传递物料号到增强字段 DATA(lv_matnr) = CONV matnr( VBRP-MATNR ). " 通过预留字段传递(需FI配置映射) RV60A-KURSF = lv_matnr. " 使用汇率字段作为中转 " 或直接传递到增强字段(需ABAP增强支持) " RV60A-ZZ_MATNR = lv_matnr. ENDFORM. ``` #### 步骤3:FI端字段映射配置 事务代码 **OVU8** → 配置字段映射: ``` 源字段: RV60A-KURSF 目标字段: BSEG-ZZ_MATNR ``` --- ### 技术原理 ```mermaid sequenceDiagram participant Billing as 开票凭证(VBRP) participant VOFM as VOFM例程 participant RV60A as 传输结构 participant FI as FI凭证(BSEG) Billing->>VOFM: VBRP-MATNR VOFM->>RV60A: 字段赋值(RV60A-ZUONR) RV60A->>FI: 通过标准映射 FI->>FI: 存储到BSEG-ZUONR/BSEG-SGTXT ``` --- ### 关键注意事项 1. **字段长度限制**: - BSEG-ZUONR最大18字符:`RV60A-ZUONR = VBRP-MATNR(18)` - 超长物料号需截断或使用文本字段 2. **空值处理**: ```abap IF VBRP-MATNR IS NOT INITIAL AND VBRP-MATNR <> SPACE. RV60A-ZUONR = VBRP-MATNR. ENDIF. ``` 3. **备选增强方案**: - **BAdI**: `AC_DOCUMENT` 在FI过账时写入物料号 - **用户出口**: `RV60AFZZ` 直接修改传输结构 ```abap METHOD if_ex_rv60afzz~change_rv60a. cs_rv60a-zuonr = ivbrp-matnr. ENDMETHOD. ``` 4. **调试方法**: - 在例程中设置断点(`/h`) - 使用事务代码 **VF01** 测试开票 - 通过 **FB03** 检查FI凭证字段值 > ⚠️ **重要提示**: > 标准BSEG无MATNR字段,若需严格实现"BSEG-MATNR"需自定义增强。推荐使用分配字段(ZUONR)或文本字段(SGTXT)替代[^2]。 --- ### 方案对比 | 方案 | 开发量 | 标准支持 | 推荐指数 | |---------------------|--------|----------|----------| | VOFM+ZUONR/SGTXT | 低 | ✔️ | ★★★★★ | | VOFM+增强 | 高 | ✘ | ★★★☆☆ | | BAdI AC_DOCUMENT | 中 | ✔️ | ★★★★☆ |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值