=>Reference

  • 使用前提

    • 配置OMJJ:Reversal of Usage Decision and Stock Posting of Inspection Lot
  • 参考Note
    • UD冲销程序 ZQEVAC40 74638 - Results recording after usage decision
    • 移动冲销程序 ZRQEVAC50 175842 - Inspection lot: Reversal of goods movements from usage decision

1. 概览

  • 选择界面
  • 取消UD
  • 冲销移动

2. 程序

  • 主程序

     *----------------------------------------------------------------------** 参照类型定义*----------------------------------------------------------------------*TYPES:BEGIN OF typ_data,box    TYPE c,zjypc  TYPE qals-prueflos   , "检验批次budat  TYPE qals-budat,       "过账日期zart   TYPE qals-art        , "检验类型matnr  TYPE qals-matnr      , "物料maktx  TYPE makt-maktx      , "物料名称charg  TYPE qals-charg      , "批次werk   TYPE qals-werk       , "工厂endat  TYPE qals-enstehdat  , "批次创建日期lmeng  TYPE qals-losmenge   , "检验批数量menge  TYPE qals-mengeneinh , "基本计量单位pterm  TYPE qals-pastrterm  , "检验开始pzeit  TYPE qals-paendzeit  , "检验结束lgort  TYPE qals-lagortchrg , "库存地点lifnr  TYPE qals-lifnr      , "供应商ebeln  TYPE qals-ebeln      , "采购凭证mblnr  TYPE qals-mblnr      , "物料凭证aufnr  TYPE qals-aufnr      , "订单kunnr  TYPE qals-kunnr      , "客户kdauf  TYPE qals-kdauf      , "销售订单stat35 TYPE qals-stat35,END OF typ_data.TABLES:qals.*----------------------------------------------------------------------** 全局变量定义*----------------------------------------------------------------------*DATA: gv_grid TYPE REF TO cl_gui_alv_grid.*----------------------------------------------------------------------** 全局内表定义*----------------------------------------------------------------------*DATA:gt_data TYPE STANDARD TABLE OF typ_data.*----------------------------------------------------------------------** ALV定义*----------------------------------------------------------------------*DATA:gs_layout_lvc   TYPE lvc_s_layo,                             "显示布局参数gt_fieldcat_lvc TYPE lvc_t_fcat WITH HEADER LINE,            "显示字段表gs_fieldcat_lvc LIKE gt_fieldcat_lvc,                        "显示字段表结构gv_repid        LIKE sy-repid.                               "程序名*----------------------------------------------------------------------**SELECT-OPTIONS/选择屏幕*----------------------------------------------------------------------*SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE l_title1.SELECT-OPTIONS:s_zjyp  FOR qals-prueflos,                                "检验批s_zpcrq FOR qals-enstehdat,                               "批次创建日期s_zjyks FOR qals-pastrterm,                               "检验开始s_zjyjs FOR qals-paendterm,                               "检验结束s_werk  FOR qals-werk,                                    "工厂s_art   FOR qals-art,                                     "检验类型s_matnr FOR qals-matnr,                                   "物料s_charg FOR qals-charg,                                   "批次s_lifnr FOR qals-lifnr,                                   "供应商s_kunnr FOR qals-kunnr,                                   "客户s_mblnr FOR qals-mblnr,                                   "物料凭证s_kdauf FOR qals-kdauf.                                   "销售订单SELECTION-SCREEN END OF BLOCK b1.*----------------------------------------------------------------------**INITIALIZATION*----------------------------------------------------------------------*INITIALIZATION.l_title1 = '选择条件'.*----------------------------------------------------------------------**START-OF-SELECTION/主处理*----------------------------------------------------------------------*START-OF-SELECTION.*主处理PERFORM frm_main_proc.PERFORM frm_display_data.*&---------------------------------------------------------------------**& Form FRM_MAIN_PROC*&---------------------------------------------------------------------*FORM frm_main_proc .SELECT  qals~prueflos AS zjypcqals~art AS zartqals~matnrmakt~maktxqals~chargqals~werkqals~enstehdat AS endatqals~losmenge AS lmengqals~mengeneinh AS mengeqals~pastrterm AS ptermqals~paendzeit AS pzeitqals~lagortchrg AS lgortqals~lifnrqals~ebelnqals~mblnrqals~aufnrqals~kunnrqals~kdaufqals~stat35INTO CORRESPONDING FIELDS OF TABLE gt_dataFROM qalsINNER JOIN maktON qals~matnr = makt~matnrWHERE qals~prueflos  IN s_zjypAND qals~enstehdat IN s_zpcrqAND qals~pastrterm IN s_zjyksAND qals~paendterm IN s_zjyjsAND qals~werk      IN s_werkAND qals~art       IN s_artAND qals~matnr     IN s_matnrAND qals~charg     IN s_chargAND qals~lifnr     IN s_lifnrAND qals~kunnr     IN s_kunnrAND qals~mblnr     IN s_mblnrAND qals~kdauf     IN s_kdauf.ENDFORM.*&---------------------------------------------------------------------**& Form FRM_DISPLAY_DATA*&---------------------------------------------------------------------*FORM frm_display_data .CLEAR gt_fieldcat_lvc.REFRESH gt_fieldcat_lvc.PERFORM frm_fill_field USING:'ZJYPC' '检验批次','BUDAT' '冲销日期','ZART ' '检验类型','MATNR' '物料','MAKTX' '物料名称','CHARG' '批次','WERK ' '工厂','ENDAT' '批次创建日期','LMENG' '检验批数量','MENGE' '基本计量单位','PTERM' '检验开始','PZEIT' '检验结束','LGORT' '库存地点','LIFNR' '供应商','EBELN' '采购凭证','MBLNR' '物料凭证','AUFNR' '订单','KUNNR' '客户','KDAUF' '销售订单'.gs_layout_lvc-cwidth_opt = 'X'.                                       "宽度自动优化gs_layout_lvc-zebra      = 'X'.gs_layout_lvc-box_fname  = 'BOX'.                                     "定义选择行gv_repid = sy-repid.                                                  "当前程序名CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'EXPORTINGi_callback_program       = gv_repidi_callback_pf_status_set = 'PF_STATUS_SET'i_callback_user_command  = 'USER_COMMAND'is_layout_lvc            = gs_layout_lvcit_fieldcat_lvc          = gt_fieldcat_lvc[]i_save                   = 'A'TABLESt_outtab                 = gt_dataEXCEPTIONSprogram_error            = 1OTHERS                   = 2.ENDFORM.*&---------------------------------------------------------------------**& Form FRM_FILL_FIELD*&---------------------------------------------------------------------*FORM frm_fill_field  USING p1 p2.CLEAR gs_fieldcat_lvc.gs_fieldcat_lvc-fieldname     = p1.gs_fieldcat_lvc-scrtext_m     = p2.CASE p1.WHEN 'MATNR'.gs_fieldcat_lvc-no_zero = 'X'.WHEN 'BUDAT'.gs_fieldcat_lvc-edit      = 'X'.gs_fieldcat_lvc-ref_table = 'QALS'.gs_fieldcat_lvc-ref_field = 'BUDAT'.ENDCASE.APPEND gs_fieldcat_lvc TO gt_fieldcat_lvc.ENDFORM.*&---------------------------------------------------------------------**& Form FRM_SET_STATUS*&---------------------------------------------------------------------**& 界面按钮设置*&---------------------------------------------------------------------*FORM pf_status_set USING it_extab TYPE slis_t_extab.SET PF-STATUS 'STANDARD_FULLSCREEN'.ENDFORM.*&---------------------------------------------------------------------**& Form USER_COMMAND*&---------------------------------------------------------------------**& 用户按钮控制*&---------------------------------------------------------------------*FORM user_command USING iw_ucomm    TYPE sy-ucommis_selfield TYPE slis_selfield.IF gv_grid IS INITIAL.CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'IMPORTINGe_grid = gv_grid.ENDIF.CALL METHOD gv_grid->check_changed_data.CASE iw_ucomm.WHEN 'ZUNDO_UD'.PERFORM frm_cancel_ud.WHEN 'ZUNDO_MIGO'.PERFORM frm_cancel_mvtpost.ENDCASE.is_selfield-refresh    = 'X'.is_selfield-col_stable = 'X'.is_selfield-row_stable = 'X'.ENDFORM.*&---------------------------------------------------------------------**& Form frm_cancel_UD*&---------------------------------------------------------------------**& 取消UD*&---------------------------------------------------------------------*FORM frm_cancel_ud .DATA: ls_data TYPE typ_data.READ TABLE gt_data TRANSPORTING NO FIELDS WITH KEY box = 'X'.IF sy-subrc <> 0.MESSAGE '未选择数据!' TYPE 'S' DISPLAY LIKE 'E'.ENDIF.LOOP AT gt_data INTO ls_data WHERE box = 'X'.IF ls_data-stat35 = 'X'.SUBMIT zqevac40 WITH prueflos = ls_data-zjypcAND RETURN.ENDIF.ENDLOOP.ENDFORM.*&---------------------------------------------------------------------**& Form frm_cancel_mvtpost*&---------------------------------------------------------------------**& 移动冲销*&---------------------------------------------------------------------*FORM frm_cancel_mvtpost .DATA: ls_data TYPE typ_data.READ TABLE gt_data TRANSPORTING NO FIELDS WITH KEY box = 'X'.IF sy-subrc <> 0.MESSAGE '未选择数据!' TYPE 'S' DISPLAY LIKE 'E'.ENDIF.LOOP AT gt_data INTO ls_data WHERE box = 'X'.SUBMIT zrqevac50 WITH prueflos = ls_data-zjypcWITH p_budat  = ls_data-budatAND RETURN.ENDLOOP.ENDFORM.
    
  • 主程序-GUI STATUS

  • 附加程序:ZQEVAC40

    *&---------------------------------------------------------------------*
    *& Title: Taking back usage decision for single lots                   *
    *&---------------------------------------------------------------------*
    report zqevac40.
    *----------------------------------------------------------------------*
    *  Datendefinitionen
    *----------------------------------------------------------------------*
    * Tabellen
    *----------------------------------------------------------------------*
    tables sscrfields.
    tables qals.
    tables qave.
    *----------------------------------------------------------------------*
    * Konstanten
    constants:c_rc_0        like sy-subrc           value 0,c_rc_4        like sy-subrc           value 4,c_rc_20       like sy-subrc           value 20,
    *c_kreuz       like qm00-qkz           value 'X'.
    *
    *----------------------------------------------------------------------*
    * Eingabebildschirm
    selection-screen skip 2.
    parameters prueflos  like qals-prueflos matchcode object qalsmemory id qls .
    selection-screen skip 1.
    selection-screen begin of block search with frame.
    selection-screen begin of line.
    selection-screen pushbutton 3(20) text-s01 user-command sear.
    selection-screen pushbutton 40(20) text-s02 user-command show.
    selection-screen end of line.
    selection-screen end of block search.
    *----------------------------------------------------------------------*
    at selection-screen.if sscrfields-ucomm eq 'SEAR'or prueflos is initial.call function 'QELA_START_SELECTION_OF_LOTS'exportingi_selid          = ' 'i_stat_aenderung = 'X'i_stat_ero       = 'X'i_stat_frei      = 'X'i_stat_ve        = ' 'importinge_prueflos       = prueflosexceptionsno_entry         = 1no_selected      = 2others           = 3.endif.if sscrfields-ucomm eq 'SHOW'.call function 'QSS1_LOT_SHOW'exportingi_prueflos = prueflos.endif.check sscrfields-ucomm eq 'ONLI'.
    * ab hier muß Prüflosnummer gefüllt sein.if prueflos is initial.message e164(qa).endif.
    * Lesen Loscall function 'ENQUEUE_EQQALS1'exportingprueflos = prueflos.call function 'QPSE_LOT_READ'exportingi_prueflos = prueflosimportinge_qals     = qalsexceptionsno_lot     = 1.if not sy-subrc is initial.message e102(qa).endif.
    *-----------------
    * Prüfen Statuscall function 'QAST_STATUS_CHECK'exportingi_objnr          = qals-objnri_status         = 'I0218' "Status VE getroffenexceptionsstatus_not_activ = 1.if not sy-subrc is initial.message e102(qv) with qals-prueflos.endif.
    *call function 'QEVA_UD_READ'exportingi_prueflos = qals-prueflosimportinge_qave     = qave.
    *---------------------------------------------------------------------*
    start-of-selection.
    * Vorgaben sind ok.   1. Material Umlagern und Los ändernperform qals_aendern.
    ************************************************************************
    *----------------------------------------------------------------------*
    *       FORM QALS_aendern
    *----------------------------------------------------------------------*
    form qals_aendern.
    *perform status_fix_setzen using 'I0002' c_kreuz.perform status_fix_setzen using 'I0216' space.perform status_fix_setzen using 'I0217' space.perform status_fix_setzen using 'I0218' space.clear: qals-stat14.clear: qals-stat35.clear: qave-vauswahlmg,qave-vwerks,qave-versionam,qave-vcodegrp,qave-vcode,qave-vbewertung,qave-versioncd,qave-vfolgeakti,qave-qkennzahl.
    *--... verbuchencall function 'QEVA_UD_UPDATE' in update taskexportingqals_new = qalsqave_new = qave.commit work.message s101(qa) with qals-prueflos.
    endform.
    *----------------------------------------------------------------------*
    *       Form  STATUS_FIX_SETZEN
    *----------------------------------------------------------------------*
    *   Setzen eines Status aufgrund von Voreinstellungen wie QMAT etc.    *
    *----------------------------------------------------------------------*
    *  -->  STATUS    Status der gesetzt werden soll
    *  -->  AKTIV     Status wird aktiviert sonst deaktiviert
    *----------------------------------------------------------------------*
    form status_fix_setzen usingvalue(status) like tj02-istatvalue(aktiv) like c_kreuz.
    * lokale Tabelle fuer Statusfortschreibungdata: begin of l_stattab occurs 0.include structure jstat.data  end of l_stattab.
    *
    * Falls Objektnr. nicht gefüllt. --> Fehlermeldung !!!if qals-objnr eq space.message e013(qv).
    *   Fehlende Objektnr.: Problem füendif.move status to l_stattab-stat.if aktiv eq space.move c_kreuz to l_stattab-inact.endif.
    *append l_stattab.
    *call function 'STATUS_CHANGE_INTERN'exportingcheck_only          = spaceobjnr               = qals-objnrtablesstatus              =  l_stattab.
    endform.                               " STATUS_FIX_SETZEN
    
  • 附加程序:ZRQEVAC50

    *&---------------------------------------------------------------------*
    *& Report ZRQEVAC50
    *&---------------------------------------------------------------------*
    *&
    *&---------------------------------------------------------------------*
    REPORT ZRQEVAC50 MESSAGE-ID QA.
    "***********************************************************************
    "* Report is provided by Modification Note 175842                      *
    "*                                                                     *
    "*  CAUTION: Please be aware that this is a Modification!              *
    "*  Please refer to note 170183.                                       *
    "***********************************************************************
    TYPES:T_MKPF_TAB LIKE MKPF  OCCURS 0,T_MSEG_TAB LIKE MSEG  OCCURS 0.
    PARAMETERS:PRUEFLOS LIKE QALS-PRUEFLOS OBLIGATORY MEMORY ID QLS.
    *********************ADD BY JIEABAP1*******[S]**************************
    PARAMETERS:P_BUDAT    LIKE QALS-BUDAT.
    *********************ADD BY JIEABAP1*******[E]**************************
    DATA:G_MSGV1       LIKE SY-MSGV1,G_QALS        LIKE QALS,G_QALS_LEISTE LIKE QALS,G_QAMB_TAB    TYPE QAMBTAB,G_QAMB_VB_TAB TYPE QAMBTAB,G_MKPF_TAB    TYPE T_MKPF_TAB,G_MSEG_TAB    TYPE T_MSEG_TAB,G_SUBRC       LIKE SY-SUBRC.START-OF-SELECTION.PERFORM ENQUEUE_QALS USING PRUEFLOSG_SUBRC.IF NOT G_SUBRC IS INITIAL.MESSAGE ID SY-MSGID TYPE 'S' NUMBER SY-MSGNOWITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.SUBMIT (SY-REPID) VIA SELECTION-SCREEN.ENDIF.PERFORM READ_QALS USING PRUEFLOSG_QALSG_QALS_LEISTEG_SUBRC.IF NOT G_SUBRC IS INITIAL.MESSAGE ID 'QA' TYPE 'S' NUMBER '102'WITH PRUEFLOS.SUBMIT (SY-REPID) VIA SELECTION-SCREEN.ENDIF.PERFORM CHECK_LOT USING G_QALSG_SUBRC.IF NOT G_SUBRC IS INITIAL.CASE G_SUBRC.WHEN 256.G_MSGV1 = 'Lot & does not refer to a material doc'.WHEN 128.G_MSGV1 = 'Material & is serialized'.REPLACE '&' WITH G_QALS-MATNR INTO G_MSGV1.WHEN  64.G_MSGV1 = 'Lot & is not stock relevant'.WHEN  32.G_MSGV1 = 'Lot &: No stock transferred'.WHEN  16.G_MSGV1 = 'Lot & is cancelled'.WHEN   8.G_MSGV1 = 'Lot & is archived'.WHEN   4.G_MSGV1 = 'Lot & is blocked'.WHEN   2.G_MSGV1 = 'Lot & is HU managed'.ENDCASE.REPLACE '&' WITH PRUEFLOS INTO G_MSGV1.MESSAGE ID '00' TYPE 'S' NUMBER '208'WITH G_MSGV1.SUBMIT (SY-REPID) VIA SELECTION-SCREEN.ENDIF.PERFORM READ_QAMB USING G_QALSG_QAMB_TABG_SUBRC.IF NOT G_SUBRC IS INITIAL.MESSAGE ID 'QA' TYPE 'S' NUMBER '068'WITH PRUEFLOS.SUBMIT (SY-REPID) VIA SELECTION-SCREEN.ENDIF.PERFORM READ_MKPF USING G_QAMB_TABG_MKPF_TABG_SUBRC.IF NOT G_SUBRC IS INITIAL.MESSAGE ID SY-MSGID TYPE 'S' NUMBER SY-MSGNOWITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.SUBMIT (SY-REPID) VIA SELECTION-SCREEN.ENDIF.PERFORM CHECK_MKPF USING G_MKPF_TABG_SUBRC.IF NOT G_SUBRC IS INITIAL.MESSAGE ID 'QA' TYPE 'S' NUMBER '068'WITH PRUEFLOS.SUBMIT (SY-REPID) VIA SELECTION-SCREEN.ENDIF.PERFORM READ_MSEG USING G_MKPF_TABG_MSEG_TABG_SUBRC.IF NOT G_SUBRC IS INITIAL.MESSAGE ID SY-MSGID TYPE 'S' NUMBER SY-MSGNOWITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.SUBMIT (SY-REPID) VIA SELECTION-SCREEN.ENDIF.PERFORM CHECK_MSEG USING G_MSEG_TABG_QAMB_TABG_SUBRC.IF NOT G_SUBRC IS INITIAL.MESSAGE ID 'QA' TYPE 'S' NUMBER '068'WITH PRUEFLOS.SUBMIT (SY-REPID) VIA SELECTION-SCREEN.ENDIF.PERFORM CREATE_GOODS_MOVEMENT USING G_QALSG_MSEG_TABG_SUBRC.IF NOT G_SUBRC IS INITIAL.MESSAGE ID 'QA' TYPE 'S' NUMBER '068'WITH PRUEFLOS.SUBMIT (SY-REPID) VIA SELECTION-SCREEN.ENDIF.PERFORM POST_GOODS_MOVEMENT.PERFORM POST_DATA USING G_QALSG_QALS_LEISTEG_QAMB_TABG_QAMB_VB_TABG_SUBRC.IF NOT G_SUBRC IS INITIAL.MESSAGE ID SY-MSGID TYPE 'S' NUMBER SY-MSGNOWITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.SUBMIT (SY-REPID) VIA SELECTION-SCREEN.ELSE.COMMIT WORK AND WAIT.G_MSGV1 = 'inspection lot &'.REPLACE '&' WITH PRUEFLOS INTO G_MSGV1.MESSAGE ID '00' TYPE 'S' NUMBER '368'WITH 'Stock posting reversed for ' G_MSGV1.SELECT * FROM ZTWMS_T004WHERE PRUEFLOS = @PRUEFLOSINTO TABLE @DATA(LT_PRUEFLOS).LOOP AT LT_PRUEFLOS INTO DATA(WA_PRUEFLOS).CLEAR WA_PRUEFLOS-LMENGE01.                   "JIEMM 2022.02.25 清空非限制WA_PRUEFLOS-ZSTATUS = '3'.                     "检验批被冲销 回到待检状态WA_PRUEFLOS-ZFLAG   = 'X'.MODIFY LT_PRUEFLOS FROM WA_PRUEFLOS.ENDLOOP.MODIFY ZTWMS_T004 FROM TABLE LT_PRUEFLOS.*    SUBMIT (SY-REPID) VIA SELECTION-SCREEN.ENDIF.
    *----------------------------------------------------------------------*
    *       Form  ENQUEUE_QALS                                             *
    *----------------------------------------------------------------------*
    *       Los sperren                                                    *
    *----------------------------------------------------------------------*
    FORM ENQUEUE_QALS USING P_PRUEFLOS LIKE QALS-PRUEFLOSP_SUBRC    LIKE SY-SUBRC.CLEAR: P_SUBRC.CALL FUNCTION 'ENQUEUE_EQQALS1'EXPORTINGPRUEFLOS       = P_PRUEFLOSEXCEPTIONSFOREIGN_LOCK   = 1SYSTEM_FAILURE = 2OTHERS         = 3.P_SUBRC = SY-SUBRC.
    ENDFORM.                               " ENQUEUE_QALS
    *----------------------------------------------------------------------*
    *       Form  READ_QALS                                                *
    *----------------------------------------------------------------------*
    *       Prüflos lesen                                                  *
    *----------------------------------------------------------------------*
    FORM READ_QALS USING P_PRUEFLOS    LIKE QALS-PRUEFLOSP_QALS        LIKE QALSP_QALS_LEISTE LIKE QALSP_SUBRC       LIKE SY-SUBRC.CLEAR: P_SUBRC.CALL FUNCTION 'QPSE_LOT_READ'EXPORTINGI_PRUEFLOS  = P_PRUEFLOSI_RESET_LOT = 'X'IMPORTINGE_QALS      = P_QALSEXCEPTIONSNO_LOT      = 1.P_SUBRC = SY-SUBRC.IF P_SUBRC IS INITIAL.P_QALS_LEISTE = P_QALS.ELSE.CLEAR: P_QALS,P_QALS_LEISTE.ENDIF.
    ENDFORM.                               " READ_QALS
    *----------------------------------------------------------------------*
    *       Form  CHECK_LOT                                                *
    *----------------------------------------------------------------------*
    *       Prüflos prüfen                                                 *
    *----------------------------------------------------------------------*
    FORM CHECK_LOT USING P_QALS  LIKE QALSP_SUBRC LIKE SY-SUBRC.DATA:L_STAT     LIKE JSTAT,L_STAT_TAB LIKE JSTAT OCCURS 0 WITH HEADER LINE.P_SUBRC = 256.
    */No reference to material documentIF P_QALS-ZEILE IS INITIAL.EXIT.ELSE.P_SUBRC = 128.ENDIF.
    */Serialized MaterialIF NOT P_QALS-SERNP IS INITIAL.EXIT.ELSE.P_SUBRC = 64.ENDIF.
    */BERFCALL FUNCTION 'STATUS_CHECK'EXPORTINGOBJNR             = P_QALS-OBJNRSTATUS            = 'I0203'EXCEPTIONSSTATUS_NOT_ACTIVE = 2.IF NOT SY-SUBRC IS INITIAL.EXIT.ELSE.P_SUBRC = 32.ENDIF.
    */BTEI & BENDCLEAR L_STAT. CLEAR L_STAT_TAB. REFRESH L_STAT_TAB.L_STAT-STAT = 'I0219'. APPEND L_STAT TO L_STAT_TAB. "BTEIL_STAT-STAT = 'I0220'. APPEND L_STAT TO L_STAT_TAB. "BENDCALL FUNCTION 'STATUS_OBJECT_CHECK_MULTI'EXPORTINGOBJNR        = P_QALS-OBJNRTABLESSTATUS_CHECK = L_STAT_TAB.IF L_STAT_TAB[] IS INITIAL.EXIT.ELSE.P_SUBRC = 16.ENDIF.
    */LSTO & LSTVCLEAR L_STAT. CLEAR L_STAT_TAB. REFRESH L_STAT_TAB.L_STAT-STAT = 'I0224'. APPEND L_STAT TO L_STAT_TAB. "LSTOL_STAT-STAT = 'I0232'. APPEND L_STAT TO L_STAT_TAB. "LSTVCALL FUNCTION 'STATUS_OBJECT_CHECK_MULTI'EXPORTINGOBJNR        = P_QALS-OBJNRTABLESSTATUS_CHECK = L_STAT_TAB.IF NOT L_STAT_TAB[] IS INITIAL.EXIT.ELSE.P_SUBRC = 8.ENDIF.
    */ARSP & ARCH & REO1 & REO2 & REO3CLEAR L_STAT. CLEAR L_STAT_TAB. REFRESH L_STAT_TAB.L_STAT-STAT = 'I0225'. APPEND L_STAT TO L_STAT_TAB. "ARSPL_STAT-STAT = 'I0226'. APPEND L_STAT TO L_STAT_TAB. "ARCHL_STAT-STAT = 'I0227'. APPEND L_STAT TO L_STAT_TAB. "REO3L_STAT-STAT = 'I0228'. APPEND L_STAT TO L_STAT_TAB. "REO2L_STAT-STAT = 'I0229'. APPEND L_STAT TO L_STAT_TAB. "REO1CALL FUNCTION 'STATUS_OBJECT_CHECK_MULTI'EXPORTINGOBJNR        = P_QALS-OBJNRTABLESSTATUS_CHECK = L_STAT_TAB.IF NOT L_STAT_TAB[] IS INITIAL.EXIT.ELSE.P_SUBRC = 4.ENDIF.
    */SPERCALL FUNCTION 'STATUS_CHECK'EXPORTINGOBJNR             = P_QALS-OBJNRSTATUS            = 'I0043'EXCEPTIONSSTATUS_NOT_ACTIVE = 2.IF SY-SUBRC IS INITIAL.EXIT.ELSE.P_SUBRC = 2.ENDIF.
    */HUMCALL FUNCTION 'STATUS_CHECK'EXPORTINGOBJNR             = P_QALS-OBJNRSTATUS            = 'I0443'EXCEPTIONSSTATUS_NOT_ACTIVE = 2.IF SY-SUBRC IS INITIAL.EXIT.ELSE.P_SUBRC = 0.ENDIF.
    ENDFORM.                               " CHECK_LOT
    *----------------------------------------------------------------------*
    *       Form  READ_QAMB                                                *
    *----------------------------------------------------------------------*
    *       QAMBs lesen                                                    *
    *----------------------------------------------------------------------*
    FORM READ_QAMB USING P_QALS     LIKE QALSP_QAMB_TAB TYPE QAMBTABP_SUBRC    LIKE SY-SUBRC.CLEAR: P_SUBRC.SELECT * FROM QAMB INTO TABLE P_QAMB_TABWHERE PRUEFLOS =  P_QALS-PRUEFLOSAND TYP   = '3'.P_SUBRC = SY-SUBRC.
    ENDFORM.                               " READ_QAMB
    *----------------------------------------------------------------------*
    *       Form  READ_MKPF                                                *
    *----------------------------------------------------------------------*
    *       Read material document header                                  *
    *----------------------------------------------------------------------*
    FORM READ_MKPF USING P_QAMB_TAB TYPE QAMBTABP_MKPF_TAB TYPE T_MKPF_TABP_SUBRC    LIKE SY-SUBRC.DATA:BEGIN OF L_MKPF_KEY_TAB OCCURS 0,MBLNR LIKE MKPF-MBLNR,MJAHR LIKE MKPF-MJAHR,END   OF L_MKPF_KEY_TAB.DATA:L_QAMB  LIKE QAMB,L_MKPF  LIKE MKPF,L_TRTYP LIKE T158-TRTYP VALUE 'A',L_VGART LIKE T158-VGART VALUE 'WQ',L_XEXIT LIKE QM00-QKZ.P_SUBRC = 4.LOOP AT P_QAMB_TAB INTO L_QAMB.L_MKPF_KEY_TAB-MBLNR = L_QAMB-MBLNR.L_MKPF_KEY_TAB-MJAHR = L_QAMB-MJAHR.COLLECT L_MKPF_KEY_TAB.ENDLOOP.LOOP AT L_MKPF_KEY_TAB.CALL FUNCTION 'ENQUEUE_EMMKPF'EXPORTINGMBLNR          = L_MKPF_KEY_TAB-MBLNRMJAHR          = L_MKPF_KEY_TAB-MJAHREXCEPTIONSFOREIGN_LOCK   = 1SYSTEM_FAILURE = 2OTHERS         = 3.IF NOT SY-SUBRC IS INITIAL.L_XEXIT = 'X'.EXIT.ENDIF.CLEAR: L_MKPF.CALL FUNCTION 'MB_READ_MATERIAL_HEADER'EXPORTINGMBLNR         = L_MKPF_KEY_TAB-MBLNRMJAHR         = L_MKPF_KEY_TAB-MJAHRTRTYP         = L_TRTYPVGART         = L_VGARTIMPORTINGKOPF          = L_MKPFEXCEPTIONSERROR_MESSAGE = 1.IF NOT SY-SUBRC IS INITIAL.L_XEXIT = 'X'.EXIT.ELSE.APPEND L_MKPF TO P_MKPF_TAB.ENDIF.ENDLOOP.IF NOT L_XEXIT IS INITIAL.EXIT.ELSE.P_SUBRC = 0.ENDIF.
    ENDFORM.                               " READ_MKPF
    *----------------------------------------------------------------------*
    *       Form  READ_MSEG                                                *
    *----------------------------------------------------------------------*
    *       MSEGs lesen                                                    *
    *----------------------------------------------------------------------*
    FORM READ_MSEG USING P_MKPF_TAB TYPE T_MKPF_TABP_MSEG_TAB TYPE T_MSEG_TABP_SUBRC    LIKE SY-SUBRC.DATA:L_MKPF     LIKE MKPF,L_MSEG_TAB LIKE MSEG OCCURS 0 WITH HEADER LINE,L_TRTYP    LIKE T158-TRTYP VALUE 'A',L_XEXIT    LIKE QM00-QKZ.P_SUBRC = 4.LOOP AT P_MKPF_TAB INTO L_MKPF.CLEAR: L_MSEG_TAB. REFRESH: L_MSEG_TAB.CALL FUNCTION 'MB_READ_MATERIAL_POSITION'EXPORTINGMBLNR         = L_MKPF-MBLNRMJAHR         = L_MKPF-MJAHRTRTYP         = L_TRTYP
    */            ZEILB  = P_ZEILE
    */            ZEILE  = P_ZEILETABLESSEQTAB        = L_MSEG_TABEXCEPTIONSERROR_MESSAGE = 1.IF NOT SY-SUBRC IS INITIAL.L_XEXIT = 'X'.EXIT.ELSE.APPEND LINES OF L_MSEG_TAB TO P_MSEG_TAB.ENDIF.ENDLOOP.IF NOT L_XEXIT IS INITIAL.EXIT.ELSE.
    */  XAuto-Zeilen und Chargenzustandsänderung werden gelöschtDELETE P_MSEG_TAB WHERE XAUTO NE SPACEOR BWART EQ '341'OR BWART EQ '342'.P_SUBRC = 0.ENDIF.
    ENDFORM.                               " READ_MSEG
    *----------------------------------------------------------------------*
    *       Form  CREATE_GOODS_MOVEMENT                                    *
    *----------------------------------------------------------------------*
    *       Warenbewegung anlegen                                          *
    *----------------------------------------------------------------------*
    FORM CREATE_GOODS_MOVEMENT USING P_QALS     LIKE QALSP_MSEG_TAB TYPE T_MSEG_TABP_SUBRC    LIKE SY-SUBRC.DATA:L_LMENGEZUB      LIKE QALS-LMENGEZUB,L_LMENGEGEB      LIKE QALS-LMENGEZUB,L_MBQSS          LIKE MBQSS,L_IMKPF          LIKE IMKPF,L_IMSEG          LIKE IMSEG,L_IMSEG_TAB      LIKE IMSEG OCCURS 1,L_EMKPF          LIKE EMKPF,L_EMSEG          LIKE EMSEG,L_EMSEG_TAB      LIKE EMSEG OCCURS 1,L_MSEG           LIKE MSEG,L_MSEG_TAB       LIKE MSEG  OCCURS 1,L_TCODE          LIKE SY-TCODE VALUE 'QA11',L_TABIX          LIKE SY-TABIX VALUE 1,L_XSTBW          LIKE T156-XSTBW,L_VMENGE03_BWART LIKE MSEG-BWART.CLEAR: P_SUBRC.
    */QAMB initialisierenCALL FUNCTION 'QAMB_REFRESH_DATA'.
    */Kopf füllenL_IMKPF-BLDAT = SY-DATLO.*********************ADD BY JIEABAP1*******[S]**************************IF P_BUDAT IS INITIAL.L_IMKPF-BUDAT = SY-DATLO.     "默认本地日期ELSE.L_IMKPF-BUDAT = P_BUDAT.      "按用户需求改为自定义日期ENDIF.
    *********************ADD BY JIEABAP1*******[S]**************************L_IMKPF-BKTXT = 'Cancellation of QM UD postings'.
    */Ursprüngliche zu buchende Menge merken + inkrementierenL_LMENGEZUB = P_QALS-LMENGEZUB.L_LMENGEGEB =   P_QALS-LMENGE01+ P_QALS-LMENGE02+ P_QALS-LMENGE03+ P_QALS-LMENGE04+ P_QALS-LMENGE05+ P_QALS-LMENGE06+ P_QALS-LMENGE07+ P_QALS-LMENGE08+ P_QALS-LMENGE09.IF P_QALS-STAT11 IS NOT INITIAL AND P_QALS-LMENGE03 IS NOT INITIAL.DATA LS_TQ07M LIKE TQ07M.DATA: S_TQ07M_BUF LIKE TQ07M OCCURS 9.SELECT * FROM TQ07M INTO TABLE S_TQ07M_BUFWHERE FELDNAME LIKE 'VMENGE%' .SORT S_TQ07M_BUF BY FELDNAME ASCENDINGHERKUNFT ASCENDING.READ TABLE S_TQ07M_BUF INTO LS_TQ07MWITH KEY FELDNAME = 'VMENGE03'HERKUNFT = ' ' BINARY SEARCH.
    *   Binäre Suche mit Feld und HerkunftIF SY-SUBRC IS INITIAL.MOVE LS_TQ07M-BWARTWESP TO L_VMENGE03_BWART.ENDIF.ENDIF.
    */Zeilen aufbauenL_MSEG_TAB[] = P_MSEG_TAB[].LOOP AT L_MSEG_TAB INTO L_MSEG.MOVE-CORRESPONDING L_MSEG  TO L_MBQSS.MOVE-CORRESPONDING L_MBQSS TO L_IMSEG.
    */  Referenzbeleg übergeben, falls Bestellnummer gefülltIF NOT L_MSEG-EBELN IS INITIAL.MOVE: L_MSEG-LFBNR TO L_IMSEG-LFBNR,L_MSEG-LFBJA TO L_IMSEG-LFBJA,L_MSEG-LFPOS TO L_IMSEG-LFPOS.ENDIF.MOVE L_MSEG-KDAUF          TO L_IMSEG-KDAUF.MOVE L_MSEG-KDPOS          TO L_IMSEG-KDPOS.MOVE L_MSEG-PS_PSP_PNR     TO L_IMSEG-PS_PSP_PNR.
    */  Umlagerungsfelder setzenMOVE:L_MSEG-UMMAT  TO L_IMSEG-UMMAT,L_MSEG-UMWRK  TO L_IMSEG-UMWRK,L_MSEG-UMLGO  TO L_IMSEG-UMLGO,L_MSEG-UMCHA  TO L_IMSEG-UMCHA.
    */  Storno-Beleg setzenMOVE: L_MSEG-MJAHR  TO L_IMSEG-SJAHR,L_MSEG-MBLNR  TO L_IMSEG-SMBLN,L_MSEG-ZEILE  TO L_IMSEG-SMBLP.
    */  Falsch gefüllte Felder initialisierenCLEAR: L_IMSEG-MBLNR,L_IMSEG-MENGE,L_IMSEG-MEINS.
    */  Bewegungsart lesenSELECT SINGLE XSTBW FROM T156 INTO L_XSTBWWHERE BWART = L_IMSEG-BWART.IF NOT SY-SUBRC IS INITIAL.P_SUBRC = 4.EXIT.ENDIF.
    */  Werk/Lagerort füllenIF P_QALS-STAT11 IS INITIAL.IF L_XSTBW IS INITIAL.MOVE P_QALS-LAGORTVORG TO L_IMSEG-LGORT.ELSE.MOVE P_QALS-LAGORTVORG TO L_IMSEG-UMLGO.ENDIF.ENDIF.IF L_XSTBW IS INITIAL.MOVE P_QALS-WERKVORG TO L_IMSEG-WERKS.ELSE.MOVE P_QALS-WERKVORG TO L_IMSEG-UMWRK.ENDIF.
    */  Zusätzliche FelderMOVE P_QALS-MENGENEINH TO L_IMSEG-ERFME."MOVE P_GRUND           TO L_IMSEG-GRUND."MOVE P_ELIKZ           TO L_IMSEG-ELIKZ.
    */  Kennzeichen Storno-Buchung setzenMOVE 'X'               TO L_IMSEG-XSTOB.MOVE P_QALS-PRUEFLOS   TO L_IMSEG-QPLOS.APPEND L_IMSEG TO L_IMSEG_TAB.IF P_QALS-STAT11 IS INITIAL.ADD      L_IMSEG-ERFMG TO   L_LMENGEZUB.SUBTRACT L_IMSEG-ERFMG FROM L_LMENGEGEB.ELSE.IF  (  L_IMSEG-KZBEW EQ SPACEAND L_IMSEG-WERKS NE SPACEAND L_IMSEG-LGORT NE SPACEAND L_IMSEG-UMWRK NE SPACEAND L_IMSEG-UMLGO NE SPACEAND L_IMSEG-WERKS EQ L_IMSEG-UMWRKAND L_IMSEG-UMLGO EQ L_IMSEG-UMLGO )OR(  L_IMSEG-KZBEW EQ SPACEAND L_IMSEG-BWART EQ L_VMENGE03_BWARTAND L_IMSEG-WERKS NE SPACEAND L_IMSEG-LGORT NE SPACEAND L_IMSEG-UMLGO NE SPACEAND L_IMSEG-UMLGO EQ L_IMSEG-UMLGO ).
    */      Dummy Buchung bei WE-Sperrbestand & StichprobeELSE.ADD      L_IMSEG-ERFMG TO   L_LMENGEZUB.SUBTRACT L_IMSEG-ERFMG FROM L_LMENGEGEB.ENDIF.ENDIF.ENDLOOP.IF NOT P_QALS-STAT11 IS INITIAL.
    */  Bei WE-Sperrbestand und Stichprobenbuchung Zeilen tauschenDO.READ TABLE L_IMSEG_TAB INDEX SY-INDEX INTO L_IMSEG.IF ( SY-SUBRC      IS INITIAL ANDL_IMSEG-KZBEW EQ SPACEAND L_IMSEG-WERKS NE SPACEAND L_IMSEG-LGORT NE SPACEAND L_IMSEG-UMWRK NE SPACEAND L_IMSEG-UMLGO NE SPACEAND L_IMSEG-WERKS EQ L_IMSEG-UMWRKAND L_IMSEG-UMLGO EQ L_IMSEG-UMLGO )OR( SY-SUBRC      IS INITIAL ANDL_IMSEG-KZBEW EQ SPACEAND L_IMSEG-BWART EQ L_VMENGE03_BWARTAND L_IMSEG-WERKS NE SPACEAND L_IMSEG-LGORT NE SPACEAND L_IMSEG-UMLGO NE SPACEAND L_IMSEG-UMLGO EQ L_IMSEG-UMLGO ).IF SY-TABIX NE L_TABIX.DELETE L_IMSEG_TAB INDEX SY-TABIX.INSERT L_IMSEG     INTO  L_IMSEG_TAB INDEX L_TABIX.L_TABIX = L_TABIX + 1.ELSE.L_TABIX = L_TABIX + 1.CONTINUE.ENDIF.ELSEIF SY-SUBRC IS INITIAL.CONTINUE.ELSE.EXIT.                          "from doENDIF.ENDDO.ENDIF.
    */QM deaktivierenCALL FUNCTION 'QAAT_QM_ACTIVE_INACTIVE'EXPORTINGAKTIV = SPACE.
    */BuchenCALL FUNCTION 'MB_CREATE_GOODS_MOVEMENT'EXPORTINGIMKPF = L_IMKPFXALLP = 'X'XALLR = 'X'CTCOD = L_TCODEXQMCL = ' 'IMPORTINGEMKPF = L_EMKPFTABLESIMSEG = L_IMSEG_TABEMSEG = L_EMSEG_TAB.
    */QM wieder aktivierenCALL FUNCTION 'QAAT_QM_ACTIVE_INACTIVE'EXPORTINGAKTIV = 'X'.
    */Buchung auswertenIF L_EMKPF-SUBRC GT 1.IF L_EMKPF-MSGID NE SPACE.
    */    Fehler auf KopfebeneMESSAGE ID L_EMKPF-MSGID TYPE 'S'NUMBER L_EMKPF-MSGNOWITH L_EMKPF-MSGV1 L_EMKPF-MSGV2L_EMKPF-MSGV3 L_EMKPF-MSGV4.SUBMIT (SY-REPID) VIA SELECTION-SCREEN.ELSE.
    */    Fehler auf Zeilenebene (Ausgabe des ersten Fehlers)LOOP AT L_EMSEG_TAB INTO L_EMSEG.IF L_EMSEG-MSGID NE SPACE.MESSAGE ID L_EMSEG-MSGID TYPE 'S'NUMBER L_EMSEG-MSGNOWITH L_EMSEG-MSGV1 L_EMSEG-MSGV2L_EMSEG-MSGV3 L_EMSEG-MSGV4.SUBMIT (SY-REPID) VIA SELECTION-SCREEN.ENDIF.ENDLOOP.ENDIF.ENDIF.LOOP AT L_EMSEG_TAB INTO L_EMSEG.CALL FUNCTION 'QAMB_COLLECT_RECORD'EXPORTINGLOTNUMBER   = P_QALS-PRUEFLOSDOCYEAR     = L_EMKPF-MJAHRDOCNUMBER   = L_EMKPF-MBLNRDOCPOSITION = L_EMSEG-MBLPOTYPE        = '7'.ENDLOOP.
    */Sonderkorrektur für Frei-An-Frei & WE-Sperr-An-We-SperrIF NOT P_QALS-STAT11 IS INITIAL.IF P_QALS-LMENGE04 EQ L_LMENGEGEB.ADD      P_QALS-LMENGE04 TO   L_LMENGEZUB.SUBTRACT P_QALS-LMENGE04 FROM L_LMENGEGEB.ENDIF.ELSEIF P_QALS-INSMK IS INITIAL.IF         P_QALS-LMENGE01 GE L_LMENGEGEBAND NOT P_QALS-LMENGE01 IS INITIAL.ADD      L_LMENGEGEB     TO   L_LMENGEZUB.SUBTRACT L_LMENGEGEB     FROM L_LMENGEGEB.ENDIF.ENDIF.CLEAR: P_QALS-STAT34,P_QALS-MATNRNEU,P_QALS-CHARGNEU,P_QALS-LMENGE01,P_QALS-LMENGE02,P_QALS-LMENGE03,P_QALS-LMENGE04,P_QALS-LMENGE05,P_QALS-LMENGE06,P_QALS-LMENGE07,P_QALS-LMENGE08,P_QALS-LMENGE09.P_QALS-LMENGEZUB = L_LMENGEZUB.IF NOT L_LMENGEGEB IS INITIAL.P_SUBRC = 4.ENDIF.
    ENDFORM.                               " CREATE_GOODS_MOVEMENT
    *----------------------------------------------------------------------*
    *       Form  POST_GOODS_MOVEMENT                                      *
    *----------------------------------------------------------------------*
    *       Warenbewegung buchen                                           *
    *----------------------------------------------------------------------*
    FORM POST_GOODS_MOVEMENT.CALL FUNCTION 'MB_POST_GOODS_MOVEMENT'.
    ENDFORM.                               " POST_GOODS_MOVEMENT
    *----------------------------------------------------------------------*
    *       Form  POST_DATA                                                *
    *----------------------------------------------------------------------*
    *       QM-Daten verbuchen                                             *
    *----------------------------------------------------------------------*
    FORM POST_DATA USING P_QALS        LIKE QALSP_QALS_LEISTE LIKE QALSP_QAMB_TAB    TYPE QAMBTABP_QAMB_VB_TAB TYPE QAMBTABP_SUBRC       LIKE SY-SUBRC.DATA:L_STAT     LIKE JSTAT,L_STAT_TAB LIKE JSTAT OCCURS 0,L_QAMB     LIKE QAMB,L_UPDKZ    LIKE QALSVB-UPSL VALUE 'U'.
    */QAMBs umsetzen (7 = VE-Buchung storniert)LOOP AT P_QAMB_TAB INTO L_QAMB.L_QAMB-TYP = '7'.APPEND L_QAMB TO P_QAMB_VB_TAB.ENDLOOP.
    */BERF & BTEI zurücknehmenCLEAR L_STAT. CLEAR L_STAT_TAB.L_STAT-INACT = 'X'.L_STAT-STAT = 'I0219'. APPEND L_STAT TO L_STAT_TAB. "BTEIL_STAT-STAT = 'I0220'. APPEND L_STAT TO L_STAT_TAB. "BENDCALL FUNCTION 'STATUS_CHANGE_INTERN'EXPORTINGOBJNR         = P_QALS-OBJNRTABLESSTATUS        = L_STAT_TABEXCEPTIONSERROR_MESSAGE = 1.IF SY-SUBRC <> 0.MESSAGE ID SY-MSGID TYPE 'S' NUMBER SY-MSGNOWITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.SUBMIT (SY-REPID) VIA SELECTION-SCREEN.ENDIF.
    */Prüflos aktualisierenCALL FUNCTION 'QPL1_UPDATE_MEMORY'EXPORTINGI_QALS  = P_QALSI_UPDKZ = L_UPDKZ.CALL FUNCTION 'QPL1_INSPECTION_LOTS_POSTING'EXPORTINGI_MODE = '1'.CALL FUNCTION 'STATUS_UPDATE_ON_COMMIT'.
    */QAMB initialisierenCALL FUNCTION 'QAMB_REFRESH_DATA'.PERFORM UPDATE_QAMB ON COMMIT.P_SUBRC = 0.
    ENDFORM.                               " POST_DATA
    *----------------------------------------------------------------------*
    *       Form  UPDATE_QAMB                                              *
    *----------------------------------------------------------------------*
    *       Update auf QAMB                                                *
    *----------------------------------------------------------------------*
    FORM UPDATE_QAMB.CALL FUNCTION 'QEVA_QAMB_CANCEL' IN UPDATE TASKEXPORTINGT_QAMB_TAB = G_QAMB_VB_TAB.
    ENDFORM.                               " UPDATE_QAMB
    *----------------------------------------------------------------------*
    *       Form  CHECK_MSEG                                               *
    *----------------------------------------------------------------------*
    *       MSEGs prüfen                                                   *
    *----------------------------------------------------------------------*
    FORM CHECK_MSEG USING P_MSEG_TAB TYPE T_MSEG_TABP_QAMB_TAB TYPE QAMBTABP_SUBRC    LIKE SY-SUBRC.DATA:L_MSEG_STOR_TAB LIKE MSEG OCCURS 0 WITH HEADER LINE.CLEAR: P_SUBRC.
    */Zeilen bereits storniert?SELECT MBLNR MJAHR ZEILE SMBLN SJAHR SMBLPFROM MSEG INTO CORRESPONDING FIELDS OF TABLE L_MSEG_STOR_TABFOR ALL ENTRIES IN P_MSEG_TABWHERE SMBLN EQ P_MSEG_TAB-MBLNRAND SJAHR EQ P_MSEG_TAB-MJAHRAND SMBLP EQ P_MSEG_TAB-ZEILE.IF SY-SUBRC IS INITIAL.LOOP AT L_MSEG_STOR_TAB.DELETE P_MSEG_TAB WHERE     MBLNR = L_MSEG_STOR_TAB-SMBLNAND MJAHR = L_MSEG_STOR_TAB-SJAHRAND ZEILE = L_MSEG_STOR_TAB-SMBLP.DELETE P_QAMB_TAB WHERE     MBLNR = L_MSEG_STOR_TAB-SMBLNAND MJAHR = L_MSEG_STOR_TAB-SJAHRAND ZEILE = L_MSEG_STOR_TAB-SMBLP.ENDLOOP.IF P_MSEG_TAB[] IS INITIAL.P_SUBRC = 4.EXIT.ENDIF.ENDIF.
    ENDFORM.                               " CHECK_MSEG
    *----------------------------------------------------------------------*
    *       Form  CHECK_MKPF                                               *
    *----------------------------------------------------------------------*
    *       Materialbelege prüfen (Wurde durch VE-Buchung Prüfllos erzeugt?*
    *----------------------------------------------------------------------*
    FORM CHECK_MKPF USING P_MKPF_TAB TYPE T_MKPF_TABP_SUBRC    LIKE SY-SUBRC.DATA:L_MKPF_TAB TYPE T_MKPF_TAB.CLEAR: P_SUBRC.SELECT MBLNR FROM QAMB INTO CORRESPONDING FIELDS OF TABLE L_MKPF_TABFOR ALL ENTRIES IN P_MKPF_TABWHERE MBLNR EQ P_MKPF_TAB-MBLNRAND MJAHR EQ P_MKPF_TAB-MJAHRAND TYP   = '1'.IF SY-SUBRC IS INITIAL.P_SUBRC = 4.ENDIF.
    ENDFORM.                               " CHECK_MKPF
    

XXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXX

SAP检验批次批量取消程序示例(备份)相关推荐

  1. SAP ABAP 自动批量开关账期程序 OB52和MMPV

    SAP ABAP 自动批量开关账期程序 OB52和MMPV 文章目录 SAP ABAP 自动批量开关账期程序 OB52和MMPV 前言 会计凭证过账期间 物料凭证过账期间 完整代码 主程序 ZTOOL ...

  2. SAP QM QA08批量维护QMAT数据

    SAP QM QA08批量维护QMAT数据 笔者所在的Y项目上有启用SAP QM模块,并且需要为每个物料激活超过5个以上不同的检验类型.大多数下项目上数据迁移阶段,物料主数据收集模板都会单独为QMAT ...

  3. SAP IQ09 可以批量查询序列号数据

    SAP IQ09 可以批量查询序列号数据 事务代码IQ09,输入物料号等信息, 执行, 修改Layout,增加显示'批次'与'库存批次'字段信息, 回车, 正常情况下,物料的序列号主数据里,主批次字段 ...

  4. 6.7 程序示例--K-Means-机器学习笔记-斯坦福吴恩达教授

    程序示例–K-Means 函数定义 # coding: utf-8 # kmeans/kmeans.py import numpy as npdef loadDataSet(filename):&qu ...

  5. 2.7 程序示例--多分类问题-机器学习笔记-斯坦福吴恩达教授

    程序示例–多分类问题 我们采用 One-vs-All 方法来进行多分类,在原有的逻辑回归模块中添加 One-vs-All 的训练以及预测方法: # coding: utf-8 # logical_re ...

  6. 2.5 程序示例--非线性决策边界-机器学习笔记-斯坦福吴恩达教授

    程序示例–非线性决策边界 我们首先对数据进行了多项式拟合,再分别使用 λ=0,λ=1,λ=100λ=0,λ=1,λ=100λ=0,λ=1,λ=100 的批量梯度下降法(sgd)完成了训练,获得了非线性 ...

  7. 2.4 程序示例--线性决策边界-机器学习笔记-斯坦福吴恩达教授

    程序示例–线性决策边界 回归模块 在逻辑回归模块 logical_regression.py 中,实现了批量梯度下降法(bgd)以及随机梯度下降法(sgd),同时,支持正规化方程 # coding: ...

  8. 1.9 程序示例--局部加权线性回归-机器学习笔记-斯坦福吴恩达教授

    程序示例–局部加权线性回归 现在,我们在回归中又添加了 JLwr() 方法用于计算预测代价,以及 lwr() 方法用于完成局部加权线性回归: # coding: utf-8 # linear_regr ...

  9. twitter批量取消关注_如何在Twitter上取消阻止“潜在敏感内容”

    twitter批量取消关注 Twitter 推特 Twitter blocks some tweets with a "potentially sensitive content" ...

  10. Himly TCC Dubbo 程序示例

    Himly TCC Dubbo 程序示例 工程运行说明 1.运行底层基础服务(provider):account工程下的 AccountServiceApplication 2.运行业务层测试:tra ...

最新文章

  1. kali 安装java jdk
  2. PL/SQL Developer调试Oracle存储过程
  3. m031开发 新唐_M031
  4. ocr语种识别_利用OCR图文识别,快速帮你提取文字信息
  5. JavaWeb初学者session的使用
  6. SHELL脚本“syntax error: unexpected end of file”解决方案[半原创]
  7. 书单丨把握Java技术发展的新趋势!
  8. 一场云计算基础设施的饕餮盛宴 --- OpenStack柏林峰会见闻及感想
  9. PLC单按钮启停电路与特殊辅助继电器
  10. 如何把视频压缩到最小?请看详细步骤
  11. Spring学习记录01
  12. bugku ctf 备份是个好习惯 (听说备份是个好习惯)
  13. 四、redi性能测试、协议、事务
  14. Unity3D —— 手机设备震动接口
  15. 杭州图书馆对所有读者免费开放 包括乞丐【让我感动的图书馆】
  16. 快充+大电池商务手机盘点 魅族华为领衔
  17. 2017算法实习生应聘经验总结
  18. hadoop自定义机架实现-08
  19. 2019手机号码JS正则表达式
  20. python中print函数的end和sep参数的用法

热门文章

  1. 前富士康CEO程天纵:创新来自长尾,创业源于创客!
  2. 数据结构与算法:二路归并排序(合并排序)
  3. java+mysql学科竞赛管理系统(java,web)
  4. 计算机网络奇偶校验法,计算机网络基础知识之奇偶校验码
  5. 多线程实时数据采集MFC VISUAL C++ /C++
  6. 官网下载 CentOs 7 镜像的详细步骤
  7. VS2017离线下载及安装方式
  8. 目前下载VS2017你可能会遇到这个坑
  9. 主编编辑器出现未经授权图片不可引用怎么办?
  10. c++ primer plus第六版英文版,有需要的小伙伴自取哦