MIGO增强 采购订单生成的检验批自动决策并过账所有数量到非限制库存

摘要:
项目背景:对于Z009类型的采购订单,在101中接收和接收货物时,无需生成检验批。然后,当MIGO处于存储状态时,设置增强功能,模拟上述配置,暂时跳过检验批代码的生成,并在取消接收时报告错误。在这里,我们需要继续改进,我们不知道是否还有其他地方可以做。

 项目背景:

  Z009类型的采购订单,101收货入库时,不需要产生检验批。

1.一般来说设置是否产生检验批,是通过设置物料管控的

MIGO增强 采购订单生成的检验批自动决策并过账所有数量到非限制库存第1张

2.但是这里因为别的原因,不能按物料来改。

3.最初是把采购订单的'库存类型'改为非限制(参考下图),无法达到目的,放弃这种做法!然后是在MIGO入库时,设置增强,模拟上述配置,临时跳过 生成检验批的代码,结果取消收货的时候报错,这里还要继续弄增强,

后续还不知道有没有别的地方需要弄。所以放弃这种跳过生成检验批的做法

MIGO增强 采购订单生成的检验批自动决策并过账所有数量到非限制库存第2张

4.在过账时,生成一个后台作业,后台作业自动过账检验批,结果占用了物料凭证,出现异常问题。

5.最终增强放在过账后,再异步调用过账检验批的程序。

最终方案:

一、增强点 LMIGOKD1

MIGO增强 采购订单生成的检验批自动决策并过账所有数量到非限制库存第3张

MIGO增强 采购订单生成的检验批自动决策并过账所有数量到非限制库存第4张MIGO增强 采购订单生成的检验批自动决策并过账所有数量到非限制库存第5张
    IF sy-tcode eq 'MIGO'.
*     BREAK IT0003.
     DATA: lv_qalsC TYPE c.
     READ TABLE LT_XMSEG INTO DATA(LS_XMSEG) INDEX 1.
     IF SY-subrc EQ 0 AND LS_XMSEG-BWART EQ '101'.
     SELECT COUNT(*)
       FROM EKKO
      WHERE EBELN EQ LS_XMSEG-EBELN
        AND BSART EQ 'Z009'.
       IF SY-SUBRC EQ 0.
          CALL FUNCTION 'Z_RFC_PLM_031'
*          starting new task 'T1' "IN UPDATE TASK
            EXPORTING
              p_mblnr = LS_XMSEG-mblnr
              p_mjahr = LS_XMSEG-mjahr.
*         SUBMIT zmmr096 WITH p_mblnr = LS_XMSEG-mblnr
*                        WITH p_mjahr = LS_XMSEG-mjahr.
       ENDIF.
       ENDIF.
*       get PARAMETER ID 'ZQALSX' FIELD lv_qalsC.
    ENDIF.
View Code

另外写了个程序,通过物料凭证找到检验批,并自动过账到非限制库存,使用RFC来异步调用(因为ZMMR096中有commit,需用常规函数调用远程函数并使用In new task)

MIGO增强 采购订单生成的检验批自动决策并过账所有数量到非限制库存第6张

MIGO增强 采购订单生成的检验批自动决策并过账所有数量到非限制库存第7张

 MIGO增强 采购订单生成的检验批自动决策并过账所有数量到非限制库存第8张

MIGO增强 采购订单生成的检验批自动决策并过账所有数量到非限制库存第9张

 附上zmmr096的代码

ZMMR096

MIGO增强 采购订单生成的检验批自动决策并过账所有数量到非限制库存第10张MIGO增强 采购订单生成的检验批自动决策并过账所有数量到非限制库存第11张
*&---------------------------------------------------------------------*
*& Report ZMMR096
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zmmr096.

INCLUDE zmmr096_head.
INCLUDE zmmr096_screen.
INCLUDE zmmr096_form.

*采购订单类型为 Z009时,产生的检验批,需自动过账到非限制库存
START-OF-SELECTION.
*  CHECK sy-batch IS NOT INITIAL.
  PERFORM frm_prueflos_get. "获取检验批
  PERFORM frm_prueflos_post."检验批自动决策
  PERFORM frm_prueflos_post2."检验批自动过账

END-OF-SELECTION.
View Code

zmmr096_head

