ZXMBCU01

<< 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