ABAP QM 生产完工入库的质量检验 的增强怎么做求参考案例

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ABAP QM 生产完工入库的质量检验 的增强怎么做求参考案例相关的知识,希望对你有一定的参考价值。

1,生产完工入库的质量检验

需求:某项目客户要求,同一个成品物料号,正常生产批次完工入库后需要质检,而混批生产完工入库后不再需要质检,直接进入非限制使用库存。所谓的混批,是指将之前已经生产出来的该物料的多个批次库存,质检释放库存后,因业务需要再次投入生产线,混批生产出一个新的该物料批次(自己造自己)。

分析:很明显,同一个物料号只能启用一个04检验类型(或者复制04后创建的新的检验类型),并且一旦启用04检验类型,SAP系统不管你是正常批次生产还是混批生产,完工入库之后必有检验批产生,没办法做到正常批次入库进入质检库存,而混批生产完工入库后直接进入非限制使用库存。
正常批次生产和混批生产工单类型是不同的。

建议:1)启用04,工单完工入库之后全部进入质检库存产生检验批。但是业务上对于混批生产订单完工入库之后产生的检验不做检验,直接去SAP系统里做一笔QA11的事务,把质检库存释放出来。不过该建议业务部门还是不能接受,虽然QA11的操作比较简单,工作量不大,但是业务部门还是希望混批场景根本无检验批产生。

2)最后给出的建议是:为物料号启用04检验类型,但是在工单完工入库的标准程序里增加代码做增强,在触发04检验批之前先检查工单类型是不是混批生产的工单,如果是,就不触发04类型的检验批,库存直接进入非限制使用库存。SAP有标准功能可以根据不同的工单类型分配不同的检验类型,但是这个只对03(生产过程的检验)起作用,对于04检验类型是不起作用的。

02就是我的问题,求大牛给个参考案例!

参考技术A 借 库存商品 贷 生产成本

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录频处理的方式就显示苍白了。

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

所以,最后...

以上是关于ABAP QM 生产完工入库的质量检验 的增强怎么做求参考案例的主要内容,如果未能解决你的问题,请参考以下文章

ABAP生产订单收货增强控制

WIP完工入库及完工退回的几个重要问题

abap 销售订单修改增强 LV69AFZZ 怎么进行修改 添加代码的呢?

SAP-WM和MM模块是啥

abap bapi badi 有啥区别?怎样查找?怎样使用? 标准程序自建增强点怎么做?

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