user_exit的用法(1)

可以实现程序的增强功能。例如用T-CODE:CMOD建立一个PROJECT:ZBATCH,


1、在USER_EXIT:EXIT_SAPMM07M_001/ZXMBCU02中写以下代码:

* 检查工单是否超单发料,并限制为向上进1。BEGIN
Tables: RESB.
Data: ZQTY like mseg-menge.

If I_MSEG-BWART = '261' and I_MSEG-RSNUM <> ' '.
Select * from RESB where rsnum = I_MSEG-RSNUM and
RSPOS = I_MSEG-RSPOS and
Matnr = I_MSEG-Matnr.
If SY-SUBRC = 0.
ZQTY = ( RESB-BDMNG - RESB-ENMNG ).
If I_MSEG-Menge > ceil( ZQTY ).
MESSAGE E002(Z001) with I_MSEG-MATNR.
Endif.
Endif.
Endselect.
Endif.
* 检查工单是否超单发料 END

* 检查PO收货时,单重(Net Weight)是否为0,强制性维护Material Master 的单重 BEGIN
TABLES: MARA.
DATA: ZNETW LIKE MARA-NTGEW.

If I_MSEG-BWART = '101'.
ZNETW = 0.
SELECT SINGLE NTGEW INTO ZNETW
FROM MARA
WHERE MATNR = I_MSEG-MATNR.
IF ZNETW = 0.
MESSAGE E003(Z001) with I_MSEG-MATNR.
ENDIF.
ENDIF.
* 检查PO收货时END.
2、在EXIT_SAPMM07M_004/ZXMBCU04中,写以下代码:

*实现对CLASS:BATCH的控制。
DATA : P_ATINN TYPE CHARACTERS-ATINN,
P_DATE(10) TYPE C,
ZQTY LIKE RESB-BDMNG,
WA_MHCA LIKE MCHA.

STATICS: Begin of ISSTAB OCCURS 10,
MATNR Like RESB-MATNR,
QTY LIKE RESB-BDMNG,
End of ISSTAB.

Tables: USR01.

* Default GR Date to New Batch
LOOP AT VALUES WHERE ATNAM = 'GR-DATE3'.ENDLOOP.
IF SY-SUBRC <> 0.
LOOP AT CHARACTERS WHERE ATNAM = 'GR-DATE3'.
P_ATINN = CHARACTERS-ATINN.
EXIT.
ENDLOOP.
SELECT SINGLE * FROM MCHA INTO WA_MHCA WHERE
( MATNR = I_MSEG-MATNR ) AND
( WERKS = I_MSEG-WERKS ) AND
( CHARG = I_MSEG-CHARG ).
IF SY-SUBRC <> 0.
Select * from USR01 where BNAME = sy-uname. endselect.


If USR01-DATFM = 1.
CONCATENATE SY-DATUM+6(2) '.' SY-DATUM+4(2) '.' SY-DATUM+0(4)
INTO P_DATE.
endif.
If USR01-DATFM = 2.
CONCATENATE SY-DATUM+4(2) '/' SY-DATUM+6(2) '/' SY-DATUM+0(4)
INTO P_DATE.
endif.
If USR01-DATFM = 3.
CONCATENATE SY-DATUM+4(2) '-' SY-DATUM+6(2) '-' SY-DATUM+0(4)
INTO P_DATE.
endif.
If USR01-DATFM = 4.
CONCATENATE SY-DATUM+0(4) '.' SY-DATUM+4(2) '.' SY-DATUM+6(2)
INTO P_DATE.
endif.
If USR01-DATFM = 5.
CONCATENATE SY-DATUM+0(4) '/' SY-DATUM+4(2) '/' SY-DATUM+6(2)
INTO P_DATE.
endif.
If USR01-DATFM = 6.
CONCATENATE SY-DATUM+0(4) '-' SY-DATUM+4(2) '-' SY-DATUM+6(2)
INTO P_DATE.
endif.

IF NOT P_ATINN IS INITIAL.
VALUES-ATINN = P_ATINN.
VALUES-ATNAM = 'GR-DATE3'.
VALUES-ATWTB = P_DATE.
APPEND VALUES.
ENDIF.
ENDIF.
ENDIF.


* Copy Batch No to Characteristic Batch_no
LOOP AT VALUES WHERE ATNAM = 'ZBNO'.ENDLOOP.
IF SY-SUBRC <> 0.
LOOP AT CHARACTERS WHERE ATNAM = 'ZBNO'.
P_ATINN = CHARACTERS-ATINN.
EXIT.
ENDLOOP.
VALUES-ATINN = P_ATINN.
VALUES-ATNAM = 'ZBNO'.
VALUES-ATWTB = I_MSEG-CHARG.
APPEND VALUES.
ENDIF.

