0% found this document useful (0 votes)
203 views8 pages

Badi Bharath

This document contains code for various purposes: 1) It defines a FORM for processing screen data and returning a return code. 2) It includes code for FICO user exits and BADIs related to document posting. 3) It contains code within a BADI to reset a release strategy when a cost center is changed at the item level during a purchase order change. 4) It includes logic written in a BADI and user exit to block customer master data creation/changes based on sales organization and company code values.

Uploaded by

Nagesh reddy
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
203 views8 pages

Badi Bharath

This document contains code for various purposes: 1) It defines a FORM for processing screen data and returning a return code. 2) It includes code for FICO user exits and BADIs related to document posting. 3) It contains code within a BADI to reset a release strategy when a cost center is changed at the item level during a purchase order change. 4) It includes logic written in a BADI and user exit to block customer master data creation/changes based on sales organization and company code values.

Uploaded by

Nagesh reddy
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 8

FORM entry USING return_code us_screen.

DATA: lf_retcode TYPE sy-subrc.


CLEAR retcode.
xscreen = us_screen.
Our select queries
Populating data into Itab/wa/variables
Calling SMF vth FM
Writing code if u need download SMF into PDF and calling dynamic FM and download
and save PDF logic

PERFORM processing USING us_screen


CHANGING lf_retcode.
IF lf_retcode NE 0.
return_code = 1.
ELSE.
return_code = 0.
ENDIF.

ENDFORM

FOR FICO user exits-------new badi requirment

AC_DOCUMENT_POST
CO_DOCUMENT_POST

For AC document posting from SD

EXIT_SAPLKEII_001
EXIT_SAPLV60B_008

IF sy-tcode = 'FBCJ'.
DATA gv_user TYPE usnam.
DATA : lwa_im_document1 LIKE LINE OF it_cobk.

CLEAR : lwa_im_document1.
READ TABLE it_cobk INTO lwa_im_document1 INDEX 1.

IF lwa_im_document1-refbk = '6430'.
SELECT SINGLE accountant FROM tcj_documents INTO gv_user
WHERE comp_code EQ lwa_im_document1-refbk
AND posting_number EQ lwa_im_document1-refbn .
IF gv_user IS NOT INITIAL AND sy-uname EQ gv_user.

MESSAGE 'cant post with same user' TYPE 'W' display like 'E'.

CALL FUNCTION 'POPUP_TO_INFORM'


EXPORTING
titel = 'Error Message'
txt1 = '' "lwa_im_document1-refbn "' '
txt2 = 'Can not post with same user'
* TXT3 = ' '
* TXT4 = ' '
.
leave TO SCREEN 100.
ENDIF.
CLEAR: lwa_im_document1,gv_user.
ENDIF.
ENDIF.

this below code for me22n badi code