MIGO增强 采购订单生成的检验批自动决策并过账所有数量到非限制库存第12张MIGO增强 采购订单生成的检验批自动决策并过账所有数量到非限制库存第13张
*&---------------------------------------------------------------------*
*& 包含               ZMMR096_HEAD
*&---------------------------------------------------------------------*
TYPES: BEGIN OF sy_output.
    INCLUDE STRUCTURE qals.
TYPES: ztype   TYPE c,
       message TYPE camsg,
       END OF sy_output.
DATA: gt_output TYPE TABLE OF sy_output.
DATA: lv_flagc TYPE c,
      lv_times TYPE sy-tabix.
DATA: gt_bdcdata TYPE STANDARD TABLE OF bdcdata,
      gt_bdcmsg  TYPE STANDARD TABLE OF bdcmsgcoll.
DATA:bdcdata LIKE bdcdata    OCCURS 0 WITH HEADER LINE.
View Code

ZMMR096_SCREEN

MIGO增强 采购订单生成的检验批自动决策并过账所有数量到非限制库存第14张MIGO增强 采购订单生成的检验批自动决策并过账所有数量到非限制库存第15张
*&---------------------------------------------------------------------*
*& 包含               ZMMR096_SCREEN
*&---------------------------------------------------------------------*

SELECTION-SCREEN: BEGIN OF BLOCK b01 WITH FRAME TITLE TEXT-001.
PARAMETERS: p_mblnr TYPE qals-mblnr,
            p_mjahr TYPE qals-mjahr.
*SELECT-OPTIONS: s_budat FOR bsid-budat,
*                s_bukrs FOR bsid-bukrs,
*                s_kunnr FOR bsid-kunnr MODIF ID m1,
*                s_lifnr FOR bsik-lifnr MODIF ID m2,
*                s_hkont FOR bsid-hkont MODIF ID m3.
*PARAMETERS: r1 RADIOBUTTON GROUP g1 USER-COMMAND u1,
*            r2 RADIOBUTTON GROUP g1,
*            r3 RADIOBUTTON GROUP g1.
*PARAMETERS: p_check1 AS CHECKBOX.
*SELECTION-SCREEN BEGIN OF LINE.
*PARAMETERS: p_txt1 TYPE char10 DEFAULT '逻辑说明:' MODIF ID m4.
*SELECTION-SCREEN COMMENT (30) TEXT-101.
*SELECTION-SCREEN END OF LINE.
*SELECTION-SCREEN BEGIN OF LINE.
*PARAMETERS: p_txt2 TYPE char5 DEFAULT '' MODIF ID m4.
*SELECTION-SCREEN COMMENT (40) TEXT-102.
*SELECTION-SCREEN END OF LINE.
*SELECTION-SCREEN BEGIN OF LINE.
*PARAMETERS: p_txt3 TYPE char5 DEFAULT '' MODIF ID m4.
*SELECTION-SCREEN COMMENT (50) TEXT-103.
*SELECTION-SCREEN END OF LINE.
*SELECTION-SCREEN BEGIN OF LINE.
*PARAMETERS: p_txt4 TYPE char5 DEFAULT '' MODIF ID m4.
*SELECTION-SCREEN COMMENT (50) TEXT-104.
*SELECTION-SCREEN END OF LINE.
*PARAMETERS: p_text1 TYPE char50 DEFAULT '期初日期为查询日期的最小日期的上月底' MODIF ID m4,
*            p_text2 TYPE char50 DEFAULT '账龄是查询日期的最大日期与记账日期对比' MODIF ID m4.

SELECTION-SCREEN: END OF BLOCK b01.
View Code

ZMMR096_FORM

MIGO增强 采购订单生成的检验批自动决策并过账所有数量到非限制库存第16张MIGO增强 采购订单生成的检验批自动决策并过账所有数量到非限制库存第17张
*&---------------------------------------------------------------------*
*& 包含               ZMMR096_FORM
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form FRM_PRUEFLOS_POST
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_prueflos_get .
*  WAIT UP TO 5 SECONDS.
  SELECT *
    INTO CORRESPONDING FIELDS OF TABLE @gt_output
    FROM qals
   WHERE mblnr EQ @p_mblnr
     AND mjahr EQ @p_mjahr.

  IF gt_output[] IS INITIAL.
    lv_flagc = 'X'.
  ELSE.
    lv_flagc = ''.
    WAIT UP TO 1 SECONDS.
  ENDIF.

  WHILE lv_flagc = 'X'.
    ADD 1 TO lv_times.
    WAIT UP TO 2 SECONDS.
    PERFORM frm_prueflos_get.
    IF lv_times GE 900."大于半小时的时候,退出循环,避免陷入死循环
      lv_flagc = 'E'.
      EXIT.
    ENDIF.
  ENDWHILE.