*IF SY-MANDT = '820'.
* Copy Vendor Code to Characteristic Vendor
LOOP AT VALUES WHERE ATNAM = 'VENDOR'.ENDLOOP.
if SY-SUBRC <> 0.
LOOP AT CHARACTERS WHERE ATNAM = 'VENDOR'.
P_ATINN = CHARACTERS-ATINN.
EXIT.
ENDLOOP.
VALUES-ATINN = P_ATINN.
VALUES-ATNAM = 'VENDOR'.
VALUES-ATWTB = I_MSEG-LIFNR.
APPEND VALUES.
ENDIF.
*endif.

其中Class:BATCH可以在CT04/CL02中维护。

3、在EXIT_SAPLV01Z_002/ZXVBZU02中写以下代码:

*实现对BATCH格式的控制 BEGIN
DATA: YY(2) TYPE C,
YYYY(4) TYPE C,
DDD(3) TYPE N,
SSS(3) TYPE N,
BEG_CHARG(10) TYPE C,
XX(6) TYPE C,
ZBEG LIKE SY-DATUM,
BDATE LIKE SY-DATUM.

TABLES: MCH1.


* Default Date Code + Sequene number to batch
IF X_BNCOM-BWART = '101' or X_BNCOM-BWART = '561'
or X_BNCOM-BWART = '501'.

YYYY = SY-DATUM+0(4).
CONCATENATE YYYY '0101' INTO ZBEG.
DDD = ( SY-DATUM - ZBEG ) + 1.
YY = SY-DATUM+2(2).
CONCATENATE YY DDD '%' INTO XX.
SELECT * FROM MCH1 WHERE MATNR = X_BNCOM-MATNR AND
CHARG LIKE XX.
ENDSELECT.

IF SY-SUBRC = 0.
SSS = MCH1-CHARG+5(3).
SSS = SSS + 1.
CONCATENATE YY DDD SSS INTO NEW_CHARG.
ELSE.
CONCATENATE YY DDD '001' INTO NEW_CHARG.
ENDIF.
*实现对BATCH格式的控制 END

在该USER_EXIT中可以实现物料交易(收、发、转)时的控制。

在PO Release 时也可以定置特定的方式,例如建立一个Project:ZPOAPP


4、在EXIT_SAPLEBND_002/ZXM06U22 写如下代码:

* If PDUMMY = 'X' then Approval Procedure is Activate
TABLES: EBAN.
DATA: MRP_IND TYPE EBAN.
DATA: BEGIN OF Z_BEKPO OCCURS 50.
INCLUDE STRUCTURE BEKPO.
DATA: END OF Z_BEKPO.


LOOP AT IT_BEKPO INTO Z_BEKPO.
* IF PO line item has no P.R. Reference
IF Z_BEKPO-BANFN EQ SPACE.
WRITE: Z_BEKPO-BANFN, Z_BEKPO-BNFPO.
MOVE 'X' TO I_CEKKO-PDUMMY.
EXIT.
ELSE.
* If PR Creation Indicator <> B
SELECT SINGLE * FROM EBAN INTO MRP_IND WHERE
BANFN = Z_BEKPO-BANFN AND
BNFPO = Z_BEKPO-BNFPO.
* 如果不是从PR转或MRP转的,则是手工建立的PO
IF SY-SUBRC <> 0 or ( MRP_IND-ESTKZ NE 'B' and
MRP_IND-ESTKZ NE 'U').
MOVE 'X' TO I_CEKKO-PDUMMY.
EXIT.
ENDIF.
ENDIF.
ENDLOOP.

MOVE-CORRESPONDING I_CEKKO TO E_CEKKO.

5、 在EXIT_SAPLCK21_002/ZXCKAU08中写如下代码:可以实现取PO单价的优先顺序。

* The Below Coding use during the BOM Roll Up
* THe system search the 1) Last Info Record
* 2) Last PO Price
* 3) PO Price from the Last GR Document

If IMP_KLVAR = 'Z003'.

* Last Info Record Price
Select * from EINA where MATNR = F_MATBW-MATNR
Order by ERDAT DESCENDING.
If SY-SUBRC = 0.
Select * from EINE Where INFNR = EINA-INFNR
Order by ERDAT DESCENDING.
If EINE-NETPR <> 0.
If eina-lmein = EINE-BPRME.
* EXP_PREIS = ( EINE-NETPR / EINE-PEINH ) * ( EINA-UMREN * EXP_PEINH /
* EINA-UMREZ ).
EXP_PREIS = EINE-NETPR.
EXP_PEINH = EINE-PEINH.
EXP_WAERS = EINE-WAERS.
EX = 'Y'.
EXIT.
ELSE.
EXP_WAERS = EINE-WAERS.
* EXP_PREIS = ( ( EINE-NETPR / EINE-PEINH ) /
* EINA-UMREZ ) / EINE-BPUMN.
* EXP_PEINH = 1.
EXP_PREIS = EINE-NETPR * EINA-UMREN * EINE-BPUMZ / EINA-UMREZ / EINE-BPUMN.
EXP_PEINH = EINE-PEINH.
EX = 'Y'.
Exit.
ENDIF.
Endif.
EndSelect.
ENDIF.
IF EX = 'Y'.EXIT.ENDIF.
EndSelect.
IF EX = 'Y'.EXIT.ENDIF.

