|
<< Click to Display Table of Contents >> Navigation: All About ABAP Technique > English > ABAP Tutorial > ABAP Workbench Tools > Enhancement > Customer Exits > Customer Exits Examples > Project ZWMWS001 > Funtions Exits > EXIT_SAPLMBMB_001 > ZXMBCU01 |
*&---------------------------------------------------------------------*
*& Include ZXMBCU01 *
*&---------------------------------------------------------------------*
*" TABLES
*" XMKPF STRUCTURE MKPF
*" XMSEG STRUCTURE MSEG
*" XVM07M STRUCTURE VM07M
*"----------------------------------------------------------------------
DATA : zgi_message TYPE TABLE OF solisti1 WITH HEADER LINE,
zgw_mkpf LIKE mkpf,
zgw_mseg LIKE mseg,
zgw_mseg2 LIKE mseg,
zgv_valid(1) TYPE c,
zgv_no TYPE i,
zgv_maktx LIKE makt-maktx,
zgv_subject LIKE sodocchgi1-obj_descr,
zgv_keycode LIKE zta_x_email_recp-keycode.
REFRESH zgi_message.
zgv_valid = 'X'.
zgv_no = 0.
zgv_keycode = ''.
LOOP AT xmkpf INTO zgw_mkpf.
CONCATENATE 'Terjadi posting dengan material document:'
zgw_mkpf-mblnr '/' zgw_mkpf-mjahr
'dengan keterangan sebagai berikut:'
INTO zgi_message-line SEPARATED BY space.
APPEND zgi_message.
LOOP AT xmseg INTO zgw_mseg WHERE parent_id = '0'.
* Movement Type 261 atau 301 atau 311
IF ( zgw_mseg-bwart = '261' ) OR
( zgw_mseg-bwart = '301' ) OR
( zgw_mseg-bwart = '311' ).
* Harus Ada Reservation Number
IF zgw_mseg-rsnum IS NOT INITIAL.
MOVE-CORRESPONDING zgw_mseg TO zgw_mseg2.
AT FIRST.
zgi_message-line = ' Tanggal Dokumen : '.
write zgw_mkpf-bldat to zgi_message-line+23.
APPEND zgi_message.
zgi_message-line = ' Reservation No. :'.
write zgw_mseg2-rsnum to zgi_message-line+23.
APPEND zgi_message.
CONCATENATE ' Gudang Pengirim :'
zgw_mseg2-werks '-' zgw_mseg2-lgort INTO zgi_message-line
SEPARATED BY space.
APPEND zgi_message.
CONCATENATE ' Gudang Penerima :'
zgw_mseg2-umwrk '-' zgw_mseg2-umlgo INTO zgi_message-line
SEPARATED BY space.
APPEND zgi_message.
zgi_message-line = ''.
APPEND zgi_message.
zgi_message-line =
'====================================================================' &
'==========='
.
APPEND zgi_message.
zgi_message-line =
' No. Material-Id Batch Material-Description ' &
' Quantity'
.
APPEND zgi_message.
zgi_message-line =
'====================================================================' &
'==========='
.
APPEND zgi_message.
CONCATENATE zgw_mseg2-umwrk zgw_mseg2-umlgo
INTO zgv_keycode.
ENDAT.
ADD 1 TO zgv_no.
zgi_message-line = ''.
WRITE zgv_no TO zgi_message-line+0(3).
WRITE '.' TO zgi_message-line+3(1).
WRITE zgw_mseg-matnr TO zgi_message-line+5(10).
WRITE zgw_mseg-charg TO zgi_message-line+18(4).
zgv_maktx = ''.
SELECT SINGLE maktx
FROM makt
INTO zgv_maktx
WHERE spras = sy-langu AND
matnr = zgw_mseg-matnr.
WRITE zgv_maktx TO zgi_message-line+25(40).
IF FLOOR( zgw_mseg-erfmg ) = zgw_mseg-erfmg.
WRITE zgw_mseg-erfmg TO zgi_message-line+65(9) DECIMALS 0.
ELSE.
WRITE zgw_mseg-erfmg TO zgi_message-line+65(9).
ENDIF.
WRITE zgw_mseg-erfme TO zgi_message-line+75(3).
APPEND zgi_message.
ELSE.
zgv_valid = ' '.
EXIT.
ENDIF.
ELSE.
zgv_valid = ' '.
EXIT.
ENDIF.
ENDLOOP.
ENDLOOP.
IF ( zgv_valid = 'X' ) AND ( zgv_keycode IS NOT INITIAL ).
zgi_message-line =
'====================================================================' &
'==========='
.
APPEND zgi_message.
zgi_message-line = ''.
APPEND zgi_message.
CONCATENATE 'Created by:' sy-uname 'at'
INTO zgi_message-line SEPARATED BY space.
zgv_no = strlen( zgi_message-line ) + 1.
write sy-datum to zgi_message-line+zgv_no.
zgv_no = strlen( zgi_message-line ).
write '-' to zgi_message-line+zgv_no.
zgv_no = strlen( zgi_message-line ).
write sy-uzeit to zgi_message-line+zgv_no.
APPEND zgi_message.
zgi_message-line = ''.
APPEND zgi_message.
CONCATENATE '[SAP] Material Document' zgw_mkpf-mblnr '/'
zgw_mkpf-mjahr 'Created'
INTO zgv_subject SEPARATED BY space.
* message i398(00) with zgv_keycode.
CALL FUNCTION 'ZFN_SEND_EMAIL_RECP_LST'
EXPORTING
p_appcode = 'W0013'
p_keycode = zgv_keycode
p_subject = zgv_subject
TABLES
pi_message = zgi_message.
ENDIF.
************************************************************************
************************************************************************
****************************************** End of WM0013
**************************************
************************************************************************
***********************
DATA : begin of gw_nopr,
ebeln like ekpo-ebeln,
banfn like ekpo-banfn,
bnfpo like ekpo-bnfpo,
matnr like ekpo-matnr,
txz01 like ekpo-txz01,
estkz like eban-estkz,
menge like eban-menge,
meins like eban-meins,
ernam like eban-ernam,
erfmg like mseg-erfmg,
erfme like mseg-erfme,
mengematdoc like mseg-menge,
meinsmatdoc like mseg-meins,
werks like mseg-werks,
lgort like mseg-lgort,
mblnr like mseg-mblnr,
end of gw_nopr.
DATA : gi_nopr like gw_nopr occurs 0 with header line.
DATA : gi_tempnopr like gw_nopr occurs 0 with header line.
DATA : gi_nopr_manual like gw_nopr occurs 0 with header line.
*DATA : xmseg like mseg occurs 0 with header line.
DATA : begin of gw_nama,
ernam like eban-ernam,
ebeln like ekpo-ebeln,
banfn like eban-banfn,
mblnr like mseg-mblnr,
end of gw_nama.
DATA : gi_nama like gw_nama occurs 0 with header line.
DATA : gi_receiver like SOMLRECI1 occurs 0 with header line.
DATA : p_subject like SODOCCHGI1-OBJ_DESCR.
DATA : pi_message like SOLISTI1 occurs 0 with header line.
DATA : gv_erfmg(20),
gv_menge(20),
gv_werks(20),
gv_lgort(20),
gv_detail type string,
lv_length type i.
DATA : lv_dispo like marc-dispo,
lv_tabix like sy-tabix,
lv_usrkey like t024d-usrkey.
clear : gi_nopr,gi_tempnopr,gi_nopr_manual.
free : gi_nopr,gi_tempnopr,gi_nopr_manual.
*select *
*into table xmseg
*from mseg
*where mblnr = '5000001183'.
*
*break-point.
**Mendapatkan No PR
loop at xmseg.
clear gi_tempnopr.
free gi_tempnopr.
select b~banfn b~bnfpo b~matnr b~txz01 b~ebeln
c~estkz c~menge c~meins c~ernam
into corresponding fields of table gi_tempnopr
from ekko as a
inner join ekpo as b on a~ebeln = b~ebeln
inner join eban as c on c~ebeln = b~ebeln and c~ebelp = b~ebelp
where a~bsart in ('NB','ZIM','ZAS')
and a~ebeln = xmseg-ebeln
and b~ebelp = xmseg-ebelp.
loop at gi_tempnopr.
gi_tempnopr-erfmg = xmseg-erfmg.
gi_tempnopr-erfme = xmseg-erfme.
gi_tempnopr-mblnr = xmseg-mblnr.
gi_tempnopr-werks = xmseg-werks.
gi_tempnopr-lgort = xmseg-lgort.
gi_tempnopr-mengematdoc = xmseg-menge.
gi_tempnopr-meinsmatdoc = xmseg-meins.
append gi_tempnopr to gi_nopr.
endloop.
endloop.
loop at gi_nopr.
if gi_nopr-estkz <> 'B'.
append gi_nopr to gi_nopr_manual.
delete gi_nopr where ebeln = gi_nopr-ebeln and banfn = gi_nopr-banfn
and bnfpo = gi_nopr-bnfpo and matnr = gi_nopr-matnr
.
endif.
endloop.
****Untuk PR yang dibuat Manual..
clear : gw_nama, gi_nama.
free : gi_nama.
loop at gi_nopr_manual.
gw_nama-ernam = gi_nopr-ernam.
gw_nama-ebeln = gi_nopr-ebeln.
gw_nama-banfn = gi_nopr-banfn.
gw_nama-mblnr = gi_nopr-mblnr.
collect gw_nama into gi_nama.
endloop.
loop at gi_nama.
clear : gi_receiver,p_subject.
free : gi_receiver,pi_message.
select single smtp_addr
into gi_receiver-receiver
from usr21 as a
inner join adr6 as b on a~persnumber = b~persnumber
and a~addrnumber = b~addrnumber
where a~bname = gi_nama-ernam.
* "Jenis recipient: U-Internet Address. Daftar lengkap lihat di SBWP.
gi_receiver-rec_type = 'U'.
*"Isi dengan 'X' kalau sebagai CC
gi_receiver-copy = ' '.
* "Isi dengan 'X' kalau sebagai BCC
gi_receiver-blind_copy = ' '.
append gi_receiver.
**Untuk Judul Email..
concatenate 'Notification GR ( PR:' gi_nama-banfn 'GR:' gi_nama-mblnr
')'
into p_subject separated by space.
**Isi Detail Email
CLEAR pi_message.
CONCATENATE 'PR Number :' gi_nama-banfn
INTO pi_message-line SEPARATED BY space.
APPEND pi_message.
CLEAR pi_message.
CONCATENATE 'PO Number :' gi_nama-ebeln
INTO pi_message-line SEPARATED BY space.
APPEND pi_message.
CLEAR pi_message.
CONCATENATE 'GR Number :' gi_nama-mblnr
INTO pi_message-line SEPARATED BY space.
APPEND pi_message.
**Kosongin 2 baris
CLEAR pi_message.
DO 2 Times.
APPEND pi_message.
ENDDO.
clear pi_message.
pi_message-line = 'Items Receipt : '.
APPEND pi_message.
clear pi_message.
pi_message-line =
'Product Code Plant SLoc Qty ' &
'Good Receipt Qty PR'
.
APPEND pi_message.
loop at gi_nopr_manual where ernam = gi_nama-ernam and ebeln =
gi_nama-ebeln
and banfn = gi_nama-banfn and mblnr =
gi_nama-mblnr.
clear : pi_message, gv_erfmg, gv_menge, gv_werks, gv_lgort,
gv_detail.
if gi_nopr_manual-erfmg < 1.
gv_erfmg = gi_nopr_manual-menge.
gi_nopr_manual-erfme = gi_nopr_manual-meins.
else.
gv_erfmg = gi_nopr_manual-erfmg.
endif.
gv_menge = gi_nopr_manual-menge.
condense : gv_erfmg, gv_menge.
select single name1
into gv_werks
from t001w
where werks = gi_nopr_manual-werks.
select single lgobe
into gv_lgort
from t001l
where werks = gi_nopr_manual-werks
and lgort = gi_nopr_manual-lgort.
CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT'
EXPORTING
input = gi_nopr_manual-matnr
IMPORTING
OUTPUT = gi_nopr_manual-matnr.
lv_length = strlen( gi_nopr_manual-matnr ).
lv_length = 19 - lv_length.
gv_detail = gi_nopr_manual-matnr.
do lv_length times.
concatenate gv_detail ` ` into gv_detail.
enddo.
concatenate gv_detail gv_werks into gv_detail separated by space.
lv_length = strlen( gv_werks ).
lv_length = 21 - lv_length.
do lv_length times.
concatenate gv_detail ` ` into gv_detail.
enddo.
concatenate gv_detail gv_lgort into gv_detail separated by space.
lv_length = strlen( gv_lgort ).
lv_length = 21 - lv_length.
do lv_length times.
concatenate gv_detail ` ` into gv_detail.
enddo.
concatenate gv_detail gv_erfmg gi_nopr_manual-erfme
into gv_detail separated by space.
lv_length = strlen( gv_erfmg ) + strlen( gi_nopr_manual-erfme ).
if lv_length > 22.
lv_length = 0.
else.
lv_length = 22 - lv_length.
endif.
do lv_length times.
concatenate gv_detail ` ` into gv_detail.
enddo.
concatenate gv_detail gv_menge gi_nopr_manual-meins
into gv_detail separated by space.
pi_message-line = gv_detail.
append pi_message.
pi_message-line = gi_nopr_manual-txz01.
append pi_message.
clear : pi_message.
append pi_message.
endloop.
CALL FUNCTION 'ZFN_SEND_EMAIL'
EXPORTING
p_subject = p_subject
TABLES
pi_receiver = gi_receiver
pi_message = pi_message.
.
* commit work and wait.
endloop.
CLEAR : gw_nama, gi_nama.
FREE : gi_nama.
***Untuk PR yang dibuat otomatis(dari run MRP).
loop at gi_nopr.
lv_tabix = sy-tabix.
clear lv_dispo.
select single dispo
into lv_dispo
from marc
where matnr = gi_nopr-matnr
and werks = gi_nopr-werks.
* select single uname
* into gi_nopr-ernam
* from zta_p_usrid
* where werks = gi_nopr-werks
* and dispo = lv_dispo.
clear lv_usrkey.
select single USRKEY
into lv_usrkey
from T024D
where werks = gi_nopr-werks
and dispo = lv_dispo.
condense lv_usrkey.
TRANSLATE lv_usrkey TO UPPER CASE.
gi_nopr-ernam = lv_usrkey.
gw_nama-ernam = gi_nopr-ernam.
gw_nama-ebeln = gi_nopr-ebeln.
gw_nama-banfn = gi_nopr-banfn.
gw_nama-mblnr = gi_nopr-mblnr.
collect gw_nama into gi_nama.
modify gi_nopr index lv_tabix.
endloop.
loop at gi_nama.
clear : gi_receiver,p_subject.
free : gi_receiver,pi_message.
select single smtp_addr
into gi_receiver-receiver
from usr21 as a
inner join adr6 as b on a~persnumber = b~persnumber
and a~addrnumber = b~addrnumber
where a~bname = gi_nama-ernam.
* "Jenis recipient: U-Internet Address. Daftar lengkap lihat di SBWP.
gi_receiver-rec_type = 'U'.
*"Isi dengan 'X' kalau sebagai CC
gi_receiver-copy = ' '.
* "Isi dengan 'X' kalau sebagai BCC
gi_receiver-blind_copy = ' '.
append gi_receiver.
**Untuk Judul Email..
concatenate 'Notification GR ( PR:' gi_nama-banfn 'GR:' gi_nama-mblnr
')'
into p_subject separated by space.
**Isi Detail Email
CLEAR pi_message.
CONCATENATE 'PR Number :' gi_nama-banfn
INTO pi_message-line SEPARATED BY space.
APPEND pi_message.
CLEAR pi_message.
CONCATENATE 'PO Number :' gi_nama-ebeln
INTO pi_message-line SEPARATED BY space.
APPEND pi_message.
CLEAR pi_message.
CONCATENATE 'GR Number :' gi_nama-mblnr
INTO pi_message-line SEPARATED BY space.
APPEND pi_message.
**Kosongin 2 baris
CLEAR pi_message.
DO 2 Times.
APPEND pi_message.
ENDDO.
clear pi_message.
pi_message-line = 'Items Receipt : '.
APPEND pi_message.
clear pi_message.
pi_message-line =
'Product Code Plant SLoc Qty ' &
'Good Receipt Qty PR'
.
APPEND pi_message.
break willguna.
loop at gi_nopr where ernam = gi_nama-ernam and ebeln = gi_nama-ebeln
and banfn = gi_nama-banfn and mblnr = gi_nama-mblnr.
clear : pi_message, gv_erfmg, gv_menge, gv_werks, gv_lgort,
gv_detail.
if gi_nopr-erfmg < 1.
gv_erfmg = gi_nopr-menge.
gi_nopr-erfme = gi_nopr-meins.
else.
gv_erfmg = gi_nopr-erfmg.
endif.
gv_menge = gi_nopr-menge.
condense : gv_erfmg, gv_menge.
select single name1
into gv_werks
from t001w
where werks = gi_nopr-werks.
select single lgobe
into gv_lgort
from t001l
where werks = gi_nopr-werks
and lgort = gi_nopr-lgort.
CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT'
EXPORTING
input = gi_nopr-matnr
IMPORTING
OUTPUT = gi_nopr-matnr.
lv_length = strlen( gi_nopr-matnr ).
lv_length = 19 - lv_length.
gv_detail = gi_nopr-matnr.
do lv_length times.
concatenate gv_detail ` ` into gv_detail.
enddo.
concatenate gv_detail gv_werks into gv_detail separated by space.
lv_length = strlen( gv_werks ).
lv_length = 21 - lv_length.
do lv_length times.
concatenate gv_detail ` ` into gv_detail.
enddo.
concatenate gv_detail gv_lgort into gv_detail separated by space.
lv_length = strlen( gv_lgort ).
lv_length = 21 - lv_length.
do lv_length times.
concatenate gv_detail ` ` into gv_detail.
enddo.
concatenate gv_detail gv_erfmg gi_nopr-erfme
into gv_detail separated by space.
lv_length = strlen( gv_erfmg ) + strlen( gi_nopr-erfme ).
if lv_length > 22.
lv_length = 0.
else.
lv_length = 22 - lv_length.
endif.
do lv_length times.
concatenate gv_detail ` ` into gv_detail.
enddo.
concatenate gv_detail gv_menge gi_nopr-meins
into gv_detail separated by space.
pi_message-line = gv_detail.
append pi_message.
pi_message-line = gi_nopr-txz01.
append pi_message.
clear : pi_message.
append pi_message.
endloop.
CALL FUNCTION 'ZFN_SEND_EMAIL'
EXPORTING
p_subject = p_subject
TABLES
pi_receiver = gi_receiver
pi_message = pi_message.
.
* commit work and wait.
endloop.
*End