BAPI_GOODSMVT_CREATE移库操作(WMS TO SAP)

本文详细介绍了如何使用BAPI_GOODSMVT_CREATE进行移库操作,包括收货(101)流程,涉及MB01, MB31等移动代码。通过示例代码展示了处理采购订单和生产订单收货的过程,同时涵盖了不同类型的移动类型和库存操作,如内部领用、盘点等。" 130085695,5791347,YoloV5训练参数设置详解,"['深度学习', '模型训练', 'Python']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

移动代码

01 -- MB01
02 -- MB31
03 -- MB1A
04 -- MB1B
05 -- MB1C
06 -- MB11
07 -- MB04

一、收货(101)

说明:采购订单、生产订单收货

form recvfromord tables pt_tran structure zwttran.
  "移库定义
  data: goodsmvt_header  type   bapi2017_gm_head_01,
        goodsmvt_code    type   bapi2017_gm_code,
        goodsmvt_headret type   bapi2017_gm_head_ret,
        materialdocument type   bapi2017_gm_head_ret-mat_doc,
        matdocumentyear  type   bapi2017_gm_head_ret-doc_year,
        goodsmvt_item    type standard table of   /afs/bapi2017_gm_item_create,
        return           type standard table of   bapiret2,
        w_creturn        type   bapiret2,
        w_goodsmvt_item  type                     /afs/bapi2017_gm_item_create,
        w_return         type   bapiret2.
  data:lt_retmsg like table of bapiret2 with header line,
       lt_return like table of bapiret2 with header line.
  data:l_tran_nbr like zwttran-tran_nbr,
       l_tranpo   like zwttran-tranpo,
       l_matdoc   like zwttran-matdoc,
       l_flag     like zwttran-flag,
       l_line_id type i.
  data:l_asn_nbr type ze_ref_field, "asn号
       l_po type ze_ref_field,"po号
       l_po_line(5) type n,"po行号
       l_matnr type matnr."货号
  data:l_type type char1,"类型
       l_afpo type afpo,"生产订单
       l_j_3abssi type  j_3abssi,"生产订单计划行
       l_eket type eket,"采购订单计划行
       l_ekpo type ekpo."采购订单行项目
  data:lt_bom like table of zwmbom with header line.
  refresh:t_tran_nbr.
  loop at pt_tran.
    clear :t_tran_nbr.
    t_tran_nbr-tran_nbr = pt_tran-tran_nbr.
    if pt_tran-tran_type = '603' and pt_tran-tran_code = '02' and pt_tran-proc_stat_code = '10'  and pt_tran-ref_field_6 = 'P'.
      t_tran_nbr-po = pt_tran-ref_field_3.
    endif.
    append t_tran_nbr.
  endloop.
  sort t_tran_nbr by tran_nbr po.
  delete adjacent duplicates from t_tran_nbr.

  loop at t_tran_nbr.
    clear:l_tran_nbr,l_matdoc,l_matnr,l_asn_nbr,l_po,l_matnr,l_type,l_afpo,l_j_3abssi,l_eket,l_ekpo,l_tranpo,lt_retmsg,lt_return,pt_tran.
    refresh:lt_return.

    clear:goodsmvt_header,goodsmvt_code,goodsmvt_headret,materialdocument,matdocumentyear, goodsmvt_item ,return,w_return.
    refresh:goodsmvt_item ,return.
    "头
    goodsmvt_header-pstng_date = sy-datum.
    goodsmvt_header-doc_date = sy-datum.
    "明细
    loop at pt_tran where tran_type = '603' and tran_code = '02'  and proc_stat_code = '10' and units_rcvd > 0
                      and tran_nbr = t_tran_nbr-tran_nbr and ref_field_3 = t_tran_nbr-po.
      if pt_tran-ref_field_6 = 'P'.
        l_tran_nbr =  pt_tran-tran_nbr.
        "获取asn号
        l_asn_nbr = pt_tran-ref_field_1.
        l_po = pt_tran-ref_field_3.
        concatenate l_tran_nbr l_po into l_tranpo.
        if pt_tran-ref_field_4 is not initial.
          l_po_line = pt_tran-ref_field_4.
        else.
          clear l_po_line.
        endif.
        l_matnr = pt_tran-matnr.
        clear:lt_retmsg.
        refresh:lt_retmsg.
        call function 'ZLC_GET_PREMOVE101'
          EXPORTING
            p_matnr    = l_matnr
            p_po       = l_po
            p_po_line  = l_po_line
          IMPORTING
            p_type     = l_type
            p_afpo     = l_afpo
            p_j_3abssi = l_j_3abssi
            p_ekpo     = l_ekpo
            p_eket     = l_eket
          TABLES
            pt_retmsg  = lt_retmsg.
        read table lt_retmsg with key type 'E'.
        if sy-subrc <> 0.
          case l_type.
            when 'E'.
              "事务代码
              goodsmvt_code-gm_code = '02'.                 "mb31
              "明细
              w_goodsmvt_item-line_id = w_goodsmvt_item-line_id + 1.
              w_goodsmvt_item-move_type = '101'."移动类型
              w_goodsmvt_item-material = l_j_3abssi-matnr."大货号
              w_goodsmvt_item-grid_value = l_j_3abssi-j_3asize."网格值

              w_goodsmvt_item-plant = g_plant."工厂
              w_goodsmvt_item-stge_loc = g_stge_loc."地点

              w_goodsmvt_item-entry_qnt = pt_tran-units_rcvd."数量

              w_goodsmvt_item-orderid = l_j_3abssi-j_3absnr."订单号
              w_goodsmvt_item-order_itno = l_j_3abssi-j_3ahbsp."行项目
              w_goodsmvt_item-sched_line_sku = l_j_3abssi-j_3aebsp."计划行项目

              w_goodsmvt_item-mvt_ind = 'F'."生产订单
              w_goodsmvt_item-stck_type = 'E'.
              w_goodsmvt_item-gr_rcpt  = pt_tran-user_id.
              append w_goodsmvt_item to goodsmvt_item.
            when 'F'.
              "事务代码
              goodsmvt_code-gm_code = '01'.                 "mb01
              "明细
              w_goodsmvt_item-line_id = w_goodsmvt_item-line_id + 1.
              l_line_id = w_goodsmvt_item-line_id.
              w_goodsmvt_item-move_type = '101'."移动类型
              w_goodsmvt_item-material = l_ekpo-matnr."大货号
              w_goodsmvt_item-grid_value = l_eket-j_3asize."网格值

              w_goodsmvt_item-plant = g_plant."工厂
              w_goodsmvt_item-stge_loc = g_stge_loc."地点
              clear w_goodsmvt_item-vendor.
              w_goodsmvt_item-entry_qnt = pt_tran-units_rcvd."数量
              clear w_goodsmvt_item-batch.
              w_goodsmvt_item-po_number = l_eket-ebeln."采购订单
              w_goodsmvt_item-po_item = l_eket-ebelp."采购订单行号
              w_goodsmvt_item-sched_line_sku = l_eket-etenr."计划行

              clear:w_goodsmvt_item-parent_id,w_goodsmvt_item-line_depth.
              w_goodsmvt_item-mvt_ind = 'B'."采购订单
              w_goodsmvt_item-stck_type = 'E'."库存类型
              w_goodsmvt_item-gr_rcpt  = pt_tran-user_id.
              append w_goodsmvt_item to goodsmvt_item.

              refresh:lt_bom.
              call function 'ZLC_GET_BOM'
                EXPORTING
                  p_ebeln = l_eket-ebeln
                  p_ebelp = l_eket-ebelp
                  p_etenr = l_eket-etenr
                TABLES
                  pt_bom  = lt_bom.
              if lines( lt_bom ) > 0.
                loop at lt_bom.
                  w_goodsmvt_item-line_id = w_goodsmvt_item-line_id + 1.
                  w_goodsmvt_item-move_type = '543'."移动类型
                  w_goodsmvt_item-material = lt_bom-matnr."货号
                  if lt_bom-grdv is not initial.
                    w_goodsmvt_item-grid_value = lt_bom-grdv.
                  else.
                    clear w_goodsmvt_item-grid_value.
                  endif.
                  w_goodsmvt_item-plant = '1000'."工厂
                  clear w_goodsmvt_item-stge_loc.
                  w_goodsmvt_item-vendor = lt_bom-vendor."供应商
                  w_goodsmvt_item-entry_qnt = lt_bom-entry_qnt * pt_tran-units_rcvd."数量

                  if lt_bom-charg is not initial.
                    w_goodsmvt_item-batch = lt_bom-charg.
                  else.
                    clear w_goodsmvt_item-batch.
                  endif.
                  w_goodsmvt_item-parent_id = l_line_id.
                  w_goodsmvt_item-line_depth = 1.
                  w_goodsmvt_item-mvt_ind = 'B'."采购订单
                  w_goodsmvt_item-stck_type = 'E'."库存类型
                  w_goodsmvt_item-gr_rcpt  = pt_tran-user_id.
                  append w_goodsmvt_item to goodsmvt_item.
                endloop.
              endif.
          endcase.
        else.
          append lines of lt_retmsg to lt_return.
        endif.
      endif.
    endloop.

    read table lt_return with key type 'E'.
    if sy-subrc <> 0.
      if goodsmvt_item[] is not initial.
        "删除日志
        perform deletepixtranlog using l_tranpo.
        "执行操作
        call function '/AFS/BAPI_GOODSMVT_CREATE'
          EXPORTING
            goodsmvt_header   = goodsmvt_header
            goodsmvt_code     = goodsmvt_code
          IMPORTING
            goodsmvt_headret  = goodsmvt_headret
            materialdocument  = materialdocument
            matdocumentyear   = matdocumentyear
          TABLES
            afs_goodsmvt_item = goodsmvt_item
            return            = return.
        read table return with key type 'E' into w_return.
        if sy-subrc <> 0.
          "提交
          