* Last PO Price
Select * from EKPO where MATNR = F_MATBW-MATNR
and LOEKZ <> 'L'
and NETPR <> 0
ORDER BY AEDAT EBELN DESCENDING.
EXIT.
EndSelect.
If Sy-Subrc = 0.
Select * from EKKO where EBELN = EKPO-EBELN.Exit.EndSelect.
If SY-SUBRC = 0.
* EXP_PREIS = EKPO-NETPR / ( ekpo-umrez ).

IF EKPO-BPRME = EKPO-LMEIN.
EXP_PREIS = EKPO-NETPR.
EXP_WAERS = EKKO-WAERS.
EXP_PEINH = EKPO-PEINH.
Else.
EXP_PREIS = EKPO-NETPR * EKPO-UMREN * EKPO-BPUMZ / EKPO-UMREZ / EKPO-BPUMN.
EXP_WAERS = EKKO-WAERS.
EXP_PEINH = EKPO-PEINH .
ENDIF.
EXIT.
Endif.
Endif.

* Material Document Last PO Price
Select * from ZCO_MSEG where MATNR = F_MATBW-MATNR
and WERKS = F_MATBW-WERKS
and NETWR <> 0
ORDER BY BUDAT DESCENDING.
EXIT.
EndSelect.

If SY-SUBRC = 0.
EXP_PREIS = ZCO_MSEG-NETWR / ZCO_MSEG-MENGE.
EXP_WAERS = ZCO_MSEG-WAERS.
EXP_PEINH = ZCO_MSEG-ZMENGE / ZCO_MSEG-ERFMG.
EXIT.
Endif.


EXIT.
* Endif for Z003
Endif.

=============================

EXIT_SAPLEBND_002

*&---------------------------------------------------------------------*
*& Include ZXM06U22 *
*&---------------------------------------------------------------------*
* If PDUMMY = 'X' then Approval Procedure is Activate


TABLES: EBAN.
DATA: MRP_IND TYPE EBAN.
DATA: BEGIN OF Z_BEKPO OCCURS 50.
INCLUDE STRUCTURE BEKPO.
DATA: END OF Z_BEKPO.


LOOP AT IT_BEKPO INTO Z_BEKPO.

* IF PO line item has no P.R. Reference
IF Z_BEKPO-BANFN EQ SPACE.

WRITE: Z_BEKPO-BANFN, Z_BEKPO-BNFPO.
MOVE 'X' TO I_CEKKO-PDUMMY.
EXIT.

ELSE.
* If PR Creation Indicator <> B
SELECT SINGLE * FROM EBAN INTO MRP_IND WHERE
BANFN = Z_BEKPO-BANFN AND
BNFPO = Z_BEKPO-BNFPO.
* IF SY-SUBRC <> 0 or MRP_IND-ESTKZ NE 'B'. update by ricky 050802
IF SY-SUBRC <> 0 or ( MRP_IND-ESTKZ NE 'B' and
MRP_IND-ESTKZ NE 'U').
MOVE 'X' TO I_CEKKO-PDUMMY.
EXIT.
ENDIF.
ENDIF.

ENDLOOP.

MOVE-CORRESPONDING I_CEKKO TO E_CEKKO.

================================

PO收货相关的出口

Enhancement:EXIT_SAPMM07M_001

Include: ZXMBCU02

*&---------------------------------------------------------------------*
*& Include ZXMBCU02 *
*&---------------------------------------------------------------------*

*zbchao 20061130 check input location of PO receipt against PO line's
*location for Forson(Requested by YMLee)
Tables: EKPO.
DATA V_LOCATION TYPE EKPO-LGORT.

IF I_MSEG-WERKS = '1310' OR I_MSEG-WERKS = '2400'
OR I_MSEG-WERKS = '2410' OR I_MSEG-WERKS = '2220'
OR I_MSEG-WERKS = '2230'.

IF I_MSEG-BWART = '101' AND I_MSEG-LIFNR <> SPACE.
CLEAR V_LOCATION.
SELECT SINGLE LGORT INTO V_LOCATION
FROM EKPO
WHERE EBELN = I_MSEG-EBELN
AND EBELP = I_MSEG-EBELP.
IF V_LOCATION <> SPACE.
IF I_MSEG-LGORT <> V_LOCATION.
MESSAGE E005(Z001) with I_MSEG-LGORT.
ENDIF.
ENDIF.
ENDIF.

ENDIF.
*zbchao 20061130 end.

