Selanjutnya sebelum master detail mari kita membuat data Karyawan. (sample aja)
Untuk membuat 2 key spt tampak di atas, Anda tekan tombol Ctrl dan klik di kolom yg diinginkan,
setelah itu klik tombol kunci / key di kiri atas gambar.
Kalau Anda tanya kenapa 2 key nya ? Yaitu NIK dan PT.
Sebenarnya boleh 1 aja yaitu NIK, dengan suatu syarat atau kondisi.
Dst-nya.
Anda tidak bisa menyimpan data spt di atas jika key nya hanya 1 yaitu NIK saja.
Tapi, jika NIK unik sesuai kode PT maka boleh key nya 1 saja, spt ini.
Dst-nya.
Tapi ingat walau NIK unik, kolom PT jangan dibuang sebab ini dipakai untuk multi PT atau
pembeda/filter antara 1 PT dengan PT yg lain.
Page 1 of 11
(c) 2017 mztolo.com / VFP multi pt dan no otomatis
Kenapa harus kita ubah ke DATE karena sebelumnya di MSSQL type datanya adalah DATETIME, agar
sewaktu query di RV tampilnya tanggal saja dan bukan tanggal dan jam maka kita pilih DATE.
Page 2 of 11
(c) 2017 mztolo.com / VFP multi pt dan no otomatis
Nanti RV ini akan dibuka di form sesuai variable yg kita masukkan di parameter filter ini.
Jadi jika _xpt =’A1’ maka artinya RV hanya akan menampilkan data PT yg berkode ‘A1’ saja.
Inilah fungsi filter di RV dan spt inilah cara query data sesuai PT apa yg kita telah pilih.
Jaman dulu untuk membedakan data PT yg 1 dengan yg lain ada yg membuat masing2 PT 1 tabel,
nah skr hanya tinggal menambahkan kolom saja di tabel databasenya.
Save dengan nama rv_ekaryawan, tampak Anda sudah punya RV untuk tabel Karyawan.
Page 3 of 11
(c) 2017 mztolo.com / VFP multi pt dan no otomatis
_xpt =_kodept
DODEFAULT('data!rv_ekaryawan',,'kry')
=REQUERY()
Penjelasan :
2. Masih ingat kan waktu user login pertama kali kita diperintahkan untuk memilih PT, hasil pilihan
kita itu akan dimasukkan ke variable _kodept.
Karena kita akan query data khusus sesuai PT yg kita pilih maka masukkan isi variabel PT yg telah
kita pilih ke _xpt sesuai yg kita setting di tab filter RV yg telah kita buat.
ControlSource : kry.nik
NODEFAULT atau *
Catatan : NODEFAULT atau * sama saja, artinya jika Event diberikan koding spt ini koding di parent
class nya tdk dijalankan.
Page 4 of 11
(c) 2017 mztolo.com / VFP multi pt dan no otomatis
Artinya apa ? Bahwa tombol proses ini hanya akan enable (bisa diakses) jika
kondisi kita klik tombol Add / tambah saja.
Catatan : tombol class ini di Click Event nya ada perintah thisform.proses
yg artinya menjalankan method proses yg ada di form tsb.
lcAlias=ALIAS()
TRY
n=sqlstringconnect(tigakon)
xpt = ALLTRIM(_kodept)
bpx = 'KRY'
=SQLEXEC(n,[ select angka from nomor where pt=?_kodept and kode=?bpx ],[cnomor])
SELECT cnomor
IF RECCOUNT()>0
xno = xpt+'/'+PADL(ALLTRIM(STR(cnomor.angka)),3,'0')
replace kry.nik WITH xno
thisform.toltextbox1.Refresh
ELSE
llerror=SQLEXEC(n,[insert into nomor(kode, nomor, angka, pt, proyek) values
(?bpx, '', 1, ?_kodept, '')])
Page 5 of 11
(c) 2017 mztolo.com / VFP multi pt dan no otomatis
IF llerror>0
xno = xpt+'/001'
thisform.toltextbox1.value=xno
thisform.toltextbox1.Refresh
ELSE
MESSAGEBOX('Proses penomoran gagal !!',16,'Info..')
ENDIF
ENDIF
=SQLDISCONNECT(n)
USE IN SELECT('cnomor')
CATCH TO oErr
SELECT (lcAlias)
Penjelasannya :
Skenario yg saya mau berikan contoh adalah, sewaktu user klik Add maka untuk penomoran
karyawannya hrs klik tombol Proses Nomor terlebih dahulu.
Kemudian cek apakah nomor untuk data Karyawan PT ini sudah ada atau blm.
xpt = ALLTRIM(_kodept)
bpx = 'KRY'
=SQLEXEC(n,[ select angka from nomor where pt=?_kodept and kode=?bpx ],[cnomor])
Khusus data Karyawan ini kita simpan nomor terakhirnya di tabel Nomor dengan kode ‘KRY’, itulah
kenapa di atas kita deklarasikan bpx=’KRY’
Page 6 of 11
(c) 2017 mztolo.com / VFP multi pt dan no otomatis
xno = xpt+'/'+PADL(ALLTRIM(STR(cnomor.angka)),3,'0')
replace kry.nik WITH xno
thisform.toltextbox1.Refresh
Buat nomor (xno) dengan isi yg tersusun dari KODE PT + ‘/’ + angka yg terakhir tersimpan di tabel
Nomor dan dibuat format 3 karakter dengan awalan ‘0’.
Setelah jadi isi item nomor dengan (xno) tsb dan refresh tampilannya.
Buat di tabel Nomor, untuk kode ‘KRY’ dan PT yg telah kita pilih data baru dengan isi kode ‘KRY’ ,
string kosong, angka 1 sbg angka awalan, kode PT dan string kosong.
Lakukan proses update nomor terakhir + 1, jadi yg kita simpan nomor yg akan
datang / terbarunya.
ControlSource : kry.nama
ControlSource : kry.tgllahir
Format : E
Page 7 of 11
(c) 2017 mztolo.com / VFP multi pt dan no otomatis
Selanjutnya item untuk Tombol ‘v’ atau tombol untuk menampilkan kalender.
Click Evnet :
ThisForm.Toltextbox3.Value=gettanggal(ThisForm.Toltextbox3.Value,this.Top,this.Left)
ThisForm.Toltextbox3.setfocus
Penjelasannya :
Tombol ini hanya akan enabled jika dalam kondisi Edit atau Add data baru.
Terus pada saat kita klik maka form kalender (Haer Talib) akan ditampilkan, dan ketika user pilih
tanggal serta klik OK maka nilai tanggal akan dimasukkan ke item Tanggal Lahir.
SELECT kry
IF !thisform.tambah
ThisForm.tolcombobox2.setfocus
ELSE
** simpan data ini sesuai pt nya.
replace kry.pt WITH _kodept
ENDIF
ThisForm.toltextbox2.setfocus
DODEFAULT()
_xpt = _kodept
=REQUERY('kry')
this.Refresh
Penjelasannya :
Jika data yg ada adalah data baru maka lakukan proses pengisian kode PT ke kolom PT.
Page 8 of 11
(c) 2017 mztolo.com / VFP multi pt dan no otomatis
Selanjutnya save dengan nama frmkary, buat link menu nya dan jalankan aplikasi.
Upss sorry coba buka tabel Nomor terlebih dahulu, dan perhatikan.
Untuk data Karyawan PT dengan kode A1 sudah ada 2, dan kode PT yg lain blm ada.
Page 9 of 11
(c) 2017 mztolo.com / VFP multi pt dan no otomatis
Perhatikan data masih kosong, karena memang untuk PT dengan kode A2 blm ada data.
Yups dan benar adanya, tabel nomor ini memang didesign untuk menyimpan master penomoran
sesuai dengan kode dan PT bahkan proyek jika diperlukan.
Page 10 of 11
(c) 2017 mztolo.com / VFP multi pt dan no otomatis
Jika Anda perhatikan maka data ke 2 PT tersebut ada dan bercampur jadi 1 di tabel Karyawan.
Jika Anda ingin query semua data ya tinggal buat RV tanpa filter, jika ingin PT tertentu ya RV nya spt
rv_ekaryawan yg telah Anda buat.
Jadi kalau saya ingin group berdasar PROYEK juga saya cukup buat kolom tambahan PROYEK ? Betul !
Sewaktu simpan data jgn lupa data proyek hrs diisi dari kode proyek yg dipilih, bisa dari waktu Anda
pertama kali pakai program dengan memilih proyek atau memilih proyek waktu di form entri nya.
Btw, ini hanya sample dengan segala kekurangannya dan tugas Anda menyempurnakannya.
Sample selanjutnya menerapkan user access ke menu dari modul yg telah kita buat.
Terima kasih.
Page 11 of 11