SM30 Delimited Date

ABAP - SM30 Delimited Date
Salam ABAP HR Indonesia !

Biasanya di modul HR, setiap data memakai delimit date untuk setiap perubahan data yang ada. Contoh nya nih seperti ilustrasi dibawah ini. Setiap kali data ditambahkan maka secara otomatis endda akan terpotong.

















Untuk delimited date SAP mempunyai fungsi standard yang langsung bisa ditambahkan pada configurasi table dengan cara seperti dibawah ini.





























1. SE11 kemudian masukan nama table.
2. Click Change
3. Pilih Menu Utilities > Table Maintenance Generator.

















4. Kemudian pilih Menu Environment > Validity range
























Setelah itu maka kalo kita lihat di coding nya akan kelihatan pada Screens nya akan ada tambahan seperti dibawah ini.






















Seperti yg dijelaskan di depan setelah menambahkan validity range hasilnya secara otomatis endda akan terpotong sehari sebelum tanggal record baru.

















Nah masalahnya bagaimana kalo record itu kita delete maka seharusnya tanggal endda harus di sesuaikan dengan endda sebelumnya supaya secara periode data tidak terjadi gap.

Contoh : Jika saya mendelete pada record Personnel Area 100 dengan begda 01.02.2009 dan endda 28.02.2009, maka record akan menjadi seperti pada gambar berikut.





















User menginginkan agar data Endda dikembalikan sesuai dengan endda record yang di delete. Bisa dilihat pada gambar ini. Endda record Personnel area 1000 dengan begda 01.01.2009 dan dengan endda yang berubah menjadi 28.02.2009 sesuai dengan endda record yang di delete.
























Untuk itu kita harus tambahkan coding di dalam configurasi table nya ( blom ketemu dari standard SAP nya, bagi yg udah tau dan nemu standardnya ya bagi-bagi lah infonya ). Caranya sbb:

Masuk ke SE11 Lakukan seperti step 1,2,3 diatas. Kemudian step ke 4 sbb:


4. Pilih Menu Environment > Modification > Events













5. Masukan Event seperti dibawah ini. Ingat setiap memasukan event click editor disamping nya supaya link sesuai dengan performnya.

























Coding nya sbb:


*----------------------------------------------------------------------*
***INCLUDE ZDC_ZONA_UDF .
*----------------------------------------------------------------------*

* Variable tampungan endda yang akan di delete
* yang nanti nya di replace ke record sebelumnya
DATA: ZDELETED_ENDDA LIKE SY-DATUM.
DATA: ZIZONA LIKE ZPAZONA OCCURS 0 WITH HEADER LINE.
DATA: ZKEYLINE LIKE LINE OF ZIZONA.
DATA: ZLINE LIKE LINE OF ZIZONA.
DATA: ZLEN TYPE I.

*---------------------------------------------------------------------*
* FORM ZGET_ZONA_BEFORE_DELETE *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM ZGET_ZONA_BEFORE_DELETE.
* BREAK-POINT.
ZLINE = TOTAL.
PERFORM ZGET_KEYLEN CHANGING ZLEN.
LOOP AT TOTAL.
IF TOTAL(ZLEN) EQ ZLINE(ZLEN).
* ambil endda nya untuk di replace ke record sebelumnya
ZDELETED_ENDDA = ZLINE-ENDDA.
EXIT.
ELSE.
* simpen key record sebelumnya
ZKEYLINE = TOTAL(ZLEN).
ENDIF.
ENDLOOP.
ENDFORM.

*---------------------------------------------------------------------*
* FORM ZGET_ZONA_AFTER_DELETE *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM ZGET_ZONA_AFTER_DELETE.

IF ZKEYLINE NE ''.
LOOP AT TOTAL.
* baca record sebelumya
CHECK TOTAL(ZLEN) EQ ZKEYLINE.
* BREAK-POINT.
* simpen record sebelumnya untuk di delete
* supaya gak bentrok
ZIZONA = TOTAL.
APPEND ZIZONA.
* Update endda
ZLINE = TOTAL.
DELETE TOTAL.
ZLINE-ENDDA = ZDELETED_ENDDA.
TOTAL = ZLINE.
* record sebelunya dianggap new
CONCATENATE TOTAL 'N' INTO TOTAL.
APPEND TOTAL.
SORT TOTAL.
EXIT.
ENDLOOP.
LOOP AT EXTRACT.
* baca record sebelumnya
CHECK EXTRACT(ZLEN) EQ ZKEYLINE.
* Update endda
ZLINE = EXTRACT.
DELETE EXTRACT.
ZLINE-ENDDA = ZDELETED_ENDDA.
EXTRACT = ZLINE.
APPEND EXTRACT.
SORT EXTRACT.
EXIT.
ENDLOOP.
ENDIF.
ENDFORM.

*---------------------------------------------------------------------*
* FORM ZGET_ZONA_BEFORE_SAVE *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM ZGET_ZONA_BEFORE_SAVE.
* BREAK-POINT.

READ TABLE ZIZONA INDEX 1.
IF SY-SUBRC EQ 0.
DELETE ZPAZONA FROM TABLE ZIZONA.
ENDIF.
CLEAR: ZKEYLINE.
REFRESH: ZIZONA.
CLEAR: SY-SUBRC.

ENDFORM.

*---------------------------------------------------------------------*
* FORM ZGET_KEYLEN *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM ZGET_KEYLEN CHANGING ZKEYLEN.
CLEAR: ZKEYLEN.

LOOP AT X_NAMTAB WHERE KEYFLAG = 'X' AND TEXTTABFLD <> 'X'.
ZKEYLEN = ZKEYLEN + X_NAMTAB-FLENGTH.
ENDLOOP.

ENDFORM.




Selamat Mencoba Yeeee....
kalo ada cara yang lebih bagus kasih tau yee

2 Responses to "SM30 Delimited Date"

John F. Nurdin says
February 20, 2012 8:51 AM

bos, boleh nanya nanya ngak masalah HRIS? Boleh minta ID yang bisa buat chat ngak? makasih sebelumnya.

D i o c i o says
March 5, 2012 10:31 AM

Boleh silahkan, kalo bisa saya jawab akan sayajawab, kalo tidak bisa saya coba belajar lagi he he he