Bermain dengan memory id

ini pertama kalinya saya menggunakan memory id. kebetulan ada permintaan dari functional untuk melakukan splitting billing document sales order, di mana satu dokumen hanya bisa menyimpan 900 line item dan bila lebih dari 900 maka akan di create satu dokumen baru dan begitu selanjutnya.

tempat untuk memisahkan billing document adalah di routine yg di-create oleh functional dengan menggunakan tcode VOFM ( VOFM > data transfer > billing documents ).

penggunaan memory id ini digunakan untuk menyimpan value dari suatu variable ke dalam abap memory. value yang ingin ditaruh di memory di IMPORT terlebih dahulu, kemudian bila value tersebut ingin diambil bisa gunakan syntax EXPORT.

bila penyimpanan di memory sudah tidak diperlukan lagi, gunakan FREE MEMORY. bila FREE MEMORY tidak dituliskan, memory di abap akan tetap menyimpan memory tersebut hingga nantinya user meng-log off sap gui. CMIIW.

coding yang saya buat di bawah ini adalah untuk melakukan splitting billing document pada VOFM routines yang bila document line item-nya mencapai 900 line maka akan di-create billing document baru, sehingga satu billing document berisi maksimal 900 line item.

*purpose: memisahkan dokumen bila jumlah line itemnya lbih dari 900
*-------------------------------------------------------------------
* vbak-vbeln    : sales document
* vbrk-zukri    : nama billing document yang akan terbentuk
*-------------------------------------------------------------------
  DATA: ld_index  type sy-index,
        ld_num(2) type n,
        ld_vbeln  like vbak-vbeln,
        mem_index like indx-srtfd,
        mem_num   like indx-srtfd,
        mem_vbeln like indx-srtfd.

  CONCATENATE 'VBELN' vbak-vbeln INTO mem_vbeln.

  IMPORT ld_vbeln FROM MEMORY ID mem_vbeln.

  IF ld_vbeln is INITIAL.
    ld_vbeln = vbak-vbeln.
    EXPORT ld_vbeln TO MEMORY ID mem_vbeln.
  ENDIF.

    CONCATENATE 'NUM' vbak-vbeln INTO mem_num.
    IMPORT ld_num FROM MEMORY ID mem_num.
    CONCATENATE vbak-vbeln '_' ld_num INTO vbrk-zukri.
    CONDENSE vbrk-zukri.

    CONCATENATE 'INDEX' vbak-vbeln INTO mem_index.
    IMPORT ld_index FROM MEMORY ID mem_index.
    ld_index = ld_index + 1.
    EXPORT ld_index TO MEMORY ID mem_index.

    IF ld_index = 900.
      ld_num = ld_num + 1.
      EXPORT ld_num TO MEMORY ID mem_num.
      FREE MEMORY ID mem_index.
    ENDIF.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s