白日空想家 2023-09-07 17:07 采纳率: 66.7%
浏览 18

调用BAPI_GOODSMVT_CREATE发货时报订单不存在

我是在做sap导入订单信息时报错订单不存在,但是实际是有这个订单的。
原本业务操作是通过migo去操作的,但是为了方便要开发一个导入信息自动发货这样的功能。
问题发生在BAPI_GOODSMVT_CREATE这个bapi执行完之后返回订单不存在

DATA: BEGIN OF upload OCCURS 0,
        aufnr LIKE zppzydkd-aufnr,
        zvinr LIKE zppzydkd-zvinr,
        bktxt LIKE zppzydkd-bktxt,
        matnr LIKE zcpm_list2-matnr,
        belnr LIKE zppzydkd-belnr,
        pgflag LIKE zppzydkd-pgflag,
        belnr1 LIKE zppzydkd-belnr1,
        menge LIKE zcpm_list2-menge,
      END OF upload,

*&& 权限检查
    BEGIN OF GT_T001W OCCURS 0,
      WERKS TYPE T001W-WERKS,
    END OF GT_T001W.

DATA: is_common LIKE zseaicommon.
DATA: is_property TYPE zseaiproperty.
*&-EAI传输规范
DATA: begin_date(8) TYPE c,                            "开始抓数日期
      begin_time(8) TYPE c,                            "开始抓数时间
      end_date(8)   TYPE c,                            "完成抓数日期
      end_time(8)   TYPE c.                            "完成抓数时间
DATA: gs_upload LIKE TABLE OF upload WITH HEADER LINE.
DATA: gt_upload LIKE TABLE OF upload WITH HEADER LINE.
DATA: ga_upload LIKE TABLE OF upload WITH HEADER LINE.
*-BAPI变量
DATA: BEGIN OF item OCCURS 0.
        INCLUDE STRUCTURE bapi2017_gm_item_create.
DATA: END OF item.

DATA: BEGIN OF return OCCURS 0.
        INCLUDE STRUCTURE bapiret2.
DATA: END OF return.
DATA: itab     TYPE kcde_cells OCCURS 0 WITH HEADER LINE,
      header   LIKE bapi2017_gm_head_01 OCCURS 0 WITH HEADER LINE,
      headret  LIKE bapi2017_gm_head_ret OCCURS 0 WITH HEADER LINE,
      code     LIKE bapi2017_gm_code OCCURS 0 WITH HEADER LINE,
      document LIKE bapi2017_gm_head_ret-mat_doc.
DATA: LT_GOODSMVT_SERIALNUMBER LIKE TABLE OF BAPI2017_GM_SERIALNUMBER.
DATA: LS_GOODSMVT_SERIALNUMBER LIKE LINE OF LT_GOODSMVT_SERIALNUMBER.

DATA:lv_item_line TYPE int4.
FIELD-SYMBOLS:<ls_item> LIKE LINE OF item.

  LOOP AT gt_upload.
    REFRESH: header,item.
    CLEAR  : header,item.
    CLEAR ls_goodsmvt_serialnumber.
    header-pstng_date = sy-datum.
    header-doc_date = sy-datum.
    header-pr_uname   = sy-uname.
    header-header_txt = gt_upload-bktxt.   "凭证抬头文本
*    item-spec_stock = 'K'.                "特殊库存
    item-move_type  = '261'.                "移动类型
*    item-move_stloc = gt_upload-lgort.                "收货库存地点
    item-material   = gt_upload-matnr.         "物料
    item-entry_qnt  = 1.         "数量
    item-stge_loc   = 'V101'.         "发货库存地点
    item-orderid     = gt_upload-aufnr. "订单号
*    ls_goodsmvt_serialnumber-serialno = ga_upload-zvinr.
*    item-batch      = gt_upload-charg.         "批次
    item-plant      = '9003'.         "发货工厂
*    item-vendor     = gt_upload-lifnr.         "供应商
    READ TABLE item ASSIGNING <ls_item>
        WITH KEY  orderid    = gt_upload-aufnr
                  material = gt_upload-matnr
                  plant       = '9003'
                  stge_loc    = 'V101'
                  move_type   = '261'.
