Anda di halaman 1dari 11

(c) 2017 mztolo.

com / VFP multi pt dan no otomatis

VFP Multi PT dan Nomor Otomatis

Selanjutnya sebelum master detail mari kita membuat data Karyawan. (sample aja)

Pertama-tama buat tabel Karyawan dgn struktur spt di bawah ini.

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.

Maksudnya begini, lihat data di bawah ini :

001 Rudy 28/10/1988 A1

002 Tolo 12/12/1991 A1

001 Susan 17/08/1991 A2

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.

A1/001 Rudy 28/10/1988 A1

A2/001 Denok 11/09/1987 A2

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.

Kapan itu ? Saat data diambil oleh RV.

Page 1 of 11
(c) 2017 mztolo.com / VFP multi pt dan no otomatis

Selanjutnya buat RV ntuk table tsb, add semua field.

Selanjutnya klik tombol Properties.

Pilih Field : TGLLAHIR dan di bagian Data type pilih DATE

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.

Lakukan hal sama jika ada type data tanggal yg lainnya.

Selanjutnya klik OK.

Page 2 of 11
(c) 2017 mztolo.com / VFP multi pt dan no otomatis

Selanjutnya di tab Filter, buat filter spt tampak di gambar.

Perhatikan di bagian Example (?_xpt)

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.

Untuk Update Criteria setting spt gambar di bawah.

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

Selanjutnya buat form untuk entri Karyawan, base class _mztol.vcx.

Isi Load Event nya :


lparameter
cFile,cOrder,cAlias,cBuffer,xFilter1,xFilter2,xFilter3,xFilter4,xfilter5

_xpt =_kodept

DODEFAULT('data!rv_ekaryawan',,'kry')
=REQUERY()

Penjelasan :

1. Anda cukup ketik yg tebal hurufnya saja.

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.

3. Buka RV rv_ekaryawan dengan alias ‘kry’

4. Lakukan =requery() agar data diambil sesuai isi _xpt.

Selanjutnya mari kita bahas item per item di form nya.

Untuk item di atas yg perlu Anda lakukan di properties.

ControlSource : kry.nik

Isi Refresh Event :

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

Selanjutnya item tombol Proses Nomor.

Tombol Proses Nomor ini memakai class Tolcmdbtnproses.

Isi Refresh Event spt ini.


this.enabled=thisform.tambah

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.

Anda bisa cek sendiri di tombol tsb dan di form nya.

Dan isi method proses form adalah spt ini :

** proses penomoran karyawan


LOCAL n, bpt, bpx, xno, llerror, lcAlias
LOCAL oErr as Exception
LOCAL cStr as Character

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

=SQLEXEC(n,[update nomor set angka=angka+1 where pt=?_kodept and kode=?bpx])

=SQLDISCONNECT(n)
USE IN SELECT('cnomor')

CATCH TO oErr

cStr = "Capture pesan ini dan kirim ke IT :" + CHR(13)+CHR(10)+CHR(13)+CHR(10) + ;


"[ Error: ] " + STR(oErr.ErrorNo) + CHR(13) + CHR(10) + ;
"[ LineNo: ] " + STR(oErr.LineNo) + CHR(13) + CHR(10) + ;
"[ Message: ] " + oErr.Message + CHR(13) + CHR(10) + ;
"[ Procedure: ] " + oErr.Procedure + CHR(13) + CHR(10) + ;
"[ Details: ] " + oErr.Details + CHR(13) + CHR(10) + ;
"[ StackLevel: ] " + STR(oErr.StackLevel) + CHR(13) + CHR(10) + ;
"[ LineContents: ] " + oErr.LineContents
MESSAGEBOX(cStr)
ENDTRY

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.

Ketika diklik koneksi ke database SQL Server nya dibuat.


n=sqlstringconnect(tigakon)

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

Perhatikan design tabel Nomor :

Khusus data Karyawan ini kita simpan nomor terakhirnya di tabel Nomor dengan kode ‘KRY’, itulah
kenapa di atas kita deklarasikan bpx=’KRY’

Jika data untuk kode ‘KRY’ dan PT tsb ada, maka :

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.

Jika tidak / blm ada nomornya, maka :


llerror=SQLEXEC(n,[insert into nomor(kode, nomor, angka, pt, proyek) values (?bpx, '', 1,
?_kodept, '')])

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.

Jika sukses proses tsb maka jgn lupa :


=SQLEXEC(n,[update nomor set angka=angka+1 where pt=?_kodept and kode=?bpx])

Lakukan proses update nomor terakhir + 1, jadi yg kita simpan nomor yg akan
datang / terbarunya.

Selanjutnya item untuk Nama Karyawan.

ControlSource : kry.nama

Selanjutnya item untuk Tanggal Lahir.

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.

Refresh Event : this.enabled=thisform.lvaredit


MouseMove : NODEFAULT

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.

Kemudian efek untuk mouse move kita juga disabled-kan.

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.

Selanjutnya method Save isinya spt ini :


lparameters nObyek,cFile,cDetail,cFrame,nPage,nPage2,cItem,cGrid,nPageFokus,cItemFokus

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.

DODEFAULT() akan menjalankan save data yg ada.

Setelah itu requery RV karyawan sesuai kode PT untuk me-refresh datanya.

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.

Mari kita coba aplikasinya.

Isi data dan Simpan.

Page 9 of 11
(c) 2017 mztolo.com / VFP multi pt dan no otomatis

Sekarang coba pilih PT lain dan buat data Karyawan juga.

Perhatikan data masih kosong, karena memang untuk PT dengan kode A2 blm ada data.

Sekarang buat data baru.

Sekarang lihat di tabel Nomor.

Tampak terbentuk record data yg ke 2 untuk PT baru dengan nomor tersendiri.

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

Dan sekarang coba buka data Karyawan.

Jika Anda perhatikan maka data ke 2 PT tersebut ada dan bercampur jadi 1 di tabel Karyawan.

Sang pembeda adalah data yg ada di kolom PT.

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.

Simple dan mudah kan ?

Btw, ini hanya sample dengan segala kekurangannya dan tugas Anda menyempurnakannya.

Oke, sampai disini dulu contoh multi PT dan penomoran otomatisnya.

Sample selanjutnya menerapkan user access ke menu dari modul yg telah kita buat.

Terima kasih.

Page 11 of 11

Anda mungkin juga menyukai