根据采购订单IDN进行MIGO过账的BAPI逻辑

  客户需求:根据ALV上的采购订单IDN进行过账,如果有IDN,就根据IDN过账,如果没有,就根据采购订单过账。

  BAPI ITEM数据填充如下:

DATA:ls_goodsmvt_item TYPE bapi2017_gm_item_create,
       l_line           TYPE char6,
       l_str            TYPE string,
       lt_return        LIKE bapiret2 OCCURS 0,
       lv_ebeln         TYPE ekpo-ebeln,
       lv_ebelp         TYPE ekpo-ebelp,
       lv_smbln         TYPE matdoc-smbln,
       lv_smblp         TYPE matdoc-smblp,
       lv_sgtxt         TYPE matdoc-sgtxt,
       ls_lips          TYPE lips.

  l_line = pv_tabix.
* 抬头
  IF p_budat IS NOT INITIAL.
    ps_goodsmvt_header-pstng_date = p_budat.
  ELSE.
    ps_goodsmvt_header-pstng_date = sy-datum.
  ENDIF.

  ps_goodsmvt_header-doc_date   = sy-datum.
* 明细
*  ls_goodsmvt_item-line_id     = 1.
  ls_goodsmvt_item-line_id        = l_line.
  ls_goodsmvt_item-plant          = ps_alv-werks."委托工厂
  ls_goodsmvt_item-material       = ps_alv-matnr."物料
  ls_goodsmvt_item-entry_qnt      = ps_alv-menge."数量
  ls_goodsmvt_item-batch          = ps_alv-charg."批次
  ls_goodsmvt_item-entry_uom      = ps_alv-meins.
  ls_goodsmvt_item-entry_uom_iso  = ps_alv-meins.

  CONCATENATE 'ZPP104A:' ps_alv-mblnr '/' ps_alv-zeile
  INTO ls_goodsmvt_item-item_text.

  CASE ps_alv-zdoctyp.

    WHEN TEXT-006.
* 事务代码
      ls_goodsmvt_item-move_type  = '101'."移动类型
*     委托方采购订单IDN过账
      IF ps_alv-vbeln_idn IS NOT INITIAL.
        ps_goodsmvt_code-gm_code    = '01'.                 "MIGO
        ls_goodsmvt_item-deliv_numb_to_search = ps_alv-vbeln_idn.
        ls_goodsmvt_item-deliv_item_to_search = ps_alv-vbelp_idn.
*        ls_goodsmvt_item-po_number  = ps_alv-ebeln.
*        ls_goodsmvt_item-po_item    = ps_alv-ebelp.
        ls_goodsmvt_item-prod_date  = sy-datum."生产日期
        ls_goodsmvt_item-mvt_ind    = 'B'. "移动标识

        SELECT SINGLE *
          FROM lips
          INTO ls_lips
          WHERE vbeln = ps_alv-vbeln_idn
            AND posnr = ps_alv-vbelp_idn.

        IF ls_lips-lgort IS NOT INITIAL.
          ls_goodsmvt_item-stge_loc = ls_lips-lgort.
        ENDIF.

        IF ls_lips-charg IS NOT INITIAL.
          ls_goodsmvt_item-batch  = ls_lips-charg.
        ENDIF.
*     委托方采购订单过账
      ELSE.
        ps_goodsmvt_code-gm_code    = '01'.                 "MIGO

        SELECT SINGLE
          *
       FROM ekpo
       WHERE ebeln = @ps_alv-ebeln
        AND  ebelp = @ps_alv-ebelp
        INTO @DATA(ls_ekpo).

        ls_goodsmvt_item-stge_loc   = ls_ekpo-lgort."地点
        ls_goodsmvt_item-po_number  = ps_alv-ebeln.
        ls_goodsmvt_item-po_item    = ps_alv-ebelp.
        ls_goodsmvt_item-prod_date  = sy-datum."生产日期
        ls_goodsmvt_item-mvt_ind   = 'B'. "移动标识

      ENDIF.

    WHEN TEXT-007.
* 事务代码
      ps_goodsmvt_code-gm_code    = '03'.                 "MIGO
      ls_goodsmvt_item-xstob      = 'X'.
*      ls_goodsmvt_item-move_type  = ps_alv-bwart."移动类型
*      ls_goodsmvt_item-move_reas  = 0001."移动原因
      SELECT SINGLE smbln smblp
         FROM matdoc
         INTO ( lv_smbln, lv_smblp )
        WHERE mblnr = ps_alv-mblnr
          AND zeile = ps_alv-zeile.

      CONCATENATE 'ZPP104A:' lv_smbln '/' lv_smblp
        INTO lv_sgtxt.

      SELECT SINGLE mblnr zeile
         FROM matdoc
         INTO ( ls_goodsmvt_item-ref_doc,
                ls_goodsmvt_item-ref_doc_it )
        WHERE sgtxt = lv_sgtxt.

      ls_goodsmvt_item-ref_doc_yr = '2019'.

  ENDCASE.

  APPEND ls_goodsmvt_item TO pt_goodsmvt_item.
  CLEAR ls_goodsmvt_item.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值