<think>好的,我需要帮用户解决在SAP中使用BAPI_GOODSMVT_CREATE进行采购订单收货冲销的问题。用户需要示例和参数说明,所以我得先回顾一下这个BAPI的用法。 首先,BAPI_GOODSMVT_CREATE通常用于创建物料凭证,比如收货、发货等。冲销的话,通常有两种方法:一种是使用冲销凭证,另一种是直接调用冲销的BAPI,比如BAPI_GOODSMVT_CANCEL。不过用户特别提到要用BAPI_GOODSMVT_CREATE,可能他们想通过动类型直接冲销,比如用102冲销101的收货。 接下来,我需要确认这个BAPI的参数结构。查阅之前的引用资料,用户提到的BAPI_GOODSMVT_CREATE的参数包括GOODSMVT_HEADERGOODSMVT_CODE、GOODSMVT_ITEM等。冲销时需要设置动类型为102,并且参考原始凭证的年份、物料凭证和行项目。 然后,示例代码部分需要展示如何填充这些参数。比如,GOODSMVT_CODE设置为'R'表示冲销,动类型设为102。同时,必须正确引用原始凭证的物料凭证编号、会计年度和行项目号。还要注意事务提交后的错误检查,使用BAPI_TRANSACTION_COMMIT提交,并在有错误时回滚。 可能用户会遇到的问题包括参数填写错误、未正确引用原凭证,或者忘记提交事务。所以在注意事项里要强调这些点。此外,引用用户提供的资料中的BAPI_GOODSMVT_CANCEL作为另一种方法,但根据用户要求,重点放在CREATE上。 最后,生成相关问题,帮助用户进一步了解其他相关BAPI的使用和错误处理。确保回答结构清晰,步骤明确,参数说明详细,代码示例正确,并且参考了用户提供的引用内容中的正确BAPI名称和用法。</think>### SAP中使用BAPI_GOODSMVT_CREATE进行采购订单收货冲销的解决方案 #### 1. BAPI_GOODSMVT_CREATE功能说明 该BAPI用于创建物料凭证(如收货、发货、转过账等)。冲销操作需通过指定动类型(如`102`冲销`101`的收货)实现,并关联原始凭证编号[^1]。 #### 2. 关键参数说明 - **`GOODSMVT_CODE`**:操作类型标识符,冲销时需设置为`'R'`(Reverse)[^1]。 - **`GOODSMVT_HEADER`**:凭证头信息,需包含过账日期、凭证日期等。 - **`GOODSMVT_ITEM`**:行项目明细,需指定动类型、数量、存地点等。 - **`MATERIALDOCUMENT`**:冲销成功后返回的新物料凭证号。 - **`MATDOCUMENTYEAR`**:凭证年度。 #### 3. 冲销操作示例代码 ```abap DATA: lt_goodsmvt_item TYPE TABLE OF bapi2017_gm_item_create, ls_goodsmvt_item LIKE LINE OF lt_goodsmvt_item, ls_goodsmvt_header TYPE bapi2017_gm_head_01, ls_goodsmvt_code TYPE bapi2017_gm_code, lv_matdoc TYPE bapi2017_gm_head_ret-mat_doc, lv_year TYPE bapi2017_gm_head_ret-doc_year, lt_return TYPE TABLE OF bapiret2. " 设置冲销参数 ls_goodsmvt_code-gm_code = 'R'. " 标识冲销操作 " 设置凭证头信息 ls_goodsmvt_header-pstng_date = sy-datum. " 过账日期 ls_goodsmvt_header-doc_date = sy-datum. " 凭证日期 " 设置冲销行项目(假设原始凭证号为5000000123,行项目号为0001) ls_goodsmvt_item-material = 'MAT001'. " 物料号 ls_goodsmvt_item-plant = '1000'. " 工厂 ls_goodsmvt_item-stge_loc = '0001'. " 存地点 ls_goodsmvt_item-move_type = '102'. " 冲销动类型(原101收货) ls_goodsmvt_item-entry_qnt = 10. " 冲销数量 ls_goodsmvt_item-po_number = '4500000123'. " 采购订单号 ls_goodsmvt_item-po_item = '0001'. " 采购订单行号 ls_goodsmvt_item-ref_doc = '5000000123'. " 原始物料凭证号 ls_goodsmvt_item-ref_doc_year = '2023'. " 原始凭证年度 ls_goodsmvt_item-ref_doc_it = '0001'. " 原始凭证行项目 APPEND ls_goodsmvt_item TO lt_goodsmvt_item. " 调用BAPI冲销 CALL FUNCTION 'BAPI_GOODSMVT_CREATE' EXPORTING goodsmvt_header = ls_goodsmvt_header goodsmvt_code = ls_goodsmvt_code IMPORTING materialdocument = lv_matdoc matdocumentyear = lv_year TABLES goodsmvt_item = lt_goodsmvt_item return = lt_return. " 检查结果 IF lv_matdoc IS NOT INITIAL. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'. WRITE: '冲销成功,新物料凭证号:', lv_matdoc. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. WRITE: '冲销失败,错误信息:', lt_return[ 1 ]-message. ENDIF. ``` #### 4. 注意事项 - **动类型匹配**:冲销必须与原操作动类型对应(如101收货对应102冲销)。 - **凭证关联性**:需准确填写原始凭证号(`ref_doc`)、年度(`ref_doc_year`)和行号(`ref_doc_it`)。 - **事务提交**:操作成功后需调用`BAPI_TRANSACTION_COMMIT`提交事务[^2]。 - **错误处理**:通过`RETURN`表检查错误码(如`E`或`A`类型消息)。 #### 5. 替代方案 若需直接冲销凭证,可使用`BAPI_GOODSMVT_CANCEL`,通过指定原物料凭证号执行冲销[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值