SAP PP MFBF BAPI BAPI_REPMANCONF1_CREATE_MTS

155 篇文章 15 订阅
51 篇文章 2 订阅

参考https://blog.csdn.net/weixin_45607495/article/details/128411215

FUNCTION ZIF_PP_REPMANCONFI_C_MTS.
*"----------------------------------------------------------------------
*"*"局部接口:
*"  IMPORTING
*"     VALUE(BCKFLTYPE) TYPE  BCKFLTYPE OPTIONAL
*"     VALUE(LV_MATNR) TYPE  MATNR OPTIONAL
*"     VALUE(LV_WERKS) TYPE  WERKS_D OPTIONAL
*"     VALUE(LV_VERID) TYPE  VERID OPTIONAL
*"     VALUE(LV_PSDAT) TYPE  DATUM DEFAULT SY-DATUM
*"     VALUE(LV_DOCDT) TYPE  DATUM DEFAULT SY-DATUM
*"     VALUE(LV_LGORT) TYPE  LGORT_D OPTIONAL
*"     VALUE(LV_MENGE) TYPE  SA_ERFMG OPTIONAL
*"     VALUE(LV_GM_CODE) TYPE  GM_CODE DEFAULT 02
*"     VALUE(LV_HEADTXT) TYPE  BKTXT OPTIONAL
*"  EXPORTING
*"     VALUE(LV_MBLNR) TYPE  MBLNR
*"     VALUE(LV_ERRFLAG) TYPE  BAPI_CORU_RETURN-TYPE
*"     VALUE(LV_MESSAGE) TYPE  BAPI_MSG
*"----------------------------------------------------------------------

  DATA: LS_BFLUSHFLAGS    TYPE BAPI_RM_FLG,
        LS_BFLUSHDATAGEN  TYPE BAPI_RM_DATGEN,
        LT_GOODSMOVEMENTS TYPE TABLE OF BAPI2017_GM_ITEM_CREATE,
        LS_GOODSMOVEMENTS TYPE BAPI2017_GM_ITEM_CREATE,
        LS_BFLUSHDATAMTS TYPE BAPI_RM_DATSTOCK,
        LS_RETURN         TYPE BAPIRET2,
        LV_CONFIRMATION   TYPE BAPI_RM_DATKEY-CONFIRMATION,
        ls_matnr  TYPE mara-matnr.

*BOM EXPLORE
  DATA : BEGIN OF T_STB OCCURS 0.
          INCLUDE STRUCTURE STPOX.
  DATA END OF T_STB.
  DATA : BEGIN OF T_TOPMAT OCCURS 0.
          INCLUDE STRUCTURE CSTMAT.
  DATA END OF T_TOPMAT.

  DATA: lt_return TYPE TABLE OF bapiret2.

  "$. Region 物料是否存在
  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
      INPUT  = LV_MATNR
    IMPORTING
      OUTPUT = LV_MATNR.

  SELECT matnr INTO ls_matnr FROM MARA WHERE MATNR = LV_MATNR.
  ENDSELECT.
  IF sy-SUBRC <> 0.
    LV_ERRFLAG  = 'E'.
    LV_MESSAGE = '物料' && LV_MATNR &&  '找不到,请确认物料是否准确'.
    return .
  ENDIF.
  "$. Endregion 物料是否存在

  "$. Region 物料档案是否存在
  CALL FUNCTION 'BAPI_MAT_BOM_EXISTENCE_CHECK'
    EXPORTING
      material        = lv_matnr
      plant           = LV_WERKS
      bomusage        = '1'
*     valid_from_date = valid_from_date
*     valid_to_date   = valid_to_date
    TABLES
      RETURN          = lt_return.

  IF lt_return IS INITIAL.
    LV_ERRFLAG  = 'S'.
  ELSE.
    LV_ERRFLAG  = 'E'.
    LV_MESSAGE = '物料' && LV_MATNR &&  '有效BOM不存在'.
    return .
  ENDIF.
  "$. Endregion 物料档案是否存在

  CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
    EXPORTING
      AUFSW                 = 'X'
      CAPID                 = 'PP01'
      DATUV                 = SY-DATUM
      MEHRS                 = SPACE "'1' "P_MEHRS'
      MDMPS                 = SPACE
      EMENG                 = 1
      POSTP                 = 'L'
*     STLAL                 =
*     STLAN                 = '1'
      MTNRV                 = LV_MATNR
      werks                 = LV_WERKS
    IMPORTING
      TOPMAT                = T_TOPMAT
*     DSTST                 = IDSTST
    TABLES
      STB                   = T_STB
