PR 自动生成 PO 的方法
实现原理:通过后台作业变式实现
SAP 标准功能已有 ME59N 可实现,但创建的变式很容易被用户修改删除,为了防止用户修
改,只有复制 ME59N 的代码重新开发一个报表:
第一步:复制 ME59N 源代码,如下:
*--------------------------------------------------------------------
-*
* Program ID
*
* Program Name :
序
*--------------------------------------------------------------------
-*
* Date Created : < 2014/04/15>
*
MAXIMO 传 输 至 SAP 的 服 务 PR 自 动 转 FO 程
ZMM_RE0813
:
*
<
赵
:
*
By
:
*
Created
Description
*
序>
*
*断,删除框架协议号为空的PR 记录,取消后台针对外部服务自动PO 的配置判断。通 *
*过该程序选择屏幕条件决定哪些采购组织和工厂的PR 需要自动转换成FO。在ZMM090 *
*增加开关,只有zmm090 和选择条件同时满足时才执行该程序
*
*--------------------------------------------------------------------
-*
*Modification :
*
Date Modified
Modified By
Description
*
*
*
*
*--------------------------------------------------------------------
-*
<更新理由/内容>
<修改人>
REPORT
ZMM_RE0813.
INCLUDE FM06LCIM.
INCLUDE RM06BB30F00.
SELECT-OPTIONS:
S_EKGRP FOR EBAN-EKGRP MEMORY ID EKG,
S_EKORG FOR EBAN-EKORG MEMORY ID EKO,
S_FLIEF FOR EBAN-FLIEF MATCHCODE OBJECT KRED MEMORY ID LIF,
S_KONNR FOR EBAN-KONNR MATCHCODE OBJECT MEKK,
S_WERKS FOR EBAN-WERKS MEMORY ID WRK,
S_LGORT FOR EBAN-LGORT MODIF ID LGO,
S_RESWK FOR EBAN-RESWK,
S_RESLO FOR EBAN-RESLO MODIF ID RLO,
S_BESWK FOR EBAN-BESWK MEMORY ID BWK.
"CCP
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN BEGIN OF BLOCK BL1 WITH FRAME TITLE TEXT-009.
"NO INTERVALS.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: P_GEKGRP LIKE RM06A-P_GRUPP.
SELECTION-SCREEN COMMENT
SELECTION-SCREEN POSITION 40.
PARAMETERS: P_GLFDAT LIKE RM06A-P_GRUPP.
SELECTION-SCREEN COMMENT 42(35) TEXT-S05 FOR FIELD P_GLFDAT.
SELECTION-SCREEN END OF LINE.
3(35) TEXT-S01 FOR FIELD P_GEKGRP.
"Delivery date
"Purchasing group
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: P_GWERKS LIKE RM06A-P_GRUPP.
SELECTION-SCREEN COMMENT
SELECTION-SCREEN POSITION 40.
PARAMETERS: P_GLTSNR LIKE RM06A-P_GRUPP.
SELECTION-SCREEN COMMENT 42(35) TEXT-S06 FOR FIELD P_GLTSNR.
SELECTION-SCREEN END OF LINE.
3(35) TEXT-S02 FOR FIELD P_GWERKS.
"Plant
"Vendor subrange
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: P_GLGORT LIKE RM06A-P_GRUPP.
SELECTION-SCREEN COMMENT
SELECTION-SCREEN POSITION 40.
PARAMETERS: P_GBANFN LIKE RM06A-P_GRUPP.
SELECTION-SCREEN COMMENT 42(35) TEXT-S09 FOR FIELD P_GBANFN.
SELECTION-SCREEN END OF LINE.
3(35) TEXT-S04 FOR FIELD P_GLGORT.
"Requisition
"Storage location
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: P_GPSTYP LIKE RM06A-P_GRUPP.
SELECTION-SCREEN COMMENT
SELECTION-SCREEN POSITION 40.
PARAMETERS: P_GBNFPO LIKE RM06A-P_GRUPP.
SELECTION-SCREEN COMMENT 42(35) TEXT-S07 FOR FIELD P_GBNFPO.
SELECTION-SCREEN END OF LINE.
3(35) TEXT-S03 FOR FIELD P_GPSTYP.
"Requisition
"Item category
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: P_GBUKRS LIKE RM06A-P_GRUPP DEFAULT 'X'.
"Company code
3(35) TEXT-S10 FOR FIELD P_GBUKRS.
SELECTION-SCREEN COMMENT
SELECTION-SCREEN POSITION 40.
PARAMETERS: P_GKONNR LIKE RM06A-P_GRUPP DEFAULT 'X'.
ntract
SELECTION-SCREEN COMMENT 42(30) TEXT-S12 FOR FIELD P_GKONNR.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK BL1.
"Co
40(25) TEXT-S21 FOR FIELD P_DETPRO.
SELECTION-SCREEN BEGIN OF BLOCK BL2 WITH FRAME TITLE TEXT-016.
"NO INTERVALS.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: P_ETERZ LIKE RM06A-P_ETERZ."Generate sched. lines
SELECTION-SCREEN COMMENT 3(35) TEXT-S08 FOR FIELD P_ETERZ.
SELECTION-SCREEN COMMENT
SELECTION-SCREEN POSITION 66.
PARAMETERS: P_DETPRO TYPE ME59PROTOCOL.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: P_POSERR LIKE RM06A-P_POSERR.
SELECTION-SCREEN COMMENT
3(35) TEXT-S11 FOR FIELD P_POSERR.
SELECTION-SCREEN COMMENT 40(25) TEXT-S23 FOR FIELD P_SEBAKZ.
SELECTION-SCREEN POSITION 66.
PARAMETERS: P_SEBAKZ TYPE SET_EBAKZ DEFAULT '1'.
SELECTION-SCREEN END OF LINE.
"EBAKZ
"Detailed protocol
"Omit faulty items
LIKE RM06A-P_TESTL.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: P_TEST
SELECTION-SCREEN COMMENT 3(35) TEXT-S22 FOR FIELD P_TEST.
PARAMETERS P_LATECW TYPE C LENGTH 1 NO-DISPLAY. "late commit work
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK BL2.
"Test run
SELECTION-SCREEN SKIP 1.
SELECT-OPTIONS:
S_MATKL FOR EBAN-MATKL,
S_FRGDT FOR EBAN-FRGDT,
"Freigabedatum
S_LFDAT FOR EBAN-LFDAT,
"Lieferdatum
S_BADAT FOR EBAN-BADAT,
"请求日期
S_DISPO FOR EBAN-DISPO,
"Disponent
S_BANFN FOR EBAN-BANFN MATCHCODE OBJECT MBAN,
S_MATNR FOR EBAN-MATNR MATCHCODE OBJECT MAT1,
S_BEDNR FOR EBAN-BEDNR,
S_BSART FOR EBAN-BSART,
"Bestellart
S_PSTYP FOR RM06B-EPSTP,
S_KNTTP FOR EBAN-KNTTP,
S_STATU FOR EBAN-STATU,
S_BANPR FOR EBAN-BANPR,
S_PRIO_R FOR EBAN-PRIO_REQ MODIF ID REQ, "priority (of requirement
"Positionstyp
"Kontierungstyp
"Bearbeitungsstatus
"DCM
)
S_ADVCOD FOR (GV_ADVCODE_SELFIELD) MODIF ID ADV. "advice code
*--------------------------------------------------------------------
--*
*
Parameters
*
*--------------------------------------------------------------------
--*
PARAMETERS:
P_AFNAM LIKE EBAN-AFNAM,
P_TXZ01 LIKE EBAN-TXZ01,
P_VRTYPK LIKE RM06A-P_VRTYP DEFAULT 'X'.
"Anforderer
"Kurztext
*- für Positionstyp im internen Format ------------------------------
--*
RANGES: R_PSTYP FOR EBAN-PSTYP.
INCLUDE FM06BCS3.
INCLUDE RM06BB30F01.
INCLUDE RM06BB30F02.
INCLUDE RM06BB30F03.
INCLUDE ZMM_RE0813_F01.
*--------------------------------------------------------------------
--*
*
Make fields invisible if specific processes are not active
*
*--------------------------------------------------------------------
--*
AT SELECTION-SCREEN OUTPUT.
DATA: LF_CCP_ACTIVE.
* Cross Company Procurement
CALL FUNCTION 'ME_CCP_ACTIVE_CHECK'
IMPORTING
EF_CCP_ACTIVE = LF_CCP_ACTIVE.
IF LF_CCP_ACTIVE IS INITIAL.
LOOP AT SCREEN.
SEARCH SCREEN-NAME FOR 'S_BESWK'.
IF SY-SUBRC EQ 0.
SCREEN-ACTIVE = '0'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDIF.
IF GV_DEL_STRG_LOC_ACT IS INITIAL OR
GV_MM_PRIO_ACTIVE IS INITIAL OR
GV_DFPS_ACTIVE IS INITIAL.
LOOP AT SCREEN.
*
*
*
ENDIF.
ENDLOOP.
ENDIF.
Supplying and Receiving Storage Location
IF ( SCREEN-GROUP1 = 'LGO' OR SCREEN-GROUP1 = 'RLO' )
AND GV_DEL_STRG_LOC_ACT IS INITIAL.
SCREEN-ACTIVE = '0'.
MODIFY SCREEN.
ENDIF.
priority (of requirement)
IF SCREEN-GROUP1 = 'REQ' AND GV_MM_PRIO_ACTIVE IS INITIAL.
ENDIF.
adviccode
IF SCREEN-GROUP1 = 'ADV' AND GV_DFPS_ACTIVE IS INITIAL.
SCREEN-ACTIVE = '0'.
MODIFY SCREEN.
SCREEN-ACTIVE = '0'.
MODIFY SCREEN.
* integration RealEstate REFX
PERFORM RE_MODIF_SELECTION_SCREEN.
41
"SPC_953041
"SPC_9530
AT SELECTION-SCREEN ON S_PSTYP.
CALL FUNCTION 'ME_ITEM_CATEGORY_SELOPT_INPUT'
TABLES
EXT_PSTYP = S_PSTYP
INT_PSTYP = R_PSTYP.
*--------------------------------------------------------------------
--*
*
F4 auf dem Selektionsbild / F4 on the selection screen
*
*--------------------------------------------------------------------
--*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_PSTYP-LOW.
CALL FUNCTION 'HELP_VALUES_EPSTP'
= SY-CPROG
= SY-DYNNR
EXPORTING
PROGRAM
DYNNR
FIELDNAME = 'S_PSTYP-LOW'
BSART
BSTYP
=
=
*
*
IMPORTING
EPSTP
EXCEPTIONS
OTHERS
= S_PSTYP-LOW
= 0.
* Anschluß Immobilienverwaltung 4.6A
* F4-Hilfe für Feld Objektart bei Feldern für Immobilienverwaltung
* AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_obart-low.
INCLUDE IFVIIMSLF4.
INITIALIZATION.
DATA: L_SET_VARIANT
L_REPORT
LIKE RSVAR-VARIANT VALUE 'SAP&STANDARD',
LIKE RSVAR-REPORT
VALUE SY-REPID.
IF SY-SLSET IS INITIAL.
* set variant for report
CALL FUNCTION 'RS_SUPPORT_SELECTIONS'
EXPORTING
REPORT
VARIANT = L_SET_VARIANT
= L_REPORT
EXCEPTIONS
OTHERS
= 0.
ENDIF.
* Supplying and Receiving Storage Location
CALL FUNCTION 'ME_DELIV_STRG_LOC_ACTIVE'
IMPORTING
EF_DEL_STRG_LOC_ACT = GV_DEL_STRG_LOC_ACT.
* priority (of requirement)
CALL FUNCTION 'GET_DEFAULT_PRIO_ACTIVE'
EV_MM_PRIO_ACTIVE = GV_MM_PRIO_ACTIVE
IMPORTING
EXCEPTIONS
NO_PACT_ENTRY
OTHERS
IF SY-SUBRC <> 0.
= 1
= 2.
CLEAR GV_MM_PRIO_ACTIVE.
ENDIF.
* EA-DFPS: type the selection parameter s_advcode, if
* Add On is active
*
GV_DFPS_ACTIVE = CL_CHECK_SWITCH=>DFPS_IS_ACTIVE( ).
IF gv_dfps_active IS NOT INITIAL OR gv_dfps_active NE space.
IF GV_DFPS_ACTIVE = 'X'.
GV_ADVCODE_SELFIELD = 'EBAN-ADVCODE'.
ENDIF.
START-OF-SELECTION.
PERFORM START_OF_SELECTION_NEW CHANGING GT_EBAN
GS_PAR.
IF GT_EBAN IS INITIAL.
MESSAGE S261(ME).
ELSE.
PERFORM PROCESS_REQUISITIONS USING
GT_EBAN
GS_PAR
GT_TODO.
CHANGING
PERFORM PROCESS_PROTOCOL USING GT_TODO.
ENDIF.
第二步:给新实现的功能,创建变式:ZMM_RE0813