Имелась давно разработанная программа, изменяющая заявки в SAP MM. Измение выполнялось с помощью BAPI BAPI_PR_CHANGE — вроде ничего особенного, но недавно обнаружилась некая странность. Оказывается в документе изменения (в таблице CDHDR) в поле TCODE данная BAPI пишет ME52N

Оказалось, что код транзакции прописывается в стандартном коде, что не совсем корректно
Для правильного выставления кода транзакции пришлось создать enhancement в inlude LMEREQF08 в конце конструктора класса lcl_req_header
Код транзакции является входным параметром im_tcode и сохраняется в my_state->tcode. Осталось только при нужных условиях заменять содержимое этой переменной
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
METHOD constructor. CREATE OBJECT my_state. CALL METHOD set_flow( lcl_req_header_state=>c_flow_open ). my_state->header-mandt = sy-mandt. my_state->header-banfn = im_document-doc_key(10). my_state->trtyp = im_document-trtyp. my_state->aktyp = im_document-trtyp. my_state->process = im_document-process. my_state->initiator = im_document-initiator. my_state->tcode = im_tcode. my_state->api_call = im_api_call. my_state->called_from_parent_bo = im_called_from_parent_bo. my_state->no_ui_mode = im_no_ui_mode. CREATE OBJECT my_state->atp_controller. IF im_protect EQ mmpur_yes. CREATE OBJECT my_state->deladr_manager EXPORTING im_requisition = me. ENDIF. IF im_document-trtyp NE hin. my_state->header-banfn_ext = my_state->header-banfn. ENDIF. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"$\SE:(1) Класс LCL_REQ_HEADER, Метод CONSTRUCTOR, Выход A *$*$-Start: (1)---------------------------------------------------------------------------------$*$* ENHANCEMENT 1 ZEI_MM_COMMON_TCODE. "active version DATA(lv_tcode) = zcl_mm_transaction_code=>get_tcode( ). IF lv_tcode IS NOT INITIAL. my_state->tcode = lv_tcode. ENDIF. ENDENHANCEMENT. *$*$-End: (1)---------------------------------------------------------------------------------$*$* ENDMETHOD. "constructor |
И непосредственно перед вызовом BAPI сохранять нужный код транзакции
1 |
zcl_mm_transaction_code=>set_tcode( sy-tcode ). |