ENDFORM.

*&---------------------------------------------------------------------*
*& Form FRM_PRUEFLOS_POST
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_prueflos_post .
  DATA ud_data LIKE bapi2045ud.
  DATA:ud_return_data LIKE  bapi2045ud_return,
       stock_data     LIKE  bapi2045d_il2,
       ls_return      LIKE  bapireturn1.
  DATA:n            TYPE i,
       lv_flg       TYPE c,
       lv_anzfehler TYPE string.
  LOOP AT gt_output INTO DATA(ls_output).
    n = n + 1.
*    gs_out-prueflos = ls_output-prueflos.

    ud_data-insplot             = ls_output-prueflos. "检验批
    ud_data-ud_code             = 'AC01'.    "决策代码
    ud_data-ud_plant            = ls_output-werk.
*    ud_data-ud_recorded_by_user = sy-uname."ls_output-qvname.
    ud_data-ud_recorded_on_date = sy-datum.
    ud_data-ud_recorded_at_time = sy-uzeit.
    ud_data-ud_force_completion = 'X'.
    ud_data-ud_code_group       = '1000'."<fs_decision>-vcodegrp.
    ud_data-ud_selected_set     = '1000'."<fs_decision>-vauswahlmg.

*    ud_data-ud_stock_posting = 'X'.  "是否进行过帐
    CALL FUNCTION 'BAPI_INSPLOT_SETUSAGEDECISION'
      EXPORTING
        number         = ls_output-prueflos
        ud_data        = ud_data
*       LANGUAGE       =
      IMPORTING
        ud_return_data = ud_return_data
        stock_data     = stock_data
        return         = ls_return.

    IF ls_return-type CA 'AEX'.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
      ls_output-ztype = 'E'.
      ls_output-message  = '处理使用决策失败:' && ls_return-message.

    ELSE.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait = 'X'.
      ls_output-ztype = 'S'.
      ls_output-message  = ls_return-message.
    ENDIF.


    MODIFY gt_output FROM ls_output.
    CLEAR ls_output.
  ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_PRUEFLOS_POST2
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_prueflos_post2 .
  DATA: json_ser TYPE REF TO cl_trex_json_serializer,
        json_des TYPE REF TO cl_trex_json_deserializer.
  DATA: jsonstr TYPE string.
  DATA: lt_zrfc_logs TYPE TABLE OF zrfc_logs,
        ls_zrfc_logs TYPE zrfc_logs.
  DATA: ep_message  TYPE camsg,
        lv_losmenge TYPE char17,
        p_mode      TYPE c VALUE 'N'.
  LOOP AT gt_output INTO DATA(ls_output) WHERE ztype = 'S'.
    PERFORM f_build_bdcdata TABLES gt_bdcdata USING 'SAPMQEVA' '0100' 'X' ''                  ''.
    PERFORM f_build_bdcdata TABLES gt_bdcdata USING ''          ''     ''  'BDC_CURSOR'      'QALS-PRUEFLOS'.
    PERFORM f_build_bdcdata TABLES gt_bdcdata USING ''          ''     ''  'BDC_OKCODE'      '/00'.
    PERFORM f_build_bdcdata TABLES gt_bdcdata USING ''          ''     ''  'QALS-PRUEFLOS'   ls_output-prueflos."检验批号

    PERFORM f_build_bdcdata TABLES gt_bdcdata USING 'SAPMQEVA' '0200' 'X' ''                  ''.
    PERFORM f_build_bdcdata TABLES gt_bdcdata USING ''          ''     ''  'BDC_OKCODE'      '=BB'.
    PERFORM f_build_bdcdata TABLES gt_bdcdata USING ''          ''     ''  'BDC_SUBSCR'      'SAPMQEVA                                1101UD_HEADER'.
    PERFORM f_build_bdcdata TABLES gt_bdcdata USING ''          ''     ''  'BDC_SUBSCR'      'SAPLSEXM                                0200BADI_SUBSCR_1101'.
    PERFORM f_build_bdcdata TABLES gt_bdcdata USING ''          ''     ''  'BDC_SUBSCR'      'SAPMQEVA                                0101SUB_UD_DATA'.
    PERFORM f_build_bdcdata TABLES gt_bdcdata USING ''          ''     ''  'BDC_SUBSCR'      'SAPMQEVA                                1103UD_DATA'.
    PERFORM f_build_bdcdata TABLES gt_bdcdata USING ''          ''     ''  'BDC_SUBSCR'      'RQEVA-VCODE'.
