DN过账后,自动做501/502

 

方案:

一、建3个自建表ZMMT029、ZMMT029A、ZMMT029B

 

 

 

 

 

 二、存储需要做501/502的数据到自建表,在SE37->MB_CREATE_GOODS_MOVEMENT的最后插入代码。

zit0004是用来控制是否启用该增强的一个配置表,可以取消掉。

  DATA: LS_ZMMT029A TYPE ZMMT029A,
        LT_ZMMT029A TYPE TABLE OF ZMMT029A,
        LS_ZMMT029B TYPE ZMMT029B,
        LT_ZMMT029B TYPE TABLE OF ZMMT029B.
  SELECT COUNT(*)
    FROM zit0004
   WHERE zstop EQ 'X'
*     AND werks EQ ls_tab_werks-werks
     AND name IN ('ALL','ZAUTO_501').
  IF sy-subrc NE 0.
*  IF sy-tcode eq 'VL02N' OR sy-tcode eq 'VL03N'.
  CASE xmseg-bwart.
    WHEN '631' OR '632'.
      LOOP AT XMSEG INTO DATA(LS_XMSEG) WHERE XAUTO EQ ''.
        LS_ZMMT029A-VBELN = LS_XMSEG-VBELN_IM.
        LS_ZMMT029A-MBLNR = LS_XMSEG-MBLNR.
        LS_ZMMT029A-MJAHR = LS_XMSEG-MJAHR.
        LS_ZMMT029A-BWART = LS_XMSEG-BWART.
        APPEND LS_ZMMT029A TO LT_ZMMT029A[].
        ls_zmmt029b-mblnr = ls_xmseg-mblnr."物料凭证编号
        ls_zmmt029b-mjahr = ls_xmseg-mjahr."物料凭证年度
        ls_zmmt029b-zeile = ls_xmseg-zeile."行号
        ls_zmmt029b-matnr = ls_xmseg-matnr."物料
        ls_zmmt029b-kunnr = ls_xmseg-kunnr."客户
        ls_zmmt029b-werks = ls_xmseg-werks."工厂
        ls_zmmt029b-lgort = ls_xmseg-lgort."库存地点
        ls_zmmt029b-menge = ls_xmseg-menge."数量
        ls_zmmt029b-meins = ls_xmseg-meins."单位
        ls_zmmt029b-vbeln = ls_xmseg-vbeln_im."交货单
        IF LS_XMSEG-BWART EQ '631'.
          ls_zmmt029b-bwart = '501'.
        ELSEIF ls_xmseg-bwart eq '632'.
          ls_zmmt029b-bwart = '502'.
        ENDIF.
        append ls_zmmt029b TO lt_zmmt029b[].
      ENDLOOP.
     IF lt_zmmt029a[] IS NOT INITIAL.
       MODIFY zmmt029a FROM TABLE lt_zmmt029a.
     ENDIF.
     IF lt_zmmt029b[] IS NOT INITIAL.
       MODIFY zmmt029b FROM TABLE lt_zmmt029b.
     ENDIF.
*      WHEN .
    WHEN OTHERS.
  ENDCASE.
  ENDIF.
View Code

三、在SE19->DELIVERY_PUBLISH实施增强

 

写个接口和程序来实现后台JOB执行501或502。

 

 

 CALL FUNCTION 'Z_RFC_PLM_038'."发起后台JOB,自动执行501和502

其中:SE37->Z_RFC_PLM_038的代码为

"----------------------------------------------------------------------
  DATA: lv_jobname          TYPE tbtcjob-jobname,
        ls_print_parameters TYPE pri_params,
        lv_zjobcount        TYPE btcjobcnt,
        lv_jobcount         TYPE tbtcjob-jobcount.
*        lv_zjobcount        type BTCJOBCNT.
  DATA:lt_rspar TYPE TABLE OF rsparams,
       lw_line  LIKE LINE OF lt_rspar.
  DATA: ls_ztjob_count TYPE ztjob_count,
        lt_ztjob_count TYPE TABLE OF ztjob_count.
  "如果是要传给PARAMETER  根据需求设置屏幕参数
*  lw_line-selname = 'P_VERID'.
*  lw_line-kind    = 'P'.
*  lw_line-sign    = 'I'.
*  lw_line-option  = 'EQ'.
*  lw_line-low     = p_verid.
*  APPEND lw_line TO lt_rspar.
*
*  lw_line-selname = 'P_PLNNR'.
*  lw_line-kind    = 'P'.
*  lw_line-sign    = 'I'.
*  lw_line-option  = 'EQ'.
*  lw_line-low     = p_plnnr.
*  APPEND lw_line TO lt_rspar.
*
*  lw_line-selname = 'P_WERKS'.
*  lw_line-kind    = 'P'.
*  lw_line-sign    = 'I'.
*  lw_line-option  = 'EQ'.
*  lw_line-low     = p_werks.
*  APPEND lw_line TO lt_rspar.
*
*  lw_line-selname = 'P_MATNR'.
*  lw_line-kind    = 'P'.
*  lw_line-sign    = 'I'.
*  lw_line-option  = 'EQ'.
*  lw_line-low     = p_matnr.
*  APPEND lw_line TO lt_rspar.

*&--------新建作业名
  SELECT COUNT( * )
    INTO @DATA(lv_zjobcountr)
    FROM ztjob_count
   WHERE programm = 'ZMMR102A'
     AND zerdat EQ @sy-datum.
  lv_zjobcount = lv_zjobcountr.


  lv_zjobcount = lv_zjobcount + 1.
  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
      input  = lv_zjobcount
    IMPORTING
      output = lv_zjobcount.

  CONCATENATE 'ZMMR102A' lv_zjobcount INTO lv_jobname SEPARATED BY '_'.
  "打开JOB 通过JOB name 获得JOB号
  CALL FUNCTION 'JOB_OPEN'
    EXPORTING
      jobname          = lv_jobname
    IMPORTING
      jobcount         = lv_zjobcount
    EXCEPTIONS
      cant_create_job  = 1
      invalid_job_data = 2
      jobname_missing  = 3
      OTHERS           = 4.
  IF syst-subrc = 0.
    "调用需要跑JOB的程序
*    SUBMIT zppr065
*        WITH SELECTION-TABLE  lt_rspar
*        USER syst-uname          " mandatory
*       VIA JOB lv_jobname NUMBER lv_zjobcount AND RETURN.

    SUBMIT zmmr102a
