METHOD IF_EX_ME_PROCESS_PO_CUST~PROCESS_ITEM.
*method if_ex_me_process_po_cust~process_item .
DATA: LS_MEPOITEM TYPE MEPOITEM,
LS_CUSTOMER TYPE MEPO_BADI_EXAMPL,
LS_TBSG TYPE TBSG,
LV_DUMMY TYPE C LENGTH 128.
INCLUDE MM_MESSAGES_MAC. "useful macros for message handling
*---------------------------------------------------------------------*
* here we check customers data
*---------------------------------------------------------------------*
IF SY-TCODE = 'ME21N'.
LS_MEPOITEM = IM_ITEM->GET_DATA( ).
IF LS_MEPOITEM-EINDT < SY-DATUM.
MESSAGE 'Please check the delivery date, it cannot in the past' TYPE 'E'.
ENDIF.
ENDIF.
* if ls_mepoitem-loekz eq 'D'. "Deletion Indicator in Purchasing Document
*
** a physical deletion of the item was carried out. therrefor we have to
** delete customer data on the level of the item
* ls_customer-ebeln = ls_mepoitem-ebeln.
* ls_customer-ebelp = ls_mepoitem-ebelp.
* call function 'MEPOBADIEX_SET_DATA'
* exporting
* im_data = ls_customer
* im_physical_delete_request = 'X'.
*
* else.
*
** update/insert operation
* call function 'MEPOBADIEX_GET_DATA'
* exporting
* im_ebeln = ls_mepoitem-ebeln
* im_ebelp = ls_mepoitem-ebelp
* importing
* ex_data = ls_customer.
** check customers data
*
** check field badi_bsgru. This should be carried out only for new items. Once the PO is posted the
** field should no longer be changeable. This is done in Method FIELDSELECTION_ITEM.
* if im_item->is_persistent( ) eq mmpur_no.
* if ls_customer-badi_bsgru is initial.
** Place the cursor onto field badi_bsgru. The metafield was defined in BAdI ME_GUI_PO_CUST,
** Method MAP_DYNPRO_FIELDS.
* mmpur_metafield mmmfd_cust_01.
* message w083(me) with text-002 '' into lv_dummy.
* mmpur_message_forced sy-msgty sy-msgid sy-msgno
* sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
* else.
** check whether the field is valid
* select single * from tbsg into ls_tbsg where bsgru eq ls_customer-badi_bsgru.
* if not sy-subrc is initial.
* mmpur_metafield mmmfd_cust_01.
* message e083(me) with text-004 space into lv_dummy.
* mmpur_message_forced sy-msgty sy-msgid sy-msgno
* sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
** invalidate the object
* call method im_item->invalidate( ).
* endif.
* endif.
* endif.
*
** check field badi_afnam
* if ls_customer-badi_afnam is initial.
* mmpur_metafield mmmfd_cust_02.
* message w083(me) with text-003 space into lv_dummy.
* mmpur_message_forced sy-msgty sy-msgid sy-msgno
* sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
* endif.
*
* endif.
*
*endmethod. "IF_EX_ME_PROCESS_PO_CUST~PROCESS_ITEM
**Update Po qty when comfimation changed, PO qty = Total OA confirmation qty
* IF SY-TCODE = 'ME21N' OR SY-TCODE = 'ME22N' OR SY-TCODE = 'ME23N' OR SY-TCODE = 'ME29N'.
* DATA : LV_MENGE TYPE EKPO-MENGE,"OA qty
* LS_MECONF_DETAIL TYPE MECONF_DETAIL,
* LT_MECONF_DETAIL TYPE TABLE OF MECONF_DETAIL,
* LT_CONF TYPE MMPURCONF_T_CONF,
* LS_CONF LIKE LINE OF LT_CONF.
* DATA: IF_CONF TYPE REF TO IF_MMPUR_CONF_ITEM.
*
* " get conf interface
* IF_CONF = IM_ITEM->GET_CONFIRMATION_HANDLER( ).
*
* " get conf data
* CHECK IF_CONF IS NOT INITIAL.
* LT_CONF = IF_CONF->GET_CONFIRMATIONS( ).
* ENDIF.
ENDMETHOD.
METHOD IF_EX_ME_PROCESS_PO_CUST~POST.
*** IM_EBELN Importing Type EBELN
***IM_HEADER Importing Type Ref To IF_PURCHASE_ORDER_MM
*
**************************************
DATA: EKPO_1 TYPE TABLE OF EKPO,
WA_EKPO_1 TYPE EKPO,
EKPO_2 TYPE TABLE OF EKPO,
WA_EKPO_2 TYPE EKPO,
EKPO_3 TYPE TABLE OF EKPO,
WA_EKPO_3 TYPE EKPO.
DATA:EKKO_1 TYPE TABLE OF EKKO,
EKKO_2 TYPE TABLE OF EKKO,
WA_EKKO_2 TYPE EKKO,
P_CHK TYPE C,
P_FRGC1 TYPE T16FS-FRGC1.
DATA: LWA_EKKO_IN_DLV TYPE MEPOHEADER,
LWA_EKPO_IN_DLV TYPE PURCHASE_ORDER_ITEM,
LIT_EKPO_IN_DLV TYPE PURCHASE_ORDER_ITEMS,
LWA_ITEM_IN_DLV TYPE MEPOITEM,
IM_DATA TYPE MEPOHEADER,
LIT_EKKO_DLV TYPE STANDARD TABLE OF EKKO,
LIT_EKPO_DLV TYPE STANDARD TABLE OF EKPO,
LWA_EKKO_DLV TYPE EKKO,
LWA_EKPO_DLV TYPE EKPO.
DATA: PURCHASEORDER TYPE BAPIMMPARA-PO_NUMBER,
PO_REL_CODE TYPE BAPIMMPARA-PO_REL_COD,
REL_GROUP TYPE BAPIMMPARA-REL_GROUP,
USE_EXCEPTIONS TYPE BAPIMMPARA-SELECTION,
RETURN TYPE TABLE OF BAPIRETURN,
WA_RETURN TYPE BAPIRETURN .
DATA:REL_STATUS_NEW TYPE BAPIMMPARA-REL_STATUS,
REL_INDICATOR_NEW TYPE BAPIMMPARA-PO_REL_IND .
* read save text.
DATA:L_HEADER TYPE STANDARD TABLE OF THEAD ,
WA_HEADER TYPE THEAD,
L_LINES TYPE STANDARD TABLE OF TLINE ,
L_LINES_1 TYPE STANDARD TABLE OF TLINE,
WA_LINES TYPE TLINE,
WA_LINES_1 TYPE TLINE,
L_TDNAME TYPE TDOBNAME,
O_STR TYPE STRING,
N_STR TYPE STRING.
" DATA: poitem TYPE STANDARD TABLE OF MEPOITEM .
* IF ( SY-TCODE = 'ME22N' ) OR ( SY-TCODE = 'ME29N' ) OR SY-TCODE = 'ME22' OR SY-TCODE = 'ME23N'.
CLEAR: PURCHASEORDER , PO_REL_CODE .
* Get ekko data
LWA_EKKO_IN_DLV = IM_HEADER->GET_DATA( ).
MOVE-CORRESPONDING LWA_EKKO_IN_DLV TO LWA_EKKO_DLV.
APPEND LWA_EKKO_DLV TO LIT_EKKO_DLV.
* Why lwa_ekko_dlv get value from lwa_ekko_in_dlv????
* Get ekpo data
LIT_EKPO_IN_DLV = IM_HEADER->GET_ITEMS( ).
LOOP AT LIT_EKPO_IN_DLV INTO LWA_EKPO_IN_DLV.
LWA_ITEM_IN_DLV = LWA_EKPO_IN_DLV-ITEM->GET_DATA( ).
MOVE-CORRESPONDING LWA_ITEM_IN_DLV TO LWA_EKPO_DLV.
APPEND LWA_EKPO_DLV TO LIT_EKPO_DLV.
"Why lwa_ekpo_dlv get value from lwa_ekpo_in_dlv?
ENDLOOP.
*判断------Release status
IF NOT LIT_EKKO_DLV[] IS INITIAL.
READ TABLE LIT_EKKO_DLV INTO LWA_EKKO_DLV INDEX 1.
IF LWA_EKKO_DLV-FRGKE = 'X' AND LWA_EKKO_DLV-FRGZU = ''.
P_CHK = 'X' ."Release Indicator: Purchasing Document
**********************************************************************
* 保存 从小到大取消的数据。
*新值
IF NOT LIT_EKPO_DLV[] IS INITIAL.
LOOP AT LIT_EKPO_DLV INTO LWA_EKPO_DLV.
MOVE-CORRESPONDING LWA_EKPO_DLV TO WA_EKPO_2.
APPEND WA_EKPO_2 TO EKPO_2.
ENDLOOP.
ENDIF.
*旧值 -------------------取数据库里面的数据,有可能新值已经删除,那么就需要安装PO号码来取数。
IF NOT EKPO_2[] IS INITIAL.
SELECT * INTO CORRESPONDING FIELDS OF TABLE
EKPO_1 FROM EKPO
FOR ALL ENTRIES IN EKPO_2
WHERE EBELN = EKPO_2-EBELN
AND EBELP = EKPO_2-EBELP.
ENDIF.
* 比较
IF NOT EKPO_2[] IS INITIAL.
IF NOT EKPO_1[] IS INITIAL.
CLEAR:WA_EKPO_1,WA_EKPO_2.
LOOP AT EKPO_2 INTO WA_EKPO_2.
READ TABLE EKPO_1 INTO WA_EKPO_1 WITH KEY EBELN = WA_EKPO_2-EBELN EBELP = WA_EKPO_2-EBELP.
IF SY-SUBRC = 0.
*save version change data
IF WA_EKPO_2-MENGE <> WA_EKPO_1-MENGE.
N_STR = WA_EKPO_2-MENGE .
O_STR = WA_EKPO_1-MENGE.
CONCATENATE 'CHANGE ITEM' WA_EKPO_2-EBELP 'FROM QTY' O_STR 'TO' N_STR SY-DATUM
INTO WA_LINES-TDLINE SEPARATED BY SPACE.
APPEND WA_LINES TO L_LINES.
CLEAR: WA_LINES,O_STR,N_STR.
ENDIF.
*
IF WA_EKPO_2-NETPR <> WA_EKPO_1-NETPR OR WA_EKPO_2-PEINH <> WA_EKPO_1-PEINH.
IF WA_EKPO_2-PEINH = 0.
WA_EKPO_2-PEINH = 1.
ENDIF.
IF WA_EKPO_1-PEINH = 0.
WA_EKPO_1-PEINH = 1.
ENDIF.
* convert price to external such as JPY
IF LWA_EKKO_DLV-WAERS <> 'HKD' OR LWA_EKKO_DLV-WAERS <> 'USD' OR LWA_EKKO_DLV-WAERS <> 'CNY' OR LWA_EKKO_DLV-WAERS <> 'EUR'.
DATA : LV_NETPR TYPE BAPICURR-BAPICURR.
CLEAR LV_NETPR.
CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_EXTERNAL'
EXPORTING
CURRENCY = LWA_EKKO_DLV-WAERS
AMOUNT_INTERNAL = WA_EKPO_2-NETPR
IMPORTING
AMOUNT_EXTERNAL = LV_NETPR.
N_STR = LV_NETPR / WA_EKPO_2-PEINH.
CLEAR LV_NETPR.
CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_EXTERNAL'
EXPORTING
CURRENCY = LWA_EKKO_DLV-WAERS
AMOUNT_INTERNAL = WA_EKPO_1-NETPR
IMPORTING
AMOUNT_EXTERNAL = LV_NETPR.
O_STR = LV_NETPR / WA_EKPO_1-PEINH.
ELSE.
N_STR = WA_EKPO_2-NETPR / WA_EKPO_2-PEINH.
O_STR = WA_EKPO_1-NETPR / WA_EKPO_1-PEINH.
ENDIF.
CONCATENATE 'CHANGE ITEM' WA_EKPO_2-EBELP 'FROM PRICE' O_STR 'TO' N_STR SY-DATUM
INTO WA_LINES-TDLINE SEPARATED BY SPACE.
APPEND WA_LINES TO L_LINES.
CLEAR :WA_LINES,O_STR,N_STR.
ENDIF.
*删除
IF WA_EKPO_2-LOEKZ = 'L'.
IF WA_EKPO_1-LOEKZ <> 'L'.
N_STR = WA_EKPO_2-MENGE .
O_STR = WA_EKPO_1-MENGE.
CONCATENATE 'DELETE ITEM' WA_EKPO_2-EBELP 'FROM QTY' O_STR 'TO' '0.000' SY-DATUM
INTO WA_LINES-TDLINE SEPARATED BY SPACE.
APPEND WA_LINES TO L_LINES.
CLEAR :WA_LINES,O_STR,N_STR.
ENDIF.
ENDIF.
**********************************************************************
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.
*判断之前保存的是否为R类型。
SELECT * INTO CORRESPONDING FIELDS OF TABLE EKKO_2
FROM EKKO WHERE EBELN = LWA_EKKO_DLV-EBELN.
READ TABLE EKKO_2 INTO WA_EKKO_2 INDEX 1.
IF WA_EKKO_2-FRGKE = 'R' OR ( WA_EKKO_2-FRGKE = 'X' AND WA_EKKO_2-FRGZU <> '' )
OR WA_EKKO_2-FRGKE = 'X'.
*save text
IF NOT L_LINES[] IS INITIAL.
" READ TABLE ekko_2 INTO wa_ekko_2 INDEX 1.
L_TDNAME = WA_EKKO_2-EBELN.
CALL FUNCTION 'READ_TEXT'
EXPORTING
ID = 'F04'
LANGUAGE = SY-LANGU
NAME = L_TDNAME
OBJECT = 'EKKO'
TABLES
LINES = L_LINES_1
EXCEPTIONS
ID = 1
LANGUAGE = 2
NAME = 3
NOT_FOUND = 4
OBJECT = 5
REFERENCE_CHECK = 6
WRONG_ACCESS_TO_ARCHIVE = 7
OTHERS = 8.
*save_text
WA_HEADER-TDNAME = WA_EKKO_2-EBELN.
WA_HEADER-TDID = 'F04'.
WA_HEADER-TDOBJECT = 'EKKO'.
WA_HEADER-TDSPRAS = SY-LANGU.
APPEND WA_HEADER TO L_HEADER.
LOOP AT L_LINES INTO WA_LINES .
WA_LINES_1-TDFORMAT = '*'.
WA_LINES_1-TDLINE = WA_LINES-TDLINE.
APPEND WA_LINES_1 TO L_LINES_1.
ENDLOOP.
CALL FUNCTION 'SAVE_TEXT'
EXPORTING
CLIENT = SY-MANDT
HEADER = WA_HEADER
SAVEMODE_DIRECT = 'X'
TABLES
LINES = L_LINES_1
EXCEPTIONS
ID = 1
LANGUAGE = 2
NAME = 3
OBJECT = 4
OTHERS = 5.
ENDIF.
**********************************************************************
CLEAR:EKKO_1,EKKO_2,EKKO_1[],EKKO_2[],
EKPO_1,EKPO_2,EKPO_3,EKPO_1[],EKPO_2[],EKPO_3[],
P_FRGC1.
**********************************************************************
ENDIF.
ENDIF.
IF P_CHK <> 'X'.
*新值
IF NOT LIT_EKPO_DLV[] IS INITIAL.
LOOP AT LIT_EKPO_DLV INTO LWA_EKPO_DLV.
MOVE-CORRESPONDING LWA_EKPO_DLV TO WA_EKPO_2.
APPEND WA_EKPO_2 TO EKPO_2.
ENDLOOP.
ENDIF.
*旧值
IF NOT EKPO_2[] IS INITIAL.
SELECT * INTO CORRESPONDING FIELDS OF TABLE
EKPO_1 FROM EKPO
FOR ALL ENTRIES IN EKPO_2
WHERE EBELN = EKPO_2-EBELN
AND EBELP = EKPO_2-EBELP.
ENDIF.
* 比较
IF NOT EKPO_2[] IS INITIAL.
IF NOT EKPO_1[] IS INITIAL.
CLEAR:WA_EKPO_1,WA_EKPO_2.
LOOP AT EKPO_2 INTO WA_EKPO_2.
READ TABLE EKPO_1 INTO WA_EKPO_1 WITH KEY EBELN = WA_EKPO_2-EBELN EBELP = WA_EKPO_2-EBELP.
IF SY-SUBRC = 0.
IF WA_EKPO_2-NETPR <> WA_EKPO_1-NETPR OR WA_EKPO_2-MENGE <> WA_EKPO_1-MENGE OR ( WA_EKPO_2-LOEKZ = 'L' AND WA_EKPO_1-LOEKZ = '' )
OR WA_EKPO_2-PEINH <> WA_EKPO_1-PEINH.
MOVE-CORRESPONDING WA_EKPO_2 TO WA_EKPO_3.
APPEND WA_EKPO_3 TO EKPO_3 .
*save version change data
IF WA_EKPO_2-MENGE <> WA_EKPO_1-MENGE.
N_STR = WA_EKPO_2-MENGE .
O_STR = WA_EKPO_1-MENGE.
CONCATENATE 'CHANGE ITEM' WA_EKPO_2-EBELP 'FROM QTY' O_STR 'TO' N_STR SY-DATUM
INTO WA_LINES-TDLINE SEPARATED BY SPACE.
APPEND WA_LINES TO L_LINES.
CLEAR: WA_LINES,O_STR,N_STR.
ENDIF.
*
IF WA_EKPO_2-NETPR <> WA_EKPO_1-NETPR OR WA_EKPO_2-PEINH <> WA_EKPO_1-PEINH.
IF WA_EKPO_2-PEINH = 0.
WA_EKPO_2-PEINH = 1.
ENDIF.
IF WA_EKPO_1-PEINH = 0.
WA_EKPO_1-PEINH = 1.
ENDIF.
* CONVERT PRICE TO EXTERNAL SUCH AS JPY
IF LWA_EKKO_DLV-WAERS <> 'HKD' OR LWA_EKKO_DLV-WAERS <> 'USD' OR LWA_EKKO_DLV-WAERS <> 'CNY' OR LWA_EKKO_DLV-WAERS <> 'EUR'.
CLEAR LV_NETPR.
CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_EXTERNAL'
EXPORTING
CURRENCY = LWA_EKKO_DLV-WAERS
AMOUNT_INTERNAL = WA_EKPO_2-NETPR
IMPORTING
AMOUNT_EXTERNAL = LV_NETPR.
N_STR = LV_NETPR / WA_EKPO_2-PEINH.
CLEAR LV_NETPR.
CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_EXTERNAL'
EXPORTING
CURRENCY = LWA_EKKO_DLV-WAERS
AMOUNT_INTERNAL = WA_EKPO_1-NETPR
IMPORTING
AMOUNT_EXTERNAL = LV_NETPR.
O_STR = LV_NETPR / WA_EKPO_1-PEINH.
ELSE.
N_STR = WA_EKPO_2-NETPR / WA_EKPO_2-PEINH.
O_STR = WA_EKPO_1-NETPR / WA_EKPO_1-PEINH.
ENDIF.
CONCATENATE 'CHANGE ITEM' WA_EKPO_2-EBELP 'FROM PRICE' O_STR 'TO' N_STR SY-DATUM
INTO WA_LINES-TDLINE SEPARATED BY SPACE.
APPEND WA_LINES TO L_LINES.
CLEAR :WA_LINES,O_STR,N_STR.
ENDIF.
*删除
IF WA_EKPO_2-LOEKZ = 'L'.
IF WA_EKPO_1-LOEKZ <> 'L'.
N_STR = WA_EKPO_2-MENGE .
O_STR = WA_EKPO_1-MENGE.
CONCATENATE 'DELETE ITEM' WA_EKPO_2-EBELP 'FROM QTY' O_STR 'TO' '0.000' SY-DATUM
INTO WA_LINES-TDLINE SEPARATED BY SPACE.
APPEND WA_LINES TO L_LINES.
CLEAR :WA_LINES,O_STR,N_STR.
ENDIF.
ENDIF.
**********************************************************************
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.
**********************************************************
**********************************************************
IF NOT EKPO_3[] IS INITIAL.
READ TABLE EKPO_3 INTO WA_EKPO_3 INDEX 1.
SELECT * INTO CORRESPONDING FIELDS OF TABLE EKKO_2
FROM EKKO WHERE EBELN = WA_EKPO_3-EBELN.
IF NOT EKKO_2[] IS INITIAL.
READ TABLE EKKO_2 INTO WA_EKKO_2 INDEX 1.
IF WA_EKKO_2-FRGKE = 'R' OR ( WA_EKKO_2-FRGKE = 'X' AND WA_EKKO_2-FRGZU <> '' ).
* wa_ekko_2-frgke = 'X'.
* wa_ekko_2-frgzu = ' '.
* "modify ekko_2 index 1 transporting frgke frgzu.
* move-corresponding wa_ekko_2 to im_data.
* call method im_header->set_data( im_data ).
" im_header->set_data( importing IM_DATA = wa_ekko_2 ).
SELECT SINGLE FRGC1 INTO P_FRGC1 FROM T16FS
WHERE FRGGR = WA_EKKO_2-FRGGR
AND FRGSX = WA_EKKO_2-FRGSX.
PURCHASEORDER = WA_EKKO_2-EBELN.
PO_REL_CODE = P_FRGC1.
EXPORT
PURCHASEORDER FROM PURCHASEORDER
TO MEMORY ID 'text1'.
EXPORT
PO_REL_CODE FROM PO_REL_CODE
TO MEMORY ID 'text2'.
*save text
IF NOT L_LINES[] IS INITIAL.
READ TABLE EKKO_2 INTO WA_EKKO_2 INDEX 1.
L_TDNAME = WA_EKKO_2-EBELN.
CALL FUNCTION 'READ_TEXT'
EXPORTING
ID = 'F04'
LANGUAGE = SY-LANGU
NAME = L_TDNAME
OBJECT = 'EKKO'
TABLES
LINES = L_LINES_1
EXCEPTIONS
ID = 1
LANGUAGE = 2
NAME = 3
NOT_FOUND = 4
OBJECT = 5
REFERENCE_CHECK = 6
WRONG_ACCESS_TO_ARCHIVE = 7
OTHERS = 8.
*save_text
WA_HEADER-TDNAME = WA_EKKO_2-EBELN.
WA_HEADER-TDID = 'F04'.
WA_HEADER-TDOBJECT = 'EKKO'.
WA_HEADER-TDSPRAS = SY-LANGU.
APPEND WA_HEADER TO L_HEADER.
LOOP AT L_LINES INTO WA_LINES .
WA_LINES_1-TDFORMAT = '*'.
WA_LINES_1-TDLINE = WA_LINES-TDLINE.
APPEND WA_LINES_1 TO L_LINES_1.
ENDLOOP.
CALL FUNCTION 'SAVE_TEXT'
EXPORTING
CLIENT = SY-MANDT
HEADER = WA_HEADER
SAVEMODE_DIRECT = 'X'
TABLES
LINES = L_LINES_1
EXCEPTIONS
ID = 1
LANGUAGE = 2
NAME = 3
OBJECT = 4
OTHERS = 5.
ENDIF.
**********************************************************************
ENDIF.
ENDIF.
CLEAR:EKKO_1,EKKO_2,EKKO_1[],EKKO_2[],
EKPO_1,EKPO_2,EKPO_3,EKPO_1[],EKPO_2[],EKPO_3[],
P_FRGC1.
ENDIF.
ENDIF.
ENDIF.
**********************************************************************
* delete PO email status when reset release po
* Added by rudyzhang 2012/11/13
**********************************************************************
DATA : LS_EKKO TYPE EKKO,
LS_ZTPOEMAIL TYPE ZTPOEMAIL.
* IF SY-TCODE = 'ME29N'.
SELECT SINGLE * FROM EKKO INTO LS_EKKO WHERE EBELN = LWA_EKKO_DLV-EBELN.
IF LS_EKKO-FRGKE = 'R' AND LWA_EKKO_DLV-FRGKE <> 'R'."reset release po
SELECT SINGLE * FROM ZTPOEMAIL INTO LS_ZTPOEMAIL WHERE EBELN = LWA_EKKO_DLV-EBELN." already sent PO email at first
IF SY-SUBRC = 0.
DELETE FROM ZTPOEMAIL WHERE EBELN = LWA_EKKO_DLV-EBELN." Move from po email table
ENDIF.
ENDIF.
* ENDIF.
* ENDIF.
**********************************************************************
* PO all items are deleted and have records in version table zekpo
* need to insert one new version by manual with ZTIEM = 'D' as deletion flage
**********************************************************************
* IF SY-TCODE = 'ME22N' OR SY-TCODE = 'ME23N' OR SY-TCODE = 'ME29N'.
DATA : LV_LAST_VERSION(3),
LT_ZEKPO TYPE TABLE OF ZEKPO,
LS_ZEKPO TYPE ZEKPO.
IF LWA_EKKO_DLV-FRGKE = ''."not need release, all items may be deleted
SELECT DISTINCT ZVSIN
INTO LV_LAST_VERSION
FROM ZEKPO
WHERE EBELN = LWA_EKKO_DLV-EBELN
AND ZITEM = ''.
ENDSELECT.
IF SY-SUBRC = 0." if released at before
LV_LAST_VERSION = LV_LAST_VERSION + 1.
LOOP AT LIT_EKPO_DLV INTO LWA_EKPO_DLV.
MOVE-CORRESPONDING LWA_EKPO_DLV TO LS_ZEKPO.
MOVE : "LWA_EKPO_DIV-MATNR to LS_ZEKPO-EMATN,
LWA_EKPO_DLV-MENGE TO LS_ZEKPO-OLD_MENGE,
LWA_EKPO_DLV-MEINS TO LS_ZEKPO-MEINS,
LWA_EKPO_DLV-NETPR TO LS_ZEKPO-OLD_NETPR,
LWA_EKKO_DLV-WAERS TO LS_ZEKPO-WAERS,
'0' TO LS_ZEKPO-MENGE,
LV_LAST_VERSION TO LS_ZEKPO-ZVSIN,
SY-DATUM TO LS_ZEKPO-BUDAT,
'D' TO LS_ZEKPO-ZITEM.
APPEND LS_ZEKPO TO LT_ZEKPO.
CLEAR :LS_ZEKPO.
ENDLOOP.
IF LT_ZEKPO IS NOT INITIAL.
MODIFY ZEKPO FROM TABLE LT_ZEKPO.
DELETE FROM ZTPOEMAIL WHERE EBELN = LWA_EKKO_DLV-EBELN." Move from po email table
CLEAR LT_ZEKPO.
ENDIF.
ENDIF.
ENDIF.
* ENDIF.
**Update Po qty when comfimation changed, PO qty = Total OA confirmation qty
IF SY-TCODE = 'ME21N' OR SY-TCODE = 'ME22N' OR SY-TCODE = 'ME23N' OR SY-TCODE = 'ME29N'.
DATA : LV_MENGE TYPE EKPO-MENGE,"OA qty
LS_MECONF_DETAIL TYPE MECONF_DETAIL,
LT_MECONF_DETAIL TYPE TABLE OF MECONF_DETAIL,
LT_CONF TYPE MMPURCONF_T_CONF,
LS_CONF TYPE MMPURCONF_CONF.
DATA: IF_CONF TYPE REF TO IF_MMPUR_CONF_ITEM,
IF_PURCHASE_ORDER_ITEMS TYPE REF TO PURCHASE_ORDER_ITEMS,
IF_PURCHASE_ORDER_ITEM TYPE REF TO PURCHASE_ORDER_ITEM.
DATA : PURCHASE_ORDER_ITEMS TYPE PURCHASE_ORDER_ITEMS,"Item tables
PURCHASE_ORDER_ITEM TYPE PURCHASE_ORDER_ITEM,"Item line
LS_MEPOITEM TYPE MEPOITEM.
"get item interface
PURCHASE_ORDER_ITEMS = IM_HEADER->GET_ITEMS( ).
" Process item one by one
LOOP AT PURCHASE_ORDER_ITEMS INTO PURCHASE_ORDER_ITEM.
LS_MEPOITEM = PURCHASE_ORDER_ITEM-ITEM->GET_DATA( ).
" get conf interface
IF_CONF = PURCHASE_ORDER_ITEM-ITEM->GET_CONFIRMATION_HANDLER( ).
" get conf data
CHECK IF_CONF IS NOT INITIAL.
LT_CONF = IF_CONF->GET_CONFIRMATIONS( ).
LOOP AT LT_CONF INTO LS_CONF.
* LT_MECONF_DETAIL = LS_CONF->GET_DATA( ).
ENDLOOP.
ENDLOOP.
ENDIF.
ENDMETHOD.
METHOD if_ex_me_process_po_cust~close.
**************************************
DATA: ekpo_1 TYPE TABLE OF ekpo,
wa_ekpo_1 TYPE ekpo,
ekpo_2 TYPE TABLE OF ekpo,
wa_ekpo_2 TYPE ekpo,
ekpo_3 TYPE TABLE OF ekpo,
wa_ekpo_3 TYPE ekpo.
DATA:ekko_1 TYPE TABLE OF ekko,
ekko_2 TYPE TABLE OF ekko,
wa_ekko_2 TYPE ekko,
p_chk TYPE c,
p_frgc1 TYPE t16fs-frgc1.
DATA: lwa_ekko_in_dlv TYPE mepoheader,
lwa_ekpo_in_dlv TYPE purchase_order_item,
lit_ekpo_in_dlv TYPE purchase_order_items,
lwa_item_in_dlv TYPE mepoitem,
lit_ekko_dlv TYPE STANDARD TABLE OF ekko,
lit_ekpo_dlv TYPE STANDARD TABLE OF ekpo,
lwa_ekko_dlv TYPE ekko,
lwa_ekpo_dlv TYPE ekpo.
DATA: purchaseorder TYPE bapimmpara-po_number,
po_rel_code TYPE bapimmpara-po_rel_cod,
rel_group TYPE bapimmpara-rel_group,
use_exceptions TYPE bapimmpara-selection,
return TYPE TABLE OF bapireturn,
wa_return TYPE bapireturn .
DATA:rel_status_new TYPE bapimmpara-rel_status,
rel_indicator_new TYPE bapimmpara-po_rel_ind .
DATA : LS_ZTPOEMAIL TYPE ZTPOEMAIL.
" DATA: poitem TYPE STANDARD TABLE OF MEPOITEM .
IF sy-tcode = 'ME22N' OR sy-tcode = 'ME29N' OR sy-tcode = 'ME22' or sy-tcode = 'ME23N'.
WAIT UP TO 1 SECONDS.
IMPORT purchaseorder TO purchaseorder FROM MEMORY ID 'text1'.
IMPORT po_rel_code TO po_rel_code FROM MEMORY ID 'text2'.
IF purchaseorder IS NOT INITIAL AND po_rel_code IS NOT INITIAL.
CALL FUNCTION 'BAPI_PO_RESET_RELEASE'
EXPORTING
purchaseorder = purchaseorder
po_rel_code = po_rel_code " USE_EXCEPTIONS = 'X'
IMPORTING
rel_status_new = rel_status_new
rel_indicator_new = rel_indicator_new
TABLES
return = return.
* Reset PO Emial status when reset release - added by rudyzhang 2012/11/13
READ TABLE return WITH KEY type = 'E' TRANSPORTING NO FIELDS.
IF sy-subrc <> 0." reset release successful
SELECT SINGLE * FROM ZTPOEMAIL INTO ls_ZTPOEMAIL WHERE EBELN = purchaseorder.
IF sy-subrc = 0.
* CLEAR : ls_ZTPOEMAIL-ZEMTA.
* ls_ztpoemail-ZEDES = 'RE SEND'.
* MODIFY ZTPOEMAIL FROM LS_ZTPOEMAIL.
Delete FROM ztpoemail WHERE ebeln = purchaseorder.
CLEAR LS_ZTPOEMAIL.
ENDIF.
ENDIF.
CLEAR:purchaseorder,po_rel_code.
FREE:purchaseorder,po_rel_code.
purchaseorder = ''.
po_rel_code = ''.
EXPORT purchaseorder FROM purchaseorder TO MEMORY ID 'text1'.
EXPORT po_rel_code FROM po_rel_code TO MEMORY ID 'text2'.
ENDIF.
ENDIF.
ENDMETHOD.
method IF_EX_ME_PO_PRICING_CUST~PROCESS_KOMP.
IF sy-tcode = 'ME21N' or sy-tcode = 'ME22N'.
CLEAR:ch_komp-ZPS_PSP_PNR.
data:ls_im_knt type line of mmpur_ekknu.
loop at im_knt into ls_im_knt where ebelp = ch_komp-KPOSN.
ch_komp-zPS_PSP_PNR = ls_im_knt-PS_PSP_PNR.
endloop.
ENDIF.
endmethod.