*     MATCAT                = T_MATCAT
    EXCEPTIONS
      ALT_NOT_FOUND         = 1
      CALL_INVALID          = 2
      MATERIAL_NOT_FOUND    = 3
      MISSING_AUTHORIZATION = 4
      NO_BOM_FOUND          = 5
      NO_PLANT_DATA         = 6
      NO_SUITABLE_BOM_FOUND = 7
      CONVERSION_ERROR      = 8
      OTHERS                = 9.

  "$. Region 产线获取
  data:lMDV01 TYPE mkal-MDV01.
  select mdv01 into lMDV01 from mkal
    where matnr = LV_MATNR and WERKS = LV_WERKS and verid = LV_VERID.
  ENDSELECT.
  "$. Endregion 产线获取

  DATA:lmeinh TYPE marm-MEINH.
  select SINGLE MEINH into lmeinh from marm where matnr = lv_matnr.

*抬头的赋值:
  LS_BFLUSHFLAGS-BCKFLTYPE        = BCKFLTYPE.           "11:个别组件消耗反冲 01:最后反冲 02:报告点反冲 10:个别作业反冲
  LS_BFLUSHDATAGEN-MATERIALNR     = LV_MATNR.     "物料
  LS_BFLUSHDATAGEN-PRODPLANT      = LV_WERKS.       "工厂
  LS_BFLUSHDATAGEN-PLANPLANT      = LV_WERKS.      "工厂
  LS_BFLUSHDATAGEN-STORAGELOC     = LV_LGORT.       "库存地点
  LS_BFLUSHDATAGEN-PRODVERSION    = LV_VERID.       "生产版本
  LS_BFLUSHDATAGEN-PRODLINE = lMDV01."产线
  LS_BFLUSHDATAGEN-POSTDATE       = LV_PSDAT.       "过账日期
  LS_BFLUSHDATAGEN-DOCDATE        = LV_DOCDT.       "凭证日期
  LS_BFLUSHDATAGEN-BACKFLQUANT = LV_MENGE.
  LS_BFLUSHDATAGEN-DOCHEADERTXT = LV_HEADTXT.
  LS_BFLUSHDATAGEN-UNITOFMEASURE  = lmeinh.       "单位
  LS_BFLUSHDATAGEN-ORDERCOSTS     = 'X'.            "标识: 订单成本的过帐

*  LS_BFLUSHDATAMTS-REPPOINT = lv_REPPOINT.
*  ls_bflushflags-components_type = COMPONENTS_TYPE. 不需要报告点反冲
*https://blog.csdn.net/weixin_45607495/article/details/128411215*
  DATA:l_LGORT LIKE MARD-LGORT.

  SELECT ELPRO into l_LGORT
    FROM mkal where matnr = lv_matnr and werks = lv_werks and verid = lv_verid.
  ENDSELECT.

*  行项目赋值:
  LOOP AT  t_stb.
    LS_GOODSMOVEMENTS-STGE_LOC  = L_LGORT.           "库存地点来源前台
    LS_GOODSMOVEMENTS-MATERIAL  =  T_STB-IDNRK.    "组件物料编码
    LS_GOODSMOVEMENTS-ENTRY_UOM = T_STB-MEINS.           "单位
    LS_GOODSMOVEMENTS-PLANT     = T_STB-WERKS.           "工厂
    LS_GOODSMOVEMENTS-ENTRY_QNT =  T_STB-MNGLG * LV_MENGE.          "实际过账数量
    LS_GOODSMOVEMENTS-PROD_DATE = SY-DATUM.           "生产日期
    LS_GOODSMOVEMENTS-MOVE_TYPE = '261'."IT_SMVT-MOVE_TYPE'.    "移动类型

    APPEND LS_GOODSMOVEMENTS TO LT_GOODSMOVEMENTS.
  ENDLOOP.

  LS_GOODSMOVEMENTS-STGE_LOC  = L_LGORT.           "库存地点来源前台
  LS_GOODSMOVEMENTS-MATERIAL  = LV_MATNR.       "物料编码
  LS_GOODSMOVEMENTS-ENTRY_UOM = LMEINH.           "单位
  LS_GOODSMOVEMENTS-PLANT     = LV_WERKS.           "工厂
  LS_GOODSMOVEMENTS-ENTRY_QNT =  LV_MENGE.          "实际过账数量
  LS_GOODSMOVEMENTS-PROD_DATE = SY-DATUM.           "生产日期
  LS_GOODSMOVEMENTS-MOVE_TYPE = '131'."IT_SMVT-MOVE_TYPE'.    "移动类型

  APPEND LS_GOODSMOVEMENTS TO LT_GOODSMOVEMENTS.