*            WITH s_vbeln in s_vbeln
*            WITH p_plnnr = p_plnnr
*            WITH p_werks = p_werks
*            WITH p_matnr = p_matnr
            VIA JOB lv_jobname NUMBER lv_zjobcount AND RETURN.
    IF sy-subrc EQ 0.
*&--------设置作业周期信息
*    CLEAR lv_jobcount.
      CALL FUNCTION 'JOB_CLOSE'
        EXPORTING
          jobcount             = lv_zjobcount
          jobname              = lv_jobname
*         sdlstrtdt            = sy-datum
*         sdlstrttm            = sy-uzeit                           "
*         PRDMINS              = 10                                        "每10分钟执行一次
          strtimmed            = 'X'                                       "立刻开始
        EXCEPTIONS
          cant_start_immediate = 1
          invalid_startdate    = 2
          jobname_missing      = 3
          job_close_failed     = 4
          job_nosteps          = 5
          job_notex            = 6
          lock_failed          = 7
          invalid_target       = 8
          OTHERS               = 9.
      IF sy-subrc <> 0.
      ENDIF.
    ENDIF.
*&--------记录到表
    ls_ztjob_count-programm = 'ZMMR102A'.
    ls_ztjob_count-jobcount = lv_zjobcount.
    ls_ztjob_count-zerdat = sy-datum.
    MODIFY ztjob_count FROM ls_ztjob_count.
*    IF sy-subrc EQ 0.
*      COMMIT WORK AND WAIT.
*    ELSE.
*      ROLLBACK WORK.
*    ENDIF.
  ENDIF.
View Code

SE38->ZMMR102A的代码为:

*&---------------------------------------------------------------------*
*& Report ZMMR102A
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zmmr102a.
TABLES:likp,mkpf.
DATA: lt_zmmt029  TYPE TABLE OF zmmt029,
      lt_zmmt029a TYPE TABLE OF zmmt029a,
      lt_zmmt029b TYPE TABLE OF zmmt029b.
DATA: lv_start   TYPE char1,
      lv_end     TYPE char1,
      lv_stabix  TYPE sy-tabix,
      lv_stabix2 TYPE sy-tabix.
DATA: ls_head  TYPE ztms002_head,
      lv_msg   TYPE bapi_msg,
      lv_type  TYPE bapi_mtype,
      lv_mblnr TYPE mblnr,
      lv_mjahr TYPE mjahr,
      lt_item  TYPE TABLE OF ztms002_item,
      ls_item  TYPE ztms002_item.

SELECTION-SCREEN: BEGIN OF BLOCK b01 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: s_vbeln FOR likp-vbeln,
                s_mblnr FOR mkpf-mblnr,
                s_datum FOR sy-datum.
SELECTION-SCREEN: END OF BLOCK b01.

WHILE lv_stabix2 < 10.
  CLEAR: lt_zmmt029[],lt_zmmt029a[],lt_zmmt029b[].
  SELECT *
    INTO TABLE @lt_zmmt029
    FROM zmmt029.

  SELECT *
    INTO TABLE @lt_zmmt029a
    FROM zmmt029a
   WHERE vbeln IN @s_vbeln
     AND mblnr IN @s_mblnr
     AND zflag EQ ''.
  SORT lt_zmmt029a[] BY mblnr mjahr.

  IF lt_zmmt029a[] IS NOT INITIAL.
    SELECT *
      INTO TABLE @lt_zmmt029b
      FROM zmmt029b
       FOR ALL ENTRIES IN @lt_zmmt029a
     WHERE mblnr EQ @lt_zmmt029a-mblnr
       AND mjahr EQ @lt_zmmt029a-mjahr.
    SORT lt_zmmt029b[] BY mblnr mjahr zeile.
  ENDIF.
  IF lt_zmmt029b[] IS NOT INITIAL.
    SELECT matnr,
           zkgwl "客供物料
      INTO TABLE @DATA(lt_zmmt002)
      FROM zmmt002
       FOR ALL ENTRIES IN @lt_zmmt029b
     WHERE matnr EQ @lt_zmmt029b-matnr.
    SORT lt_zmmt002[] BY matnr.
    ADD 20 TO lv_stabix2.
  ELSE.
    WAIT UP TO 3 SECONDS.
    ADD 4 TO lv_stabix2.
  ENDIF.
ENDWHILE.

READ TABLE lt_zmmt029 INTO DATA(ls_zmmt029) INDEX 1.
IF sy-subrc EQ 0.
  ls_head-bldat = sy-datum.
  ls_head-budat = sy-datum.
*  ls_head-bktxt = ls_zm

  LOOP AT lt_zmmt029b[] INTO DATA(ls_zmmt029b).
    CLEAR: lv_start,lv_end.
    AT NEW mjahr.
      lv_start = 'X'.
    ENDAT.
    AT END OF mjahr.
      lv_end = 'X'.
    ENDAT.
    IF lv_start EQ 'X'.
      CLEAR: lt_item[].
      ls_head-bwart = ls_zmmt029b-bwart."移动类型
      ls_head-mtsnr = ls_zmmt029b-vbeln."外部物料单号(这里填DN号)
    ENDIF.
    CLEAR ls_item.