*{***** CR / TFS 1232 reset the release stategy while cost center change at item
level

************ CR / TFS 1232 BSAKI ********


IF sy-tcode = 'ME22N' ."and sy-ucomm = 'MESAVE'.

DATA : lv_kostl Type ekkn-kostl , lv_kostl_save type ekkn-kostl .


+.

data : rt_item type PURCHASE_ORDER_ITEMS,


wa_item TYPE LINE OF PURCHASE_ORDER_ITEMS,
wa_acc_save TYPE mepoaccounting ,
wa_acc TYPE mepoaccounting ,
wa_item_new TYPE MEPOITEM,
wa_item_save TYPE MEPOITEM,
wa_item_prv TYPE MEPOITEM,
rt_acc TYPE purchase_order_accountings,
rw_acc TYPE LINE OF purchase_order_accountings,
l_header type mepoheader,
l_header_save type mepoheader,
wa_cdpos type cdpos,
lv_string TYPE CHAR70,
Rt_HEADER TYPE REF TO IF_PURCHASE_ORDER_MM ,
Re_header TYPE REF TO IF_PURCHASE_ORDER_MM .

data : flag TYPE c .

clear : l_header , rt_item , wa_item , wa_item_new , wa_item_new , wa_item_save ,


rw_acc , wa_acc , wa_acc_save , lv_string , wa_cdpos .

CALL METHOD im_header->GET_DATA


RECEIVING
re_data = l_header.

if l_header-frgke ne 'B' and l_header-frgzu ne ' ' and l_header-frgrl ne 'X'.

CALL METHOD im_header->GET_ITEMS " Items level data


RECEIVING
re_items = rt_item.

loop at rt_item into wa_item .

CALL METHOD wa_item-ITEM->get_accountings " account assignment data


based on single item no.
RECEIVING
re_accountings = rt_acc.
if rt_acc is not INITIAL. " checking acc0nting data is
ther r not

call METHOD wa_item-ITEM->get_data RECEIVING " single item no. data


RE_DATA = wa_item_new .

if wa_item_new-KNTTP = 'K'. " checking for cost center r not


if wa_item_new-LOEKZ = ' ' .
* if wa_item_new-LOEKZ ne 'L' or wa_item_new-LOEKZ ne 'S' . " checking for
deletion item data for skip to check forther changes

call METHOD wa_item-ITEM->GET_PERSISTENT_DATA " fetching previous saved


item data for validating
IMPORTING ex_data = wa_item_save
EXCEPTIONS " exception handling for new
item data entered
no_data = 1.

*looping acct assignment data becoz for single item data we would give no. of kostl
values

if wa_item_save is not INITIAL. "checking for new data ,if it is new data ,it will
skip d next step

LOOP AT rt_acc INTO rw_acc .

CALL METHOD rw_acc-accounting->get_data " single acct assignment no.


data
RECEIVING
re_data = wa_acc.

call METHOD rw_acc-accounting->GET_PERSISTENT_DATA " single acct


assignment no. saved/ prvious data
IMPORTING ex_data = wa_acc_save
EXCEPTIONS " exception handling
no_data = 1.

IF wa_acc-kostl eq wa_acc_save-kostl and wa_item_new-kostl eq


wa_item_save-kostl ."

CONTINUE.
ELSE .

CONCATENATE sy-mandt wa_item_new-ebeln wa_acc-ebelp wa_acc-ZEXKN into


lv_string . " for table key(cdpos) we are concatinating this

* fetching data from change document table 'CDPOS' for old and new values
of kostl field

SELECT SINGLE * from cdpos into wa_cdpos where OBJECTCLAS eq


'EINKBELEG' and
OBJECTID eq wa_item_new-
ebeln and
TABNAME eq 'EKKN' and
TABKEY eq lv_string and
FNAME eq 'KOSTL' .
* if not wa_cdpos is initial .

* comparing old and new value of kostl field in cdpos table *

If wa_cdpos-VALUE_new ne wa_cdpos-VALUE_old or wa_acc-kostl ne


wa_acc_save-kostl .

flag = 'X' .

exit.

ENDIF.
* ENDIF.
ENDIF.

CLEAR : rw_acc ,wa_acc ,wa_acc_save.

endloop.
CLEAR : wa_item_new , wa_item_save , rt_acc,rw_acc ,wa_acc ,wa_acc_save.
endif . " checking for cost center
endif. " checking for if enter new data r not
endif. " for checking deletion flag
CLEAR wa_item_new .
ENDIF. " for checking acct no is there r not
CLEAR rt_acc .
ENDLOOP.

*reseting release stategy from relese to un release state based on kostl change
value

IF flag = 'X' .

l_header-frgke = 'B'.
l_header-frgzu = ' '.
l_header-frgrl = 'X'.

PERFORM set_release_state IN PROGRAM saplmepo USING


l_header-frggr

l_header-frgsx

l_header-frgke

l_header-frgzu

l_header-frgrl .
ENDIF.

endif.
ENDIF.

this below code for customer masterdata blocking wrote logic in badi
badi definition----------->CUSTOMER_ADD_DATA
methods used-------------->READ_ADD_ON_DATA(for exporting values of sales org and
company code)
-------------->PRESET_VALUES_CCODE( changing values of companycode (Table
KNB1)).
-------------->PRESET_VALUES_SAREA( changing values of sales org (Table
KNVV)).

METHOD if_ex_customer_add_data~read_add_on_data.
if sy-tcode = 'XD01' OR sy-tcode = 'VD01' OR sy-tcode = 'FD01' .
break bsaki.
DATA : gv_bukrs TYPE bukrs , gv_vkorg TYPE vkorg .
DATA : gv_bukrs1 TYPE bukrs , gv_vkorg1 TYPE vkorg .
gv_bukrs1 = i_bukrs.
gv_vkorg1 = i_vkorg.
EXPORT gv_bukrs FROM gv_bukrs1 gv_vkorg FROM gv_vkorg1 TO MEMORY ID 'KNB'.
ENDIF.
ENDMETHOD.

METHOD if_ex_customer_add_data~preset_values_ccode.
break bsaki.
IF sy-tcode EQ 'XD01' OR sy-tcode EQ 'VD01' OR sy-tcode EQ 'FD01'.
IF i_activity = 'H' AND e_knb1-sperr IS INITIAL.

DATA : wa_knb1 TYPE knb1, wa_knvv TYPE knvv.


DATA : lt_zin_config TYPE TABLE OF zin_config,
ls_zin_config TYPE zin_config.
DATA : r_tcode TYPE RANGE OF t020-tcode,
wa_tcode LIKE LINE OF r_tcode.
DATA : gv_bukrs1 TYPE bukrs , gv_vkorg1 TYPE vkorg .
SELECT * FROM zin_config
INTO TABLE lt_zin_config
WHERE processid = '2041'. " PURILLIUM PROCESS CODE
IF lt_zin_config IS NOT INITIAL.
READ TABLE lt_zin_config INTO ls_zin_config WITH KEY fieldname1 = 'VKORG'
fieldname2 = 'BUKRS'. " PICKING SALES ORg AND CCMP CODE
IF sy-subrc = 0 .
CASE sy-tcode.
WHEN 'XD01'. " cmpny and sales org wise blocking
IMPORT gv_bukrs TO gv_bukrs1 gv_vkorg TO gv_vkorg1 FROM MEMORY ID
'KNB'. "VALIDATION PURPOSE WE EXPORT THESE VALUES IN READ_ON_DATA METHOD
IF ls_zin_config-fieldvalue2 = e_knb1-bukrs AND ls_zin_config-
fieldvalue1 = gv_vkorg1 ."Both should salesorg&Ccmp code with process code
e_knb1-sperr = 'X' .
ENDIF.
WHEN 'FD01'.
IF ls_zin_config-fieldvalue2 = e_knb1-bukrs . " company code wise
blocking
e_knb1-sperr = 'X' .
ENDIF.
ENDCASE.
ENDIF. " READ TABLE CONDITION
ENDIF. " PURILLIUM PROCESS CODE CONDITION
ENDIF. "Activity Type CONDITION
ENDIF. " TCODE CONDITION

ENDMETHOD.

this below code for customer masterdata blocking wrote logic in user exit and
implicit enhancement

EXIT_SAPMF02D_001 ( include ZXF04U01)-Customers: User Exit for Checks prior to


Saving

IF sy-tcode EQ 'XD01' OR sy-tcode EQ 'FD01' OR sy-tcode EQ 'VD01' .


DATA : lt_zin_config TYPE TABLE OF zin_config,
lt_t020 TYPE TABLE OF t020,
ls_t020 TYPE t020, lv_flag ,lv_ucomm TYPE sy-tcode,
ls_zin_config TYPE zin_config.
DATA : r_tcode TYPE RANGE OF t020-tcode,
wa_tcode LIKE LINE OF r_tcode.
* if sy-ucomm = 'UPDA' .

SELECT SINGLE fieldvalue1 fieldvalue2


FROM zin_config
INTO CORRESPONDING FIELDS OF ls_zin_config
WHERE processid = '2041'
AND fieldname1 = 'VKORG'
AND fieldname2 = 'BUKRS'.

IF ls_zin_config IS NOT INITIAL.


* READ TABLE lt_zin_config INTO ls_zin_config WITH KEY fieldname1 = 'VKORG'
fieldname2 = 'BUKRS'.
* IMPORT lv_aktyp TO ls_t020-aktyp FROM MEMORY ID 'AKTYP'.
* IF sy-subrc = 0 .
* IF ls_t020-aktyp IS INITIAL.
CLEAR : wa_tcode.
wa_tcode-sign = 'I'.
wa_tcode-option = 'EQ'.
wa_tcode-low = 'XD01'.
APPEND wa_tcode TO r_tcode.
CLEAR : wa_tcode.
wa_tcode-sign = 'I'.
wa_tcode-option = 'EQ'.
wa_tcode-low = 'FD01'.
APPEND wa_tcode TO r_tcode.
CLEAR : wa_tcode.
wa_tcode-sign = 'I'.
wa_tcode-option = 'EQ'.
wa_tcode-low = 'VD01'.
APPEND wa_tcode TO r_tcode.

SELECT * FROM t020 INTO TABLE lt_t020 WHERE tcode IN r_tcode AND aktyp = 'H'.
* ENDIF.
CASE sy-tcode.
WHEN 'XD01'. " cmpny and sales org wise blocking
IF ls_zin_config-fieldvalue1 = i_knvv-vkorg AND ls_zin_config-fieldvalue2
= i_knb1-bukrs .
READ TABLE lt_t020 INTO ls_t020 WITH KEY tcode = 'XD01' aktyp = 'H'.
IF sy-subrc = 0.
i_knvv-aufsd = '01' .
i_knvv-lifsd = '01' .
i_knvv-faksd = '01' .
i_knvv-cassd = 'X' .
i_knb1-sperr = 'X' .
lv_flag = 'X'.
EXPORT lv_flag TO MEMORY ID 'FLAG'.
EXPORT i_knvv TO MEMORY ID 'KNVV'.
EXPORT i_knb1 TO MEMORY ID 'KNB1'.
ENDIF.
ENDIF.
WHEN 'FD01'.
IF ls_zin_config-fieldvalue2 = i_knb1-bukrs . " company code wise blocking
READ TABLE lt_t020 INTO ls_t020 WITH KEY tcode = 'FD01' aktyp = 'H'.
IF sy-subrc = 0.
i_knb1-sperr = 'X' .
lv_flag = 'X'.
EXPORT lv_flag TO MEMORY ID 'FLAG'.
EXPORT i_knb1 TO MEMORY ID 'KNB1'.
ENDIF.
ENDIF.
WHEN 'VD01'.
IF ls_zin_config-fieldvalue1 = i_knvv-vkorg . "sales org wise blocking
READ TABLE lt_t020 INTO ls_t020 WITH KEY tcode = 'VD01' aktyp = 'H'.
IF sy-subrc = 0.
i_knvv-aufsd = '01' .
i_knvv-lifsd = '01' .
i_knvv-faksd = '01' .
i_knvv-cassd = 'X' .
lv_flag = 'X'.
EXPORT lv_flag TO MEMORY ID 'FLAG'.
EXPORT i_knb1 TO MEMORY ID 'KNB1'.
ENDIF.
ENDIF.
ENDCASE.

ENDIF.
* ENDIF.
*endif.
ENDIF.

implicit enhancement

*<<<<Start of Commented TFS 1115 Code inserted by bsaki


* blocking customer data while creating through Tcode - XD01
*CASE SY-TCODE.
* WHEN 'XD01'. "Both sales org and company code blocking
* data : lv_flag1 , lv_knb1 type knb1 , lv_knvv type knvv .
*
* import lv_flag to lv_flag1 from MEMORY id 'FLAG'.
*
* IF lv_flag1 = 'X' .
* import i_knb1 to lv_knb1 from MEMORY id 'KNB1'.
* import i_knvv to lv_knvv from MEMORY id 'KNVV'.
* IF lv_knb1 is not INITIAL and lv_knvv is not INITIAL.
* knvv-aufsd = lv_knvv-aufsd .
* knvv-lifsd = lv_knvv-lifsd .
* knvv-faksd = lv_knvv-faksd .
* knvv-CASSD = lv_knvv-CASSD .
* knb1-sperr = lv_knb1-sperr .
* endif.
* ENDIF.
** ENDIF.
* WHEN 'FD01'. " company code wise blocking
* data : lv_flag2 , lv_knb12 type knb1 .
*
* import lv_flag to lv_flag2 from MEMORY id 'FLAG'.
*
* IF lv_flag2 = 'X' .
* import i_knb1 to lv_knb12 from MEMORY id 'KNB1'.
* IF lv_knb12 is not INITIAL.
* knb1-sperr = lv_knb12-sperr .
* endif.
* ENDIF.
* WHEN 'VD01'. "sales org wise blocking
* data : lv_flag3 , lv_knvv1 type knvv.
* import lv_flag to lv_flag3 from MEMORY id 'FLAG'.
* IF lv_flag3 = 'X' .
* import i_knvv to lv_knvv1 from MEMORY id 'KNVV'.
* if lv_knvv1 is not INITIAL.
* knvv-aufsd = lv_knvv1-aufsd .
* knvv-lifsd = lv_knvv1-lifsd .
* knvv-faksd = lv_knvv1-faksd .
* knvv-CASSD = lv_knvv1-CASSD .
* endif.
* ENDIF.
*ENDCASE.
* end of commented by Bsaki

You might also like