我是在做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.
【以下回答由 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
,判断函数调用是否成功,并输出相应的提示信息。
请注意,上述代码仅为示例,并不包含完整的错误处理逻辑。你可以根据实际情况,对代码进行修改和完善。另外,请确保代码中的订单号、物料号和数量等信息是正确的。
如果你还遇到其他问题,请提供更多的代码和错误信息,以便我们更好地帮助你解决问题。