*    ls_item-matnr = ls_zmmt029b-matnr."物料
    READ TABLE lt_zmmt002 INTO DATA(ls_zmmt002) WITH KEY matnr = ls_zmmt029b-matnr BINARY SEARCH.
    IF sy-subrc EQ 0.
      ls_item-matnr = ls_zmmt002-zkgwl.
    ENDIF.
    ls_item-kunnr = ls_zmmt029b-kunnr."客户
    ls_item-werks = ls_zmmt029-werks."工厂
    ls_item-lgort = ls_zmmt029-lgort."库存地点
    ls_item-erfmg = ls_zmmt029b-menge."数量
    ls_item-erfme = ls_zmmt029b-meins."单位
    ls_item-sgtxt = ls_zmmt029-sgtxt."
    ls_item-bwart = ls_zmmt029b-bwart.
    ls_item-migo_insmk = ''.
    ls_item-migo_insmkx = 'X'.
    APPEND ls_item TO lt_item[].

    IF lv_end EQ 'X'.
      READ TABLE lt_zmmt029a INTO DATA(ls_zmmt029a) WITH KEY mblnr = ls_zmmt029b-mblnr
                                                             mjahr = ls_zmmt029b-mjahr BINARY SEARCH.
      IF sy-subrc EQ 0.
        lv_stabix = sy-tabix.

        CALL FUNCTION 'ZTM_RFC002'
          EXPORTING
            is_head    = ls_head
          IMPORTING
            ev_message = lv_msg
            ev_type    = lv_type
            ev_mblnr   = lv_mblnr
            ev_mjahr   = lv_mjahr
          TABLES
            it_item    = lt_item.
        IF lv_type EQ 'S'.
          ls_zmmt029a-zflag = 'X'.
        ELSE.
          ls_zmmt029a-zflag = ''.
        ENDIF.
        ls_zmmt029a-mblnrn = lv_mblnr.
        ls_zmmt029a-mjahrn = lv_mjahr.
        ls_zmmt029a-zmsg   = lv_msg.
        MODIFY lt_zmmt029a FROM ls_zmmt029a INDEX lv_stabix.
        CLEAR: lv_msg,lv_type,lv_mblnr,lv_mjahr,lt_item[],ls_zmmt029a.
      ENDIF.
    ENDIF.
  ENDLOOP.
*  IF sy-subrc NE 0.
  IF lt_zmmt029a[] IS NOT INITIAL.
    MODIFY zmmt029a FROM TABLE lt_zmmt029a.
    IF sy-subrc EQ 0.
      COMMIT WORK AND WAIT.
    ELSE.
      ROLLBACK WORK.
    ENDIF.
  ENDIF.
*  ENDIF.
ENDIF.
View Code

接口ZTM_RFC002是做MIGO移动的,因为有写好的接口,这里直接调用了,

可以使用BAPI_GOODSMVT_CREATE来实现,不建议复制下面这个接口。

SE37-ZTM_RFC002

FUNCTION ztm_rfc002.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(IS_HEAD) TYPE  ZTMS002_HEAD OPTIONAL
*"     VALUE(P_SYSTEM) TYPE  CHAR10 DEFAULT 'TM'
*"  EXPORTING
*"     VALUE(EV_MESSAGE) TYPE  BAPI_MSG
*"     VALUE(EV_TYPE) TYPE  BAPI_MTYPE
*"     VALUE(EV_MBLNR) TYPE  MBLNR
*"     VALUE(EV_MJAHR) TYPE  MJAHR
*"  TABLES
*"      IT_ITEM STRUCTURE  ZTMS002_ITEM OPTIONAL
*"----------------------------------------------------------------------
  "入库过账参数
  DATA:goodsmvt_header  TYPE          bapi2017_gm_head_01,
       goodsmvt_code    TYPE          bapi2017_gm_code,

       goodsmvt_headret TYPE          bapi2017_gm_head_ret,
       materialdocument TYPE bapi2017_gm_head_ret-mat_doc,
       goodsmvt_item    TYPE TABLE OF bapi2017_gm_item_create WITH HEADER LINE,
       return           TYPE TABLE OF bapiret2 WITH HEADER LINE,
       g_move_type      LIKE  goodsmvt_item-move_type,
       lv_meins         TYPE meins,
       lt_extension     TYPE STANDARD TABLE OF bapiparex WITH HEADER LINE,
       wa_extension     LIKE zqmkpf_badi.
  DATA: ls_zqmt005 TYPE zqmt005,
        lt_zqmt005 TYPE TABLE OF zqmt005.
  DATA: lv_wait  TYPE sy-tabix,
        lv_wait2 TYPE sy-tabix.
  DATA: json_ser  TYPE REF TO cl_trex_json_serializer,
        json_ser2 TYPE REF TO cl_trex_json_serializer,
        json_des  TYPE REF TO cl_trex_json_deserializer.
  DATA: jsonstr  TYPE string,
        jsonstr2 TYPE string.
  DATA: lv_zeile TYPE mseg-zeile.
  DATA: lt_zrfc_logs TYPE TABLE OF zrfc_logs,
        ls_zrfc_logs TYPE zrfc_logs.
  DATA:nextnum   TYPE i,
       lv_numadd TYPE numc4.
  DATA: lv_xcharg TYPE mcha-charg.
  DATA: lv_z004   TYPE char1,
        lv_menge  TYPE ekpo-menge,
        lv_menge2 TYPE ekpo-menge,
        lv_menge3 TYPE ekpo-menge.
  DATA:l_line_id    TYPE mseg-line_id    VALUE '000000',
       l_parent_id  TYPE mseg-parent_id  VALUE '000000',
       l_line_depth TYPE mseg-line_depth VALUE '00'.
*01 MB01 采购订单的过帐收货
*02 MB31 按生产订单收货
*03 MB1A 货物提取
*04 MB1B 转移过帐
*05 MB1C 其他收货
*06 MB11 货物移动
*07 MB04 "物料供应"消耗的事后调整
  SELECT COUNT(*)
    FROM zit0004
   WHERE zstop EQ 'X'
     AND name IN ('ALL','ZTM_RFC002').
  IF sy-subrc EQ 0.
    MESSAGE '该功能已暂停使用,请等IT通知,谢谢!' TYPE 'E'.
    EXIT.
  ENDIF.
  CREATE OBJECT json_ser
    EXPORTING
      data = it_item[].
  CALL METHOD json_ser->serialize.
  CALL METHOD json_ser->get_data
    RECEIVING
      rval = jsonstr.

  CREATE OBJECT json_ser2
    EXPORTING
      data = is_head.
  CALL METHOD json_ser2->serialize.
  CALL METHOD json_ser2->get_data
    RECEIVING
      rval = jsonstr2.

  ls_zrfc_logs-funcname   = 'ZTM_RFC002'.
  ls_zrfc_logs-zsystem    = 'TM'.
  ls_zrfc_logs-uname      = p_uname.
  ls_zrfc_logs-zname1     = p_name1.
  ls_zrfc_logs-erdat      = sy-datum.
  ls_zrfc_logs-uzeit      = sy-uzeit.