*zbchao check WO over issue for Hayco.
Tables: RESB.
Data: ZQTY like mseg-menge.

IF I_MSEG-WERKS = '2100' OR I_MSEG-WERKS = '2110'
OR I_MSEG-WERKS = '2200' OR I_MSEG-WERKS = '2210' . "060825 ZBCHAO

If I_MSEG-BWART = '261' and I_MSEG-RSNUM <> ' '.
Select * from RESB where rsnum = I_MSEG-RSNUM and
RSPOS = I_MSEG-RSPOS and
Matnr = I_MSEG-Matnr.
If SY-SUBRC = 0.
ZQTY = ( RESB-BDMNG - RESB-ENMNG ).
If I_MSEG-Menge > ceil( ZQTY ).
MESSAGE E002(Z001) with I_MSEG-MATNR.
Endif.
Endif.
Endselect.
Endif.

ENDIF. "060825 ZBCHAO

*zbchao end.

* ZBCHAO 2005/07/22 Check net weight is zero when po receipt for Hayco
TABLES: MARA.
DATA: ZNETW LIKE MARA-NTGEW.

*ZBCHAO 2006/07/02 ADDED "IF I_MSEG-WERKS = '2100' ".
IF I_MSEG-WERKS = '2100' OR I_MSEG-WERKS = '2110'
OR I_MSEG-WERKS = '2200' OR I_MSEG-WERKS = '2210' .

If I_MSEG-BWART = '101'.
ZNETW = 0.
SELECT SINGLE NTGEW INTO ZNETW
FROM MARA
WHERE MATNR = I_MSEG-MATNR.
IF ZNETW = 0.
MESSAGE E003(Z001) with I_MSEG-MATNR.
ENDIF.
ENDIF.

* zbchao 2005/07/22 end.

IF I_MSEG-BWART = '541'.
IF I_MSEG-UMCHA <> 'LOAN'.
IF I_MSEG-UMCHA <> 'SUBCON'.
IF I_MSEG-UMCHA <> 'A1-LOAN'.
IF I_MSEG-UMCHA <> 'A1-SUBCON'.
IF I_MSEG-UMCHA <> 'DD1-LOAN'.
IF I_MSEG-UMCHA <> 'DD1-SUBCON'.
IF I_MSEG-UMCHA <> 'SUBCON-B'. "ZBCHAO 2005/07/07
MESSAGE E000(Z001).
* Please input either 'LOAN' or 'SUBCON' for the Batch No.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.

IF I_MSEG-UMCHA = 'LOAN' or I_MSEG-UMCHA = 'A1-LOAN'
or I_MSEG-UMCHA = 'DD1-LOAN'.
IF I_MSEG-UMBAR = 'HAYCO' or I_MSEG-UMBAR = ''.
Else.
MESSAGE E001(Z001).
ENDIF.
ENDIF.

IF I_MSEG-UMCHA = 'SUBCON' or I_MSEG-UMCHA = 'A1-SUBCON'
or I_MSEG-UMCHA = 'DD1-SUBCON'
or I_MSEG-UMCHA = 'SUBCON-B'.

IF I_MSEG-UMBAR = 'SUBCON' or I_MSEG-UMBAR = ''.
Else.
MESSAGE E001(Z001).
ENDIF.
ENDIF.

ENDIF." IF I_MSEG-WERKS = '2100' ZBCHAO 2006/07/02

*ZBC BEGIN 2007/07/27
*For 2420&2430 production order receipt,if assembly cost is 0,then can't
*be done.Need Accounting to update cost.
Tables: MBEW.
data v_cost type mbew-verpr.

clear v_cost.
IF I_MSEG-WERKS = '2420' OR I_MSEG-WERKS = '2430'.
If I_MSEG-BWART = '101' and I_MSEG-AUFNR <> Space.
SELECT single *
FROM MBEW
WHERE MATNR = I_MSEG-MATNR AND
BWKEY = I_MSEG-WERKS.

IF MBEW-VPRSV = 'V'.
V_cost = MBEW-VERPR.
ELSE.
V_cost = MBEW-STPRS.
ENDIF.
IF V_COST = 0.
MESSAGE E006(Z001).
ENDIF.
endif.
ENDIF.

==================================

按日期产生批次及特性值出口

Project ZBATCH01 External Batch Number Determination

Enhancement Impl Exp MBCF0002 Customer function exit: Segment text

Function exit EXIT_SAPMM07M_001

Enhancement Impl Exp MBCFC004 Maintenance of batch specifications f

Function exit EXIT_SAPMM07M_004

Enhancement Impl Exp SAPLV01Z CFCs for internal batch number assign

Function exit EXIT_SAPLV01Z_001
EXIT_SAPLV01Z_002

Enhancement: EXIT_SAPMM07M_004

INCLUDE ZXMBCU04.

