SAP检验批次批量取消程序示例(备份)
=>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检验批次批量取消程序示例(备份)相关推荐
- SAP ABAP 自动批量开关账期程序 OB52和MMPV
SAP ABAP 自动批量开关账期程序 OB52和MMPV 文章目录 SAP ABAP 自动批量开关账期程序 OB52和MMPV 前言 会计凭证过账期间 物料凭证过账期间 完整代码 主程序 ZTOOL ...
- SAP QM QA08批量维护QMAT数据
SAP QM QA08批量维护QMAT数据 笔者所在的Y项目上有启用SAP QM模块,并且需要为每个物料激活超过5个以上不同的检验类型.大多数下项目上数据迁移阶段,物料主数据收集模板都会单独为QMAT ...
- SAP IQ09 可以批量查询序列号数据
SAP IQ09 可以批量查询序列号数据 事务代码IQ09,输入物料号等信息, 执行, 修改Layout,增加显示'批次'与'库存批次'字段信息, 回车, 正常情况下,物料的序列号主数据里,主批次字段 ...
- 6.7 程序示例--K-Means-机器学习笔记-斯坦福吴恩达教授
程序示例–K-Means 函数定义 # coding: utf-8 # kmeans/kmeans.py import numpy as npdef loadDataSet(filename):&qu ...
- 2.7 程序示例--多分类问题-机器学习笔记-斯坦福吴恩达教授
程序示例–多分类问题 我们采用 One-vs-All 方法来进行多分类,在原有的逻辑回归模块中添加 One-vs-All 的训练以及预测方法: # coding: utf-8 # logical_re ...
- 2.5 程序示例--非线性决策边界-机器学习笔记-斯坦福吴恩达教授
程序示例–非线性决策边界 我们首先对数据进行了多项式拟合,再分别使用 λ=0,λ=1,λ=100λ=0,λ=1,λ=100λ=0,λ=1,λ=100 的批量梯度下降法(sgd)完成了训练,获得了非线性 ...
- 2.4 程序示例--线性决策边界-机器学习笔记-斯坦福吴恩达教授
程序示例–线性决策边界 回归模块 在逻辑回归模块 logical_regression.py 中,实现了批量梯度下降法(bgd)以及随机梯度下降法(sgd),同时,支持正规化方程 # coding: ...
- 1.9 程序示例--局部加权线性回归-机器学习笔记-斯坦福吴恩达教授
程序示例–局部加权线性回归 现在,我们在回归中又添加了 JLwr() 方法用于计算预测代价,以及 lwr() 方法用于完成局部加权线性回归: # coding: utf-8 # linear_regr ...
- twitter批量取消关注_如何在Twitter上取消阻止“潜在敏感内容”
twitter批量取消关注 Twitter 推特 Twitter blocks some tweets with a "potentially sensitive content" ...
- Himly TCC Dubbo 程序示例
Himly TCC Dubbo 程序示例 工程运行说明 1.运行底层基础服务(provider):account工程下的 AccountServiceApplication 2.运行业务层测试:tra ...
最新文章
- kali 安装java jdk
- PL/SQL Developer调试Oracle存储过程
- m031开发 新唐_M031
- ocr语种识别_利用OCR图文识别,快速帮你提取文字信息
- JavaWeb初学者session的使用
- SHELL脚本“syntax error: unexpected end of file”解决方案[半原创]
- 书单丨把握Java技术发展的新趋势!
- 一场云计算基础设施的饕餮盛宴 --- OpenStack柏林峰会见闻及感想
- PLC单按钮启停电路与特殊辅助继电器
- 如何把视频压缩到最小?请看详细步骤
- Spring学习记录01
- bugku ctf 备份是个好习惯 (听说备份是个好习惯)
- 四、redi性能测试、协议、事务
- Unity3D —— 手机设备震动接口
- 杭州图书馆对所有读者免费开放 包括乞丐【让我感动的图书馆】
- 快充+大电池商务手机盘点 魅族华为领衔
- 2017算法实习生应聘经验总结
- hadoop自定义机架实现-08
- 2019手机号码JS正则表达式
- python中print函数的end和sep参数的用法
热门文章
- 前富士康CEO程天纵:创新来自长尾,创业源于创客!
- 数据结构与算法:二路归并排序(合并排序)
- java+mysql学科竞赛管理系统(java,web)
- 计算机网络奇偶校验法,计算机网络基础知识之奇偶校验码
- 多线程实时数据采集MFC VISUAL C++ /C++
- 官网下载 CentOs 7 镜像的详细步骤
- VS2017离线下载及安装方式
- 目前下载VS2017你可能会遇到这个坑
- 主编编辑器出现未经授权图片不可引用怎么办?
- c++ primer plus第六版英文版,有需要的小伙伴自取哦