*  ls_zrfc_logs-ep_type    = ep_type.
*  ls_zrfc_logs-ep_message = ep_message.
  ls_zrfc_logs-jsonstr1   = jsonstr.
  ls_zrfc_logs-jsonstr2   = jsonstr2.

  IF p_system NE 'SAP'.
    MODIFY zrfc_logs FROM ls_zrfc_logs.
    IF sy-subrc EQ 0.
      COMMIT WORK AND WAIT.
    ELSE.
      ROLLBACK WORK.
    ENDIF.
  ENDIF.

  funcname = 'ZTM_RFC002'   .
  zsystem  = 'TM'.

  IF it_item[] IS INITIAL.
    ev_message = '请求的参数不能为空!'.
    EXIT.
  ENDIF.

  LOOP AT it_item ASSIGNING FIELD-SYMBOL(<ls_item>).
*    <ls_item>-zeile = <ls_item>-zeile + 1.
    <ls_item>-zeile = |{ <ls_item>-zeile ALPHA = IN }|."物料凭证编号
    <ls_item>-aufnr = |{ <ls_item>-aufnr ALPHA = IN }|."工单
    <ls_item>-ebeln = |{ <ls_item>-ebeln ALPHA = IN }|."采购凭证
    <ls_item>-ebelp = |{ <ls_item>-ebelp ALPHA = IN }|."采购行项目
    <ls_item>-lifnr = |{ <ls_item>-lifnr ALPHA = IN }|."供应商行项目
    <ls_item>-rsnum = |{ <ls_item>-rsnum ALPHA = IN }|."预留号
    <ls_item>-rspos = |{ <ls_item>-rspos ALPHA = IN }|."预留行项目
    <ls_item>-kunnr = |{ <ls_item>-kunnr ALPHA = IN }|."客户
  ENDLOOP.

  IF it_item[] IS NOT INITIAL.
    SELECT *
      INTO TABLE @DATA(lt_zmmt004_tl)
      FROM zmmt004_tl
       FOR ALL ENTRIES IN @it_item
     WHERE zlldj EQ @it_item-zlldj
       AND zxuha EQ @it_item-zxuha
       AND ztype EQ @it_item-ztype.
    SORT lt_zmmt004_tl[] BY zlldj zxuha ztype.
  ENDIF.

  DATA(lt_item) = it_item[].
  IF is_head-bwart EQ '101'.
    SORT lt_item[] BY ebeln ebelp.
    DELETE lt_item[] WHERE ebeln EQ ''.
    IF lt_item[] IS NOT INITIAL.
      SELECT ekpo~ebeln,
             ekpo~ebelp,
             ekpo~werks,
             ekpo~menge,
             ekpo~meins,
             ekko~lifnr,
             ekko~bsart "采购凭证类型
        INTO TABLE @DATA(lt_ekpo)
        FROM ekpo JOIN ekko ON ekpo~ebeln EQ ekko~ebeln
         FOR ALL ENTRIES IN @lt_item
       WHERE ekpo~ebeln EQ @lt_item-ebeln
         AND ekpo~ebelp EQ @lt_item-ebelp.
      SORT lt_ekpo[] BY ebeln ebelp.

      SELECT rsnum,
             rspos,
             bdmng,
             enmng,
             werks,
             meins,
             matnr,
             baugr,
             lifnr,
             ebeln,
             ebelp
        INTO TABLE @DATA(lt_resb_101)
        FROM resb
         FOR ALL ENTRIES IN @lt_item
       WHERE ebeln EQ @lt_item-ebeln
         AND ebelp EQ @lt_item-ebelp.
      SORT lt_resb_101[] BY ebeln ebelp.

      IF lt_resb_101[] IS NOT INITIAL.
        SELECT matnr,
               werks,
               charg,
               sobkz,
               lifnr,
               lblab
          INTO TABLE @DATA(lt_mslb)
          FROM mslb
           FOR ALL ENTRIES IN @lt_resb_101
         WHERE matnr EQ @lt_resb_101-matnr
           AND werks EQ @lt_resb_101-werks
           AND sobkz EQ 'O'
           AND lifnr EQ @lt_resb_101-lifnr
           AND lblab NE 0.
        SORT lt_mslb[] BY matnr werks lifnr charg.
      ENDIF.

    ENDIF.
  ENDIF.

  lt_item[] = it_item[].
  DELETE lt_item[] WHERE rsnum EQ ''.
  IF lt_item[] IS NOT INITIAL.
    SELECT rsnum,
           rspos,
           bdmng,
           enmng,
           meins
      INTO TABLE @DATA(lt_resb)
      FROM resb
       FOR ALL ENTRIES IN @lt_item
     WHERE rsnum EQ @lt_item-rsnum
       AND rspos EQ @lt_item-rspos.
    SORT lt_resb[] BY rsnum rspos.
  ENDIF.


  SELECT SINGLE chneu
      INTO @DATA(lv_chneu)
      FROM t156
     WHERE bwart EQ @is_head-bwart.
  CASE lv_chneu.
    WHEN 'A' OR 'B' OR 'C' OR 'D' OR 'E' OR 'F'.
      LOOP AT it_item ASSIGNING FIELD-SYMBOL(<fs_item_charg>).
        IF <fs_item_charg>-charg EQ ''.
          SELECT SINGLE xchpf
            INTO @DATA(lv_xchpf)
            FROM mara
           WHERE matnr EQ @<fs_item_charg>-matnr.
          IF sy-subrc EQ 0.
            IF lv_xchpf EQ 'X'.
              SELECT charg
                  INTO @lv_xcharg UP TO 1 ROWS
                  FROM mch1
                  WHERE
                        ersda EQ @sy-datum AND
                        matnr EQ @<fs_item_charg>-matnr
                  ORDER BY charg DESCENDING.
              ENDSELECT.

              IF lv_xcharg NE ''.
                lv_numadd = lv_xcharg+6(4) + 1.
              ELSE.
                lv_numadd = 1.
              ENDIF.
              <fs_item_charg>-charg = |{ sy-datum+2(6) }{ lv_numadd ALPHA = IN }|.
            ENDIF.
          ENDIF.
          LOOP AT it_item INTO DATA(w_item) WHERE matnr = <fs_item_charg>-matnr
                                              AND charg NE ''.
            IF <fs_item_charg>-charg LT w_item-charg.
              <fs_item_charg>-charg = w_item-charg + 1.
            ENDIF.
            CLEAR w_item.
          ENDLOOP.
        ENDIF.
      ENDLOOP.
    WHEN OTHERS.
  ENDCASE.

*----数据检查、填充
  LOOP AT it_item ASSIGNING FIELD-SYMBOL(<fs_item>).
    ADD 1 TO lv_zeile.
    <fs_item>-zeile = lv_zeile.
