ABAPMFBF过账到质量检验库存类型Demo

Posted SAP剑客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ABAPMFBF过账到质量检验库存类型Demo相关的知识,希望对你有一定的参考价值。

MFBF过账到质量检验库存类型

比如上图,现在要针对某个重复制造的品号生产入库时入到质量检验库存类型,通过现有BAPI“BAPI_REPMANCONF1_CREATE_MTS”貌似无法实现,为保险起见,这里我测试使用BDC的方式,若有BAPI能实现上述功能便再好不过了,希望做过的小伙伴留言告知一下。

1、生产实绩入库

[Code]

*&---------------------------------------------------------------------*
*& Report  ZTEST_MFBF
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT ZTEST_MFBF.

*       Batchinputdata of single transaction
DATA:   BDCDATA LIKE BDCDATA    OCCURS 0 WITH HEADER LINE.
*       messages of call transaction
DATA:   MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
DATA:   T_RETURN  LIKE  BAPIRET2 OCCURS 0 WITH HEADER LINE.
DATA : LV_MBLNR TYPE SYMSGV,
       L_ERFMG TYPE CHAR10,
       LV_MSG TYPE BAPI_MSG.

START-OF-SELECTION.

  CLEAR L_ERFMG.
  L_ERFMG = 1."数量
  CONDENSE L_ERFMG NO-GAPS.

  PERFORM DYNPRO USING :
     'X'  'SAPLBARM'         '0800',
     ' '  'BDC_OKCODE'       '=PARA',
     ' '  'RM61B-RB_BAUGR'   'X',        "装配反冲
     ' '  'RM61B-BUDAT'      '20220501', "过账日期
     ' '  'RM61B-BLDAT'      '20220501', "凭证日期
     ' '  'RM61B-MATNR'      'A-1X517-15000',  "物料编号
     ' '  'RM61B-WERKS'      'CN31',     "工厂
     ' '  'RM61B-VERID'      '1000',     "版本
     ' '  'RM61B-ERFMG'      L_ERFMG,    "数量

     'X'  'SAPLBARM'         '0150',
     ' '  'BDC_OKCODE'       '=GOON',
     ' '  'RM61B-RADIOQU'   'X',         "质量检验

     'X'  'SAPLBARM'         '0800',
     ' '  'BDC_OKCODE'       '=ISTDA',
*     ' '  'RM61B-RB_BAUGR'   'X',
     'X'  'SAPLCOWB'         '0130',
     ' '  'BDC_OKCODE'       '=WEIT',
     'X'  'SAPLBARM'         '0800',
     ' '  'BDC_OKCODE'       '/EABRT'.

*     'X'  'SAPLBARM'         '0171',
*     ' '  'BDC_OKCODE'       '=GOON'.

  CALL TRANSACTION 'MFBF' USING BDCDATA
*               OPTIONS  FROM CTU_PARAMS
                       MODE   'N'
                       UPDATE 'S'
                 MESSAGES INTO MESSTAB.

  CALL FUNCTION 'CONVERT_BDCMSGCOLL_TO_BAPIRET2'
    TABLES
      IMT_BDCMSGCOLL = MESSTAB[]
      EXT_RETURN     = T_RETURN.

  CLEAR LV_MSG.
*** 查找成功的物料凭证号
  LOOP AT T_RETURN WHERE TYPE EQ 'S'
                    AND ID     EQ 'RM'
                    AND NUMBER NE ' '
                    AND MESSAGE_V1 NE ''."如果这个字段有数值就是物料凭证
    LV_MBLNR = T_RETURN-MESSAGE_V1.
    LV_MSG  = T_RETURN-MESSAGE.
  ENDLOOP.


*** 没有凭证号就报错并且把所有信息读取
  IF LV_MBLNR IS NOT INITIAL.
    WRITE : LV_MBLNR,LV_MSG.
  ELSE.
    DATA : GT_BAPIRET TYPE STANDARD TABLE OF BAPIRET2,
           GW_BAPIRET TYPE BAPIRET2.
    GT_BAPIRET[] = T_RETURN[].
    PERFORM DISPLAY_ERROR.
  ENDIF.

*&---------------------------------------------------------------------*
*&      Form  DISPLAY_ERROR
*&---------------------------------------------------------------------*
*       显示错误
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DISPLAY_ERROR .

  DATA: GR_TABLE  TYPE REF TO CL_SALV_TABLE.
  DATA: LR_COLUMNS TYPE REF TO CL_SALV_COLUMNS.

  TRY.
      CL_SALV_TABLE=>FACTORY(
        IMPORTING
          R_SALV_TABLE = GR_TABLE
        CHANGING
          T_TABLE      = GT_BAPIRET ).
    CATCH CX_SALV_MSG.                                  "#EC NO_HANDLER
  ENDTRY.

  LR_COLUMNS = GR_TABLE->GET_COLUMNS( ).
  LR_COLUMNS->SET_OPTIMIZE( 'X' ).
  GR_TABLE->SET_SCREEN_POPUP(
    START_COLUMN = 1
    END_COLUMN   = 100
    START_LINE   = 1
    END_LINE     = 20 ).

  GR_TABLE->DISPLAY( ).

ENDFORM.                    "DISPLAY_ERROR
*&---------------------------------------------------------------------*
*&      Form  BDC_DYNPRO
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->PROGRAM    text
*      -->DYNPRO     text
*----------------------------------------------------------------------*
FORM DYNPRO USING DYNBEGIN FNAM FVAL.
  CLEAR BDCDATA.
  IF DYNBEGIN = 'X'.
    BDCDATA-PROGRAM  = FNAM.
    BDCDATA-DYNPRO   = FVAL.
    BDCDATA-DYNBEGIN = 'X'.
  ELSE.
    BDCDATA-FNAM = FNAM.
    BDCDATA-FVAL = FVAL.
  ENDIF.
  APPEND BDCDATA.
ENDFORM.                    "BDC_DYNPRO

2、生产实绩取消

生产实绩取消只要多录频一个点击“中间凭证冲冲销”按钮的步骤即可。

3、注意点

要是后台IMG配置中对于REM参数文件的配置如下图所示(IMG→生产→重复制造→控制→定义重复制造参数文件),勾选了“反冲的错误修正”下面的“在对话模式中执行修正”复选框,那么一旦BOM组件缺料或者其他错误,BDC录频处理的方式就显示苍白了。

一旦有问题,就会自动弹出“提取错误”的屏幕。

所以,最后...

以上是关于ABAPMFBF过账到质量检验库存类型Demo的主要内容,如果未能解决你的问题,请参考以下文章

sap原材料和库存商品结算不一致

SAP 销售退回R状态物料如何处理

20170405-STO库存转储单

SAP MM 特殊库存之T库存初探

ABAP采购订单如何取不同移动类型数量的值

「SAP技术」MIGO 343 解冻物料库存的同时可以更改存储地点