*  “调用BAPI进行过账
  CLEAR:LS_RETURN,
  LV_CONFIRMATION.

  CALL FUNCTION 'BAPI_REPMANCONF1_CREATE_MTS'
    EXPORTING
      BFLUSHFLAGS    = LS_BFLUSHFLAGS
      BFLUSHDATAGEN  = LS_BFLUSHDATAGEN
*     BFLUSHDATAMTS  = LS_BFLUSHDATAMTS
    IMPORTING
      CONFIRMATION   = LV_CONFIRMATION
      RETURN         = LS_RETURN
    TABLES
      GOODSMOVEMENTS = LT_GOODSMOVEMENTS.

  IF LV_CONFIRMATION IS NOT INITIAL.  "冲销成功
    LV_ERRFLAG = 'S'.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        WAIT = 'X'.
    CLEAR: LV_MBLNR.
*    “取物料凭证号
    DO 5 TIMES.
      SELECT SINGLE  BELNR INTO LV_MBLNR FROM BLPP WHERE PRTNR = LV_CONFIRMATION .
      IF SY-SUBRC EQ 0 AND LV_MBLNR IS NOT INITIAL.
        LV_ERRFLAG = 'S'.
        LV_MESSAGE = LS_RETURN-MESSAGE.
        EXIT.
      ELSE.
        WAIT UP TO 1 SECONDS.
      ENDIF.
    ENDDO.
    IF LV_MBLNR IS INITIAL.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
      LV_ERRFLAG = 'E'.
      LV_MESSAGE = LS_RETURN-MESSAGE.
    ENDIF.
  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    LV_ERRFLAG = 'E'.
    LV_MESSAGE = LS_RETURN-MESSAGE.
  ENDIF.

*  "$. Region 报工后收货
*  data:GMHEAD LIKE BAPI2017_GM_HEAD_01,"头结构
*        GMCODE LIKE BAPI2017_GM_CODE,"头结构
*        MTHEAD LIKE BAPI2017_GM_HEAD_RET,"输出结构
*        MAT_DOC LIKE BAPI2017_GM_HEAD_RET-MAT_DOC,"物料凭证号
*        ITPT LIKE TABLE OF BAPI2017_GM_ITEM_CREATE WITH HEADER LINE,"明细表
*        BERRMSG LIKE TABLE OF BAPIRET2 WITH HEADER LINE."输出信息
*
*  IF LV_ERRFLAG = 'S'.
*    GMHEAD-HEADER_TXT = lv_headtxt."抬头文本
*    GMHEAD-PSTNG_DATE = SY-DATUM.."凭证中的过帐日期
*    GMHEAD-DOC_DATE = SY-DATUM.."凭证中的凭证日期
*    GMCODE-GM_CODE = LV_GM_CODE."代码
*
*    ITPT-STGE_LOC = LV_LGORT.
*    ITPT-PLANT = lv_werks.
*    ITPT-MATERIAL   = LV_MATNR."物料号
*    ITPT-ENTRY_QNT  = LV_MENGE."数量(根据自己所需要数量进行调整)
**    ITPT-ORDERID    = PPORDERBG-ORDERNUMBER."重复制造无 生产订单
**  ITPT-SERIALNO_AUTO_NUMBERASSIGNMENT = 'X'."序列号自动输入
*    ITPT-ITEM_TEXT  = LV_HEADTXT."'项目文本'."项目文本
*    ITPT-MOVE_TYPE  = '131'. "MOVE_TYPE ."'101'."移动类型
*    ITPT-MVT_IND    = 'F'. "移动标识
*    ITPT-STCK_TYPE  = ''."库存类型(根据自己所需要库存类型进行调整)
*    ITPT-ORDER_ITNO = '1'.                                 "行项目1,2,3
*    ITPT-LINE_ID    = '1'. "凭证行的唯一标识 1,2,3
*    APPEND ITPT.
*
**    CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
**      EXPORTING
**        goodsmvt_header  = gmhead
**        goodsmvt_code    = gmcode
**      IMPORTING
**        goodsmvt_headret = mthead
**        materialdocument = mat_doc
**      TABLES
**        goodsmvt_item    = itpt
**        RETURN           = berrmsg.
*  ENDIF.
*  "$. Endregion 报工后收货
*  IF  MAT_DOC IS NOT INITIAL.
*    LV_ERRFLAG  = 'S'.
*    LV_MBLNR = MAT_DOC.
*  ELSE.
*    LV_ERRFLAG  = 'E'.
*    LOOP AT BERRMSG WHERE TYPE = 'E'.
*      LV_MESSAGE  = BERRMSG-MESSAGE.
*    ENDLOOP.
*  ENDIF.

ENDFUNCTION.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gavin_gxh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值