ABAP :BAPI_GOODSMVT_CREATE内向交货单收货报错

使用“BAPI_GOODSMVT_CREATE”对内向交货单收货,报如下错误,是什么问题?

img

 >>短转储没有完全存储.本长
 The current application triggered a termination with a short dump
 发生了什么?
 The current application program detected a situation which really
 should not occur.Therefore,a termination with a short dump was
 triggered on purpose by the key word MESSAGE(type ).
 你能做什么?
 Note the actions and input that caused the error
 Inform your SAP system administrator.
 You can print out this message by choosing Print".Transaction ST22
 allowsyou to display and manage termination messages,including keeping
 them beyond their normaldeletion date.
 错误分析
 Short text of error message:
 不能处理该事务
 Long textof error message:
 Technical information about the message:
 Messageclasse.                     WVL
 Number.                      143
 Wariable1.
        2.  Wariable
 Wariable3.
 variable4

代码如下:

DATA: CODE LIKE bapi2017_gm_code.
data: GOODSMVT_ITEM like BAPI2017_GM_ITEM_CREATE OCCURS 0 WITH HEADER
LINE.
data: GOODSMVT_HEADER like BAPI2017_GM_HEAD_01 OCCURS 0 WITH HEADER
LINE.
data: RETURN like BAPIRET2 OCCURS 0 WITH HEADER LINE.
data: MATERIALDOCUMENT type BAPI2017_GM_HEAD_RET-MAT_DOC.

GOODSMVT_HEADER-PSTNG_DATE = '20230615'.
GOODSMVT_HEADER-DOC_DATE = '20230615'.
append GOODSMVT_HEADER.

GOODSMVT_ITEM-batch = '0546787T97'.
GOODSMVT_ITEM-MOVE_TYPE = '101'.
GOODSMVT_ITEM-ENTRY_QNT = 6.
GOODSMVT_ITEM-PO_NUMBER = '4898873682'.
GOODSMVT_ITEM-PO_ITEM = '10'.
GOODSMVT_ITEM-PROD_DATE = '20230417'.
GOODSMVT_ITEM-VENDRBATCH = '230417'.
GOODSMVT_ITEM-MATERIAL= 'TEST'
GOODSMVT_ITEM-PLANT= ‘6698’
GOODSMVT_ITEM-STGE_LOC= ‘6010’
GOODSMVT_ITEM-deliv_numb = '188874567'.
GOODSMVT_ITEM-DELIV_NUMB_TO_SEARCH = '188874567'.
GOODSMVT_ITEM-deliv_item =  '10'.
GOODSMVT_ITEM-deliv_item_TO_SEARCH  = '10'.
append GOODSMVT_ITEM.

CODE = '01'.

CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
     EXPORTING
          goodsmvt_header  = GOODSMVT_HEADER
          goodsmvt_code    = CODE
     IMPORTING
          materialdocument = MATERIALDOCUMENT
     TABLES
          goodsmvt_item    = GOODSMVT_ITEM
          return           = RETURN.
COMMIT WORK AND WAIT.

经过N多次测试,发现把如下两个赋值删除就可以了。


//GOODSMVT_ITEM-deliv_numb = '188874567'.  ---删除
GOODSMVT_ITEM-DELIV_NUMB_TO_SEARCH = '188874567'.
//GOODSMVT_ITEM-deliv_item =  '10'.    ---删除
GOODSMVT_ITEM-deliv_item_TO_SEARCH  = '10'.

  • 这篇博客: 创建物料凭证 BAPI_GOODSMVT_CREATE中的 报错 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 1.BAPI_GOODSMVT_CREATE 连续做101生产任务单入库,如果订单号不一样就会报错:请检查表TFBEFU_CR:条目10不存在。

    原因是第二次调用BAPI_GOODSMVT_CREATE时,这个bapi会调用K_AFPO_READ从缓存中读了AFPO,没有取到AFPO的数据。

    解决:调用call method cl_fco_order_buffer_mgr=>reset.清空缓存,清空缓存后会从数据库中读取AFPO的数据,这样就没问题了

    2. 报错:Material numbers provided in equivalent fields dif。

    原因是bapi在执行时会向传入的GOODSMVT_ITEM内表写入material_long字段的值

    如果第二次再执行时传入的GOODSMVT_ITEM的meterial的值和material_long的值不一致就会报这个错误

    4.必须要commit之后才能再调这个bapi,

    5.261报错

    {'TYPE': 'E', 'ID': 'AG', 'NUMBER': '013', 'MESSAGE': 'Date 20210302 lies after the end of the valid factory calendar (please correct)', 'LOG_NO': '', 'LOG_MSG_NO': '000000', 'MESSAGE_V1': '20210302', 'MESSAGE_V2': '', 'MESSAGE_V3': '', 'MESSAGE_V4': '', 'PARAMETER': 'GOODSMVT_ITEM', 'ROW': 1, 'FIELD': '', 'SYSTEM': 'PRDCLNT400'}

    SCAL 查看工厂日历,发现截止日期是2020年

    而过账日期是20180624,为什么报这个错呢?原来有一句代码用当前日期加了999

    6.M7 049 Postings can only be made to G/L acct. & in curr. &

    科目货币和会计凭证货币不一样,fs00看如果不是科目货币配错了,就找货币哪里取得,比如412 e会取so的wbs,wbs会取公司代码货币等

    生产订单262

    如果 item 没有参数预留,则不会扣减预留的提货数,此时不需要 lt_item-xstob = 'X'.

    如果参考了预留,则需要 lt_item-xstob = 'X'.,否则会做出相反的移动类型