*    PERFORM f_build_bdcdata TABLES gt_bdcdata USING ''          ''     ''  'RQEVA-VCODE'      'AC01'.
*    PERFORM f_build_bdcdata TABLES gt_bdcdata USING ''          ''     ''  'RQEVA-VCODEGRP'      '1000'.
*    PERFORM f_build_bdcdata TABLES gt_bdcdata USING ''          ''     ''  'RQEVA-QKENNZAHL'      '100'.

    PERFORM f_build_bdcdata TABLES gt_bdcdata USING 'SAPMQEVA' '0200' 'X' ''                  ''.
    PERFORM f_build_bdcdata TABLES gt_bdcdata USING ''          ''     ''  'BDC_OKCODE'      '=BU'.
    PERFORM f_build_bdcdata TABLES gt_bdcdata USING ''          ''     ''  'BDC_SUBSCR'      'SAPMQEVA                                1101UD_HEADER'.
    PERFORM f_build_bdcdata TABLES gt_bdcdata USING ''          ''     ''  'BDC_SUBSCR'      'SAPLSEXM                                0200BADI_SUBSCR_1101'.
    PERFORM f_build_bdcdata TABLES gt_bdcdata USING ''          ''     ''  'BDC_SUBSCR'      'SAPMQEVA                                0102SUB_UD_DATA'.
    PERFORM f_build_bdcdata TABLES gt_bdcdata USING ''          ''     ''  'BDC_SUBSCR'      'RQEVA-QLGO_VM01'.
    lv_losmenge = ls_output-losmenge.
    PERFORM f_build_bdcdata TABLES gt_bdcdata USING ''          ''     ''  'RQEVA-VMENGE01'  lv_losmenge.
*    PERFORM f_build_bdcdata TABLES gt_bdcdata USING ''          ''     ''  'RQEVA-QLGO_VM01'  ls_output-lagortvorg.
*    PERFORM f_build_bdcdata TABLES gt_bdcdata USING ''          ''     ''  'RQEVA-QLGO_VM04'  ls_output-lagortvorg.
*    PERFORM f_build_bdcdata TABLES gt_bdcdata USING ''          ''     ''  'RQEVA-QLGO_VM06'  ls_output-lagortvorg.

    CALL TRANSACTION 'QA12' USING gt_bdcdata MODE p_mode MESSAGES INTO gt_bdcmsg.
    IF sy-subrc EQ 0.
      CALL FUNCTION 'MESSAGE_TEXT_BUILD'
        EXPORTING
          msgid               = sy-msgid
          msgnr               = sy-msgno
          msgv1               = sy-msgv1
          msgv2               = sy-msgv2
          msgv3               = sy-msgv3
          msgv4               = sy-msgv4
        IMPORTING
          message_text_output = ep_message.
      ls_output-ztype = 'S'.
      lv_flagc = 'S'.
      ls_output-message = ls_output-message && ';' && ep_message.
    ELSE.
      CALL FUNCTION 'MESSAGE_TEXT_BUILD'
        EXPORTING
          msgid               = sy-msgid
          msgnr               = sy-msgno
          msgv1               = sy-msgv1
          msgv2               = sy-msgv2
          msgv3               = sy-msgv3
          msgv4               = sy-msgv4
        IMPORTING
          message_text_output = ep_message.
      ls_output-ztype = 'E'.
      lv_flagc = 'E'.
      ls_output-message = ls_output-message && ';' && ep_message.
    ENDIF.
*    READ TABLE gt_bdcmsg INTO DATA(ls_bdcmsg) WITH KEY msgtyp = 'E'.

    CLEAR: gt_bdcdata,gt_bdcmsg.
    MODIFY gt_output FROM ls_output.
  ENDLOOP.