*&---------------------------------------------------------------------*
*& Include ZXMBCU04 *
*&---------------------------------------------------------------------*
DATA : P_ATINN TYPE CHARACTERS-ATINN,
P_DATE(10) TYPE C,
ZQTY LIKE RESB-BDMNG,
WA_MHCA LIKE MCHA.

STATICS: Begin of ISSTAB OCCURS 10,
MATNR Like RESB-MATNR,
QTY LIKE RESB-BDMNG,
End of ISSTAB.

Tables: USR01.

* Default GR Date to New Batch
LOOP AT VALUES WHERE ATNAM = 'GR-DATE3'.ENDLOOP.
IF SY-SUBRC <> 0.
LOOP AT CHARACTERS WHERE ATNAM = 'GR-DATE3'.
P_ATINN = CHARACTERS-ATINN.
EXIT.
ENDLOOP.
SELECT SINGLE * FROM MCHA INTO WA_MHCA WHERE
( MATNR = I_MSEG-MATNR ) AND
( WERKS = I_MSEG-WERKS ) AND
( CHARG = I_MSEG-CHARG ).
IF SY-SUBRC <> 0.
Select * from USR01 where BNAME = sy-uname. endselect.


If USR01-DATFM = 1.
CONCATENATE SY-DATUM+6(2) '.' SY-DATUM+4(2) '.' SY-DATUM+0(4)
INTO P_DATE.
endif.
If USR01-DATFM = 2.
CONCATENATE SY-DATUM+4(2) '/' SY-DATUM+6(2) '/' SY-DATUM+0(4)
INTO P_DATE.
endif.
If USR01-DATFM = 3.
CONCATENATE SY-DATUM+4(2) '-' SY-DATUM+6(2) '-' SY-DATUM+0(4)
INTO P_DATE.
endif.
If USR01-DATFM = 4.
CONCATENATE SY-DATUM+0(4) '.' SY-DATUM+4(2) '.' SY-DATUM+6(2)
INTO P_DATE.
endif.
If USR01-DATFM = 5.
CONCATENATE SY-DATUM+0(4) '/' SY-DATUM+4(2) '/' SY-DATUM+6(2)
INTO P_DATE.
endif.
If USR01-DATFM = 6.
CONCATENATE SY-DATUM+0(4) '-' SY-DATUM+4(2) '-' SY-DATUM+6(2)
INTO P_DATE.
endif.

IF NOT P_ATINN IS INITIAL.
VALUES-ATINN = P_ATINN.
VALUES-ATNAM = 'GR-DATE3'.
VALUES-ATWTB = P_DATE.
APPEND VALUES.
ENDIF.
ENDIF.
ENDIF.


* Copy Batch No to Characteristic Batch_no
LOOP AT VALUES WHERE ATNAM = 'ZBNO'.ENDLOOP.
IF SY-SUBRC <> 0.
LOOP AT CHARACTERS WHERE ATNAM = 'ZBNO'.
P_ATINN = CHARACTERS-ATINN.
EXIT.
ENDLOOP.
VALUES-ATINN = P_ATINN.
VALUES-ATNAM = 'ZBNO'.
VALUES-ATWTB = I_MSEG-CHARG.
APPEND VALUES.
ENDIF.

*IF SY-MANDT = '820'.
* Copy Vendor Code to Characteristic Vendor
LOOP AT VALUES WHERE ATNAM = 'VENDOR'.ENDLOOP.
if SY-SUBRC <> 0.
LOOP AT CHARACTERS WHERE ATNAM = 'VENDOR'.
P_ATINN = CHARACTERS-ATINN.
EXIT.
ENDLOOP.
VALUES-ATINN = P_ATINN.
VALUES-ATNAM = 'VENDOR'.
VALUES-ATWTB = I_MSEG-LIFNR.
APPEND VALUES.
ENDIF.
*endif.

====================================

Modification of New Batch Numbers (from Internal Assignment)

Enchancement: EXIT_SAPLV01Z_002

INCLUDE ZXVBZU02.

*&---------------------------------------------------------------------*
*& Include ZXVBZU02 *
*&---------------------------------------------------------------------*

DATA: YY(2) TYPE C,
YYYY(4) TYPE C,
DDD(3) TYPE N,
SSS(3) TYPE N,
BEG_CHARG(10) TYPE C,
XX(6) TYPE C,
ZBEG LIKE SY-DATUM,
BDATE LIKE SY-DATUM.

TABLES: MCH1.


* Default Date Code + Sequene number to batch
IF X_BNCOM-BWART = '101' or X_BNCOM-BWART = '561'
or X_BNCOM-BWART = '501'.

YYYY = SY-DATUM+0(4).
CONCATENATE YYYY '0101' INTO ZBEG.
DDD = ( SY-DATUM - ZBEG ) + 1.
YY = SY-DATUM+2(2).
CONCATENATE YY DDD '%' INTO XX.
SELECT * FROM MCH1 WHERE MATNR = X_BNCOM-MATNR AND
CHARG LIKE XX.
ENDSELECT.