*    <fs_item>-zeile = |{ <fs_item>-zeile ALPHA = IN }|."物料凭证编号
*    <fs_item>-aufnr = |{ <fs_item>-aufnr ALPHA = IN }|."工单
*    <fs_item>-ebeln = |{ <fs_item>-ebeln ALPHA = IN }|."采购凭证
*    <fs_item>-ebelp = |{ <fs_item>-ebelp ALPHA = IN }|."采购行项目
*    <fs_item>-lifnr = |{ <fs_item>-lifnr ALPHA = IN }|."供应商行项目
*    <fs_item>-rsnum = |{ <fs_item>-rsnum ALPHA = IN }|."预留号
*    <fs_item>-rspos = |{ <fs_item>-rspos ALPHA = IN }|."预留行项目
*    <fs_item>-kunnr = |{ <fs_item>-kunnr ALPHA = IN }|."客户

*  101采购订单的供应商和工厂
    CLEAR: lv_menge,lv_z004.
    READ TABLE lt_ekpo INTO DATA(ls_ekpo) WITH KEY ebeln = <fs_item>-ebeln
                                                   ebelp = <fs_item>-ebelp BINARY SEARCH.
    IF sy-subrc EQ 0.
      IF <fs_item>-werks EQ ''.
        <fs_item>-werks = ls_ekpo-werks.
      ENDIF.
      IF <fs_item>-lifnr IS INITIAL.
        <fs_item>-lifnr = ls_ekpo-lifnr.
      ENDIF.
      IF ls_ekpo-bsart EQ 'Z004' AND is_head-bwart = '101'.
        lv_z004 = 'X'. "委外采购订单收货
        lv_menge = ls_ekpo-menge."采购订单数量
        " 凭证行的唯一标识
        l_line_id                = l_line_id + 1.
        l_parent_id              = l_line_id.
        goodsmvt_item-line_id    = l_line_id.
      ENDIF.
    ENDIF.
    "单位转换
    CLEAR lv_meins.
    CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
      EXPORTING
        input          = <fs_item>-erfme
        language       = '1'
      IMPORTING
        output         = lv_meins
      EXCEPTIONS
        unit_not_found = 1
        OTHERS         = 2.
    IF sy-subrc <> 0.
* Implement suitable error handling here
    ENDIF.
    IF lv_meins CO '*'.
    ELSEIF lv_meins NE ''.
      <fs_item>-erfme = lv_meins.
    ENDIF.

    READ TABLE lt_zmmt004_tl INTO DATA(ls_zmmt004_tl) WITH KEY zlldj = <fs_item>-zlldj
                                                               zxuha = <fs_item>-zxuha
                                                               ztype = <fs_item>-ztype BINARY SEARCH.
    IF sy-subrc EQ 0."退料单
      IF is_head-bwart = '262'.
        IF ls_zmmt004_tl-mblnr IS NOT INITIAL.
          <fs_item>-msg = '退料单只能退一次,已退过料!'.
        ENDIF.
      ENDIF.
    ENDIF.

    CASE is_head-bwart.
      WHEN '101' OR '161'.
        IF <fs_item>-aufnr IS NOT INITIAL."生产入库
          goodsmvt_item-mvt_ind = 'F'."移动标识

          goodsmvt_code         = '02'.

          goodsmvt_item-orderid = <fs_item>-aufnr."订单号
          goodsmvt_item-item_text = <fs_item>-sgtxt. "项目文本
          goodsmvt_item-unload_pt = <fs_item>-ablad."卸货点(人名)
*          goodsmvt_item-ref_doc      = <fs_item>-lfbnr."参考凭证
*          goodsmvt_item-ref_doc_it   = <fs_item>-lfpos."参考凭证的项目

        ELSE."采购入库
          IF <fs_item>-ebeln IS INITIAL OR <fs_item>-ebelp IS INITIAL.
            <fs_item>-msg = '采购入库时,采购订单和行项目必输!'.
          ENDIF.
          IF <fs_item>-lifnr IS INITIAL.
            <fs_item>-msg = '采购入库时,供应商必输!' && <fs_item>-msg.
          ENDIF.

          goodsmvt_item-mvt_ind   = 'B'."移动标识
          goodsmvt_code           = '01'.
          goodsmvt_item-po_number = <fs_item>-ebeln."采购凭证
          goodsmvt_item-po_item   = <fs_item>-ebelp."凭证行项目
          goodsmvt_item-vendor    = <fs_item>-lifnr."供应商

        ENDIF.
        goodsmvt_header-ref_doc_no = is_head-xblnr.

        IF <fs_item>-migo_insmkx EQ 'X'.
          goodsmvt_item-stck_type    = <fs_item>-migo_insmk."库存类型
        ELSE.
          goodsmvt_item-stck_type    = '2'."库存类型
        ENDIF.