*  CREATE OBJECT json_ser
*    EXPORTING
*      data = it_twewt[].
*  CALL METHOD json_ser->serialize.
*  CALL METHOD json_ser->get_data
*    RECEIVING
*      rval = jsonstr.

  ls_zrfc_logs-funcname   = 'ZMMR096'.
  ls_zrfc_logs-zsystem    = 'JYP'.
  ls_zrfc_logs-uname      = sy-uname.
*  ls_zrfc_logs-zname1     = p_name1.
  ls_zrfc_logs-erdat      = sy-datum.
  ls_zrfc_logs-uzeit      = sy-uzeit.
  ls_zrfc_logs-ep_type    = lv_flagc.
  ls_zrfc_logs-ep_message = ep_message.
*  ls_zrfc_logs-jsonstr1   = jsonstr.

  MODIFY zrfc_logs FROM ls_zrfc_logs.

ENDFORM.

*------------------------------------------------------------------------
*
*------------------------------------------------------------------------
FORM f_build_bdcdata TABLES ct_bdcdata USING uv_program
                                             uv_dynpro
                                             uv_dynbegin
                                             uv_fnam
                                             uv_fval.
  DATA: ls_bdcdata TYPE bdcdata.
  CLEAR: ls_bdcdata.
  ls_bdcdata-program  = uv_program.
  ls_bdcdata-dynpro   = uv_dynpro.
  ls_bdcdata-dynbegin = uv_dynbegin.
  ls_bdcdata-fnam     = uv_fnam.
  ls_bdcdata-fval     = uv_fval.
  APPEND ls_bdcdata TO ct_bdcdata.

ENDFORM.
View Code

PS: ME21N建立采购订单

  MIGO增强 采购订单生成的检验批自动决策并过账所有数量到非限制库存第18张

  ME29N审批后,就可以在MIGO做101入库了

MIGO增强 采购订单生成的检验批自动决策并过账所有数量到非限制库存第19张

免责声明:文章转载自《MIGO增强 采购订单生成的检验批自动决策并过账所有数量到非限制库存》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇一分钟开始持续集成之旅系列之: Vue + 腾讯云 COS 上传部署Node.js内置的工具和第三方模块来进行单步调试下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

MM-移动类型

链接:SAP移动类型 移动类型 备注 业务类型 SAP中事务代码 备注 101 采购订单收货、生产订单收货 收货 migo CO11N顶层处理移动类型\跨工厂收货 102 采购订单收货冲销 收货 migo CO13顶层处理移动类型 122 根据采购订单向供应商退货 收货 migo 123 根据采购订单向供应商退货-冲销 收货 mig...

SAP MM 根据采购订单反查采购申请?

SAP MM 根据采购订单反查采购申请? 前日微信上某同行发来一个message,说是想知道如何通过采购订单号查询到其前端的采购申请号。 笔者首先想到去检查采购订单相关的常用报表ME2L/ME2M/ME2N/ME80FN等,居然没有哪个报表能支持这个查询需求的。 然后笔者从采购申请的相关报表着手,比如ME5A, 发现它是可以满足需求的。 比如如下的采购订单...

计划采购订单

计划采购订单 采购订单,有标准采购订单、计划类采购订单、一揽子采购协议等。 我们现在就分别来讲述这三者的差别,并在此章节着重讲述计划类采购订单。 一、采购订单 标准采购订单(从一供应商处做一次性物料或服务的采购) 建议:当你与供应商确认了采购对象(物料或服务), 数量, 发货计划, 但是不存在长期的约定时, 可使用标准采购订单. 合同采购订单(为一种协议,...

【MM系列】SAP 采购订单的批量修改

公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:【MM系列】SAP 采购订单的批量修改   前言部分 大家可以关注我的公众号,公众号里的排版更好,阅读更舒适。 正文部分 现在有一个需求,我们需要冻结一批采购订单,但是由于批量冻结的后果无法预知...

MIR7/MIRO 贷项凭证/事后借记/后续贷记

发票和事后借记 相同点:增加对供应商的应付款(都需要向供应商付款) 不同点:针对同一订单收货,发票要先于事后借记(事后借记是对供应商后期发票金额的补充);发票和金额、订单数量有关系,而事后借记只是订单金额调整的凭证,仅涉及订单金额的调整,不影响订单数量的变更。 贷项凭证和后续贷记 相同点:减少对供应商的应付款(或供应商需要向我公司付款) 不同...