原创 无峰 [ ABAP 技巧与实战 ](javascript:void\(0\);)
**点击蓝字** 关注我们
一
前言
IDOC是ECC/S4系统中的一种接口数据整合形式.前文已经介绍了关于IDOC的部分知识.
> 详见连接 无峰,公众号:ABAP 技巧与实战 [ SAP操作手册之 IDOC基础篇
> ](https://mp.weixin.qq.com/s?__biz=Mzg4MjA1MjE4NQ==&mid=2247485676&idx=1&sn=6413576e58d57a78446291de50808b64&chksm=cf5dd5daf82a5ccc7c5c0862045951d1b642cc8beffcf231c593e63c49abc8237b719aa7e898&token=1858200308&lang=zh_CN#rd)
> 详见链接 无峰,公众号:ABAP 技巧与实战 [ SAP操作手册之 IDOC开发篇
> ](https://mp.weixin.qq.com/s?__biz=Mzg4MjA1MjE4NQ==&mid=2247485727&idx=1&sn=09b9b1215ab7035a1b8728430881173d&chksm=cf5dd429f82a5d3ff5d21710785e4ef88f759612fa5c50ebbcd8a4f6e5ca2983ae7ba838783c&token=1858200308&lang=zh_CN#rd)
当我们在入站接口的场景中使用IDOC的时候,可能会面临一个问题: 产生IDOC的时候已经把记账日期写入.
如果IDOC过账的时候,IDOC中的过账日期对应的账期关闭.IDOC过账会报错.(图一是一个创建商品凭证的IDOC因为账期关闭报错)
**本文主要介绍解决IDOC由于过账日期报错的几种方式,并着重介绍过账前检查账期并调整过账日期的增强**
_一般创建商品凭证的IDOC有这个需求._
图一
关于物料账期
物料账期是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监控-标准功能
> ](https://mp.weixin.qq.com/s?__biz=Mzg4MjA1MjE4NQ==&mid=2247485755&idx=1&sn=e430e661f7c6c89968852f45e932d7a9&chksm=cf5dd40df82a5d1bc0adb7fd382d97dafcf69d8f01f20d5499fdf973880fa53ec1c112c163eb&token=1858200308&lang=zh_CN#rd)
五
ZIFIDOC修改IDOC
通过WE02修改IDOC的内容操作步骤比较繁琐.每次只能操作一个IDOC的修改.
如果有很多报错的IDOC. WE02修改会把人折磨致死. 所以当初设计IDOC集中监控程序: ZIFIDOC时,
在里面添加了一个批量修改IDOC内容的功能.
> 更多ZIFIDOC功能介绍详见链接 无峰,公众号:ABAP 技巧与实战 [ SAP工具箱之 IDOC监控-增强功能
> ](https://mp.weixin.qq.com/s?__biz=Mzg4MjA1MjE4NQ==&mid=2247485773&idx=1&sn=ba24aabf6120851df0079370a851f959&chksm=cf5dd47bf82a5d6d061df2b269d3c68775c01c69bf802537093bdff645ea64ba1b2a44702d0e&token=1858200308&lang=zh_CN#rd)
_**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 **
**约定**
如果你对这篇文章感兴趣,请帮忙点赞,在看,分享.
( **如果你真的喜欢这篇文章,请记得回来打个赏,作为支持我继续下去的动力,这是一个正反馈过程.
越多的人打赏,作者越有动力分享,读者就能享受更多的福利.毕竟打赏的金额富不了我,穷不了你,却能支持这个公众号长久发文.** )
**公众号 : syjf1976_abap**
**ABAP开发技巧**
**微信号 : 392077**
syjf1976
sharry_xlp
Yannick_Duan
申请进入公众号讨论群提问或者参与话题讨论