*        goodsmvt_item-stck_type = '2'."库存类型


      WHEN '122'.
        IF <fs_item>-ebeln IS INITIAL OR <fs_item>-ebelp IS INITIAL .
          <fs_item>-msg = '采购入库时,采购订单和行项目必输!'.
        ENDIF.
        IF <fs_item>-lifnr IS INITIAL.
          <fs_item>-msg = '采购入库时,供应商必输!' && <fs_item>-msg.
        ENDIF.
        IF <fs_item>-lfbnr IS INITIAL OR <fs_item>-lfpos IS INITIAL.
          <fs_item>-msg = '参考凭证及其行项目必输!' && <fs_item>-msg.
        ENDIF.

        goodsmvt_header-ref_doc_no = is_head-xblnr."交货单
        goodsmvt_item-mvt_ind      = 'B'."移动标识
        goodsmvt_code              = '01'.
        goodsmvt_item-po_number    = <fs_item>-ebeln."采购凭证
        goodsmvt_item-po_item      = <fs_item>-ebelp."凭证行项目
        goodsmvt_item-vendor       = <fs_item>-lifnr."供应商
        goodsmvt_item-item_text    = <fs_item>-sgtxt."项目文本
        goodsmvt_item-ref_doc      = <fs_item>-lfbnr."参考凭证
        goodsmvt_item-ref_doc_it   = <fs_item>-lfpos."参考凭证的项目
        goodsmvt_item-stck_type    = ''."库存类型
        IF <fs_item>-migo_insmkx EQ 'X'.
          goodsmvt_item-stck_type    = <fs_item>-migo_insmk."库存类型
        ELSE.
          goodsmvt_item-stck_type    = ''."库存类型
        ENDIF.


      WHEN '201' OR '202' OR '551' OR '552'.

        IF is_head-bwart = '551' OR is_head-bwart = '552'.
          IF <fs_item>-grund IS INITIAL.
            <fs_item>-msg = '移动原因必输!' .
          ENDIF.
          goodsmvt_item-move_reas = <fs_item>-grund."移动原因
        ENDIF.
        IF is_head-bwart EQ '201' OR is_head-bwart EQ '202'.
          IF <fs_item>-kostl IS INITIAL.
            <fs_item>-msg = '成本中心必输!' && <fs_item>-msg.
          ENDIF.
        ENDIF.


        goodsmvt_code              = '03'.
        goodsmvt_item-mvt_ind      = ''."移动标识
        goodsmvt_item-item_text    = <fs_item>-sgtxt."项目文本
        goodsmvt_item-costcenter   = <fs_item>-kostl."成本中心


      WHEN '261' OR '262' OR 'Z61' OR 'Z62' OR '531' OR '532'.
        goodsmvt_code              = '03'.
        goodsmvt_item-mvt_ind      = ''."移动标识
        IF <fs_item>-rsnum IS INITIAL OR <fs_item>-rspos IS INITIAL.
          <fs_item>-msg = '261时,预留单和预留行项目必输!' && <fs_item>-msg.
        ENDIF.
        goodsmvt_item-reserv_no    = <fs_item>-rsnum."预留单号
        goodsmvt_item-res_item     = <fs_item>-rspos."项目编号
        goodsmvt_item-orderid      = <fs_item>-aufnr."订单号
        goodsmvt_item-item_text    = <fs_item>-sgtxt."项目文本
        goodsmvt_item-gr_rcpt      = <fs_item>-zxuha ."收货方
        IF <fs_item>-zlldj NE ''.
          IF <fs_item>-ztype <> 'T3'. "t3  反冲退料  T1计划内退料 T2 计划外退料 Z2 计划外领料
            goodsmvt_code = '03'.
            IF <fs_item>-ztype EQ 'T1'.
              goodsmvt_item-xstob     = 'X'. "使用冲销移动类型标识符
              goodsmvt_item-res_type = <fs_item>-rsart."记录类型
            ENDIF.
          ELSE.
            goodsmvt_code = '04'.
          ENDIF.
          goodsmvt_item-gr_rcpt     = <fs_item>-zxuha."序号
          goodsmvt_item-val_type    = <fs_item>-zpglx. "评估类
          goodsmvt_item-vendor      = <fs_item>-lifnr ." 供应商
          goodsmvt_item-suppl_vend = <fs_item>-lifnr ." 供应商
        ENDIF.


      WHEN '309'.
        goodsmvt_code              = '04'.
        goodsmvt_item-mvt_ind      = ''."移动标识
        goodsmvt_item-move_mat     = <fs_item>-ummat."接收/发出物料编码
        goodsmvt_item-move_plant   = <fs_item>-umwrk."收货工厂/发货工厂
        goodsmvt_item-move_stloc   = <fs_item>-umlgo."收货/发货库存地点
        goodsmvt_item-item_text    = <fs_item>-sgtxt."项目文本

      WHEN '311'."公司间转储
        goodsmvt_code              = '04'.
        goodsmvt_item-mvt_ind      = ''."移动标识
        goodsmvt_item-move_stloc   = <fs_item>-umlgo."收货/发货库存地点
        goodsmvt_item-reserv_no    = <fs_item>-rsnum."预留单号
        goodsmvt_item-res_item     = <fs_item>-rspos."项目编号

      WHEN '301'."工厂间转储
        goodsmvt_code              = '04'.
*        MOVE_MAT
        goodsmvt_item-move_plant   = <fs_item>-umwrk."收货工厂/发货工厂
        goodsmvt_item-mvt_ind      = ''."移动标识
        goodsmvt_item-move_stloc   = <fs_item>-umlgo."收货/发货库存地点
        goodsmvt_item-move_batch   = <fs_item>-umcha."收货/发货批量
*        goodsmvt_item-MATERIAL    = <fs_item>-MATNR."
        goodsmvt_item-batch     = <fs_item>-charg."批次
      WHEN '312'.
        IF <fs_item>-zlldj NE ''.
          IF <fs_item>-ztype <> 'T3'. "t3  反冲退料  T1计划内退料 T2 计划外退料 Z2 计划外领料
            goodsmvt_code = '03'.
          ELSE.
            goodsmvt_code = '04'.
          ENDIF.
          goodsmvt_item-gr_rcpt     = <fs_item>-zxuha."序号
          goodsmvt_item-val_type    = <fs_item>-zpglx. "评估类
          goodsmvt_item-vendor      = <fs_item>-lifnr ." 供应商
          goodsmvt_item-suppl_vend = <fs_item>-lifnr ." 供应商
        ENDIF.
        goodsmvt_item-move_stloc = <fs_item>-zxbcw. "线边仓
        goodsmvt_item-mvt_ind      = ''."移动标识
        goodsmvt_item-reserv_no    = <fs_item>-rsnum."预留单号
        goodsmvt_item-res_item     = <fs_item>-rspos."项目编号
        goodsmvt_item-orderid      = <fs_item>-aufnr."订单号
        goodsmvt_item-item_text    = <fs_item>-sgtxt."项目文本
        goodsmvt_item-gr_rcpt      = <fs_item>-zxuha ."收货方
*        goodsmvt_item-


      WHEN '501' OR '502'.
        goodsmvt_code              = '05'.
        goodsmvt_item-mvt_ind      = ''. "移动标识
        IF <fs_item>-migo_insmkx EQ 'X'.
          goodsmvt_item-stck_type    = <fs_item>-migo_insmk."库存类型
        ELSE.
          goodsmvt_item-stck_type    = '2'."库存类型
        ENDIF.