IF SY-SUBRC = 0.
SSS = MCH1-CHARG+5(3).
SSS = SSS + 1.
CONCATENATE YY DDD SSS INTO NEW_CHARG.
ELSE.
CONCATENATE YY DDD '001' INTO NEW_CHARG.
ENDIF.

ENDIF.

==============================

User Exit for Evaluation PP-MRP Material Requirements Planning

EXIT_SAPLM61R_001

*----------------------------------------------------------------------*
* INCLUDE ZXM61U03 *
*----------------------------------------------------------------------*

TABLES: VBAK.
TABLES: EBAN.


***********************************************************************
* Example 1 User-Exit 1 / Individual Lines
* Column --&gt Requested delivery date
IF NOT IBUTT1 IS INITIAL.

*---------------------You can see the different MRP-Elements in the
*---------------------include: 'MM61XVAL':
* ...
*--&gt Kennzeichen Dispositionselemente
* constants:
* wkbst(2) type c value 'WB', "Werksbestand
* lgbst(2) type c value 'LB', "Lagerortbestand
* kdbst(2) type c value 'KB', "Kundeneinzelbestand
* .....


IF IMDEZEXIT-DELKZ = 'VC'
OR IMDEZEXIT-DELKZ = 'VB'
OR IMDEZEXIT-DELKZ = 'VA'
OR IMDEZEXIT-DELKZ = 'VJ'.
SELECT SINGLE VDATU FROM VBAK INTO VBAK-VDATU
WHERE VBELN = IE3MDPSLX-DELNR.
IF SY-SUBRC = 0.
MOVE VBAK-VDATU TO EMDEZX_USEX1 . "Requested delivery date
ENDIF.
ENDIF.
ENDIF.
************************************************************************


***********************************************************************
* Example 2 User Exit 2 Individual Lines
* Release-Status of a purchase-requesition
IF NOT IBUTT2 IS INITIAL.
IF IMDEZEXIT-DELKZ = 'BA'.
SELECT SINGLE FRGKZ FROM EBAN INTO EBAN-FRGKZ
WHERE BANFN = IE3MDPSLX-DELNR
AND BNFPO = IE3MDPSLX-DELPS.
IF SY-SUBRC = 0.
MOVE EBAN-FRGKZ TO EMDEZX_USEX2.
ENDIF.
ENDIF.
ENDIF.
************************************************************************


************************************************************************
* Example 3 User Exit 3 Individual Lines
IF NOT IBUTT3 IS INITIAL.
MOVE 'Individual Text' TO EMDEZX_USEX3. "Text
ENDIF.
************************************************************************


*----------------------------------------------------------------------
* Period Totals
* -------------
* 1) The User Exit fills columns in the stock/requirements
* list an the mrp list when the corresponding button is pressed on
* the period totals screen. Three different columns are possible.
* The columns 1 and 2 can only be filled with quantities,
* column 3 can be filled with a 30-character-string.
* 2) The same user exit is used in the repetitive planning table
* There, the values of exit 1 and 2 can be displayed as rows,
* if the user selects these rows. Exit 3 is not availible.
*----------------------------------------------------------------------

*--&gt Data definitions
STATICS: LAST_PLAAB LIKE MDSU-PLAAB, "last planning segment
LAST_PLANR LIKE MDSU-PLANR, "number of this planning segment
FZ_PROD TYPE F, "summarized production
FZ_REQUI TYPE F. "summarized requirements

************************************************************************
*--&gt Example 1 User Exit 1 Period totals
*--&gt Example: Summarize production quantities by mrp segment
* along the time axis
*--&gt check that user exit 1 is active
IF NOT IBUTT1_PS IS INITIAL.
*--&gt New list(table) or new MRP-segment: Start summation
IF INEW_ENTRY EQ 'X'
OR IMDSUX-PLAAB NE LAST_PLAAB
OR IMDSUX-PLANR NE LAST_PLANR.
*--&gt No stock: start with receipt quantity
IF IMDSUX-DELKZ NE 'WB'
AND IMDSUX-DELKZ NE 'LB'
AND IMDSUX-DELKZ NE 'KB'
AND IMDSUX-DELKZ NE 'PB'
AND IMDSUX-DELKZ NE 'LK'.
MOVE IMDSUX-MNG03 TO FZ_PROD.
*--&gt Stock: Start with 0
ELSE.
CLEAR FZ_PROD.
ENDIF.
*--&gt Same material, same MRP-segment: Add production quantity
ELSE.
FZ_PROD = FZ_PROD + IMDSUX-MNG03.
ENDIF.
*--&gt Fill output quantity 1 for period totals
MOVE FZ_PROD TO EMDSUX_USEX1.
ENDIF.
************************************************************************