*                  move_plant  = gt_upload-werks
*                  move_stloc  = gt_upload-lgort.
      IF sy-subrc = 0.
        <ls_item>-entry_qnt = <ls_item>-entry_qnt + 1.
      ELSE.
        APPEND item.
      ENDIF.
      DESCRIBE TABLE item LINES lv_item_line.
      ls_goodsmvt_serialnumber-matdoc_itm = lv_item_line.
      ls_goodsmvt_serialnumber-serialno   = gt_upload-zvinr.
    APPEND ls_goodsmvt_serialnumber TO lt_goodsmvt_serialnumber.
    CLEAR item.
* -调用发货BAPI,输出结果
    PERFORM bapi_dkdfh USING gt_upload-aufnr.
  ENDLOOP.

FORM bapi_dkdfh USING orderno.
  REFRESH: code,return.
  CLEAR  : code,return,document.
  "MB1B发货的代码
  code-gm_code = '03'.

  CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
    EXPORTING
      goodsmvt_header  = header
      goodsmvt_code    = code
    IMPORTING
      goodsmvt_headret = headret
      materialdocument = document
    TABLES
      goodsmvt_item    = item
      goodsmvt_serialnumber =  lt_goodsmvt_serialnumber
      return           = return.
  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-09-07 18:24
    关注

    【以下回答由 GPT 生成】

    根据提供的代码片段,我发现你在代码中并没有调用BAPI_GOODSMVT_CREATE函数。在相关代码中,我只能看到一些数据类型的定义,但没有任何调用函数的部分。

    如果你想要使用BAPI_GOODSMVT_CREATE函数进行发货,并且你确定订单已经存在,那么你需要在代码中添加调用该函数的部分。以下是一个示例代码片段,展示了如何使用BAPI_GOODSMVT_CREATE函数进行发货:

    DATA: lv_order_number TYPE aufnr,
          lv_material_number TYPE matnr,
          lv_quantity TYPE menge,
          lv_document_number TYPE belnr.
    
    lv_order_number = '<订单号>'.
    lv_material_number = '<物料号>'.
    lv_quantity = <数量>.
    
    CLEAR: gs_upload, gt_upload, item, return.
    
    gs_upload-aufnr = lv_order_number.
    gs_upload-matnr = lv_material_number.
    gs_upload-menge = lv_quantity.
    
    APPEND gs_upload TO gt_upload.
    
    CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
      EXPORTING
        headerdata = gs_upload
      TABLES
        return = return
        itemdata = gt_upload.
    
    READ TABLE return WITH KEY type = 'E'.
    IF sy-subrc = 0.
      lv_document_number = return-message.
      WRITE: 'Error:', lv_document_number.
    ELSE.
      lv_document_number = return-document_number.
      WRITE: 'Document Number:', lv_document_number.
    ENDIF.
    

    你需要根据你的实际需求,将 <订单号>, <物料号>, <数量> 替换为具体的数值。在调用函数之前,你需要确保将正确的订单号、物料号和数量赋值给对应的变量。

    这段代码首先将订单号、物料号和数量赋值给相关的变量,并清空一些辅助变量。然后将相关的数据添加到表 gt_upload 中。接下来,调用函数 BAPI_GOODSMVT_CREATE,将订单信息和发货数据传递给函数,并将返回的结果存储在表 return 中。最后,通过检查返回的表 return,判断函数调用是否成功,并输出相应的提示信息。

    请注意,上述代码仅为示例,并不包含完整的错误处理逻辑。你可以根据实际情况,对代码进行修改和完善。另外,请确保代码中的订单号、物料号和数量等信息是正确的。

    如果你还遇到其他问题,请提供更多的代码和错误信息,以便我们更好地帮助你解决问题。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 9月7日

悬赏问题

  • ¥15 ssh登录页面的问题
  • ¥60 渗透一个指定银行app,拿到客户信息,需要什么级别
  • ¥50 关于在matlab上对曲柄摇杆机构上一点的运动学仿真
  • ¥15 jetson nano
  • ¥15 :app:debugCompileClasspath'.
  • ¥15 windows c++内嵌qt出现数据转换问题。
  • ¥20 公众号如何实现点击超链接后自动发送文字
  • ¥15 用php隐藏类名和增加类名
  • ¥15 算法设计与分析课程的提问
  • ¥15 用MATLAB汇总拟合图