*        goodsmvt_item-stck_type    = '2'."库存类型
        goodsmvt_item-vendor       = <fs_item>-lifnr."供应商
        goodsmvt_item-customer     = <fs_item>-kunnr."客户
        goodsmvt_item-item_text    = <fs_item>-sgtxt."项目文本
        goodsmvt_item-reserv_no    = <fs_item>-rsnum."预留单号
        goodsmvt_item-res_item     = <fs_item>-rspos."项目编号
        IF <fs_item>-rsnum IS INITIAL OR <fs_item>-rspos IS INITIAL.
          <fs_item>-msg = '501时,预留单和预留行项目必输!' && <fs_item>-msg.
        ENDIF.

        READ TABLE lt_resb INTO DATA(ls_resb) WITH KEY rsnum = <fs_item>-rsnum
                                                       rspos = <fs_item>-rspos BINARY SEARCH.
        IF sy-subrc EQ 0.
          IF is_head-bwart EQ '501'.
            ls_resb-enmng = <fs_item>-erfmg + ls_resb-enmng.
            IF ls_resb-enmng > ls_resb-bdmng."提货数不能大于需求数
              <fs_item>-msg = |预留单{ <fs_item>-rsnum }行{ <fs_item>-rspos }做501时,提货数不能大于需求数!{ <fs_item>-msg }|.
            ENDIF.
          ENDIF.
          IF is_head-bwart EQ '502'.
            IF ls_resb-enmng < <fs_item>-erfmg."录入数量不能大于提货数
              <fs_item>-msg = |预留单{ <fs_item>-rsnum }行{ <fs_item>-rspos }做501时,录入数量不能大于提货数!{ <fs_item>-msg }|.
            ENDIF.
          ENDIF.
        ENDIF.

      WHEN 'Z11' OR 'Z12'.
        goodsmvt_code              = '05'.
        goodsmvt_item-mvt_ind      = ''. "移动标识
        goodsmvt_item-stck_type    = '2'."库存类型
        goodsmvt_item-vendor       = <fs_item>-lifnr."供应商
*----增强字段
        lt_extension-structure  = 'ZQMKPF_BADI'.
        wa_extension-ztldh = <fs_item>-ztldh.
        wa_extension-zhlbs = <fs_item>-zhlbs.
*        wa_extension-mblnr = <fs_item>-mblnr.
*        wa_extension-mjahr = is_head-budat+0(4).
        wa_extension-mandt = sy-mandt.
        wa_extension-bwart = is_head-bwart.
        lt_extension-valuepart1 = wa_extension.
        APPEND lt_extension.
*----
      WHEN '541' OR '542'.
        goodsmvt_code             = '01'.
        goodsmvt_item-po_number   = <fs_item>-ebeln."采购凭证
        goodsmvt_item-po_item     = <fs_item>-ebelp."凭证行项目
      WHEN '511' OR '512'.
        goodsmvt_code             = '05'.
        goodsmvt_item-item_text   = <fs_item>-sgtxt."项目文本
      WHEN OTHERS.
    ENDCASE.
*----通用参数
*    goodsmvt_item-MVT_IND   = <fs_item>-kzbew. "移动标识
    goodsmvt_item-plant     = <fs_item>-werks."工厂
    goodsmvt_item-material  = <fs_item>-matnr."物料
    goodsmvt_item-entry_qnt = <fs_item>-erfmg."录入数量
    goodsmvt_item-entry_uom = <fs_item>-erfme."单位
    goodsmvt_item-stge_loc  = <fs_item>-lgort."库存地点
    goodsmvt_item-move_type = <fs_item>-bwart."移动类型
    goodsmvt_item-batch     = <fs_item>-charg."批次


    IF <fs_item>-msg IS NOT INITIAL.
      <fs_item>-type = 'E'.
    ENDIF.

    APPEND goodsmvt_item.
    CLEAR:goodsmvt_item."goodsmvt_code
    IF lv_z004 EQ 'X'."委外采购订单收货
*      IF <fs_item>-migo_insmkx EQ 'X'.
*        goodsmvt_item-stck_type    = <fs_item>-migo_insmk."库存类型
*      ELSE.
*        goodsmvt_item-stck_type    = '2'."库存类型
*      ENDIF.

      "先从resb里面找到组件,再从mslb里面取出供应商的O库存和批次
      READ TABLE lt_resb_101 WITH KEY ebeln = <fs_item>-ebeln
                                      ebelp = <fs_item>-ebelp TRANSPORTING NO FIELDS BINARY SEARCH.
      IF sy-subrc EQ 0.
        LOOP AT lt_resb_101 INTO DATA(ls_resb_101) FROM sy-tabix.
          IF ls_resb_101-ebeln NE <fs_item>-ebeln OR ls_resb_101-ebelp NE <fs_item>-ebelp.
            EXIT.
          ENDIF.
          "采购入库
*            goodsmvt_item-mvt_ind   = 'B'."移动标识
*            goodsmvt_code           = '01'.
          goodsmvt_item-move_type  = '543'."
          goodsmvt_item-material   = ls_resb_101-matnr."组件
          goodsmvt_item-plant      = <fs_item>-werks."工厂
          goodsmvt_item-spec_stock = 'O'."供应商特殊库存
          goodsmvt_item-vendor     = ls_resb_101-lifnr."供应商
          goodsmvt_item-po_number  = <fs_item>-ebeln."采购凭证
          goodsmvt_item-po_item    = <fs_item>-ebelp."凭证行项目
          " 上一行的识别码
          goodsmvt_item-parent_id = l_parent_id.
          " 凭证行的唯一标识
          l_line_id = l_line_id + 1.
          goodsmvt_item-line_id = l_line_id.
          " 凭证中行层次结构级别
          ADD 1 TO l_line_depth.
          goodsmvt_item-line_depth = l_line_depth.

          IF lv_menge NE 0.
            lv_menge2 = ceil( <fs_item>-erfmg * ( ls_resb_101-bdmng / lv_menge ) )."组件录入数量
          ENDIF.
          goodsmvt_item-entry_uom = ls_resb_101-meins."单位
          CLEAR lv_menge3.
          READ TABLE lt_mslb WITH KEY matnr = ls_resb_101-matnr
                                      werks = ls_resb_101-werks
                                      lifnr = ls_resb_101-lifnr TRANSPORTING NO FIELDS BINARY SEARCH.
          IF sy-subrc EQ 0.
            LOOP AT lt_mslb INTO DATA(ls_mslb) FROM sy-tabix.
              IF ls_mslb-matnr NE ls_resb_101-matnr OR ls_mslb-werks NE ls_resb_101-werks OR ls_mslb-lifnr NE ls_resb_101-lifnr.
                EXIT.
              ENDIF.
              ADD ls_mslb-lblab TO lv_menge3.
              goodsmvt_item-batch      = ls_mslb-charg."批次
              IF lv_menge2 LE lv_menge3.
                goodsmvt_item-entry_qnt = lv_menge2."组件录入数量
                APPEND goodsmvt_item.
                EXIT.
              ELSE.
                goodsmvt_item-entry_qnt = ls_mslb-lblab."组件录入数量
                APPEND goodsmvt_item.
              ENDIF.
            ENDLOOP.
          ENDIF.
        ENDLOOP.
      ENDIF.
    ENDIF.