************************************************************************
*--&gt Example 2 User Exit 2 Period totals
*--&gt Example: Summarize requirements by mrp segment
* along the time axis
*--&gt check that user exit 2 is active
IF NOT IBUTT2_PS IS INITIAL.
*--&gt New list(table) or new MRP-segment: Start summarization from zero
IF INEW_ENTRY EQ 'X'
OR IMDSUX-PLAAB NE LAST_PLAAB
OR IMDSUX-PLANR NE LAST_PLANR.
FZ_REQUI = IMDSUX-MNG01 + IMDSUX-MNG02.
*--&gt Same material, same MRP-segment: Add requirement quantities
* (forecast + requirements)
ELSE.
FZ_REQUI = FZ_REQUI + IMDSUX-MNG01 + IMDSUX-MNG02.
ENDIF.
*--&gt Fill output quantity 2 for period totals
MOVE FZ_REQUI TO EMDSUX_USEX2.
ENDIF.
************************************************************************


************************************************************************
*--&gt Example 3 User Exit 3 - period totals
* Only in stock/requirements- and mrp-list
* Not availible in the REM planning table!
IF NOT IBUTT3_PS IS INITIAL.
MOVE 'Individual Text' TO EMDSUX_USEX3.
ENDIF.

MOVE IMDSUX-PLAAB TO LAST_PLAAB.
MOVE IMDSUX-PLANR TO LAST_PLANR.

************************************************************************

===========================

User Exit for Evaluation PP-MRP MRP / Text for Buttons

EXIT_SAPMM61R_001

*----------------------------------------------------------------------*
* INCLUDE ZXM61U04 *
*----------------------------------------------------------------------*

***********************************************************************
*--&gt Example 1 for User Exit Column 1 / Individual Lines
*--&gtRequested Delivery Date
CASE SY-LANGU. "Text depends on the system-language
WHEN 'E'.
MOVE 'User Exit / Req.de.dt' TO BUTTON1_EZ.
WHEN 'D'.
MOVE 'User Exit / Wunschlieferdatum' TO BUTTON1_EZ.
ENDCASE.
************************************************************************


************************************************************************

*--&gt Example 2 for User Exit Column 2 / Individual Lines

*--&gtRelease-Status of a Purchase Requesition
*--&gtThe buttons / column appears only when the procurement type is
*--&gt not 'In-house production'.
IF NOT IMT61D-BESKZ = 'E'.
CASE SY-LANGU.
WHEN 'E'.
MOVE 'User Exit / PR Release-Status' TO BUTTON2_EZ.
WHEN 'D'.
MOVE 'User Exit / Banf Freigabe' TO BUTTON2_EZ.
ENDCASE.
ENDIF.
************************************************************************


************************************************************************

*--&gt Example 3 for User Exit Column 3 / Individual Lines

*--&gtIndividual Text
MOVE 'User Exit / Text' TO BUTTON3_EZ.
************************************************************************


************************************************************************
*--&gt Example 1 User Exit 1 / period totals
*--&gt Summarize production quantities by mrp segment
* along the time axis


CASE SY-LANGU. "Text depends on the system-language
WHEN 'E'.
MOVE 'Comulative quantity' TO BUTTON1_PS.
WHEN 'D'.
MOVE 'Summierte Zug鋘ge' TO BUTTON1_PS.
ENDCASE.

************************************************************************


************************************************************************
*--&gt Example 2 User Exit 2 / period totals
*--&gt Summarize requirements by mrp segment
* along the time axis

CASE SY-LANGU. "Text depends on the system-language
WHEN 'E'.
MOVE 'Comulative requirements' TO BUTTON2_PS.
WHEN 'D'.
MOVE 'Summierte Bedarfe' TO BUTTON2_PS.
ENDCASE.

************************************************************************


************************************************************************

*--&gt Example 3 User Exit 3 / period totals
* Only in stock/requirements- and mrp-list
* Not availible in the REM planning table!

MOVE 'F3' TO BUTTON3_PS.
************************************************************************

==================================

Changes to Communication Structure for Release of Purchasing Documents

EXIT_SAPLEBND_002

*&---------------------------------------------------------------------*
*& Include ZXM06U22 *
*&---------------------------------------------------------------------*
* If PDUMMY = 'X' then Approval Procedure is Activate


TABLES: EBAN.
DATA: MRP_IND TYPE EBAN.
DATA: BEGIN OF Z_BEKPO OCCURS 50.
INCLUDE STRUCTURE BEKPO.
DATA: END OF Z_BEKPO.


LOOP AT IT_BEKPO INTO Z_BEKPO.

* IF PO line item has no P.R. Reference
IF Z_BEKPO-BANFN EQ SPACE.

WRITE: Z_BEKPO-BANFN, Z_BEKPO-BNFPO.
MOVE 'X' TO I_CEKKO-PDUMMY.
EXIT.

