05-15-2007 6:28 PM
Hi experts,
i'm trying to getting access to the data structures XMKPF XMSEG of the MB_DOCUMENT_BADI but i can't reference them by typing XMKPF-FIELD or XMSEG-FIELD it returns an error : "they isn't header tables" , how can i get access to these structures to validate some fields when the user saves a record on the MIGO tcode ?.
Tnxs a lot.
05-15-2007 6:34 PM
Hi
Implement the BADI in SE19 Tcode and use the code similar to the following
if needed change as per your requirement
this is a sample code used by me
BAdI Name: ZMB_DOCUMENT_BADI (Implementation name) Controlling the Unlimited GR in PO from MIGO
Definition Name: MB_DOCUMENT_BADI
Interface Name : IF_EX_MB_DOCUMENT_BADI
Implementing Class: ZCL_IM_MB_DOCUMENT_BADI
Method : MB_DOCUMENT_BEFORE_UPDATE
************************************************************************
method IF_EX_MB_DOCUMENT_BADI~MB_DOCUMENT_BEFORE_UPDATE .
DATA : return TYPE STANDARD TABLE OF bapiret2 INITIAL SIZE 0 ,
poitem TYPE STANDARD TABLE OF bapimepoitem INITIAL SIZE 0,
poitemx TYPE STANDARD TABLE OF bapimepoitemx INITIAL SIZE 0,
i_ekbe TYPE STANDARD TABLE OF ekbe INITIAL SIZE 0.
DATA : xmkpf1 TYPE mkpf,
xmseg1 TYPE mseg,
w_ekbe TYPE ekbe,
w_ekpo TYPE ekpo,
poitem1 TYPE bapimepoitem,
gv_qty TYPE menge13,
poitemx1 TYPE bapimepoitemx.
*BEFORE
LOOP AT xmseg INTO xmseg1.
IF xmseg1-bwart EQ '103' AND xmseg1-grund EQ '0001'.
poitem1-po_item = xmseg1-ebelp.
poitem1-unlimited_dlv = 'X'.
APPEND poitem1 TO poitem.
poitemx1-po_item = xmseg1-ebelp.
poitemx1-unlimited_dlv = 'X'.
APPEND poitemx1 TO poitemx.
CALL FUNCTION 'BAPI_PO_CHANGE'
EXPORTING
purchaseorder = xmseg1-ebeln
TABLES
return = return
poitem = poitem
poitemx = poitemx.
ELSEIF xmseg1-bwart EQ '104' AND xmseg1-grund EQ '0001'.
*
COMMIT WORK .
WAIT UP TO 3 SECONDS.
poitem1-po_item = xmseg1-ebelp.
poitem1-unlimited_dlv = space.
APPEND poitem1 TO poitem.
poitemx1-po_item = xmseg1-ebelp.
poitemx1-unlimited_dlv = 'X'.
APPEND poitemx1 TO poitemx.
CALL FUNCTION 'BAPI_PO_CHANGE'
EXPORTING
purchaseorder = xmseg1-ebeln
TABLES
return = return
poitem = poitem
poitemx = poitemx.
read TABLE return with key type = 'S'
ID = '06'
NUMBER = '023' TRANSPORTING NO FIELDS.
IF SY-SUBRC EQ 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
ENDIF.
ELSEIF xmseg1-bwart EQ '105'.
SELECT * INTO TABLE i_ekbe FROM ekbe WHERE ebeln = xmseg1-ebeln AND
ebelp = xmseg1-ebelp AND
bwart = '105' OR bwart = '106'.
LOOP AT i_ekbe INTO w_ekbe.
IF w_ekbe-bwart EQ '105'.
gv_qty = gv_qty + w_ekbe-menge.
ELSE.
gv_qty = gv_qty - w_ekbe-menge.
ENDIF.
ENDLOOP.
*
SELECT single * INTO w_ekpo FROM ekpo WHERE ebeln = xmseg1-ebeln AND
ebelp = xmseg1-ebelp.
gv_qty = w_ekpo-menge - gv_qty.
IF xmseg1-menge > gv_qty.
MESSAGE ID 'ZM_MSG' TYPE 'E' NUMBER '012' raising .
MESSAGE ID 'ZM_MSG' TYPE 'E' NUMBER '000' WITH 'You already reached the PO quantity'
raising exception error_message.
ENDIF.
ENDIF.
ENDLOOP.
endmethod.
Reward points if useful
Regards
Anji
05-15-2007 6:35 PM
Try using Field-Symbols....
FIELD-SYMBOLS: <XMKPF> TYPE XMKPF.
ASSIGN XMKPF TO <XMKPF>.
Then, you can access <XMKPF>-FIELD
Greetings,
Blag.