*    <ls_item>-aufnr = |{ <ls_item>-aufnr ALPHA = OUT }|."工单
    CLEAR goodsmvt_item.
  ENDLOOP.

*----抬头数据检查、填充

  IF is_head-bldat IS INITIAL.
    goodsmvt_header-doc_date   = sy-datum."凭证日期
  ELSE.
    goodsmvt_header-doc_date   = is_head-bldat."凭证日期
  ENDIF.
  IF is_head-bldat IS INITIAL.
    goodsmvt_header-pstng_date = sy-datum."过账日期
  ELSE.
    goodsmvt_header-pstng_date = is_head-budat."过账日期
    IF is_head-budat > sy-datum.
      ev_message = '过账日期不允许在未来'.
      ev_type    = 'E'.
      EXIT.
    ENDIF.
  ENDIF.
  goodsmvt_header-header_txt = is_head-bktxt."凭证抬头文本
  goodsmvt_header-ref_doc_no = is_head-xblnr."参考凭证编号

  READ TABLE it_item WITH KEY type = 'E' TRANSPORTING NO FIELDS.
  IF sy-subrc = 0.
    ev_message = '请求参数错误,请检查!'.
    ev_type    = 'E'.
    EXIT.
  ENDIF.

  CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
    EXPORTING
      goodsmvt_header  = goodsmvt_header
      goodsmvt_code    = goodsmvt_code
    IMPORTING
      goodsmvt_headret = goodsmvt_headret
      materialdocument = materialdocument
    TABLES
      goodsmvt_item    = goodsmvt_item[]
      return           = return[].
*  IF sy-uname EQ 'IT0003'.
*    BREAK-POINT.
*    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
*    EXIT.
*  ENDIF.
  LOOP AT return WHERE type CA 'AEX'.
*    CONCATENATE ev_message return-message  INTO ev_message.
  ENDLOOP.
  IF sy-subrc = 0.
    LOOP AT return ."WHERE type CA 'AEX'
      CONCATENATE ev_message return-message  INTO ev_message.
    ENDLOOP.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    ev_type    = 'E'.
  ELSE.

    is_head-mblnr = materialdocument.
    is_head-mjahr = is_head-budat+0(4).
    ev_mblnr = materialdocument.
    ev_mjahr = goodsmvt_headret-doc_year.
    ev_message = '过账成功'.
    ev_type    = 'S'.
    LOOP AT lt_zmmt004_tl ASSIGNING FIELD-SYMBOL(<fs_004>) WHERE mblnr IS INITIAL.
      IF  <fs_004>-ztcsl > 0.
        <fs_004>-mblnr = materialdocument.
        <fs_004>-mjahr = goodsmvt_headret-doc_year.
      ELSE.
        <fs_004>-loekz = 'X'.
      ENDIF.
      <fs_004>-zudat = sy-datum.
      <fs_004>-zunam = sy-uname.
    ENDLOOP.
    IF lt_zmmt004_tl[] IS NOT INITIAL.
      MODIFY zmmt004_tl FROM TABLE lt_zmmt004_tl.
    ENDIF.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait = 'X'.

    "查找SAP产生的批次号和检验批
    IF is_head-bwart EQ '101'.
      WHILE lv_wait EQ 0.
        SELECT mblnr,
               mjahr,
               zeile,
               charg
          INTO TABLE @DATA(lt_mseg)
          FROM mseg
         WHERE mblnr EQ @ev_mblnr
           AND mjahr EQ @ev_mjahr.
        SORT lt_mseg[] BY zeile.

        IF lt_mseg[] IS NOT INITIAL.
          ADD 1 TO lv_wait.
        ELSE.
          WAIT UP TO 1 SECONDS.
          ADD 1 TO lv_wait2.
          IF lv_wait2 EQ 4.
            ADD 1 TO lv_wait.
          ENDIF.
        ENDIF.
      ENDWHILE.

      SELECT prueflos,
             mjahr,
             mblnr,
             zeile
        INTO TABLE @DATA(lt_qals)
        FROM qals
       WHERE mblnr EQ @ev_mblnr
         AND mjahr EQ @ev_mjahr.
      LOOP AT it_item ASSIGNING FIELD-SYMBOL(<fs_itemb>).
        READ TABLE lt_mseg INTO DATA(ls_mseg) WITH KEY zeile = <fs_itemb>-zeile BINARY SEARCH.
        IF sy-subrc EQ 0.
          <fs_itemb>-charg = ls_mseg-charg."SAP产生的批次号
        ENDIF.
        READ TABLE lt_qals INTO DATA(ls_qals) WITH KEY zeile = <fs_itemb>-zeile BINARY SEARCH.
        IF sy-subrc EQ 0.
          <fs_itemb>-prueflos = ls_qals-prueflos."检验批
        ENDIF.
        IF <fs_itemb>-zsjdh NE ''.
          MOVE-CORRESPONDING <fs_itemb> TO ls_zqmt005.
          ls_zqmt005-mblnr = ev_mblnr.
          ls_zqmt005-mjahr = ev_mjahr.
          APPEND ls_zqmt005 TO lt_zqmt005[].
        ENDIF.
      ENDLOOP.
      IF lt_zqmt005[] IS NOT INITIAL.
        MODIFY zqmt005 FROM TABLE lt_zqmt005.
        IF sy-subrc EQ 0.
          COMMIT WORK AND WAIT.
        ELSE.
          ROLLBACK WORK.
        ENDIF.
      ENDIF.
      LOOP AT it_item ASSIGNING <ls_item>.
        <ls_item>-aufnr = |{ <ls_item>-aufnr ALPHA = OUT }|."工单
      ENDLOOP.
    ENDIF.


  ENDIF.



ENDFUNCTION.
View Code

 

posted @ 2022-07-05 15:07  蛀牙首领  阅读(120)  评论(0编辑  收藏  举报