ELSE.
* If PR Creation Indicator <> B
SELECT SINGLE * FROM EBAN INTO MRP_IND WHERE
BANFN = Z_BEKPO-BANFN AND
BNFPO = Z_BEKPO-BNFPO.
* IF SY-SUBRC <> 0 or MRP_IND-ESTKZ NE 'B'. update by ricky 050802
IF SY-SUBRC <> 0 or ( MRP_IND-ESTKZ NE 'B' and
MRP_IND-ESTKZ NE 'U').
MOVE 'X' TO I_CEKKO-PDUMMY.
EXIT.
ENDIF.
ENDIF.

ENDLOOP.

MOVE-CORRESPONDING I_CEKKO TO E_CEKKO.

=================================

Extend Communication Structure KOMP for Pricing

Include PR No in PO Pricing Condition

EXIT_SAPLMEKO_002

*&---------------------------------------------------------------------*
*& Include ZXM06U15 *
*&---------------------------------------------------------------------*
MOVE I_KOMP TO E_KOMP.
MOVE I_EKPO-BANFN TO E_KOMP-ZZBANFN.
MOVE I_EKPO-BNFPO TO E_KOMP-ZZBNFPO.

====================================

DELPHI连接SAP

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, OleCtrls, SAPFunctionsOCX_TLB,
SAPLogonCtrl_TLB;
type
TForm1 = class(TForm)
Button1: TButton;
Panel1: TPanel;
Panel2: TPanel;
SAPLogonControl1: TSAPLogonControl;
SAPFunctions1: TSAPFunctions;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Tab,Funct, Connection : VARIANT ;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Connection := SAPLogoncontrol1.newConnection;
Connection.User := 'if1';
Connection.System := '00';
Connection.Client := '300';
Connection.ApplicationServer:= '172.16.98.20';
Connection.SystemNumber := '00';
Connection.Password := '801104';
Connection.Language := 'ZH' ;
if Connection.LogOn(0,true) = true then
begin
SAPFunctions1.Connection := Connection;
funct := sapFunctions1.add('BAPI_MATERIAL_GET_DETAIL');
funct.exports('MATERIAL').value := '000000000013022256';
if not funct.call then
showMessage(funct.exception)
else
begin
tab := funct.imports.item('MATERIAL_GENERAL_DATA');
Panel1.caption := tab.value(1);
Panel2.caption := tab.value(6);
end;
end;
end;
end.

=================================


 

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7204478/viewspace-624454/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/7204478/viewspace-624454/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
@RestController public class LoginController { @Resource(name = "userServiceImpl") private IUserService userService; @RequestMapping(value = "/login/login", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) public Result<User> login(HttpRequest request, HttpServletResponse response) { return userService.login(request, response); } @RequestMapping(value = "/login/check", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) public Result<User> check(HttpServletRequest request, HttpServletResponse response) { Result<User> result = new Result<>(); String userId = SessionContext.get("user_id"); if (StringUtils.isEmpty(userId)) { Cookie loginTypeCookie = new Cookie("login_type", "0"); loginTypeCookie.setPath("/"); loginTypeCookie.setSecure(true); response.addCookie(loginTypeCookie); result.set("login_type", 0); } else { Cookie loginTypeCookie = new Cookie("login_type", "1"); loginTypeCookie.setPath("/"); loginTypeCookie.setSecure(true); response.addCookie(loginTypeCookie); result.set("login_type", 1); result.set("user_id", SessionContext.get("user_id")); result.set("user_name", SessionContext.get("user_name")); result.set("login_name", SessionContext.get("login_name")); result.set("user_image_id", SessionContext.get("user_image_id")); result.set("role_type", SessionContext.get("role_type")); // 检查token 是否需要更新 HttpSession session = request.getSession(false); if(session != null){ // 更新 session String issueAtStr = SessionContext.get("issueAt"); if(StringUtils.isNotEmpty(issueAtStr)){ Date issueAt = DateUtils.stringToDate(issueAtStr, DateConst.DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI_SS_SSS); if(issueAt != null && TokenUtils.shouldTokenRefresh(issueAt)){ Map<String, Object> claims = new HashMap<>(10); claims.put("user_id", String.valueOf(SessionContext.getInt("user_id"))); claims.put("user_name", SessionContext.get("user_name")); claims.put("login_name", SessionContext.get("login_name")); claims.put("user_image_id", SessionContext.get("user_image_id")); claims.put("role_type", String.valueOf(SessionContext.getInt("role_type"))); String token = TokenUtils.createToken(claims); session.setAttribute("token", token); result.set("token", token); Cookie tokenCookie = new Cookie("token", token); tokenCookie.setPath("/"); response.addCookie(tokenCookie); } } } } return result; } @RequestMapping(value = "/login/exit", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) public Result<User> exit(HttpRequest request) { HttpSession session = request.getSession(false); if (session != null) { session.invalidate(); } return new Result<>(); } }
04-24

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值