点击蓝字 关注我们
一
前言
IDOC是ECC/S4系统中的一种接口数据整合形式.前文已经介绍了关于IDOC的部分知识.
详见连接无峰,公众号:ABAP 技巧与实战SAP操作手册之 IDOC基础篇
详见链接无峰,公众号:ABAP 技巧与实战SAP操作手册之 IDOC开发篇
当我们在入站接口的场景中使用IDOC的时候,可能会面临一个问题: 产生IDOC的时候已经把记账日期写入. 如果IDOC过账的时候,IDOC中的过账日期对应的账期关闭.IDOC过账会报错.(图一是一个创建商品凭证的IDOC因为账期关闭报错)
本文主要介绍解决IDOC由于过账日期报错的几种方式,并着重介绍过账前检查账期并调整过账日期的增强
一般创建商品凭证的IDOC有这个需求.

图一
01
关于物料账期
物料账期是SAP的一个重要概念.
通过事务代码MMPV可以打开指定公司代码的新的账期.
物料账期只能打开两个月的.
可以通过事务代码MMRV修改前期记账标记控制是否能够记账在上期.
物料账期对应的表 MARV

三
解决账期报错的方式
解决IDOC账期报错有几种方式
-
通过WE02的编辑功能修改IDOC中的过账日期
-
通过ZIFIDOC接口监控批量修改IDOC中的过账日期
-
通过增强在IDOC过账的时候修改传入BAPI函数的过账日期
四
WE02修改IDOC
旧版本的ECC中事务代码WE02可能无法修改IDOC内容. 需要使用事务代码: WE05
新版本ECC或S4中WE02等同于WE05 .均可修改IDOC内容(包含控制内容与数据内容)
通过标准功能修改IDOC中的过账日期字段内容
详细操作步骤在前文有介绍,这里不再赘述.
详见链接无峰,公众号:ABAP 技巧与实战SAP操作手册之 IDOC监控-标准功能
五
ZIFIDOC修改IDOC
通过WE02修改IDOC的内容操作步骤比较繁琐.每次只能操作一个IDOC的修改.
如果有很多报错的IDOC. WE02修改会把人折磨致死. 所以当初设计IDOC集中监控程序: ZIFIDOC时, 在里面添加了一个批量修改IDOC内容的功能.
更多ZIFIDOC功能介绍详见链接无峰,公众号:ABAP 技巧与实战SAP工具箱之 IDOC监控-增强功能
01
配置 ZTSEGNAM
因为IDOC结构复杂,层级很多.如果要通过表格显示,只能关注一个抬头段.一个明细段. 配置表ZTSEGNAM用来指定每个消息类型用于表格呈现的抬头段与明细段

02
进入监控程序
进入IDOC监控程序,显示需要修改的IDOC. 勾选需要修改的IDOC(允许相同类型的多个IDOC同时勾选), 点击显示错误原因和消息内容进入IDOC内容呈现

03
启用修改模式
在IDOC内容呈现中点击编辑功能会激活IDOC的修改, 修改后点击保存按钮会把修改的内容保存到IDOC中.


六
通过增强调整过账日期
上面两个方案都需要针对特定的IDOC调整账期字段.如果希望这些账期关闭的IDOC能自动过账到当前日期. 则可以通过如下的增强实现.
自动调整账期由接口控制表字段ZTIF002-ZQKTZ控制特定接口编号是否启用. 并通过配置表ZTIDOC_BUDAT控制消息类型是否启用.
01
配置表
为了让过账日期自动调整的增强适用于更多的场景,设计了一个配置表. ZTIDOC_BUDAT.用于配置需要调整账期的IDOC类型及IDOC中识别日期,地点,公司代码的段名和字段名

02
重要字段说明
检查原过账日期所在账期是否打开


03
配置实例

04
增强位置
该增强写在标准函数 BAPI_IDOC_INPUT1 开头的隐式增强中.
这个函数会处理所有产生一个单据的BAPI调用类的IDOC. 具有一定的通用性.

05
增强逻辑
-
根据配置表内容读取过账日期,读取地点或公司代码.
-
检查过账日期所在的月是否已经关闭物料账期
-
如果关闭,根据配置设置新的过账日期
06
封装函数
封装函数Z_IDOC_GET_SET_DATA用于读取或者设置IDOC中指定段名和字段名的字段内容

七
总结
通过上述本文介绍的方式可以手动/批量的修改IDOC中的过账日期,过账到新开的账期,避免因为账期关闭而报错.
增强调整过账日期在IDOC调用BAPI产生商品凭证时,调整传入BAPI的过账日期.也可以避免账期关闭而报错. 这样会导致IDOC产生的凭证中的过账日期不等于IDOC中的过账日期. 但是无需用户费力调整IDOC内容.
THE
END
网友评论