Skip to content

S4升级

S4升级涉及很多,我主要讲下升级后技术相关的问题处理。

自开发程序调整

通常升级后会对整个项目做一次ATC检查,并根据检查来修复一些潜在问题,下面罗列一些我在调整过程中遇到的问题。

字段类型变更问题

升级后,部分字段的类型或长度被改变。这一般会导致函数参数不一致,更新内表字段不一致等通用的问题。此外还有以下一些比较特殊的问题。

  • 物料,c(18)->c(40),物料变化应该是最大的了,不过通常项目各自有一套处理方案,实际上技术更多需要关注程序中,那些通过函数**CONVERSION_EXIT_ALPHA_INPUT**转成内码的代码,这部分要按需更换成**CONVERSION_EXIT_MATN1_INPUT**(40位),CONVERSION_EXIT_MATN5_INPUT(18位,未启用40位物料的情况)。

排序问题

相较于ECC取值后会默认排序,S4并没有这一步,这导致以下语法会出现预期外行为:

  • LOOP AT
  • ADJACENT DUPLICATES
  • READ BINARY

加上默认排序即可解决。

BSEG表取值问题

这个问题SAP官方已经有很详尽的处理方案,下面是我在项目上的处理方案:

不改程序,通过增强,同时将凭证写入ACDOCA和BSEG表中

S4环境,除了部分如外币凭证,资产凭证等,SEG仍然会写入数据。因此只要对这些凭证做增强即可:

  1. 实施BADI_FINS_FCV_BSTAT增强,使外币凭证写入BSEG生效,代码就用BADI的示例代码即可:

    IF cl_fins_acdoc_util=>is_currency_type_integrated(
        EXPORTING
            iv_company_code  =     iv_bukrs
            iv_currency_type =     iv_currency_type ).
    
        RAISE ex_create_bseg.
    ENDIF.
    
  2. 对于资产凭证,使用财务替代(事务代码GGB1,财务抬头替代)。当BKPF-AWTYP = 'AMDP'的时候,设置凭证状态=空。

修改程序

将程序中从BSEG取值修改为从ACDOCA取值,并在取值后通过方法**CL_FINS_ACDOC_TRANSFORM_UTIL=>TRANSFORM_ACDOCA_TO_BSEG**将A表的值转换为B表的值。

需要注意,由于ACDOCA表并没有原因代码等字段,可能会造成程序处理问题。

复合方案

实施增强,并将程序中不涉及特殊字段(原因代码等)的查询替换为ACDOCA表查询。

数据模型切换问题

类似BSEG切换ACDOCA,其他还有不少数据模型也有类似切换,下面罗列以下:

业务伙伴

业务伙伴主数据KNA1/LFA1等,切换为BUT000。这类模型切换基本可以忽略,因为BP数据更新的时候会同步更新KNA1/LFA1等。

对于客商客制化字段的处理,需要通过BDT方式增强到BP界面和主数据表,相关资料可在网上搜索。

假如自定义程序的修改量太大,可以考虑在增强中,将更新BP的客制化字段值,同步到KNA1/KNB1等数据表。

资产

详情参考NOTE-2270387 S4TWL-资产会计:数据结构更改

涉及权限问题,NOTE内容我就不放到这里了

简单来说,比如ANLP数据的读取需要用替代对象FAA_ANLP更换,其他模型也类似。但需要注意,如果程序中有直接用UPDATE等语法更新ANLP的,建议更换为用BAPI等方式更新。

目前我项目上没有直接更新的代码,暂无法提供实际例子

库存管理

详情参考NOTE-2206980 物料库存管理中数据模型的更改

和资产模型类似,相关表都存在替代对象NSDM_DDL_*,操作上也类似,不再讲述。

FB切换BCS

由于变化实在太大,而且FB模块的表也还有历史数据,所以当前项目方案是忽略这两个模块涉及的东西,不做任何调整。

FBC和BCS数据表比对

跳转问题

  • 跳转FB03,改用函数**MIGO_DIALOG**执行事务跳转功能