cancel
Showing results for 
Search instead for 
Did you mean: 

BADI's in ME21N

Former Member
0 Kudos

We have created a tab on the PO with some custom fields. However, some of these fields drive the account assignment. Is there way to call IF_EX_ME_PROCESS_PO_CUSTPROCESS_ACCOUNT to execute our custom logic for account determination or set an indicator after the processing our custom screen in IF_EX_ME_PROCESS_PO_CUSTPROCESS_ITEM has been processed?

What we are finding is that IF_EX_ME_PROCESS_PO_CUST~PROCESS_ACCOUNT is only executed once unless something in the accounting data is changed. Therefore, when something else is changed on the PO in the custom part, accounting is not getting redetermined.

Accepted Solutions (1)

Accepted Solutions (1)

fisher_li
Participant
0 Kudos

David,

In BADI ME_PROCESS_PO_CUST method PROCESS_ITEM, you can still access your account assignment data.

The following are the sample codes.

Regards,

Fisher Li

DATA: LW_ITEM TYPE MEPOITEM.

DATA: LW_POSTED_ITEM TYPE MEPOITEM.

DATA: ITAB_ACCT TYPE PURCHASE_ORDER_ACCOUNTINGS,

ACCT_INTERFACE TYPE PURCHASE_ORDER_ACCOUNTING,

LW_ACCT TYPE MEPOACCOUNTING,

LW_POSTED_ACCT TYPE MEPOACCOUNTING.

  • Get currently being modified data for the PO line item

CALL METHOD IM_ITEM->GET_DATA

RECEIVING

RE_DATA = LW_ITEM.

  • Get posted data for the PO line item

CALL METHOD IM_ITEM->GET_PERSISTENT_DATA

IMPORTING

EX_DATA = LW_POSTED_ITEM

EXCEPTIONS

NO_DATA = 1.

IF SY-SUBRC = 1.

CLEAR LW_POSTED_ITEM.

ENDIF.

REFRESH ITAB_ACCT.

CALL METHOD IM_ITEM->GET_ACCOUNTINGS

RECEIVING

RE_ACCOUNTINGS = ITAB_ACCT.

LOOP AT ITAB_ACCT INTO ACCT_INTERFACE.

CLEAR LW_ACCT.

  • Get the newly updated PO item data

CALL METHOD ACCT_INTERFACE-ACCOUNTING->GET_DATA

RECEIVING

RE_DATA = LW_ACCT.

CLEAR LW_POSTED_ACCT.

  • Get the posted PO item data

CALL METHOD ACCT_INTERFACE-ACCOUNTING->GET_PERSISTENT_DATA

IMPORTING

EX_DATA = LW_POSTED_ACCT

EXCEPTIONS

NO_DATA = 1.

IF SY-SUBRC > 0.

CLEAR LW_POSTED_ACCT.

ENDIF.

IF LW_ACCT-LOEKZ <> LW_POSTED_ACCT-LOEKZ OR " Delete indicator

LW_ACCT-PRCTR <> LW_POSTED_ACCT-PRCTR OR " Cost center/WBS element

LW_ACCT-SAKTO <> LW_POSTED_ACCT-SAKTO. " GL acct

  • Account assignment was changed

IF W_MODIFIED NS 'ACCT1'.

CONCATENATE W_MODIFIED 'ACCT1' INTO W_MODIFIED SEPARATED BY '-'.

ENDIF.

ENDIF.

IF LW_ACCT-VPROZ <> LW_POSTED_ACCT-VPROZ OR " Dist. Percentage

LW_ACCT-GSBER <> LW_POSTED_ACCT-GSBER OR " Business area

LW_ACCT-AUFNR <> LW_POSTED_ACCT-AUFNR. " Internal order

  • Account assignment was changed

IF W_MODIFIED NS 'ACCT2'.

CONCATENATE W_MODIFIED 'ACCT2' INTO W_MODIFIED SEPARATED BY '-'.

ENDIF.

ENDIF.

ENDLOOP.

Answers (1)

Answers (1)

Ramki
Active Contributor
0 Kudos

Hi

I guess it works only when you try to change the data.

If you want to force the users to change the data in acc assignment, may be you can try 'overall check' there.

Or

Pl also check BADI ME_PURCHDOC_POSTED.

Best regards

Ramki