1. pendahuluan 2. tipe file dan ekstensi · pdf filebedanya, field varchar tidak ... jendela...
TRANSCRIPT
1
1. Pendahuluan
Fox Software adalah perusahaan yang pertama kali mengembangkan program
sebagai FoxBASE. Fox Software bergabung dengan Microsoft pada tahun 1992 dan
program aplikasi yang dikembangkannya semakin disempurnakan serta mulai
menggunakan label visual.
Sejak dikembangkan dengan versi visualnya, Visual FoxPro telah terbukti
menjadi tool dan solusi yang tepat untuk membangun aplikasi database secara cepat
dan handal. Visual FoxPro mampu manangani berbagai tipe database. Bahkan
perangkat lunak pemrograman yang berbasis objek ini juga menyediakan databasenya
sendiri, baik berupa database container (DBC) maupun free table (DBF).
2. Tipe File dan Ekstensi
Pada saat membangun aplikasi database dengan Visual FoxPro, maka akan
terdapat file-file pembangunan database. Pada layar komputer terdapat kotak dialog
yang terdiri dari :
1. Project merupakan file yang berisikan file-file lain yang terdapat pada aplikasi, baik
file data, dokumen dan objek. Ekstensi file project adalah .pjx.
2. Database merupakan file yang berisi informasi file-file penyusun database yang
dapat berupa table, index atau view. Ekstensi file database adalah .dbc.
3. Tabel merupakan file yang berisi informasi yang tersusun dari beberapa record.
Ekstensi file table adalah .dbf.
4. Form merupakan sarana untuk berinteraksi antara user dengan lingkungan data dan
umumnya digunakan untuk entry atau edit data. Form ini berisi beberapa kontrol-
kontrol untuk menampilkan atau mengedit data. Ekstensi file form adalah .scx.
5. Report merupakan salah satu bentuk pengujian informasi yang dapat dicetak di
kertas. Ekstensi file report ini adalah .frx.
6. Program merupakan file yang berisi satu atau lebih perintah pemrograman yang
tersusun secara teratur untuk menjalankan proses tertentu. Ekstensi file program ini
adalah .prg.
7. Menu merupakan daftar perintah yang terdapat pada baris paling atas. Menu ini
terdiri dari menubar dan submenu. Ekstensi untuk file menu adalah. Mnx.
Tipe file dan ekstensi lainnya yang digunakan dalam pemrograman Visual
FoxPro dapat dilihat pada tabel 1.
2
Tabel 1 Daftar Ekstensi dan Tipe File Visual FoxPro
Ekstensi
File Tipe File Keterangan
.app Generated Application Aplikasi yang hanya bisa dijalan-kan dalam
Visual FoxPro
.exe Executeable program Aplikasi/program yang siap dijalankan
.pjt Project memo File memo project
.dct Database memo File memo database
.dcx Database index File index database
.fpt Table memo File memo table
.idx Single index Index tunggal
.cdx Compound index Kumpulan satu atau lebih index tunggal
Ekstensi
File Tipe File Keterangan
.qpr Generated query program File query
.sct Form memo File memo form
.vcx Visual class library File library kelas Visual FoxPro
.vct Visual class library memo File memo library kelas Visual PoxPro
.frt Report memo File memo report Visual FoxPro
.fxp Compiled program File program yang telah dikompilasi
.h Header file File header biasanya digunakan intern di
dalam pengkodean
.mnt Menu memo File memo menu Visual FoxPro
.mpr Generated menu program File menu yang bisa dijalankan
.mpx Compiled menu program File menu yang telah dikompilasi
.err Compilation error File penyimpanan hasil kesalahan yang
terjadi saat kompilasi program/aplikasi
Sumber : Wahana Komputer, (2007:21)
3. Tipe Data dan Tipe Field
3
Dalam Visual FoxPro, tipe data dibedakan dengan tipe field. Tipe data bersifat
lebih luas karena tipe data selain dapat digunakan untuk field juga dapat digunakan
untuk mendeklarasikan suatu variabel tertentu. Sedangkan tipe field hanya bisa
diterapkan pada field dalam tabel. Untuk melihat perbedaan keduanya, perhatikan tabel
2 dan 3 berikut ini :
Tabel 2. Tipe-tipe data dalam Visual FoxPro
Tipe Data Keterangan Ukuran Range
Blob
Data biner dgn panjang tidak
ditentukan. Nilai Blob disimpan dalam
file memo (.fpt)
4 bit pada tabel Dibatasi memory yang tersedia
dan atau sampai 2GB file.
Character Teks alpanumerik 1 bit per
karakter
Semua karakter, angka, simbol,
dll.
Currency Jumlah nilai uang 8 bit
-$922337203685477.5807
sampai dengan $922337203685477.5807
Date Data kronologis yang berisi bln, tgl,
tahun 8 bit 0001-01-01 s/d 9999-12-31
Date Time
Data kronologis yang berisi bln, tgl, tahun, jam, menit, dan detik
8 bit 0001-01-01 s/d 9999-12-31,
plus 00:00:00 a.m. s/d 11:59:59
pm.
Logical Nilai Boolean : Benar atau Salah 1 bit True (.T.) or False (.F.)
Numeric Integer atau angka desimal 8 bit pada
memori; 1-20
bit pada tabel
-.9999999999E+19 s/d .9999999999E+20
Varbinary Nilai-nilai biner
1 bit pernilai
heksadesimal
s/d total 255
bit
Semua nilai heksadesimal
Variant
Tipe data varian bisa berupa tipe data
apa saja yang dimiliki Visual FoxPro bahkan termasuk nilai nul.
Namu sekali nilai diberikan pada tipe
varian ini, maka tipe varian
diasumsikan sama dengan tipe data isi/nilai tsb.
Tergantung
nilai yang
diberikan pada
tipe varian ini
Tergantung nilai yang
diberikan pada tipe varian ini
Sumber : Wahana Komputer, (2007:46)
Tabel 3. Tipe-tipe field dalam Visual FoxPro
4
Tipe Data Keterangan Ukuran Range Character
(Binary)
Teks alpanumerik yang tidak ingin
diubah melaui code page
1 bit per
karakter Semua karakter, angka, symbol
Double Angka yang memerlu-kan tingkat
keakuratan dan ketelitian tinggi 8 bit
+/- 4.94065645841247E-324 s/d
+/- 8.9884656743115E307
Float Integer atau angka desimal
8 bit pada
memori ; 1-20
bit pada tabel
-.9999999999E+19 s/d
.9999999999E+20
Integer Nilai angka tanpa desimal 4 bit -2147483647 s/d 2147483647
Intiger
(Autoinc)
Sama dengan integer sekaligus
memiliki nilai yang otomatis
meningkat. Read-only
4 bis Nilai ditentukan pada nilai
autoincrement Next dan Step
General Referensi pada OLE object 4 bit pada tabel Dibatasi memori yang tersedia
Memo
Teks alpanumerik dengan panjang
yang tidak ditentukan atau
referensi pada satu blok data
4 bit pada tabel Dibatasi memori yang tersedia
Memo
(Binary)
Memo yang tidak diubah melalui
code page 4 bit pada tabel Dibatasi memori yang tersedia
Varchar
Teks alpanumerik
Sama dengan tipe Character,
bedanya, field Varchar tidak memberikan spasi tambahan untuk
memenuhi panjang field
1 bit per
karakter s/d total 254 bit
Semua karakter
Varchar
(Binary)
Tipe Varchar yang tidak ingin
diubah melaui code page
1 bit per
karakter s/d
total 254 bit
Semua karakter
Sumber : Wahana Komputer, (2007:47)
4. Tahap Pembuatan Program
Pembuatan program dengan Visual FoxPro selalu melalui dua tahap, yakni:
a. Tahap pemrograman visual, dan
b. Tahap penulisan kode
Pada tahap pemrograman visual, mula-mula merancang form yang dipakai
program. Pada tahap ini dibuatkan form beserta kontrol-kontrol yang diperlukan.
Perancangan form beserta kontrol-kontrol yang dilibatkan ditangani dengan
menggunakan perangkat-perangkat yang tersedia dalam paket Viasual FoxPro.
Pada tahap penulisan kode, dituliskan kode-kode yang dilekatkan pada kontrol-
kontrol yang dipakai. Sebagai gambaran, Jika operator menekan suatu tombol yang kita
5
buatkan, maka kode yang kita buatkan harus menampilkan suatu tindakan. Penulisan
kode ini dilakukan dengan menggunakan editor teks yang tersedia pada paket visual
FoxPro.
5. Perangkat untuk Pembuatan Program
Bila bermaksud membuat suatu program dengan Visual FoxPro, akan selalu
melibatkan tiga jendela berikut :
a. Jendela Form
b. Jendela Form Control
c. Jendela Properties
Form merupakan jendela yang akan muncul sebagai latar belakang dari tampilan
suatu aplikasi. Sebuah aplikasi dapat memiliki banyak form, namun paling tidak
melibatkan sebuah form. Itulah sebabnya, tidak berlebihan jika form dianggap sebagai
tulang punggung aplikasi Visual FoxPro. Formlah yang menjadi antarmuka dengan
pemakai aplikasi.
Pada saat perancangan, form tampak tersusun atas sejumlah titik. Hal ini
bermanfaat sebagai patokan dalam mengatur tata letak kontrol (misalnya tombol tekan
atau bahkan teks). Sudah tentu, pada saat aplikasi dijalankan, titik-titik tersebut tidak
kelihatan. Dengan kata lain, tanda titik-titik hanya muncul saat perancangan.
Jendela Form Control (lihat gambar 1a) merupakan jendela yang membuat
berbagai kontrol yang tersedia pada Visual FoxPro. Kita perlu memilih kontrol yang
terdapat pada jendela ini sebelum menempatkannya pada form.
Gambar 1a. Form Control
Jendela Properties merupakan tempat untuk mengatur hal-hal yang berkaitan
dengan suatu kontrol yang terdapat pada form. Jendela ini mengandung lima buah tab,
yaitu :
a. All
b. Data
c. Methods
d. LayOut
6
e. Other
Kelima tab ini terlihat pada bagian atas jendela properties. Tab properties berisi
properti dari kontrol, misalnya ukuran font, jenis font, nama kontrol, dan sebagainya.
Seperti pada gambar 2a
Gambar 2a. Jendela Properties
6. Gambaran program dengan kontrol Tombol Tekan dan Field Entri
Jika kita perhatikan program-program pada windows, pengerjaan suatu tindakan
bisa dilakukan dengan menggunakan suatu tombol perintah, seperti Ok atau Cansel.
Bagaimana cara membuat tombol-tombol tersebut kita akan coba praktekan
pembuatannya pada sub bab ini.
Pada Modul praktek ke II kita sudah mempelajari membuat kontrol teks, yang b
ertuliskan Kode Mata Kuliah, Nama Mata Kuliah dan Kredit, dan Field Entri (berupa
kotak kosong yang tidak berisi apa-apa)
7
7. Mengenal Pointer Record
Setiap tabel memiliki sebuah pointer record sewaktu tabel dibuka. Fungsi dari
pointer ini yaitu menunjuk record sekarang. Pada lingkup pemrograman, pointer ini
mempunyai peranan yang sangat penting. Beberapa perintah Visual FoxPro (misalnya
DISPLAY, jika lingkup ALL tidak diberikan) bekerja berdasarkan record yang sedang
ditunjuk oleh pointer record.
Perhatikan hasil perintah seperti BROWSE, setiap record mempunyai nomor
record. Nomor record ini dimulai dari 1. Nomoor inilah yang dipegang pada pointer
record. Misalnya, jika pointer record berisi 2, artinya record sekarang adalah record
bernomor2.
Perlu diketahui, pada saat suatu tabel dibuka, pointer record dengan sendirinya
menunjuk ke record bernomor 1 (jika tabel paling tidak mempunyai sebuah record).
8. Memperoleh nomor record sekarang
Untuk mengetahui nomor record sekarang (atau dengan kata lain melihat isi
pointer record), bisa digunakan perintah RECNO().
Perintah ini diketikan pada jendela command dan diakhiri dengan enter.
Misalnya buka dulu file table (USE MK.DBF dikuti dengan ENTER), lalu ketik
perintah ?RECNO() dikuti dengan ENTER. Perintah ini akan menampilkan posisi
record sekarang.
9. Memindahkan pointer record
Pointer record dapat diatur agar menunjuk ke suatu record tertentu dan tentu
saja record tersebut akan menjadi record sekarang. Perintah yang digunakan dapat
berupa GO atau GOTO. Kedua perintah ini mempunyai makna yang sama.
Bentuk GOTO adalah :
GOTO [RECORD] <nomor record>
8
Kata RECORD yang ditulis dalam tanda [] bisa diberikan ataupun tidak, tanpa
mengubah makna. Perlu diketahui, jika kata RECORD disertakan, tanda [] tidak perlu
ditulis.
10. Meletakan ke record pertama dan record terakhir
Untuk menggerakan pointer ke record pertama, bisa digunakan perintah GOTO
1 atau GOTO TOP. Perintah ini identik dengan GO 1 atau GO TOP.
Sedangkan untuk memindahkan pointer ke record terakhir, bisa digunakan
perintah GOTO BOTTOM atau GO BOTTOM.
11. Memindahkan posisi record ke record berikutnya
Salah satu tindakan yang nantinya banyak dijumpai dalam pemrograman adalah
memindahkan pointer ke record berikutnya. Langkah ini dapat ditempuh dengan
menggunakan perintah SKIP. Format perintah ini adalah :
SKIP [ <jumlah recor yang dilompati>]
Apabila jumlah record yang dilompati tidak disertakan, pergeseran adalah
sebesar satu record. Jadi SKIP identik dengan SKIP 1.
12. Meletakan pointer record ke record yang dicari
Visual FoxPro juga menyediakan perintah yang berguna untuk mencari suatu
record tertentu. Misalnya, perintah untuk menempatkan pointer record yang bagian
Mata Kuliah-nya berisi COBOL .
LOCATE FOR NAMA_MK=”COBOL”
Dalam hal ini LOCATE adalah perintah un tuk mencari suatu record dan FOR
NAMA_MK=”COBOL” adalah kriteria pencarian.
Untuk mencari record berikutnya yang cocok, kita cukup memberikan perintah
CONTINUE. Apabila hasil dari perintah LOCATE atau CONTINUE berupa :
End of Locate scope.
9
Hal ini menandakan bahwa tidak ada lagi data yang cocok.
Untuk mengtahui yang dicari dengan LOCATE ketemu atau tidak, kita bisa
menggunakan fungsi FOUND(). Fungsi ini memberikan nilai balik berupa :
.T. jika data yang dicari ketemu
.F. jika data yang dicari tidak ketemu
13. Awal File dan Akhir File
Secara logika, tabel yang berisi sejumlah record akan diawali dengan record
maya yang disebut BOF (Begining Of File – Awal File) dan diakhiri dengan record
maya bernama EOF (End Of File – Akhir File).
BOF Record 1 Record 2 Record 3 Record 4 Record N EOF
14. Mengenal Pernyataan IF Pernyataan IF merupakan perintah yang sering kali dilibatkan dalam penulisan
kode. IF merupakan perintah yang berguna dalam mengambila suatu keputusan. Dalam
bentuk pseudocode, barang kali kita akan melakukan suatu tindakan dengan kriteria
sebagai berikut:
“Jika pointer tidak menunjuk ke awal file, pindahkanlah pointer record ke record
sebelumnya“.
Pada contoh ini, tindakan memindahkan pointer record ke record sebelumnya
hanya dilakukan jika pointer record tidak berada pada awal file (BOF).
Pseudokode di atas dapat dituangkan ke dalam pernyataan Visual FoxPro
sebagai berikut :
IF .NOT. BOF()
SKIP –1
ENDIF
Record maya
di awal tabel
Record maya
di akhir tabel
10
Pada pernyataan di atas, .NOT. merupakan salah satu operator logika pada
Visual FoxPro. Operator .NOT. berarti “tidak”. Ekspresi .NOT. BOF() berarti “jika
BOF() tidak bernilai .T. atau dengan kata lain “jika pointer record tidak sedang
menunjuk BOF (awal file).
Secara umum, bentuk pernyataan IF adalah sebagai berikut :
IF <kondisi>
<pernyataan-pernyataan>
ENDIF
Dalam hal ini, <kondisi> berupa ekspresi logika, yang bernilai .T. (benar) atau
.F. (salah). Apabila <kondisi> bernilai .T., maka <pernyataan-pernyataan> akan
dijalankan. Sebaiknya, jika <kondisi> bernilai .F., <pernyataan-pernyataan> tidak
akan dijalankan.
Selain bentuk di atas, juga terdapat bentuk seperti berikut :
IF <kondisi>
<pernyataan-pernyataan_1>
ELSE
<pernyataan-pernyataan_2>
ENDIF
Pada bentuk ini,
<pernyataan-pernyataan_1> dijalankan jika <kondisi> bernilai .T.
<pernyataan-pernyataan_2> dijalankan jika <kondisi> bernilai .F.
15. Operator Relasi dan Opertaor Logika
Operator relasi dan opertaor logika merupakan komponen penting yang dipakai
sebagai kondisi pada pernyataan-pernyataan pengambilan keputusan (IF) dan pada
beberapa pernyataan yang lain. Operator-operator ini, sebagaimana operator yang lain,
berupa simbol atau kata kunci yang melaksanakan suatu operasi terhadap data atau
ekspresi.
Ekspresi yang dilibatkan oleh operator-operator ini dapat berupa:
Nama Field
11
Variabel Memori
Fungsi, ataupun
Konstantan
a. Operasi Relasi
Operasi relasi adalah operator yang digunakan untuk membandingkan dua buah
ekspresi bertipe data sama dan menghasilkan nilai .T. (benar) atau .F. (salah). Tipe data
yang dapat dikenakan pada operator ini meliputi :
Karakter
Numerik
Ekspresi tanggal
Visual FoxPro menyediakan sejumlah operator relasi seperti pada tebel 3.
Tabel 3. Operator relasi
Operator Keterangan
< Kurang dari
> Lebih besar dari
= Sama dengan
= = Tepat sama dengan (bermanfaat untuk pembandingan string karakter)
<> atau # Tidak sama dengan
<= atau =< Kurang dari atau sama dengan
>= atau => Lebih besar dari atau sama dengan
$ Pembandingan string
Beberapa contoh ungkapan yang melibatkan operator relasi dapat dilihat pada tabel 4.
12
Tebel 4. Contoh pembandingan dengan memakai operator relasi
Ekspresi Hasil Keterangan
‘A’ > ‘B’ .F. Menurut tabel ASCII, ‘A’ terletak sebelum ‘B’, jadi
nilai ‘A’ lebih kecil daripada ‘B’
‘A’ < ‘a’ .T. Menurut tabel ASCII, ‘A’ terletak sebelum ‘a’
2 > 1 .T. Nilai 2 memang lebih besar daripada 1
“Yogya”=”YOGYA” .F. Hurup kecil berbeda dengan hurup kapital
“ABCD” = “ABC” .T. Jika SET EXACT dalam keadaan OFF
“ABCD” = “ABC” .F. Jika SET EXACT dalam keadaan ON
“ABCD” = = “ABC” .F. Selalu menghasilkan .F., tidak tergantung pada
keadaan SET EXACT
“AB” $ “ABCD” .T. String “AB” ada pada “ABCD”
“BC” $ “ABCD” .T. String “BC” ada pada “ABCD”
“ABCD” $ “AB” .F. String “ABCD” tidak ada pada string “AB”
{21/12/2000} >
{12/11/2000}
.T. Tanggal 21 Desember 2000 memang lebih
belakangan daripada 12 Nopember 2000
b. Operator Logika
Operator logika digunakan untuk membandingkan dua buah ekspresi logika dan
menghasilkan nilai .T. (benar) atau .F. (salah). Operator logika yang disediakan oleh
Visual FoxPro dapat dilihat pada tabel 5.
Tabel 5. Operator Logika
Operator Keterangan Format
.NOT. Operator
“Tidak”
.NOT. <ekspresi>
Hasil .T. jika <ekspresi> bernilai .F.
Hasil .F. jika <ekspresi> bernilai .T.
.AND. Operator
“Dan”
<ekspresi_1> .AND. <ekspresi_2>
Hasil berupa .T. hanya jika kedua <ekspresi>
bernilai .T.
.OR. Operator
“Atau”
<ekspresi_1> .OR. <ekspresi_2>
Hasil berupa .T. jika ada <ekspresi> yang bernilai .T.
13
16. Fungsi IIF
Fungsi bernama IIF() juga dapat bertindak seperti perintah IF. Format fungsi ini
adalah :
IIF(<kondisi>,<ekspresi_1>,<ekspresi_2>)
Fungsi IIF memberikan nilai <ekspresi_1> jika <kondisi> bernilai .T., atau nilai
<ekspresi_2> jika <kondisi> bernilai .F.
Sebagai contoh :
IF TotalPembelian >= 100000
Diskon = 1/10 * TotalPembelian
ELSE
Diskon = 0
ENDIF
Dapat disederhanakan menjadi :
Diskon = IIF(TotalPembelian >= 100000, 1/10 * TotalPembelian, 0)
17. Pernyataan DO CASE
Pernyataan DO CASE merupakan alternatif dari IF.. ELSEIF. Format
pernyataan ini adalah :
DO CASE
CASE <kondisi_1>
<pernyataan_pernyataan_1>
CASE <kondisi_2>
<pernyataan_pernyataan_2>
OTHERWISE
<pernyataan_pernyataan_n>
ENDCASE
Dimana :
Bila <kondisi_1> bernilai .T., maka <pernyataan_pernyataan_1> saja yang akan
dijalankan.
14
Bilai <kondisi_2> bernilai .T., maka <pernyataan_pernyataan_2> saja yang akan
dijalankan.
<pernyataan_pernyataan_n> hanya akan dijalankan sekiranya tidak ada <kondisi>
yang bernilai .T.
Bagian OTHERWISE bisa tidak disertakan. Jika bagian ini tidak disertakan, dan tak
satupun <kondisi> yang bernilai .T., maka tak ada pernyataan yang dieksekusi.
18. Mengenal Kotak Dialog
Kotak dialog digunakan untuk memberitahukan sesuatu informasi kepada
pemakai, misalnya untuk menyampaikan suatu pesan kesalahan. Selain untuk
kleperluan seperti ini, kotak dialog juga bisa dipakai untuk melakukan suatu konfirmasi
terhadap pemakai; misalnya pemakai perlu menjawab Yes atau No. Sebuah kotak
dialog paling tidak mempunyai sebuah tombol tekan.
a. Kaidah MESSAGEBOX
Kaidah perintah MessageBox adalah sebagai berikut :
MessageBox(<pesan>, [<tipe-kotak-dialog>,[<judul>]]
Argumen kedua dan ketiga bisa tidak disertakan.
Contoh :
MessageBox("Terima Kasih",1+32, "Selesai")
Hasilnya adalah sebagai berikut (Gambar 3.1)
Gambar 3.1 Kotak Dialog
Pada contoh ini, string “Terima Kasih” merupakan pesan yang ditampilkan pada kotak
dialog, string karakter “Selesai” sebagai judul pada kotak dialog, dan 1+32 menyatakan
15
jenis kotak dialog (termasuk ikon yang ditampilkan). Dalam hal ini angka 1
menyatakan bahwa kotak dialog menampilkan dua buah tombol tekan, yaitu tombol
dan tombol , sedangkan 32 menyatakan jenis ikon
yang ditampilkan
b. Nilai untuk menentukan Jenis Kotak Dialog
Nilai dasar yang digunakan untuk menentukan jenis kotak dialog ada enam macam,
sebagaimana tercantum pada tabel 6.
Tabel 6. Nilai yang menentukan tombol-tekan yang ditampilkan pada kotak dialog.
Tipe Kotak Tombol-tombol
yang tersedia Bentuk
0 OK
1 OK, Cancel
2 Abort, Retry, Ignore
3 Yes, No, Cancel
16
4 Yes, No
5 Retry, Cancel
c. MESSAGEBOX Tanpa Argumen Ketiga
Bila memanggil MessageBox tanpa menyertakan argumen ketiga, maka yang
ditampilkan adalah kotak dialog yang hanya berisi tombol tekan OK. Contohnya :
MessageBox(“Pesan”, “Judul”)
Akan memberikan hasil sbb. (Gambar 3.2)
Gambar 3.2 Kotak Dialog tanpa argumen ketiga
d. MESSAGEBOX Tanpa Argumen Kedua dan Ketiga
Apabila rgument kedua dan ketiga MessageBox tidak disertakan, judul kotak
dialog diperlakukan seperti jika judul tidak diberikan. Berikut adalah hasil dari perintah
MessageBox(“Pesan”) (lihat gambar 3.3)
17
Gambar 3.3 Kotak Dialog tanpa argumen kedua dan ketiga
e. Menentukan Ikon pada Kotak Dialog
MessageBox telah menyediakan empat macam ikon yang bisa kita tampilkan
pada kotak dialog. Kita dapat menyertakan ikon dengan menambahkan nilai-nilai yang
tercantum pada Tabel 3.5.
Tabel 3.5. Nilai untuk menentukan ikon kotak dialog
Nilai Ikon Gambar Warna Ikon
16
Merah
32
Hijau
48
Kuning
64
Biru
f. Menentukan Tombol Default
Bila kotak dialog terdiri lebih dari sebuah tombol-tekan, maka tombol terkiri
akan dijadikan sebagai default. Seandainya kita menghendaki lain (bukan tombol
terkiri yang dijadikan sebagai default), kita bisa menambahkan angka-angka berikut ke
argumen ketiga pada MessageBox.
256 untuk menjadikan tombol kedua sebagai default
512 untuk menjadikan tombol pertama sebagai default
18
Berikut adalah contoh hasil dari perintah (lihat gambar 3.4)
MessageBox(“Pesan”, ”Judul”, 1+32+256)
Gambar 3.4 Kotak Dialog dengan tombol kedua sebagai default
g. Mendeteksi Tombol yang diklik oleh Pemakai
Untuk mengetahui tombol pada kotak dialog yang ditekan oleh pemakai, nilai
pengembalian dari MessageBox perlu diletakan ke variabel terlebih dahulu. Sebagai
contoh :
Jawaban = MessageBox(“Pesan”, “Judul”, 1+32+256)
Setelah pemakai meng-klik salah satu tombol, kode dari tombol bersangkutan akan
diletakan ke variabel jawaban. Selanjutnya kita tinggal memeriksa isi variabel tersebut.
Tabel 3.6. mencantumkan nilai yang mewakili tombol yang dipilih oleh pemakai.
19
Tabel 3.6. Kode tombol pada kotak dialog
Nilai Tombol yang dipilih
1 OK
2 Cancel
3 Abort
4 Retry
5 Ignore
6 Yes
7 No
Untuk menyeleksi tombol yang dipilih, kita bisa menggunakan pernyataan IF ataupun
DO CASE.
Contoh dengan IF :
Jawaban = MessageBox(“Pesan”, “Judul”, 1+32+256)
IF Jawaban = 1 && Berarti tombol tombol Okyang dipilih
* Memproses pesan
ELSE
* Membatalkan perintah
ENDIF
h. Informasi lebih dari satu baris
Untuk mengatur informasi yang ditampilkan pada kotak dialog yang terdiri
lebih dari satu baris. Caranya, kita perlu menyisipkan kode CHR(13) dan CHR(10).
CHR(13) adalah kode carriage return dan CHR(10) adalah kode linefeed. Kedua kode
tersebut secara berurutan biasa dipakai untuk membuat baris baru.
Amati contoh perintah berikut :
MessageBox(“Pesan baris pertama”+CHR(13)+CHR(10)+”Pesan baris kedua”, ;
“Judul”, 1+32+256)
Hasilnya sebagai berikut (lihat gambar 3.5)
20
Gambar 3.5 Kotak Dialog dengan dua baris pesan
i. Kelemahan MESSAGEBOX
MessageBox tidak memungkinkan kita mengganti keterangan yang terdapat
pada tombol kotak dialog. Misalnya, kita tidak dapat mengubah kata Yes menjadi Ya.
19. Membuat Indeks
Indeks pada tabel berguna untuk mempercepat pencarian suatu data. Kecepatan
pencarian data berdasarkan indeks akan terasa sekali jika jumlah data sangat banyak.
Selain untuk keperluan mencari suatu data, indeks membuat dapat disajikan
secara logika (tidak secara fisik), baik secara urut naik (ascending, dari A ke Z) ataupun
urut turun (descending, dari Z ke A).
Indeks bisa dibuat dengan menggunakan perintah MODY atau MODIFY
STRUCTURE pada jendela command.
20. Pernyataan SET ORDER
Apabila kita membuka suatu tabel, indeks tidak dengan sendirinya digunakan
(walaupun indeks secara otomatis ikut dibuka)
Bentuk penulisan SET ORDER adalah sbb.:
SET ORDER TO TAG<nama_indeks>
Dalam hal ini, <nama_indeks> adalah field yang dijadikan sebagai indeks.
21
21. Pencarian Record dengan SEEK / FIND
Pencarian suatu record tertentu dapat dilakukan dengan cepat seandainya file
indeks digunakan. Namun, tentu saja data untuk pencarian record harus sama dengan
field kunci. Bentuk pencarian dengan SEEK adalah sbb.:
USE MK.DBF
SET ORDER TO TAG KODEMK
SEEK “MK102-202”
?FOUND()
?FOUND() adalah perintah untuk mendeteksi/memeriksa apakah data yang
dicari ditemukan atau tidak. Bila hasilnya .T. berarti data ditemukan, sedangkan jika
hasilnya .F. berarti data tersebut tidak ditemukan.
22. Pencarian secara Eksak
Bila kita bermaksud mencari suatu data bertipe karakter pada field yang telah
diindeks, kita perlu memperhatikan efek dari keadaan SET EXACT. Bila SET EXACT
dalam keadaan ON berarti mecari data yang sama persis dengan yang dituliskan dalam
SEEK, sedangkan bila SET EXACT dalam keadaan OFF, ini bisa berarti mencari yang
hurup awalnya seperti yang dituliskan dalam SEEK.
22
I. Praktek Visual FoxPro I
Materi: 1. Tahapan pembuatan form
2. Perangkat untuk pembuatan form
3. Membuat label, text box, dan tombol command pada form
4. Mengatur properti
5. Menyimpan, Menguji dan Menutup form
1.1 Membuat File Project
a. Buatlah sub directory dengan nama depan masing-masing
b. Buka program Visual FoxPro
c. Membuat File Project
1). Klik menu File
2). Klik New
3). Pilih option Project
4). Pilih dan klik New File (lihat gambar 1.1.1)
5). Pilih subdirectory nama masing-masing untuk menyimpan file project
6). Ketik nama file project (PRAKVFP)
7). Klik tombol save (lihat gambar 1.1.2)
8). Setelah itu akan tampil Project Manager (seperti pada gambar 1.1.3.)
Gambar 1.1.1. Kotak dialog pembuatan file project
23
Gambar 1.1.2. Kotak dialog penyimpanan file Project
Gambar 1.1.3. Kotak dialog penyimpanan file Project
24
1.2 Membuat File Form
Kasus 1.2:
Buatkan form untuk mengetahui hasil seleksi penerimaan calon pegawai, dengan
ketentuan sebagai berikut :
- Jika nilai akhir minimal 70, maka diterima;
- Tapi jika sebaliknya, maka ditolak/gagal.
1. Membuat Form Kosong
a. Klik page Documents pada Project Manager
b. Pilih dan Klik object Form
c. Klik tombol New
d. Pilih dan klik tombol New Form pada kotak dialog New Form (gb. 1.2.1)
Gambar 1.2.1 Kotak Dialog New Form
e. Setelah itu dilayar akan tampil Form kosong seperti pada gambar 1.2.2.
Gambar 1.2.2 Form Kosong
25
2. Memberikan Judul Form dan Gambar Latar Form a. Munculkan Jendela Properties dengan meng-klik kanan pada form kosong
b. Pilih dan klik Properties
c. Pilih object Form pada jendela properties
d. Pada baris caption, ketik PERHITUNGAN HASIL SELEKSI
e. Pada baris Picture, pilih gambar latar yang dikehendaki.
3. Membuat Control Question dan Field Entry
a. Munculkan toolbar Form Controler Toolbar dari menu View
b. Buatkan Questin Nama, Nilai Akhir, dan Keterangan dengan menggunakan
Label dari Form Controler Toolbar
c. Buatkan Field Entry untuk meng-input Nama, Nilai Akhir dan Keterangan
dengan menggunakan Text Box.
d. Hasilnya seperti pada gambar 1.2.3.
Gambar 1.2.3 Form Perhitungan Hasil Seleksi I
4. Mengisi Entry Field dengan Formula
a. Double klik Control Text2
b. Cari dan pilih Procedure InteractiveChange
c. Ketik Procedure berikut :
if thisform.text2.value>=60
thisform.text3.value="Lulus"
else
thisform.text3.value="Gagal"
endif
return
26
5. Simpan Form dengan nama file HasilSeleksi1 (sebaiknya nama file tidak pakai
sepasi)
6. Uji Form dengan meng-klik icon Run pada toolbar Standard
1.3 Latihan Membuat Form
Kasus 1.3.
Buatkan form untuk mencari nilai akhir, angka mutu dan hurup mutu dengan
ketentuan sbb.:
NA = (UTS + UAS * 2 + TGS)/4
NA AM HM
86 - 100 4 A
71 - 85 3 B
56 - 70 2 C
41 - 55 1 D
0 - 40 0 E
1. Buatkan Form seperti pada gambar 1.3.1.
Gambar 1.3.1 Form Perhitungan Hasil Seleksi II
27
2. Buatkan Tombol Tekan Checker dengan fasilitas Command Button dari Form
Controler Toolbar, kemudian berinama Proses.
3. Isikan Procedure Click dari Control Proses berikut :
local vna
vna=(thisform.text2.value+thisform.text3.value*2+thisform.text4.value)/4
if vna>=86
vam=4
vhm="A"
else
if vna>=71
vam=3
vhm="B"
else
if vna>=56
vam=2
vhm="C"
else
if vna>=41
vam=1
vhm="D"
else
vam=0
vhm="D"
endif
endif
endif
endif
thisform.text5.value=vna
thisform.text6.value=vam
thisform.text7.value=vhm
retu
4. Simpan Form dengan nama File HasilSeleksi2
5. Uji Form.
28
1.4 Tugas 1
1. Kasus Tugas 1 :
Buatkan form untuk menghitung gaji pokok, gaji lembur dan jumlah gaji dengan
ketentuan sbb :
- Jumlah jam kerja pokok = 8 jam
- Jika bekerja lebih dari 8 jam, maka selebihnya dihitung lembur
- Tarip lembur = 150% * Gaji Per Jam
- Gaji Total = Gaji Pokok + Gaji Lembur
2. Buatkan Form seperti pada gambar 1.4.1. :
Gambar 1.4.1 Form Perhitungan Upah Harian
29
II. Praktek Visual FoxPro II
Materi : 1. Tahap pembuatan form
2. Penggunaan fasilitas Option Group & Check Box
3. Penggunaan Perintah IF
4. Penggunaan Perintah Do Case
5. Menyimpan, Menguji dan Menutup form
2.1 Membuka File Project
Untuk membuka File Project PRAKVFP yang sudah dibuat pada praktek
sebelumnya, maka lakukan langkah sbb. :
1. Klik menu File
2. Klik Open
3. Cari Folder nama masing-masing di drive O:\AFOX
4.. Pilih dan Double Klik file project PRAKVFP, seperti pada gambar 2.1.1
Gambar 2.1.1 Kotak Dialog Open File
30
2.2 Membuat File Form Baru
1. Membuat Form Kosong
a. Klik page Documents pada Project Manager
b. Pilih dan Klik object Form
c. Klik tombol New
d. Pilih dan klik tombol New Form pada kotak dialog New Form (gb. 2.2.1)
Gambar 2.2.1 Kotak Dialog New Form
2. Memberikan Judul Form dan Gambar Latar Form a. Munculkan Jendela Properties dengan meng-klik kanan pada form kosong
b. Pilih dan klik Properties
c. Pilih object Form pada jendela properties
d. Pada baris caption, ketik ENTRY GAJI KARYAWAN
6 e. Pada baris Picture, pilih gambar latar yang dikehendaki.
3. Membuat Control Question dan Field Entry
a. Munculkan toolbar Form Controler Toolbar dari menu View
b. Buatkan Question Nama Karyawan, Golongan, Status, Jumlah Anak, Gaji
Pokok, Tunjangan Istri, Tunjangan Anak dan Gaji Total dengan
menggunakan Label dari Form Controler Toolbar
c. Buatkan Field Entry untuk meng-input Nama Karyawan, Golongan, Jumlah
Anak, Gaji Pokok, Tunjangan Istri, Tunjangan Anak dan Gaji Total dengan
menggunakan Text Box.
4. Membuat Option Group
a. Cari dan Klik control Option Group pada Form Control Toolbar
b. Klik pada form sebelah kanan Status, kemudian berinama ST pada properties.
31
c. Ganti Option1 dengan Kawin, dengan cara klik kanan option group kemudian
pilih edit.
d. Klik Option1, kemudian pada baris Caption di jendela properties ketik Kawin.
e. Klik Option2, kemudian ganti dengan Belum Kawin
f. Hasilnya lihat gambar 2.2.2.
Gambar 2.2.2 Form Entry Gaji Karyawan
5. Mengisi Control Spinner Gol dengan Formula a. Double klik Control Gol
b. Cari dan pilih Procedure InteractiveChange
c. Ketik Procedure berikut :
gol=thisform.gol.value
do case
case gol=1
gapok=200000
case gol=2
gapok=400000
case gol=3
gapok=600000
32
case gol=4
gapok=800000
otherwise
gapok=0
endcase
st=thisform.st.value
if st=1
thisform.ja.visible=.t.
thisform.text2.visible=.t.
thisform.o.visible=.t.
ti=0.5*gapok
else
thisform.ja.visible=.f.
thisform.text2.visible=.f.
thisform.o.visible=.f.
ti=0
thisform.text2.value=0
endif
ja=thisform.text2.value
if ja>3
ta=0.2*gapok*3
else
ta=0.2*gapok*ja
endif
gatot=gapok+ti+ta
thisform.text3.value=gapok
thisform.text4.value=ti
thisform.text5.value=ta
thisform.text6.value=gatot
retu
6. Mengisi Control Option Group StatusK dengan Formula
a. Double klik Control StatusK
b. Cari dan pilih Procedure InteractiveChange
c. Isi Procedure InteractiveChange object ST dicopy dari Procedure
Interactivechange object Gol
7. Mengisi Control Field Entry Text2 dengan Formula
a. Double klik Control Text2
b. Cari dan pilih Procedure InteractiveChange
33
c. Isi Procedure InteractiveChange object Text2 dicopy dari Procedure
Interactivechange object Gol
8. Simpan Form dengan nama file HitungGaji (sebaiknya nama file tidak pakai
sepasi)
9. Uji Form dengan meng-klik icon Run pada toolbar Standard
2.3 Membuat Form PilihGambar
1. Buatkan Form seperti pada gambar 2.3.1. berikut :
Gambar 2.3.1 Form PilihGambar
2. Buatkan Option Group, kemudian berinama PIL. Button Count-nya ganti 6
3. Ganti Option1 s/d Option6 dengan Gambar1 s/d Gambar6
4. Buatkan Image untuk menampilkan gambar, sebanya 4 buah, yang diletakan
disebelah kanan, kanan atas, atas dan kiri atas option group (seperti pada gambar
2.3.1)
5. Buatkan CheckBox Kiri Atas kemudian berinama kiri, CheckBox Tengah Atas
kemudian berinama tengah, dan CheckBox Kanan Atas kemudian berinama
kanan) sebanyak tiga buah yang diletakan disebelah Kiri Bawah, Tengah Bawah
dan Kanan Bawah Option Group (seperti pada gambar 2.3.1)
34
6. Double Klik control OptionGroup Pil, kemudian pilih procedure InteractiveChange,
lalu ketik procedure berikut :
do case
case thisform.pil.value=1
thisform.image1.picture="gb1.jpg"
case thisform.pil.value=2
thisform.image1.picture="gb2.jpg"
case thisform.pil.value=3
thisform.image1.picture="gb3.jpg"
case thisform.pil.value=4
thisform.image1.picture="gb4.jpg"
case thisform.pil.value=5
thisform.image1.picture="gb5.jpg"
case thisform.pil.value=6
otherwise
thisform.image1.picture="gb6.jpg"
endcase
7. Double Klik control CheckBox Kiri, kemudian pilih procedure InteractiveChange,
lalu ketik procedure berikut :
if thisform.kiri.value=1
thisform.gbkiri.picture=thisform.image1.picture
else
thisform.gbkiri.picture=""
endif
8. Double Klik control CheckBox Tengah, kemudian pilih procedure
InteractiveChange, lalu ketik procedure berikut :
if thisform.tengah.value=1
thisform.gbtengah.picture=thisform.image1.picture
else
thisform.gbtengah.picture=""
endif
9. Double Klik control CheckBox Kanan, kemudian pilih procedure
InteractiveChange, lalu ketik procedure berikut :
if thisform.kanan.value=1
thisform.gbkanan.picture=thisform.image1.picture
35
else
thisform.gbkanan.picture=""
endif
10. Simpan Form dengan nama File PilihGB
11. Uji Form.
2.4 Tugas 2
1. Buatkan Form seperti pada gambar 2.4.1
Gambar 2.4.1. Form Menghitung Angka
2. Formula / ketentuan perhitungan adalah sbb. :
a=0
b=0
c=0
Jika Check box 100 dipilih
a=100
Jika Check box 10 dipilih
b=10
36
Jika Check box 2 dipilih
c=2
Jika option tambah dipilih, maka formulanya :
Hasil = a + b + c
Jika option Kurang dipilih, maka formulanya :
Jika yang check box hanya 100 dan 10, maka formulanya
Hasil = a - b
Jika yang check box hanya 10 dan 2, maka formulanya
Hasil = b - c
Jika yang check box hanya 100 dan 2, maka formulanya
Hasil = a - c
Jika yang check box 100, 10 dan 2, maka formulanya
Hasil = a - b - c
Jika option Kali dipilih, maka :
Jika yang check box hanya 100 dan 10, maka formulanya
Hasil = a * b
Jika yang check box hanya 10 dan 2, maka formulanya
Hasil = b * c
Jika yang check box hanya 100 dan 2, maka formulanya
Hasil = a * c
Jika yang check box 100, 10 dan 2, maka formulanya
Hasil = a * b * c
3. Selamat mencoba !
37
III. Praktek Visual FoxPro III
Materi : 1. Tahap pembuatan form
2. Penggunaan fasilitas Olecontrol
3. Penggunaan Perintah DO WHILE
4. Penggunaan Perintah FOR NEXT
5. Menyimpan, Menguji dan Menutup form
3.1 Membuka File Project Untuk membuka File Project PRAKVFP yang sudah dibuat pada praktek
sebelumnya, maka lakukan langkah sbb. :
1. Klik menu File
2. Klik Open
3. Cari Folder nama masing-masing do drive O:\
4.. Pilih dan Double Klik file project PRAKVFP, seperti pada gambar 3.1.1
Gambar 3.1.1 Kotak Dialog Open File
3.2 Aplikasi DO WHILE
1. Membuat Form Kosong
a. Klik page Documents pada Project Manager
b. Pilih dan Klik object Form
38
c. Klik tombol New
d. Pilih dan klik tombol New Form pada kotak dialog New Form (gambar 3.2.1)
Gambar 3.2.1 Kotak Dialog New Form
2. Memberikan Judul Form dan Gambar Latar Form a. Munculkan Jendela Properties dengan meng-klik kanan pada form kosong
b. Pilih dan klik Properties
c. Pilih object Form pada jendela properties
d. Pada baris caption, ketik MEMBUAT ANGKA BERURUT
e. Pada baris Picture, pilih gambar latar yang dikehendaki.
3. Membuat Control Question dan Field Entry
a. Munculkan toolbar Form Controler Toolbar dari menu View
b. Buatkan Question Start, Step, Stop, dan Hasil dengan menggunakan Label dari
Form Controler Toolbar
c. Buatkan Field Entry untuk meng-input Start, Step, Stop, dan Hasil dengan
menggunakan Text Box.
4. Membuat Command Button
a. Cari dan Klik control Command Button pada Form Control Toolbar
b. Letakan di bawah control textbox Text1, kemudian pada properties ganti
Caption dan Name-nya dengan Proses.
c. Hasilnya lihat gambar 3.2.3.
5. Membuat OleControl
a. Klik Menu Tools
b. Pilih dan Klik Option
c. Pilih dan Klik page Controls
39
d. Pilih dan Klik ActiveX Control
e. Cari Microsoft ProgressBar Control 6.0 kemudian berikan tanda Check Box
pada kotak sebelah kirinya, seperti pada gambar 3.2.2.
Gambar 3.2.2 Kotak dialog option
f. Klik tombol Ok
g. Pilih dan klik control View Classes pada Form Controls Toolbar
h. Pilih dan klik ActiveX Controls
i. Pilih dan klik Control Microsoft ProgressBar Control, Version 5.0
j. Buatkan ProgressBar di sebelah bawah Tombol Proses, seperti pada gambar
3.2.3.
40
Gambar 3.2.3 Form Membuat Angka Berurut
k. Ganti name-nya dengan Ctrl
6. Mengisi Control Tombol Proses dengan Formula
a. Double klik Control Tombol Proses
b. Cari dan pilih Procedure Clic pada object Proses
c. Ketik Procedure berikut :
local a, b, c
if thisform.text1.value>0 .or. thisform.text2.value>0 .or. ;
thisform.text3.value>0
this.enabled=.f.
a=thisform.text1.value
b=thisform.text2.value
c=thisform.text3.value
do while a<=c
thisform.text4.value=a
a=a+b
n=(100/c)*a
if a<=c
thisform.ctrl.value=n
endif
41
x=0
do while x<1000000
x=x+1
enddo
enddo
else
messagebox("Start, Step dan Stop harus diisi !",0,"Perhatian !")
thisform.text1.setfocus()
retu
endif
this.enabled=.t.
retu
7. Simpan dan Uji Form a. Simpan dengan nama file URUTANGKA1
b. Uji Form dengan meng-klik Run / !.
3.3 Aplikasi FOR NEXT
1. Buka File Form URUTANGKA1
2. Simpan dengan perintah Save As dan berinama URUTANGKA2
3. Double Click tombol Proses, kemudian prosedurnya edit menjadi sbb. :
local a, b, c, n, i
if thisform.text1.value>0 .or. thisform.text2.value>0 .or. ;
thisform.text3.value>0
this.enabled=.f.
a=thisform.text1.value
b=thisform.text2.value
c=thisform.text3.value
for i=a to c step b
thisform.text4.value=a
a=a+b
n=(100/c)*a
if a<=c
thisform.ctrl.value=n
endif
for x=1 to 10000000 step 1
next
42
next
else
messagebox("Start, Step dan Stop harus diisi..!",0,"Perhatian ..!")
thisform.text1.setfocus()
retu
endif
this.enabled=.t.
retu
4. Simpan Form dengan nama File URUTANGKA2
5. Uji Form dengan mengklik icon Run / !.
3.4 Tugas 3
1. Klik page Code pada project manager
2. Pilih dan klik option Program, kemudian klik tombol New
3. Ketik program berikut :
function terbilang
parameter numerik
private hasil,ulang,uang,kesatu,kedua,ketiga,cangka
private cangka0,cangka1,cangka2,cangka3,cangka4,cangka5
private cangka6,cangka7,cangka8,cangka9
private satu,dua,tiga,gabung,sen1,sen2
hasil=""
uang=str(numerik,15,2)
kesatu=1
kedua=2
ketiga=3
cangka0=" "
cangka1="Satu "
cangka2="Dua "
cangka3="Tiga "
cangka4="Empat "
cangka5="Lima "
cangka6="Enam "
cangka7="Tujuh "
cangka8="Delapan "
cangka9="Sembilan "
gabung=" "
for ulang=1 to 4
satu=substr(uang,kesatu,1)
43
dua=substr(uang,kedua,1)
tiga=substr(uang,ketiga,1)
gabung=satu+dua+tiga
if val(satu)=1
hasil=hasil+"Seratus "
else
if val(satu)>1
hasil=hasil+cangka&satu+"Ratus "
endif
endif
DO CASE
CASE VAL(DUA) = 1
DO CASE
CASE VAL(TIGA)=0
HASIL=HASIL + "Sepuluh "
CASE VAL(TIGA)=1
HASIL=HASIL + "Sebelas "
OTHER
HASIL=HASIL + ALLTRIM(CANGKA&TIGA)+" Belas "
ENDCASE
CASE VAL(DUA) > 1
HASIL=HASIL + CANGKA&DUA + "Puluh "+CANGKA&TIGA
CASE VAL(DUA)=0 .AND. VAL(TIGA) > 0
IF (ulang=3 .AND. GABUNG="001") .OR. ;
(ulang=3 .AND. GABUNG=" 1")
HASIL=HASIL+"Seribu "
ELSE
HASIL=HASIL+CANGKA&TIGA
ENDIF
ENDCASE
DO CASE
CASE ulang=1 .AND. VAL(GABUNG)>0
HASIL=HASIL+"Milyar "
CASE ulang=2 .AND. VAL(GABUNG)>0
HASIL=HASIL+"Juta "
CASE ulang=3 .AND. VAL(GABUNG)>0
IF GABUNG="001" .OR. GABUNG=" 1"
HASIL=HASIL+" "
ELSE
HASIL=HASIL+"Ribu "
ENDIF
ENDCASE
kesatu=kesatu+3
kedua=kedua+3
ketiga=ketiga+3
next ulang
44
sen1=substr(uang,14,1)
sen2=substr(uang,15,1)
if len(hasil)>1
hasil=hasil+"Rupiah "
endif
DO CASE
CASE VAL(SEN1)=0 .AND. VAL(SEN2)>0
HASIL=HASIL+CANGKA&SEN2+"Sen"
CASE VAL(SEN1) = 1
DO CASE
CASE VAL(SEN2)=0
HASIL=HASIL+"Sepuluh Sen"
CASE VAL(SEN2)=1
HASIL=HASIL+"Sebelas Sen"
CASE VAL(SEN2)>1
HASIL=HASIL+ALLTRIM(CANGKA&SEN2)+"Belas Sen "
ENDCASE
CASE VAL(SEN1) > 1
HASIL = HASIL + CANGKA&SEN1 + "Puluh " + ;
CANGKA&SEN2 + "Sen"
ENDCASE
RETURN HASIL
4. Uji Program di atas dengan form berikut :
5. Procedure InteractiveChange pada Object Text1, adalah sbb.:
set defa to d:\Visual1\Encep
set procedure to terbilang
a=terbilang(thisform.text1.value)
thisform.text2.value=a
retu
45
IV. Praktek Visual FoxPro IV
Materi : 1. Membuat Databse
2. Membuat Table
3. Membuat Form Transaksi Penerimaan Siswa Baru
4.1 Bahan Praktek 4
1. Buatkan Project File dengan nama PSB
2. Buatkan Database dengan nama PSB
3. Buatkan Table dengan nama CASIS, struktur table sbb :
4. Buatkan lagi Table dengan nama SEKOLAH, struktur table sbb :
Entry data sekolah sbb :
46
5. Buatkan Table pada Free Table dengan nama NODAF, struktur table sbb :
6.. Buatkan Form dengan nama DAFTAR, desain form dapat dilihat pada gambar
4.1.1.
Gambar 4.1.1 Form Kelola Pendaftaran Siswa
7. Listing Program :
a. Object FORM1 Procedure LOAD SET DEFAULT TO d:\psb\data
SET DATE BRITISH
SET CENTURY ON
CLOSE DATABASES
CLOSE INDEXES
IF USED("NODAF")
USE IN NODAF
ENDIF
IF USED("Sekolah")
USE IN Sekolah
ENDIF
47
IF USED("CaSis")
USE IN CaSis
ENDIF
SELECT A
USE NODAF
SELECT B
USE sekolah
SET ORDER TO TAG asalsek
SELECT C
USE CASIS
SET ORDER TO tag NoDaf
RETURN
b. Object FORM1 Procedure UNLOAD CLOSE DATABASES
CLOSE INDEXES
RETURN
c. Object FORM1 Procedure KOSONGKAN thisform.nodaf.Value=""
thisform.nama.Value=””
thisform.asalsek.Value=""
thisform.nilai.Value=0
RETURN
d. Object FORM1 Procedure TAMPILKAN thisform.nodaf.Value=Casis.nodaf
thisform.nama.Value=casis.nama
thisform.asalsek.Value=casis.asalsek
thisform.nilai.Value=casis.nilai
thisform.tgldaf.day=DAY(casis.tgldaf)
thisform.tgldaf.month=month(casis.tgldaf)
thisform.tgldaf.year=year(casis.tgldaf)
RETURN
e. Object FORM1 Procedure AKTIFKAN PARAMETERS X
thisform.nama.enabled=X
thisform.asalsek.enabled=X
thisform.nilai.enabled=X
RETURN
48
f. Object FORM1 Procedure KENDALI PARAMETERS Y
thisform.pertama.Enabled=Y
thisform.sebelumnya.Enabled=Y
thisform.berikutnya.Enabled=Y
thisform.terakhir.Enabled=Y
RETURN
g. Object FORM1 Procedure ACTIVATE thisform.kosongkan
thisform.aktifkan(.f.)
thisform.kendali(.t.)
thisform.simpan.Enabled=.f.
thisform.tambah.Enabled=.t.
thisform.batal.Enabled=.f.
thisform.perbaiki.Enabled=.f.
thisform.ud.Enabled=.f.
thisform.hapus.Enabled=.f.
thisform.keluar.Enabled=.t.
thisform.tgldaf.day=DAY(DATE())
thisform.tgldaf.month=month(DATE())
thisform.tgldaf.year=year(DATE())
RETURN
h. Object TAMBAH Procedure CLICK PUBLIC N
SELECT NODAF
GO bottom
IF EOF()
APPEND BLANK
N=1
ELSE
N=nodaf.no+1
ENDIF
th1=thisform.tgldaf.year
th2=thisform.tgldaf.year+1
ta=RIGHT(STR(th1,4),2)+RIGHT(STR(th2,4),2)
IF n<10
vno=ta+"00"+LTRIM(STR(n,3))
ELSE
IF n<100
49
vno=ta+"0"+LTRIM(STR(n,3))
ELSE
vno=ta+LTRIM(STR(n,3))
ENDIF
ENDIF
thisform.kosongkan
thisform.nodaf.value=VNO
thisform.aktifkan(.t.)
thisform.kendali(.f.)
thisform.simpan.Enabled=.t.
thisform.tambah.Enabled=.f.
thisform.batal.Enabled=.t.
thisform.perbaiki.Enabled=.f.
thisform.ud.Enabled=.f.
thisform.hapus.Enabled=.f.
thisform.keluar.Enabled=.f.
thisform.nama.setfocus
RETURN
i. Object SIMPAN Procedure CLICK IF EMPTY(thisform.nama.Value) .or. ;
EMPTY(thisform.nilai.Value) .or. ;
EMPTY(thisform.asalsek.Value)
MESSAGEBOX("Isi data dengan lengkap !",0,"Perhatian...")
thisform.nama.SetFocus
RETURN
ENDIF
SELECT CaSis
LOCATE FOR Nama=TRIM(thisform.nama.Value) .and. ;
AsalSek=TRIM(thisform.asalsek.Value)
IF FOUND() MESSAGEBOX("Maaf transaksi tidak dapat diproses !"+CHR(13)+;
"Data tersebut sudah tercatat...",0,"Perhatian...")
thisform.nama.SetFocus
RETURN
ENDIF
LOCATE FOR NoDaf=SPACE(7)
IF ! FOUND()
APPEND BLANK
ENDIF
tgl=thisform.tgldaf.day
bln=thisform.tgldaf.month
50
thn=thisform.tgldaf.year
vtgl=LTRIM(STR(tgl,2))+"/"+LTRIM(STR(bln,2))+"/"+STR(thn,4)
REPLACE tgldaf WITH CTOD(vtgl)
REPLACE NoDaf WITH thisform.nodaf.Value
REPLACE Nama WITH thisform.nama.Value
REPLACE asalsek WITH thisform.asalsek.Value
REPLACE nilai WITH thisform.nilai.Value
SELECT NODAF
GO bottom
REPLACE no WITH N
thisform.refresh MESSAGEBOX("Penyimpanan sudah dilakukan...",0,"Perhatian...")
thisform.aktifkan(.f.)
thisform.kendali(.t.)
thisform.simpan.Enabled=.f.
thisform.tambah.Enabled=.t.
thisform.batal.Enabled=.f.
thisform.perbaiki.Enabled=.t.
thisform.ud.Enabled=.f.
thisform.hapus.Enabled=.t.
thisform.keluar.Enabled=.t.
RETURN
j. Object BATAL Procedure CLICK thisform.kosongkan
thisform.aktifkan(.f.)
thisform.kendali(.t.)
thisform.simpan.Enabled=.f.
thisform.tambah.Enabled=.t.
thisform.batal.Enabled=.f.
thisform.perbaiki.Enabled=.f.
thisform.ud.Enabled=.f.
thisform.hapus.Enabled=.f.
thisform.keluar.Enabled=.t.
thisform.tgldaf.day=DAY(DATE())
thisform.tgldaf.month=month(DATE())
thisform.tgldaf.year=year(DATE())
RETURN
51
k. Object PERBAIKI Procedure CLICK thisform.aktifkan(.t.)
thisform.kendali(.f.)
thisform.simpan.Enabled=.f.
thisform.tambah.Enabled=.f.
thisform.batal.Enabled=.t.
thisform.perbaiki.Enabled=.f.
thisform.ud.Enabled=.t.
thisform.hapus.Enabled=.f.
thisform.keluar.Enabled=.f.
RETURN
l. Object UD Procedure CLICK jawab=MESSAGEBOX("Anda yakin mau memperbaiki data sebelumnya ?"; ,4+32+256,"Perhatian....")
IF jawab=6
SELECT CASIS
tgl=thisform.tgldaf.day
bln=thisform.tgldaf.month
thn=thisform.tgldaf.year vtgl=LTRIM(STR(tgl,2))+"/"+LTRIM(STR(bln,2))+"/"+STR(thn,4)
REPLACE tgldaf WITH CTOD(vtgl)
REPLACE NoDaf WITH thisform.nodaf.Value
REPLACE Nama WITH thisform.nama.Value
REPLACE asalsek WITH thisform.asalsek.Value
REPLACE nilai WITH thisform.nilai.Value
ENDIF
thisform.refresh
thisform.aktifkan(.f.)
thisform.kendali(.t.)
thisform.simpan.Enabled=.f.
thisform.tambah.Enabled=.t.
thisform.batal.Enabled=.f.
thisform.perbaiki.Enabled=.t.
thisform.ud.Enabled=.f.
thisform.hapus.Enabled=.t.
thisform.keluar.Enabled=.t.
RETURN
52
m. Object HAPUS Procedure CLICK jawab=MESSAGEBOX("Anda yakin record ini mau dihapus ?";
,4+32+256,"Perhatian....")
IF jawab=6
DELETE
SET DELETED ON
ENDIF
thisform.refresh
thisform.aktifkan(.f.)
thisform.kendali(.t.)
thisform.simpan.Enabled=.f.
thisform.tambah.Enabled=.t.
thisform.batal.Enabled=.f.
thisform.perbaiki.Enabled=.t.
thisform.ud.Enabled=.f.
thisform.hapus.Enabled=.f.
thisform.keluar.Enabled=.t.
RETURN
n. Object KELUAR Procedure CLICK jawab=MESSAGEBOX("Anda Yakin Mau Keluar ?",;
4+32+256,"Perhatian....")
IF jawab=6
SET DELETED OFF
SELECT CaSis
PACK
thisform.Release
ENDIF
RETURN
o. Object PERTAMA Procedure CLICK SELECT CaSis
GO top
IF BOF()
MESSAGEBOX("Record kosong",0,"Perhatian...")
RETURN
ENDIF
thisform.grid1.SetFocus
thisform.Refresh
RETURN
53
p. Object SEBELUMNYA Procedure CLICK SELECT CaSis
SKIP -1
IF BOF()
GO TOP
ENDIF
thisform.grid1.SetFocus
thisform.Refresh
RETURN
q. Object BERIKUTNYA Procedure CLICK SELECT CaSis
SKIP
IF EOF()
GO BOTTOM
ENDIF
thisform.grid1.SetFocus
thisform.Refresh
RETURN
r. Object TERAKHIR Procedure CLICK SELECT CaSis
GO BOttom
IF EOF()
MESSAGEBOX("Record kosong",0,"Perhatian...")
RETURN
ENDIF
thisform.grid1.SetFocus
thisform.Refresh
RETURN
s. Object GRID1 Procedure AfterRowColChange LPARAMETERS nColIndex
thisform.tampilkan
thisform.aktifkan(.f.)
thisform.kendali(.t.)
thisform.simpan.Enabled=.f.
thisform.tambah.Enabled=.t.
thisform.batal.Enabled=.f.
thisform.perbaiki.Enabled=.t.
thisform.ud.Enabled=.f.
thisform.hapus.Enabled=.t.
thisform.keluar.Enabled=.t.
RETURN
54
t. Object TIMER1 Procedure TIMER Thisform.l.FORECOLOR=RGB(RAND()*255,RAND()*255,RAND()*255)
t=thisform.l.caption
thisform.l.caption=RIGHT(t,LEN(t)-1)+LEFT(t,1)
4.2 Tugas 4
1. Buatkan Table dengan nama TU, struktur table sbb :
2. Buatkan Form dengan nama TU, dengan disain sbb :
55
V. Praktek Visual FoxPro V
Materi : 1. Membuat Table Temp
2. Membuat Form Report
5.1 Bahan Praktek 5
1. Buatkan Table dengan nama SELEKSI, struktur table sbb :
2. Buatkan Report dengan nama DAFCASIS, sbb :
56
3. Copykan file CASIS ke TMPCASIS, pada command prompt, dengan perintah :
SET DEFA TO O:\AFOX\NAMAANDA
USE CASIS
COPY TO TMPCASIS
4. Buatkan Form dengan nama PG, dengan disain sbb:
4. Listing Program :
a. Object FORM1 Procedure ACTIVATE SET DEFAULT TO d:\psb\data
IF USED("CaSis")
USE IN CASIS
ENDIF
IF USED("seleksi")
USE IN seleksi
ENDIF
SELECT A
USE casis
SELECT B
USE seleksi
RETURN
57
b. Object PROSES Procedure CLICK IF USED("tmpcasis")
USE IN TMPCASIS
ENDIF
DELETE FILE tmpcasis.dbf
SELECT CASIS
SORT ON NILAI/D TO TMPCASIS
jml=thisform.text1.Value
SELECT seleksi
DELETE ALL
PACK
APPEND FROM TMPCASIS FOR RECNO()<=jml
GO bottom
A=seleksi.nilai
REPLACE ALL nilaipg WITH a
thisform.text2.Value=A
RETURN
c. Object CETAK Procedure CLICK SELECT seleksi
GO TOP
VNO=1
DO WHILE ! EOF()
REPLACE NO WITH VNO
VNO=VNO+1
SKIP
ENDDO
REPORT FORM D:\PRG\PSB\PRG\DAFCASIS PREVIEW
RETURN
d. Object SIMPAN Procedure CLICK SELECT CASIS
REPLACE ALL KET WITH "0"
SELECT SELEKSI
GO TOP
DO WHILE ! EOF()
SELECT CASIS
LOCATE FOR CASIS.NODAF=SELEKSI.NODAF
IF FOUND()
REPLACE CASIS.KET WITH "1"
ENDIF
SELECT SELEKSI
58
SKIP
ENDDO
e. Object KELUAR Procedure CLICK thisform.Release
RETURN
5.2 Tugas 5
Buatkan Report dengan nama DAFTU, sbb :
59
VI. Praktek Visual FoxPro VI
Materi : 1. Membuat Databse
2. Membuat Table
3. Membuat Form Transaksi Sederhana
6.1 Bahan Praktek 6
1. Buatkan Project File dengan nama RENANG
2. Buatkan Database dengan nama DATARENANG
3. Buatkan Table dengan nama RENANG, struktur table sbb :
4.. Buatkan Form dengan nama RENANG, desain form dapat dilihat pada gambar
6.1.1:
5. Desain Formula :
a. Ketentuan Tarip Renang :
- Hari Kerja (Senin s/d Jumat) sebesar Rp. 10.000,-
- Pada hari Week End (Sabtu dan Minggu) sebesar Rp. 15.000,-
b. Ketentuan Diskon :
- Untuk rombongan minimal 10 orang mendapat diskon sebesar 10 % dari
total transaksi.
- Untuk rombongan di bawah 10 orang atau peroangan tidak mendapatkan
diskon.
c. Jumlah Pembayaran = Jumlah Transaksi – Diskon
60
Gambar 6.1.1 Form Kelola Biaya Renang
6. Listing Program :
a. Object Form1 Procedure LOAD SET Date BRITISH
SET DEFAULT TO d:\Visual1\nama
CLOSE DATABASES
IF USED("renang")
USE IN renang
ENDIF
USE renang
RETURN
b. Object Form1 Procedure UNLOAD CLOSE DATABASES
RETURN
c. Object Form1 Procedure AKTIFKAN PARAMETERS X
thisform.text1.Enabled=x
thisform.text2.Enabled=x
thisform.text3.Enabled=x
thisform.text4.Enabled=x
return
61
d. Object Form1 Procedure KOSONGKAN thisform.text1.Value=CTOD(" / / ")
thisform.text2.Value=""
thisform.text3.Value=""
thisform.text4.Value=0
thisform.text5.Value=0
return
e. Object Form1 Procedure TAMPILKAN thisform.text1.Value=renang.tanggal
thisform.text2.Value=renang.nobukti
thisform.text3.Value=renang.nama
thisform.text4.Value=renang.jmlorg
thisform.text5.Value=renang.jmlbayar
return
f. Object Form1 Procedure KENDALI PARAMETERS Y
thisform.Sebelumnya.Enabled=Y
thisform.Berikutnya.Enabled=Y
RETURN
g. Object Form1 Procedure ACTIVATE thisform.kosongkan
thisform.aktifkan(.f.)
thisform.kendali(.t.)
thisform.tambah.Enabled=.t.
thisform.simpan.Enabled=.f.
thisform.keluar.Enabled=.t.
thisform.grid1.readonly=.t.
thisform.grid1.enabled=.t.
return
h. Object TAMBAH Procedure CLICK thisform.kosongkan
thisform.aktifkan(.t.)
thisform.kendali(.f.)
thisform.tambah.Enabled=.f.
thisform.simpan.Enabled=.t.
thisform.keluar.Enabled=.f.
thisform.grid1.enabled=.f.
return
62
j. Object SIMPAN Procedure CLICK IF EMPTY(THISFORM.TEXT1.VALUE) .OR. ;
EMPTY(THISFORM.TEXT2.VALUE) .OR. ;
EMPTY(THISFORM.TEXT3.VALUE) .OR. ;
EMPTY(THISFORM.TEXT4.VALUE)
MESSAGEBOX("Isi data dengan lengkap !",0,;
"Perhatian...")
THISFORM.TEXT1.SETFOCUS
RETURN
ENDIF
IF DOW(THISFORM.TEXT1.VALUE)=1 .OR. ;
DOW(THISFORM.TEXT1.VALUE)=7
VTARIP=15000
ELSE
VTARIP=10000
ENDIF
VJMLORG=THISFORM.TEXT4.VALUE
JMLTRAN=VTARIP*VJMLORG
IF VJMLORG >= 10
VDISKON= 0.1 * JMLTRAN
ELSE
VDISKON= 0
ENDIF
VBAYAR=JMLTRAN-VDISKON
LOCATE FOR NOBUKTI=SPACE(10)
IF ! FOUND()
APPEND BLANK
ENDIF
REPLACE TANGGAL WITH THISFORM.TEXT1.Value
REPLACE NOBUKTI WITH THISFORM.TEXT2.Value
REPLACE NAMA WITH THISFORM.TEXT3.Value
REPLACE JMLORG WITH THISFORM.TEXT4.Value
REPLACE TARIP WITH VTARIP
REPLACE DISKON WITH VDISKON
REPLACE JMLBAYAR WITH VBAYAR
Thisform.text5.value=vbayar
THISFORM.GRID1.SetFocus
THISFORM.REFRESH
thisform.aktifkan(.f.)
thisform.kendali(.t.)
thisform.tambah.Enabled=.t.
63
thisform.simpan.Enabled=.f.
thisform.keluar.Enabled=.t.
thisform.grid1.enabled=.t.
RETURN
k. Object SEBELUMNYA Procedure CLICK SKIP -1
IF BOF()
GO TOP
ENDIF
THISFORM.TAMPILKAN
RETURN
l. Object BERIKUTNYA Procedure CLICK SKIP
IF BOF()
GO BOTTOM
ENDIF
THISFORM.TAMPILKAN
RETURN
m. Object KELUAR Procedure CLICK THISFORM.Release
RETU
n. Object GRID1 Procedure AfterRowColChange LPARAMETERS nColIndex
thisform.Tampilkan
RETURN
64
6.2 Tugas 6
1. Buat file Project dengan nama TGS6
2. Buat file Database dengan nama DATATGS6
3. Buat file Table dengan nama file PASIEN, dengan struktur file sbb :
4. Buat Form untuk meng-input data PASIEN, dengan disain Form sbb.:
Gambar 1. Desain Form. (Biaya Perawatan)
65
5. Ketentuan untuk mengisi BAYAR (Jumlah Bayar) adalah :
Lama Rawat = Tanggal Keluar – Tanggal Masuk
RUANG RAWAT TARIP PER HARI
ICU 250,000
VIP 300,000
KELAS 1 200,000
KELAS 2 100,000
KELAS 3 50,000
Jumlah Bayar = Lama Rawat * Tarip
VII. QUIZ
66
VIII. Praktek Visual FoxPro VIII
Materi : 1. Membuat Project File Sistem Informasi Penjualan Barang Metode FIFO
2. Membuat Databse Sistem Informasi Penjualan Barang
3. Membuat Table Barang, Pemasok, Pembelian dan DetailBeli
4. Membuat Tabel Pelanggan, Faktur, Pejualan dan DetailJual
8.1 Membuat Project File dan DataBase
1. Buatkan Project File Baru dengan nama SIPB (Sistem Informasi Penjualan Barang)
2. Buatkan Database dengan nama DATASIPB
3. Buatkan Tabel Barang pada Database DATASIPB dengan Struktur File sbb :
Gambar 8.1.1 Tabel Barang
4. Buatkan Tabel Pemasok pada Database SIPB dengan Struktur File sbb :
Gambar 8.1.2 Tabel Pemasok
67
5. Buatkan Tabel Pembelian pada Database SIPB dengan Struktur File sbb :
Gambar 8.1.3 Tabel Pembelian
6. Buatkan Tabel DetailBeli pada Database SIPB dengan Struktur File sbb :
Gambar 8.1.4 Tabel DetailBeli
7. Buatkan Tabel Faktur pada Database SIPB dengan Struktur File sbb :
Gambar 8.1.5 Tabel Faktur
68
8. Buatkan Tabel Penjualan pada Database SIPB dengan Struktur File sbb :
Gambar 8.1.6 Tabel Penjualan
9. Buatkan Tabel DetailJual pada Database SIPB dengan Struktur File sbb :
Gambar 8.1.7 Tabel DetailJual
10. Buatkan Tabel KodeBrg pada Free Table dengan Struktur File sbb :
Gambar 8.1.8 Tabel KodeBrg
11. Buatkan Tabel TmpBeli pada Free Table dengan Struktur File sbb :
69
8.2 Membuat Form Kelola Data Barang
1. Buatkan Form Kelola Data Barang dengan disain seperti pada Gambar 8.2.1:
Gambar 8.2.1 Disain Form Kelola Data Barang
70
2. Procedure Program :
a. Object Form 1 Procedure LOAD set exact on
set defa to D:\SIPBFIFO\DATA
* Menutup semua file yang tidak diperlukan
close data
close index
if USED("BARANG")
USE IN BARANG
endif
if USED("DETAILBELI")
USE IN DETAILBELI
ENDIF
if USED("KODEBRG")
USE IN KODEBRG
ENDIF
* Membuka Tabel
SELECT A
USE DETAILBELI
SELECT B
use barang EXCLUSIVE
set order to tag kodebrg
SELECT C
USE KODEBRG
RETURN
b. Object Form1 Procedure UNLOAD close data
close index
return
c. Object Form1 Procedure Kendali parameter x
thisform.pertama.enabled=x
thisform.sebelumnya.enabled=x
thisform.berikutnya.enabled=x
thisform.terakhir.enabled=x
RETURN
d. Object Form1 Procedure Kosongkan thisform.namabrg.value=""
thisform.stockmin.value=0
71
thisform.hargajual.value=0
RETURN
e. Object Form1 Procedure NonKodeBrg PARAMETERS keadaan
thisform.namabrg.enabled=keadaan
thisform.stockmin.enabled=keadaan
thisform.hargajual.enabled=keadaan
RETURN
f. Object Form1 Procedure Tampilkan thisform.kodebrg.value=barang.kodebrg
thisform.namabrg.value=barang.namabrg
thisform.stockmin.value=barang.stockmin
thisform.hargajual.value=barang.hargajual
RETURN
g. Object Form1 Procedure ACTIVATE thisform.kodebrg.enabled=.f.
thisform.nonkodebrg(.f.)
thisform.kendali(.t.)
thisform.Tambah.enabled=.t.
thisform.keluar.enabled=.t.
thisform.hapus.enabled=.f.
thisform.simpan.enabled=.f.
thisform.batal.enabled=.f.
thisform.perbaiki.enabled=.f.
thisform.ud.enabled=.f.
thisform.cetak.enabled=.f.
thisform.kosongkan
thisform.kodebrg.setfocus
thisform.grid1.enabled=.t.
RETURN
g. Object TAMBAH Procedure CLICK thisform.kodebrg.enabled=.t.
thisform.nonkodebrg(.f.)
thisform.kendali(.f.)
thisform.Tambah.enabled=.f.
thisform.keluar.enabled=.f.
thisform.hapus.enabled=.f.
72
thisform.simpan.enabled=.f.
thisform.batal.enabled=.t.
thisform.perbaiki.enabled=.f.
thisform.ud.enabled=.f.
thisform.cetak.enabled=.f.
thisform.grid1.enabled=.f.
thisform.kosongkan
thisform.kodebrg.setfocus
RETURN
h. Object KODEBRG Procedure LOSTFOCUS PUBLIC VN
SELECT KODEBRG
LOCATE FOR
KODEBRG.KODE=LEFT(THISFORM.KODEBRG.VALUE,1)
IF KODEBRG.KODE="B" .AND. KODEBRG.NO=0
VN=1
ELSE
IF KODEBRG.KODE="B" .AND. KODEBRG.NO>0
VN=KodeBrg.No+1
ELSE
IF KODEBRG.KODE="S" .AND. KODEBRG.NO=0
VN=1
ELSE
IF KODEBRG.KODE="S" .AND. KODEBRG.NO>0
VN=KodeBrg.No+1
ENDIF
ENDIF
ENDIF
ENDIF
vkd=LEFT(thisform.kodebrg.Value,1)
IF VN<10
Vkodebrg=vkd+"0000"+STR(vn,1)
ELSE
IF VN<100
Vkodebrg=vkd+"000"+STR(vn,2)
ELSE
IF VN<1000
Vkodebrg=vkd+"00"+STR(vn,3)
ELSE
73
IF VN<10000
Vkodebrg=vkd+"0"+STR(vn,4)
ELSE
Vkodebrg=vkd+STR(vn,5)
ENDIF
ENDIF
ENDIF
ENDIF
thisform.kodebrg.Value=vkodebrg
if left(thisform.KODEBRG.value,1)#"B" .and. ;
left(thisform.KODEBRG.value,1)#"S"
messagebox("Kode Barang harus diawali hurup B ;
untuk barang bubutan "+CHR(13)+"dan Hurup S ;
untuk barang sparepart !",0,"Perhatian...!")
thisform.KODEBRG.setfocus
return
ENDIF
thisform.perbaiki.enabled=.f.
thisform.ud.enabled=.f.
thisform.batal.enabled=.t.
thisform.Tambah.enabled=.f.
thisform.simpan.enabled=.t.
thisform.keluar.enabled=.f.
thisform.hapus.enabled=.f.
thisform.cetak.enabled=.f.
thisform.KODEBRG.enabled=.f.
thisform.nonkodebrg(.t.)
thisform.kendali(.f.)
thisform.NAMABRG.setfocus
thisform.grid1.enabled=.f.
RETURN
i. Object SIMPAN Procedure CLICK IF EMPTY(thisform.namabrg.value)
messagebox("Isi dulu Nama Barang !",0,;
"Perhatian...")
thisform.namabrg.setfocus
RETURN
ENDIF
IF EMPTY(thisform.stockmin.value)
messagebox("Isi dulu Stock Minimum Barang !",0,;
74
"Perhatian...")
thisform.stockmin.setfocus
RETURN
ENDIF
IF EMPTY(thisform.hargajual.value)
messagebox("Isi dulu Harga Jual Barang !",0,;
"Perhatian...")
thisform.hargajual.setfocus
RETURN
ENDIF
SELECT BARANG
locate for namabrg=trim(thisform.namabrg.value)
if found()
messagebox("Nama Barang Ada Yang Sama !",0,;
"Penyimpanan tidak bisa dilakukan")
thisform.namabrg.setfocus
return
endif
locate for kodebrg=space(6)
if ! found()
append blank
endif
repl kodebrg with thisform.kodebrg.value
repl namabrg with thisform.namabrg.value
repl stockmin with thisform.stockmin.value
repl hargajual with thisform.hargajual.value
thisform.grid1.setfocus
thisform.Refresh
SELECT KODEBRG
LOCATE FOR
KODEBRG.KODE=LEFT(thisform.kodebrg.Value,1)
REPLACE KODEBRG.NO WITH VN
messagebox("Penyimpanan data sudah dilakukan !",0,;
"Perhatian...")
thisform.perbaiki.enabled=.t.
thisform.ud.enabled=.f.
thisform.batal.enabled=.f.
thisform.Tambah.enabled=.t.
thisform.simpan.enabled=.f.
thisform.keluar.enabled=.t.
75
thisform.hapus.enabled=.t.
thisform.cetak.enabled=.t.
thisform.kodebrg.enabled=.f.
thisform.nonkodebrg(.f.)
thisform.kendali(.t.)
thisform.grid1.enabled=.t.
RETURN
j. Object BATAL Procedure CLICK thisform.grid1.SetFocus
thisform.Refresh
SELECT barang
LOCATE FOR kodebrg=TRIM(thisform.kodebrg.value)
IF FOUND()
vstock=barang.stock
vhargadsr=barang.hargadsr
ELSE
vstock=0
vhargadsr=0
ENDIF
thisform.kodebrg.enabled=.f.
thisform.nonkodebrg(.f.)
thisform.kendali(.t.)
thisform.tambah.enabled=.t.
thisform.keluar.enabled=.t.
thisform.hapus.enabled=.t.
thisform.simpan.enabled=.f.
thisform.batal.enabled=.f.
thisform.perbaiki.enabled=.t.
thisform.ud.enabled=.f.
thisform.cetak.enabled=.t.
thisform.grid1.enabled=.t.
thisform.kosongkan
thisform.kodebrg.setfocus
RETURN
k. Object HAPUS Procedure CLICK SELECT PENJUALAN
LOCATE FOR KODEBRG=TRIM(THISFORM.kodebrg.Value)
IF FOUND()
76
messagebox("Sorry Record ini tidak bisa dihapus
?",0,"Barang tsb sudah digunakan dalam transaksi...
")
RETURN
ENDIF
SELECT barang
LOCATE FOR KODEBRG=TRIM(THISFORM.kodebrg.Value)
ln=RECNO()
ljawab=messagebox("Anda Yakin ?",4+32+512,"Record ini
mau dihapus !")
if ljawab=6
DELETE
set dele on
ENDIF
goto ln
thisform.grid1.setfocus
thisform.refresh
RETURN
l. Object KELUAR Procedure CLICK jawab=messagebox("Anda Yakin ?",4+32,;
"Mau Keluar dari Entry Data...")
if jawab=6
SELECT BARANG
set dele off
PACK
thisform.release
endif
RETURN
m. Object CETAK Procedure CLICK SELECT BARANG
SET ORDER TO KODEBRG && KODEBRG
SET FILTER to
REPORT FORM d:\sipbFIFO\Prg\LAPBARANG PREVIEW
RETURN
n. Object PERBAIKI Procedure CLICK thisform.nonkodebrg(.t.)
thisform.perbaiki.enabled=.f.
thisform.ud.enabled=.t.
77
thisform.batal.enabled=.t.
thisform.tambah.enabled=.f.
thisform.simpan.enabled=.f.
thisform.keluar.enabled=.f.
thisform.hapus.enabled=.f.
thisform.cetak.enabled=.f.
thisform.kodebrg.enabled=.f.
thisform.kendali(.f.)
thisform.namabrg.setfocus
thisform.grid1.enabled=.f.
RETURN
o. Object UD Procedure CLICK IF EMPTY(thisform.namabrg.value)
messagebox("Isi dulu Nama Barang !",0,;
"Perhatian...")
thisform.namabrg.setfocus
RETURN
Endif
IF EMPTY(thisform.stockmin.value)
messagebox("Isi dulu Stock Minimum Barang !",0,;
"Perhatian...")
thisform.stockmin.setfocus
RETURN
endif
IF EMPTY(thisform.hargajual.value)
messagebox("Isi dulu Harga Jual Barang !",0,;
"Perhatian...")
thisform.hargajual.setfocus
RETURN
endif
jawab=messagebox("Mau Memperbaiki Data Sebelumnya ?",;
4+32+256,"Perhatian...!")
if jawab=6
SELECT BARANG
LOCATE FOR kodebrg=TRIM(thisform.kodebrg.value)
IF FOUND()
repl namabrg with thisform.namabrg.value
repl stockmin with thisform.stockmin.value
repl hargajual with thisform.hargajual.value
ENDIF
78
ELSE
thisform.grid1.SetFocus
thisform.Refresh
ENDIF
thisform.perbaiki.enabled=.t.
thisform.ud.enabled=.f.
thisform.batal.enabled=.f.
thisform.tambah.enabled=.t.
thisform.simpan.enabled=.f.
thisform.keluar.enabled=.t.
thisform.hapus.enabled=.t.
thisform.cetak.enabled=.f.
thisform.kodebrg.enabled=.f.
thisform.nonkodebrg(.f.)
thisform.kendali(.t.)
thisform.grid1.setfocus
thisform.grid1.enabled=.t.
RETURN
p. Object PERTAMA Procedure CLICK SELECT BARANG
set order to
go top
if eof()
messagebox("Tidak ada record...!",0,"Perhatian...!")
thisform.refresh()
return
ENDIF
set order to tag kodebrg
thisform.grid1.setfocus
thisform.refresh
RETURN
q. Object SELEBUMNYA Procedure CLICK SELECT BARANG
set order to
skip -1
if bof()
go top
endif
set order to tag kodebrg
thisform.grid1.setfocus
79
thisform.refresh
RETURN
r. Object BERIKUTNYA Procedure CLICK SELECT BARANG
set order to
skip
if eof()
go bottom
endif
set order to tag kodebrg
thisform.grid1.setfocus
thisform.refresh
RETURN
t. Object TERAKHIR Procedure CLICK SELECT BARANG
set order to
go bottom
if eof()
messagebox("Tidak ada record...!",0,"Perhatian...!")
thisform.refresh()
return
ENDIF
set order to tag kodebrg
thisform.grid1.setfocus
thisform.refresh
RETURN
u. Object GRID1 Procedure AfterRowColChange LPARAMETERS nColIndex
thisform.perbaiki.enabled=.t.
thisform.hapus.enabled=.t.
thisform.batal.enabled=.f.
thisform.kodebrg.enabled=.f.
thisform.tambah.enabled=.t.
thisform.simpan.enabled=.f.
thisform.keluar.enabled=.t.
thisform.grid1.enabled=.t.
thisform.cetak.enabled=.t.
thisform.nonkodebrg(.f.)
thisform.kendali(.t.)
80
thisform.tampilkan
RETURN
8.3 Tugas 8
1. Buatkan Form Untuk Mengelola Data Pemasok dengan disain seperti pada Gambar
8.3.1.
Gambar 8.3.1 Disain Form Kelola Data Pemasok
81
IX. Praktek Visual FoxPro IX
Materi : 1. Membuat File Report Barang
2. Membat Form untuk memfilter Jenis Barang
9.1 Membuat Report
1. Buatkan Report untuk menampilkan Daftar Barang. Dengan disain sbb.:
Gambar 9.1.1 Report Daftar Barang
Isi TextBox :
Pada Baris Group Header :
“Jenis Barang "+IIF(LEFT( Barang.kodebrg,1)="B","Bubutan","Sparepart")
Kode Barang : barang.kodebrg
Nama Barang : barang.namabrg
Jumlah Unit : barang.stockMin,
Format : Format Expression : 999
Type : Character
82
Aligment : Right
Harga Satuan : barang.hargaJual,
Format : Format Expression : 99,999,999
Type : Character
Aligment : Right
2. Simpan Report tersebut dengan nama File LAPBARANG
9.2 Tugas 9
1. Buatkan Report Daftar Pemasok dengan disain seperti pada gambar 9.3.1 :
Gambar 9.3.1 Report Daftar Pemasok
83
X. Praktek Visual FoxPro X
Materi : 1. Membuat File Transaksi Pembelian
10.1 Membuat Form Transaksi Pembelian
1. Buatkan Form Kelola Data Pembelian dengan disain seperti pada Gambar 9.2.1:
10.2 Listing Program Transaksi Pembelian
a. Object Form1 Procedure LOAD close index
close data
set date british
set cent on
set defa to d:\sipbfifo\data
if used("barang")
use in barang
84
endif
if used("pemasok")
use in pemasok
endif
if used("detailbeli")
use in detailbeli
endif
if used("pembelian")
use in pembelian
endif
SELECT 1
use barang
set order to namabrg
SELECT 2
use pemasok
set order to nopem
SELECT 3
use pembelian EXCLUSIVE
set order to nofakbeli
SELECT 4
use detailbeli EXCLUSIVE
set order to nofakbeli
return
b. Object Form1 Procedure UNLOAD close index
close data
return
c. Object Form1 Procedure AKTIF PARAMETERS x
thisform.nopem.Enabled=x
thisform.perusahaan.Enabled=x
retu
d. Object Form1 Procedure AKTIF1 PARAMETERS y
thisform.nofakbeli.Enabled=y
thisform.tglbeli.Enabled=y
RETURN
85
e. Object Form1 Procedure AKTIF2 PARAMETERS Z
thisform.kodebrg.Enabled=z
thisform.hargabeli.Enabled=z
thisform.qty.Enabled=z
thisform.namabrg.Enabled=z
RETURN
f. Object Form1 Procedure AKTIF3 PARAMETERS r
thisform.diskon.Enabled=r
thisform.totalbayar.Enabled=r
thisform.utang.Enabled=r
RETURN
g. Object Form1 Procedure KENDALI PARAMETERS s
thisform.pertama.Enabled=s
thisform.sebelumnya.Enabled=s
thisform.berikutnya.Enabled=s
thisform.terakhir.Enabled=s
RETURN
h. Object Form1 Procedure KOSONGKAN thisform.namabrg.value=""
thisform.nopem.value=""
thisform.perusahaan.value=""
thisform.qty.value=0
thisform.kodebrg.value=""
thisform.hargabeli.value=0
thisform.totalbeli.value=0
thisform.diskon.value=0
thisform.totalbayar.value=0
thisform.utang.value=0
return
i. Object Form1 Procedure TAMPILKAN select pembelian
thisform.nofakbeli.value=pembelian.nofakbeli
thisform.nopem.value=pembelian.nopem
thisform.totalbeli.value=pembelian.totalbeli
86
thisform.diskon.value=pembelian.diskon
thisform.Totalbayar.value=pembelian.Totalbayar
thisform.utang.value=pembelian.utang
select pemasok
locate for nopem=thisform.nopem.value
thisform.perusahaan.value=pemasok.perusahaan
SELECT DETAILBELI
SET FILTER TO NOFAKBELI=TRIM(thisform.Nofakbeli.Value)
GO top
thisform.tglbeli.value=detailbeli.tglbeli
thisform.Qty.value=detailbeli.qtyb
thisform.Hargabeli.value=detailbeli.HargaBeli
SELECT BARANG
LOCATE FOR KODEBRG=TRIM(thisform.kodebrg.Value)
thisform.NamaBrg.value=Barang.NamaBrg
thisform.refresh()
thisform.proses.enabled=.f.
thisform.batal.enabled=.f.
thisform.simpan.enabled=.f.
thisform.tambah.enabled=.t.
thisform.simpan.enabled=.f.
thisform.cetak.enabled=.t.
thisform.keluar.enabled=.t.
thisform.kendali(.t.)
thisform.aktif(.f.)
thisform.aktif1(.f.)
thisform.aktif2(.f.)
thisform.aktif3(.f.)
return
j. Object Form1 Procedure ACTIVATE thisform.proses.enabled=.f.
thisform.batal.enabled=.f.
thisform.simpan.enabled=.f.
thisform.tambah.enabled=.t.
thisform.simpan.enabled=.f.
thisform.cetak.enabled=.f.
thisform.keluar.enabled=.t.
thisform.kendali(.t.)
87
thisform.aktif(.f.)
thisform.aktif1(.f.)
thisform.aktif2(.f.)
thisform.aktif3(.f.)
return
k. Object TAMBAH Procedure CLICK thisform.kosongkan
select barang
set order to tag namabrg
thisform.refresh
thisform.tglbeli.value=date()
thisform.proses.enabled=.f.
thisform.batal.enabled=.t.
thisform.simpan.enabled=.f.
thisform.tambah.enabled=.f.
thisform.simpan.enabled=.f.
thisform.cetak.enabled=.f.
thisform.keluar.enabled=.f.
thisform.kendali(.F.)
thisform.aktif(.t.)
thisform.aktif1(.t.)
thisform.aktif2(.f.)
thisform.aktif3(.f.)
THISFORM.NOFAKBELI.value=""
THISFORM.NOFAKBELI.SETFOCUS
return
l. Object NOPEM Procedure LOSTFOCUS SELECT Pemasok
LOCATE FOR nopem=RTRIM(thisform.nopem.Value)
IF ! FOUND()
MESSAGEBOX("Data tidak ditemukan !",0,"Perhatian...")
thisform.nopem.setFocus
RETURN
endif
thisform.perusahaan.value=pemasok.perusahaan
thisform.aktif2(.t.)
thisform.kodebrg.setFocus
return
88
m. Object PERUSAHAAN Procedure InteractiveChange
thisform.nopem.value=pemasok.nopem
thisform.aktif2(.t.)
return
n. Object KODEBRG Procedure LOSTFOCUS IF EMPTY(thisform.kodebrg.Value)
thisform.kodebrg.value=""
thisform.qty.Value=0
thisform.kodebrg.setfocus
return
ENDIF
SELECT BARANG
LOCATE FOR KODEBRG=TRIM(thisform.kodebrg.Value)
IF FOUND()
thisform.namabrg.value=barang.NamaBrg
thisform.qty.Value=1
thisform.Proses.setfocus
ELSE
thisform.kodebrg.value=""
thisform.qty.Value=0
thisform.kodebrg.setfocus
ENDIF
thisform.aktif(.f.)
thisform.proses.Enabled=.t.
thisform.simpan.Enabled=.f.
thisform.tambah.Enabled=.f.
thisform.batal.Enabled=.f.
thisform.keluar.Enabled=.f.
thisform.cetak.Enabled=.f.
thisform.kendali(.f.)
return
o. Object NAMABRG Procedure INTERACTIVECHANGE SELECT barang
LOCATE FOR namabrg=TRIM(thisform.namabrg.Value)
IF found()
thisform.kodebrg.value=barang.kodebrg
thisform.qty.Value=1
89
ELSE
thisform.kodebrg.value=""
thisform.qty.Value=0
ENDIF
thisform.aktif(.f.)
thisform.Proses.Enabled=.t.
thisform.simpan.Enabled=.f.
thisform.tambah.Enabled=.f.
thisform.batal.Enabled=.f.
thisform.keluar.Enabled=.f.
thisform.cetak.Enabled=.f.
thisform.kendali(.f.)
return
p. Object PROSES Procedure CLICK jml=thisform.hargabeli.value*thisform.qty.value
thisform.totalbeli.value=thisform.totalbeli.value+jml
if thisform.qty.value>0 .and. thisform.hargabeli.value>0
sele detailbeli
appe blank
REPLACE Nofakbeli with thisform.Nofakbeli.value
REPLACE TglBeli with thisform.TglBeli.value
REPLACE kodebrg with thisform.kodebrg.value
REPLACE qtyb with thisform.qty.value
REPLACE Hargabeli with thisform.Hargabeli.value
REPLACE jmlbeli with jml
REPLACE Stock with thisform.qty.value
SELECT pembelian
LOCATE FOR nofakbeli=TRIM(thisform.nofakbeli.Value)
IF ! FOUND()
APPEND BLANK
ENDIF
REPLACE Nofakbeli with thisform.Nofakbeli.value
REPLACE nopem with thisform.nopem.value
REPLACE totalbeli with thisform.totalbeli.value
REPLACE diskon with thisform.diskon.value
REPLACE totalbayar with thisform.totalbayar.value
REPLACE utang with thisform.utang.value
ENDIF
90
thisform.Refresh
thisform.Totalbayar.value=thisform.totalbeli.value
thisform.namabrg.value=""
thisform.qty.value=0
thisform.kodebrg.value=""
thisform.hargabeli.value=0
thisform.aktif3(.t.)
thisform.proses.Enabled=.f.
thisform.simpan.Enabled=.t.
thisform.tambah.Enabled=.f.
thisform.batal.Enabled=.f.
thisform.keluar.Enabled=.f.
thisform.cetak.Enabled=.f.
thisform.kendali(.f.)
thisform.kodebrg.setfocus
return
q. Object BATAL Procedure CLICK IF EMPTY(THISFORM.kodebrg.Value) .OR.
EMPTY(THISFORM.namabrg.Value) .OR. ;
EMPTY(THISFORM.QTY.Value)
MESSAGEBOX("Click dulu Record di Grid yang akan
dibatalkan",0,"Perhatian...")
thisform.grid1.SetFocus
RETURN
ENDIF
jawab=messagebox("Anda mau membatalkan transaksi
?",4+32+256,"Perhatian...")
if jawab=6
sele detailbeli
loca for detailbeli.kodebrg=TRIM(thisform.kodebrg.value) .and. ;
nofakbeli=TRIM(thisform.nofakbeli.Value)
SET DELETED ON
thisform.Refresh
IF FOUND()
ljml=thisform.hargabeli.value*thisform.qty.value
dele FOR
detailbeli.kodebrg=TRIM(thisform.kodebrg.value) .and. ;
nofakbeli=TRIM(thisform.nofakbeli.Value)
ELSE
ljml=0
91
ENDIF
thisform.totalbeli.value=thisform.totalbeli.value-ljml
thisform.totalbayar.value=thisform.totalbeli.value
thisform.refresh
thisform.qty.value=0
ENDIF
IF thisform.totalbeli.Value=0
SELECT pembelian
LOCATE for nofakbeli=TRIM(thisform.nofakbeli.Value)
DELETE
thisform.aktif(.f.)
thisform.aktif2(.t.)
thisform.aktif3(.f.)
thisform.proses.Enabled=.f.
thisform.simpan.Enabled=.f.
thisform.tambah.Enabled=.t.
thisform.batal.Enabled=.f.
thisform.keluar.Enabled=.t.
thisform.cetak.Enabled=.f.
thisform.kendali(.t.)
thisform.refresh
else
thisform.aktif(.f.)
thisform.aktif2(.t.)
thisform.aktif3(.t.)
thisform.proses.Enabled=.f.
thisform.simpan.Enabled=.t.
thisform.tambah.Enabled=.f.
thisform.batal.Enabled=.f.
thisform.keluar.Enabled=.f.
thisform.cetak.Enabled=.f.
thisform.kendali(.f.)
thisform.refresh
endif
RETURN
r. Object BATAL Procedure RIGHTCLICK thisform.keluar.enabled=.t.
92
s. Object SIMPAN Procedure CLICK if thisform.Totalbayar.value>thisform.totalbeli.value
messagebox("Maaf Anda Keliru Memasukan Jumlah
Bayar...",0,"Perhatian...")
thisform.Totalbayar.setfocus
retu
ENDIF
if EMPTY(thisform.nopem.value)
messagebox("Data pemasok/supplier harus diisi dulu
!",0,"Perhatian...")
thisform.nopem.setfocus
retu
ENDIF
if thisform.totalbeli.value>0
select pembelian
locate for nofakbeli=trim(thisform.nofakbeli.value)
if ! found()
append blank
endif
repl nofakbeli with thisform.nofakbeli.value
repl Totalbeli with thisform.totalbeli.value
repl nopem with thisform.nopem.value
repl diskon with thisform.diskon.value
repl Totalbayar with thisform.Totalbayar.value
repl utang with thisform.utang.value
ENDIF
thisform.proses.enabled=.f.
thisform.batal.enabled=.f.
thisform.simpan.enabled=.f.
thisform.tambah.enabled=.t.
thisform.simpan.enabled=.f.
thisform.cetak.enabled=.t.
thisform.keluar.enabled=.t.
thisform.kendali(.t.)
thisform.aktif(.f.)
thisform.aktif1(.f.)
thisform.aktif2(.f.)
thisform.aktif3(.f.)
return
93
t. Object CETAK Procedure CLICK SELECT pemasok
SET ORDER TO TAG NOPEM
SELECT barang
SET ORDER TO kodebrg
SELECT detailbeli
SET RELATION TO KodeBrg INTO BARANG, Nofakbeli INTO
PEMBELIAN, Pembelian.nopem INTO PEMASOK
REPORT form d:\sipbfifo\prg\kuitansib PREVIEW
thisform.proses.enabled=.f.
thisform.batal.enabled=.f.
thisform.simpan.enabled=.f.
thisform.tambah.enabled=.t.
thisform.simpan.enabled=.f.
thisform.cetak.enabled=.f.
thisform.keluar.enabled=.t.
thisform.kendali(.t.)
thisform.aktif(.f.)
thisform.aktif1(.f.)
thisform.aktif2(.f.)
thisform.aktif3(.f.)
return
u. Object KELUAR Procedure CLICK sele pembelian
set dele off
PACK
SELECT detailbeli
PACK
thisform.release
RETURN
v. Object GRID1 Procedure AfterRowColChange LPARAMETERS nColIndex
thisform.nofakbeli.value=detailbeli.nofakbeli
thisform.tglbeli.value=detailbeli.tglbeli
thisform.kodebrg.value=detailbeli.kodebrg
thisform.hargabeli.value=detailbeli.hargabeli
thisform.qty.value=detailbeli.qtyb
thisform.hargabeli.value=detailbeli.hargabeli
SELECT barang
94
LOCATE FOR kodebrg=TRIM(thisform.kodebrg.Value)
thisform.namabrg.value=barang.namabrg
SELECT pembelian
LOCATE FOR nofakbeli=TRIM(thisform.nofakbeli.Value)
thisform.nopem.value=pembelian.nopem
thisform.totalbeli.value=pembelian.totalbeli
thisform.totalbayar.value=pembelian.totalbayar
thisform.diskon.value=pembelian.diskon
thisform.utang.value=pembelian.utang
SELECT pemasok
LOCATE FOR nopem=TRIM(thisform.nopem.Value)
thisform.perusahaan.value=pemasok.perusahaan
IF thisform.simpan.Enabled=.t.
thisform.batal.Enabled=.t.
ELSE
thisform.batal.Enabled=.f.
ENDIF
return
w. Object PERTAMA Procedure CLICK select pembelian
set order to
go top
if bof()
messagebox("Tidak ada record",0,"Perhatian...!")
thisform.release()
return
endif
thisform.tampilkan
thisform.refresh
return
x. Object SEBELUMNYA Procedure CLICK select pembelian
set order to
skip -1
if bof()
go top
endif
thisform.tampilkan
95
thisform.refresh
return
y. Object BERIKUTNYA Procedure CLICK select pembelian
set order to
skip
if eof()
go bottom
endif
thisform.tampilkan
thisform.refresh
return
z. Object TERAKHIR Procedure CLICK select pembelian
set order to
go bottom
if eof()
messagebox("Tidak ada record",0,"Perhatian...!")
thisform.release
return
endif
thisform.tampilkan
thisform.refresh
return
10.4 Tugas 10
Buatkan Form PELANGGAN dengan disain sbb:
96
97
XI. Praktek Visual FoxPro XI
Materi : 1. Membuat Form Penjualan Metode FIFO
2. Menguji Form
11.1 Disain Form Penjualan
1. Buatkan Form Penjualan dengan disain sbb:
2. Coding Transaksi Penjualan Metode FIFO :
a. Object FORM1 Procedure LOAD close index
close data
set date british
set cent on
set defa to D:\SIPBFIFO\DATA
98
if used("barang")
use in barang
endif
if used("pelanggan")
use in pelanggan
endif
if used("faktur")
use in faktur
endif
if used("penjualan")
use in penjualan
endif
if used("nofakjual")
use in nofakjual
ENDIF
select 1
use barang
set order to tag namabrg
select 2
use pelanggan
set order to tag namapel
select 3
use faktur EXCLUSIVE
set order to tag nofakjual
select 4
use penjualan EXCL
set order to tag nofakjual
select 5
use DETAILJUAL EXCL
set order to tag nofakjual
SELECT 6
USE detailbeli
SELECT 7
USE tmpbeli EXCLUSIVE
SET ORDER TO KODEBRG && KODEBRG
RETURN
99
b. Object FORM1 Procedure UNLOAD close index
close data
return
c. Object FORM1 Procedure AKTIF PARAMETERS x
thisform.nopel.Enabled=x
thisform.namapel.Enabled=x
RETURN
d. Object FORM1 Procedure AKTIF1 PARAMETERS y
thisform.nofakjual.Enabled=y
thisform.tgljual.Enabled=y
RETURN
e. Object FORM1 Procedure AKTIF2 PARAMETERS Z
thisform.namabrg.Enabled=z
thisform.kodebrg.Enabled=z
thisform.qty.Enabled=z
thisform.hargajual.Enabled=z
RETURN
f. Object FORM1 Procedure AKTIF3 PARAMETERS r
thisform.diskon.Enabled=r
thisform.totalbayar.Enabled=r
thisform.JmlUang.Enabled=r
RETURN
g. Object FORM1 Procedure KENDALI PARAMETERS s
thisform.pertama.Enabled=s
thisform.sebelumnya.Enabled=s
thisform.berikutnya.Enabled=s
thisform.terakhir.Enabled=s
RETURN
100
h. Object FORM1 Procedure KOSONGKAN thisform.namabrg.value=""
thisform.qty.value=0
thisform.kodebrg.value=""
thisform.hargajual.value=0
thisform.totaljual.value=0
thisform.nopel.value=""
thisform.namapel.value=""
thisform.diskon.value=0
thisform.totalbayar.value=0
thisform.JmlUang.value=0
RETURN
i. Object FORM1 Procedure TAMPILKAN select faktur
thisform.nofakjual.value=faktur.nofakjual
thisform.nopel.value=faktur.nopel
thisform.totaljual.value=faktur.totaljual
thisform.diskon.value=faktur.diskon
thisform.totalbayar.value=faktur.totalbayar
thisform.JmlUang.value=faktur.JmlUang
thisform.totallaba.value=faktur.totallaba
select pelanggan
locate for nopel=TRIM(thisform.nopel.value)
thisform.namapel.value=pelanggan.namapel
SELECT penjualan
locate for nofakjual=TRIM(thisform.nofakjual.value)
thisform.TglJual.value=penjualan.tgljual
thisform.kodebrg.value=penjualan.kodebrg
thisform.qty.value=penjualan.qtyj
thisform.Labakotor.value=penjualan.labakotor
thisform.hargajual.value=penjualan.JmlJual/penjualan.qtyj
thisform.hargabeli.value=thisform.hargajual.value-
(penjualan.labakotor/penjualan.qtyj)
SET FILTER TO nofakjual=TRIM(thisform.nofakjual.value)
thisform.refresh
SELECT barang
locate for kodebrg=TRIM(thisform.kodebrg.value)
101
thisform.namabrg.value=barang.namabrg
thisform.esc.enabled=.f.
thisform.proses.enabled=.f.
thisform.batal.enabled=.f.
thisform.simpan.enabled=.f.
thisform.tambah.enabled=.t.
thisform.simpan.enabled=.f.
thisform.cetak.enabled=.t.
thisform.keluar.enabled=.t.
thisform.kendali(.t.)
thisform.aktif(.f.)
thisform.aktif1(.f.)
thisform.aktif2(.f.)
thisform.aktif3(.f.)
RETURN
j. Object NOPEL Procedure LOSTFOCUS SELECT pelanggan
LOCATE FOR nopel=RTRIM(thisform.nopel.Value)
IF ! FOUND()
MESSAGEBOX("Data tidak ditemukan !",0,"Perhatian...")
thisform.nopel.setFocus
RETURN
endif
thisform.namapel.value=pelanggan.namapel
thisform.aktif2(.t.)
thisform.kodebrg.setfocus
return
k. Object NAMAPEL Procedure INTERACTIVECHANGE thisform.nopel.value=pelanggan.nopel
thisform.aktif2(.t.)
return
l. Object NAMAPEL Procedure LOSTFOCUS thisform.aktif2(.t.)
m. Object KODEBRG Procedure LOSTFOCUS IF EMPTY(thisform.kodebrg.value)
thisform.namabrg.value=""
102
thisform.hargajual.value=0
thisform.kodebrg.setfocus
return
ENDIF
SELECT BARANG
LOCATE FOR KODEBRG=TRIM(thisform.kodebrg.value)
IF FOUND()
thisform.namabrg.value=barang.Namabrg
thisform.hargajual.value=barang.hargajual
thisform.qty.value=1
ELSE
thisform.namabrg.value=""
thisform.hargajual.value=0
thisform.kodebrg.setfocus
ENDIF
thisform.aktif(.f.)
thisform.proses.Enabled=.t.
thisform.simpan.Enabled=.f.
thisform.tambah.Enabled=.f.
thisform.batal.Enabled=.f.
thisform.keluar.Enabled=.f.
thisform.cetak.Enabled=.f.
thisform.kendali(.f.)
thisform.proses.setfocus
return
n. Object NAMABRG Procedure INTERACTIVECHANGE thisform.kodebrg.value=barang.kodebrg
thisform.hargajual.value=barang.hargajual
thisform.qty.value=1
thisform.aktif(.f.)
thisform.proses.Enabled=.t.
thisform.simpan.Enabled=.f.
thisform.tambah.Enabled=.f.
thisform.batal.Enabled=.f.
thisform.keluar.Enabled=.f.
thisform.cetak.Enabled=.f.
thisform.kendali(.f.)
return
103
o. Object PROSES Procedure CLICK if EMPTY(thisform.nofakjual.Value)
messagebox("Anda Harus klik dulu tombol tambah [ + ],
sebelum memulai transaksi!",0,"Perhatian...")
thisform.proses.enabled=.f.
thisform.keluar.enabled=.t.
thisform.tambah.enabled=.t.
thisform.tambah.setfocus
RETURN
ENDIF
if thisform.qty.value>0 .and. thisform.hargajual.value>0
SELECT tmpbeli
DELETE ALL
SET DELETED OFF
PACK
APPEND FROM detailbeli FOR
kodebrg=TRIM(thisform.kodebrg.Value) .and. stock>0
SET ORDER TO TGLBELI
GO TOP
IF EOF()
MESSAGEBOX("Stock Barang Kosong",0,"Perhatian...")
RETURN
ENDIF
jml=thisform.hargajual.value*thisform.qty.value
thisform.totaljual.value=thisform.totaljual.value+jml
thisform.totalbayar.value=thisform.totaljual.value
vtqty=thisform.qty.value
thisform.labakotor.Value=0
DO WHILE ! EOF()
Locate for kodebrg=TRIM(thisform.kodebrg.value) .and.
tmpbeli.stock>0
vhargabeli=tmpbeli.hargabeli
vstock =tmpbeli.stock
vnofakb =tmpbeli.nofakbeli
if vstock<=vtqty
vqtyj=vstock
ELSE
vqtyj=vtqty
ENDIF
104
vtqty=vtqty-vqtyj
jmlhrg=thisform.hargajual.value*vqtyj
vselhrg=thisform.hargajual.value-vhargabeli
vlabakotor=vselhrg*vqtyj
thisform.totallaba.value=thisform.totallaba.value+vlabakotor
thisform.LabaKotor.value=thisform.LabaKotor.value+vlabakotor
SELECT detailbeli
Locate for kodebrg=TRIM(thisform.kodebrg.value) .and.
nofakbeli=vnofakb
REPLACE detailbeli.stock WITH detailbeli.stock-vqtyj
sele detailjual
appe blank
REPLACE Nofakjual with thisform.Nofakjual.value
REPLACE tgljual with thisform.tgljual.value
REPLACE kodebrg with thisform.kodebrg.value
REPLACE Nofakbeli with vnofakb
REPLACE qtyj with vqtyj
REPLACE JmlJual with jmlhrg
REPLACE labakotor with vlabakotor
SELECT TMPBELI
REPLACE stock WITH stock-vqtyj
IF vtqty=0
EXIT
ENDIF
SKIP
ENDDO
sele penjualan
appe blank
REPLACE Nofakjual with thisform.Nofakjual.value
REPLACE tgljual with thisform.tgljual.value
REPLACE kodebrg with thisform.kodebrg.value
REPLACE qtyj with thisform.qty.value
REPLACE JmlJual with Jml
REPLACE LabaKotor with thisform.LabaKotor.value
SET FILTER TO NofakJual =TRIM(thisform.NofakJual.value)
thisform.refresh()
105
SELECT FAKTUR
LOCATE FOR NOFAKJUAL=TRIM(THISFORM.NOFAKJUAL.Value)
IF ! FOUND()
APPEND BLANK
ENDIF
REPLACE NOFAKJUAL WITH THISFORM.NOFAKJUAL.VALUE
REPLACE NOPEL WITH THISFORM.NOPEL.VALUE
REPLACE TOTALJUAL WITH THISFORM.TOTALJUAL.VALUE
REPLACE TOTALBAYAR WITH THISFORM.TOTALBAYAR.VALUE
REPLACE DISKON WITH THISFORM.DISKON.VALUE
REPLACE TOTALLABA WITH THISFORM.TOTALLABA.VALUE
ENDIF
thisform.namabrg.value=""
thisform.kodebrg.value=""
thisform.qty.value=0
thisform.hargajual.value=0
thisform.aktif(.f.)
thisform.aktif3(.t.)
thisform.proses.Enabled=.f.
thisform.simpan.Enabled=.t.
thisform.tambah.Enabled=.f.
thisform.batal.Enabled=.t.
thisform.keluar.Enabled=.f.
thisform.cetak.Enabled=.f.
thisform.kendali(.f.)
thisform.kodebrg.setfocus
RETURN
p. Object SIMPAN Procedure CLICK if thisform.totalbayar.value>thisform.totaljual.value
messagebox("Maaf Anda Keliru Memasukan Jumlah
Bayar...",0,"Perhatian...")
thisform.totalbayar.setfocus
retu
ENDIF
if thisform.totaljual.value>0
select faktur
locate for nofakjual=trim(thisform.nofakjual.value)
if ! found()
append blank
endif
106
repl nofakjual with thisform.nofakjual.value
repl totaljual with thisform.totaljual.value
repl nopel with thisform.nopel.value
repl diskon with thisform.diskon.value
repl totalbayar with thisform.totalbayar.value
repl totallaba with thisform.totallaba.value
repl JmlUang with thisform.JmlUang.value
repl kembalian with thisform.kembalian.value
ENDIF
thisform.refresh
thisform.proses.enabled=.f.
thisform.batal.enabled=.f.
thisform.simpan.enabled=.f.
thisform.tambah.enabled=.t.
thisform.simpan.enabled=.f.
thisform.keluar.enabled=.t.
thisform.kendali(.t.)
thisform.aktif(.f.)
thisform.aktif1(.f.)
thisform.aktif2(.f.)
thisform.aktif3(.f.)
thisform.cetak.enabled=.t.
thisform.tambah.setfocus
return
q. Object CETAK Procedure CLICK SET PROCEDURE TO d:\sipbfifo\prg\terbilang
SELECT pelanggan
SET ORDER TO NOPEL
SELECT barang
SET ORDER TO KODEBRG
select penjualan
SET RELATION TO nofakjual INTO faktur,kodebrg INTO
barang,;
faktur.Nopel INTO Pelanggan
REPORT form d:\prg\SIPB\prg\kw PREVIEW FOR
nofakjual=thisform.nofakjual.value
thisform.proses.enabled=.f.
thisform.batal.enabled=.f.
107
thisform.simpan.enabled=.f.
thisform.tambah.enabled=.t.
thisform.simpan.enabled=.f.
thisform.cetak.enabled=.f.
thisform.keluar.enabled=.t.
thisform.kendali(.t.)
thisform.aktif(.f.)
thisform.aktif1(.f.)
thisform.aktif2(.f.)
thisform.aktif3(.f.)
RETURN
r. Object TAMBAH Procedure CLICK thisform.kosongkan
select barang
set order to tag namabrg
j=LEFT(TIME(),2)
m=SUBSTR(TIME(),4,2)
d=SUBSTR(TIME(),7,2)
tgl=day(date())
bln=month(date())
th=year(date())
IF tgl<10
vtgl="0"+STR(tgl,1)
ELSE
vtgl=STR(tgl,2)
ENDIF
IF bln<10
vbln="0"+STR(bln,1)
ELSE
vbln=STR(bln,2)
ENDIF
thisform.nofakjual.value=vtgl+vbln+right(str(th,4),2)+j+m+
d
SELECT penjualan
SET FILTER TO NOFAKJUAL=TRIM(thisform.nofakjual.Value)
thisform.refresh
thisform.tgljual.value=date()
thisform.proses.enabled=.f.
thisform.batal.enabled=.t.
thisform.simpan.enabled=.f.
108
thisform.tambah.enabled=.f.
thisform.simpan.enabled=.f.
thisform.cetak.enabled=.f.
thisform.keluar.enabled=.f.
thisform.kendali(.F.)
thisform.aktif(.t.)
thisform.aktif1(.t.)
thisform.aktif2(.f.)
thisform.aktif3(.f.)
SELECT pelanggan
LOCATE FOR UPPER(namapel)="KONSUMEN UMUM"
thisform.nopel.Value=pelanggan.nopel
thisform.namapel.Value=pelanggan.namapel
thisform.namapel.setfocus
RETURN
s. Object BATAL Procedure CLICK IF EMPTY(THISFORM.kodebrg.Value) .OR.
EMPTY(THISFORM.namabrg.Value) .OR. ;
EMPTY(THISFORM.QTY.Value)
MESSAGEBOX("Click dulu Record di Grid yang akan
dibatalkan",0,"Perhatian...")
thisform.grid1.SetFocus
RETURN
ENDIF
jawab=messagebox("Anda mau membatalkan transaksi
?",4+32+256,"Perhatian...")
if jawab=6
SELECT TMPBELI
DELETE ALL
PACK
APPEND FROM DETAILJUAL FOR
kodebrg=TRIM(thisform.kodebrg.Value) .and. ;
Nofakjual=TRIM(thisform.NofakJual.value)
GO top
DO WHILE ! EOF()
SELECT DETAILBELI
LOCATE FOR kodebrg=TMPBELI.KODEBRG .and.
Nofakbeli=tmpbeli.NOFAKBELI
REPLACE STOCK WITH STOCK+tmpbeli.QTYJ
109
SELECT TMPBELI
SKIP
ENDDO
SELECT DETAILJUAL
DELE FOR kodebrg=TRIM(thisform.kodebrg.Value) .and.
Nofakjual=TRIM(thisform.NofakJual.value)
sele penjualan
LOCATE FOR
penjualan.kodebrg=TRIM(thisform.kodebrg.value) .and.
nofakjual=TRIM(thisform.nofakjual.Value)
IF FOUND()
VJML=PENJUALAN.JMLJUAL
VLABA=PENJUALAN.LABAKOTOR
DELETE FOR
penjualan.kodebrg=TRIM(thisform.kodebrg.value) .and.
nofakjual=TRIM(thisform.nofakjual.Value)
ELSE
VJML=0
VLABA=0
ENDIF
thisform.totaljual.value=thisform.totaljual.value-VJML
thisform.totallaba.value=thisform.totallaba.value-VLABA
thisform.totalbayar.value=thisform.totaljual.value-
thisform.diskon.value
thisform.jmluang.value=thisform.totbayar.value
thisform.kembalian.value=thisform.jmluang.value-
thisform.totalbayar.value
SET DELETED OFF
SELECT FAKTUR
LOCATE FOR nofakjual=TRIM(thisform.nofakjual.Value)
IF thisform.totaljual.Value=0
DELETE FOR nofakjual=TRIM(thisform.nofakjual.Value)
thisform.aktif(.f.)
thisform.aktif2(.f.)
thisform.aktif3(.f.)
thisform.hitung.Enabled=.f.
thisform.simpan.Enabled=.f.
thisform.tambah.Enabled=.t.
thisform.batal.Enabled=.f.
110
thisform.keluar.Enabled=.t.
thisform.cetak.Enabled=.f.
thisform.kendali(.t.)
thisform.refresh
ELSE
REPLACE nofakjual with thisform.nofakjual.value
REPLACE totaljual with thisform.totaljual.value
REPLACE nopel with thisform.nopel.value
REPLACE diskon with thisform.diskon.value
REPLACE TotalBayar with thisform.TotalBayar.value
REPLACE totallaba with thisform.totallaba.value
REPLACE jmluang with thisform.jmluang.value
REPLACE kembali with thisform.kembalian.value
thisform.aktif(.f.)
thisform.aktif2(.t.)
thisform.aktif3(.t.)
thisform.hitung.Enabled=.t.
thisform.simpan.Enabled=.t.
thisform.tambah.Enabled=.f.
thisform.batal.Enabled=.t.
thisform.keluar.Enabled=.t.
thisform.cetak.Enabled=.f.
thisform.kendali(.f.)
thisform.refresh
ENDIF
thisform.refresh
thisform.qty.value=0
ENDIF
RETURN
t. Object KELUAR Procedure CLICK sele penjualan
set dele off
PACK
SELECT detailjual
pack
SET RELATION TO
SET FILTER TO
thisform.release
RETURN
111
u. Object ESC Procedure CLICK thisform.proses.enabled=.f.
thisform.batal.enabled=.f.
thisform.simpan.enabled=.f.
thisform.tambah.enabled=.t.
thisform.simpan.enabled=.f.
thisform.cetak.enabled=.f.
thisform.keluar.enabled=.t.
thisform.kendali(.t.)
thisform.aktif(.f.)
thisform.aktif1(.f.)
thisform.aktif2(.f.)
thisform.aktif3(.f.)
thisform.tambah.setfocus
RETURN
v. Object PERTAMA Procedure CLICK select faktur
go top
if eof()
messagebox("Tidak ada record",0,"Perhatian...!")
thisform.release()
return
endif
thisform.tampilkan
thisform.refresh
RETURN
w. Object SEBELUMNYA Procedure CLICK select faktur
skip -1
if bof()
go top
endif
thisform.tampilkan
thisform.refresh
RETURN
x. Object BERIKUTNYA Procedure CLICK select faktur
skip
112
if eof()
go bottom
endif
thisform.tampilkan
thisform.refresh
RETURN
y. Object TERAKHIR Procedure CLICK select faktur
go bottom
if eof()
messagebox("Tidak ada record",0,"Perhatian...!")
thisform.release()
return
endif
thisform.tampilkan
thisform.refresh
RETURN
z. Object GRID1 Procedure AFTERROWCOLLCHANGE LPARAMETERS nColIndex
thisform.nofakjual.value=penjualan.nofakjual
thisform.tgljual.value=penjualan.tgljual
thisform.kodebrg.value=penjualan.kodebrg
thisform.qty.value=penjualan.qtyj
thisform.hargajual.value=penjualan.JmlJual/penjualan.qtyj
thisform.hargabeli.value=thisform.hargajual.value-
(penjualan.labakotor/penjualan.qtyj)
thisform.Labakotor.value=penjualan.labakotor
SELECT BARANG
LOCATE FOR kodebrg=trim(thisform.kodebrg.value)
thisform.namabrg.value=barang.namabrg
SELECT FAKTUR
LOCATE FOR nofakjual=trim(thisform.nofakjual.value)
thisform.nopel.value=faktur.nopel
thisform.totalbayar.value=faktur.TotalBayar
thisform.totaljual.value=faktur.Totaljual
thisform.diskon.value=faktur.diskon
thisform.totallaba.value=faktur.totallaba
thisform.JmlUang.value=faktur.JmlUang
thisform.kembalian.value=faktur.kembalian
113
SELECT pelanggan
LOCATE FOR nopel=trim(thisform.nopel.value)
thisform.namapel.value=pelanggan.namapel
RETURN
11.2 Tugas 11
1. Membuat Report Faktur Penjualan
2. Desain Report sbb :
114
XII. Praktek Visual FoxPro XII
Materi : Membuat Laporan Harian Penjualan
12.1 Disain Laporan Harian
1. Buatkan Report Laporan Harian dengan disain sbb:
2. Isi TextBox:
Per Tanggal : faktur.TglJual
No.Faktur : faktur.nofakjual
Nama Pelanggan : pelanggan.namapel
Jumlah Penjualan : faktur.totaljual
Format : Format Expression : 999,999,999
Aligment : Right
Diskon : faktur.diskon
115
Format : Format Expression : 99,999,999
Aligment : Right
Jumlah Bayar : Faktur.TotalBayar
Format : Format Expression : 999,999,999
Aligment : Right
Jumlah Piutang : Faktur.TotalLaba
Format : Format Expression : 999,999,999
Aligment : Right
Baris Summery atau SubGroup TglTran :
Jumlah Penjualan : faktur.TotalJual
Format : Format Expression : 999,999,999
Aligment : Right
Calculate : Calculation Type : SUM
Reset Based On : Group:Lapjual.TglTran
Diskon : faktur.diskon
Format : Format Expression : 99,999,999
Aligment : Right
Calculate : Calculation Type : SUM
Reset Based On : Group:Lapjual.TglTran
Jumlah Bayar : Faktur.TotalBayar
Format : Format Expression : 999,999,999
Aligment : Right
Calculate : Calculation Type : SUM
Reset Based On : Group:Lapjual.TglTran
Jumlah Piutang : Faktur.TotalLaba
Format : Format Expression : 999,999,999
Aligment : Right
Calculate : Calculation Type : SUM
Reset Based On : Group:Lapjual.TglTran
12.2 Membuat form untuk memanggil laporan harian
1. Disain Form, sbb :
116
2. Listing Program :
a. Object Form1 Procedure LOAD close data
close index
set date british
set cent on
if used("barang")
use in barang
endif
if used("faktur")
use in faktur
endif
if used("Penjualan")
use in penjualan
endif
if used("pelanggan")
use in pelanggan
endif
set defa to d:\sipbfifo\data
select a
use barang
SET ORDER TO KodeBrg
select b
USE pelanggan
SET ORDER TO TAG NOPEL
SELECT C
USE faktur
set order to tag nofakjual
SELECT d
USE penjualan
set order to tag nofakjual
return
117
b. Object Form1 Procedure ACTIVATE thisform.tgl1.day=DAY(DATE())
thisform.tgl1.month=MONTH(DATE())
thisform.tgl1.year=YEAR(DATE())
RETURN
c. Object Form1 Procedure UNLOAD close data
close index
return
d. Object KELUAR Procedure CLICK thisform.release
return
d. Object CETAK Procedure CLICK DD=thisform.tgl1.day
MM=thisform.tgl1.month
YY=thisform.tgl1.year
tgl1=str(DD,2)+"/"+str(MM,2)+"/"+str(YY,4)
TGL=ctod(tgl1)
select penjualan
LOCATE FOR tgljual=tgl
IF ! FOUND()
MESSAGEBOX("Sory tidak ada record yang bisa
ditampilkan",;
0,"Perhatian...")
RETURN
ENDIF
SELECT penjualan
SET RELATION TO kodebrg INTO barang, nofakjual INTO
faktur,;
faktur.NOPEL INTO PELANGGAN
repo form d:\sipbfifo\prg\lapharian preview FOR
TglJual=TGL
return
3. Simpan Form dengan nama File LAPHARIAN, kemudian jalankan form.
118
12.3 Tugas 12
Buatkan Report Laporan Harian pembelian (disain report mirip dengan Report Laporan
Harian Penjualan)
119
XIII. Praktek Visual FoxPro XIII
Materi : 1. Membuat Menu Program
2. Membuat Table dan Form Login
3. Membuat Program Compiler
4. Compiler File
13.1 Membuat Organisasi Menu
1. Klik page Other (lihat gambar 4.2.1)
2. Klik option menu kemudian klik tombol New
3. Pilih dan klik tombol menu
Gambar 13.1.1 Kotak dialog project manager
4. Ketik menu berikut :
Gambar 13.1.2 Menu Utama
120
5. Klik File pada baris pertama
6. Klik tombol create, kemudian buatkan sub menu berikut :
7. Pada kotak Menu level sebelah kanan, pilih Menu Bar
Kemudian Klik Master, lalu klik tombol Create dan buatkan SubMenu Master sbb:
8. Buatkan Submenu Transaksi berikut :
9. Buatkan Sub Menu Laporan sbb. :
10. Buatkan Sub Menu Laporan Penjualan sbb. :
13. Simpan Menu dengan nama MenuUtama
14. Menguji menu dengan mengklik tombol Run
121
13.2 Membuat Form Login
1. Membuat Table USER
a. Pada database SIPB buatkan table USER seperti pada gambar 13.2.1.
Gambar 13.2.1 Struktur Table USER
b. Klik Table USER, kemudian klik tombol Browse yang terletak sebelah
kanannya.
c. Setelah kebuka, klik menu Table, kemudian pilih dan klik Append New Record
(Ctrl + Y)
d. Isi nmid dengan nama depan anda
e. Isi Pswd dengan kode sandi anda
2. Membuat Form untuk Login
1. Buatkan Form seperti pada gambar 4.4.1
Gambar 4.4.1 Form Entry Login dan Password
2. Object Form1 Procedure ACTIVATE set exact on
set defa to D:\SIPBFIFO\DATA
if used('user')
use in user
endif
122
if used('tmpuser')
use in tmpuser
endif
SELECT a
USE tmpuser
SELECT b
use user
set order to tag nmid
set order to tag pswd
thisform.nmid.value=""
thisform.pswd.value=""
RETURN
3. Object Form1 Procedure UNLOAD close data
close index
RETURN
4. Object Batal Procedure Click thisform.release
retu
5. Object Login Procedure Click IF EMPTY(thisform.nmid.value)
messagebox("User Id tidak boleh
kosong...!",0,"Perhatian...")
thisform.nmid.setfocus
RETURN
ELSE
IF EMPTY(thisform.PSWD.value)
messagebox("Password tidak boleh
kosong...!",0,"Perhatian...")
thisform.pswd.setfocus
RETURN
else
seleCT user
LOCATE FOR nmid=TRIM(thisform.nmid.value)
if ! found()
messagebox("Maaf User Id Anda Belum
Terdaftar...!",0,"Perhatian...")
thisform.nmid.setfocus()
retu
123
else
set order to tag pswd
LOCATE for nmid=TRIM(thisform.nmid.value) .and.;
pswd=TRIM(thisform.pswd.value)
if ! found()
messagebox("Maaf Password Tidak
Dikenal...!",0,"Perhatian...")
thisform.pswd.setfocus()
retu
ELSE
SELECT tmpuser
DELETE ALL
SET DELETED OFF
PACK
APPEND FROM USER FOR nmid=TRIM(thisform.nmid.value)
IF tmpuser.st=1
DO d:\sipbfifo\prg\MENUUSER.MPR
ELSE
IF tmpuser.st=2
DO d:\sipbfifo\prg\MENUADMIN.MPR
ENDIF
ENDIF
thisform.release()
endif
endif
ENDIF
ENDIF
7. Simpan Form dengan nama File LOGIN
8. Uji Form dengan mengklik icon Run / !.
13.3 Membuat File Program
1. Klik page Code
2. Pilih dan klik option Program, kemudian klik tombol New
3. Ketikan program berikut : CLOSE ALL
SET TALK OFF
SET STAT OFF
SET AUTOSAVE ON
124
SET CENTURY ON
SET DATE BRITISH
SET DEFA TO D:\SIPBFIFO\DATA
PUSH MENU _MSYSMENU
MODI WINDOWS SCREEN TITLE 'DUTA FAMILIY MOTOR'
WITH _SCREEN
.VISIBLE=.T.
.WINDOWSTATE=2
.picture='D:\SIPBFIFO\Gb\LATAR1.JPG'
ENDWITH
RELEASE ALL
DO d:\SIPBFIFO\PRG\menuLogin.mpr
READ EVENTS
QUIT
4. Simpan program dengan nama SIPB
5. Jalankan program dengan meng-klik tombol Run
13.4 Compiler File
1. Klik kanan pada File Program SIPB, kemudian pilih Set Mine
2. Klik tombol Build
3. Klik Build Action : Win32 executable / CIM server (exe), seperti pada gambar
13.4.1.
Gambar 13.4.1 Build Option
125
XIV. Praktek Visual FoxPro XIV
Materi : Membuat Report Persediaan Barang
14.1 Membuat Report Persediaan Barang Metode FIFO
14.2 Membuat Form Kelola Persediaan Barang Metode FIFO
1. Form Kelola Persediaan Barang
126
2. Coding
a. Object FORM1 Procedure LOAD close data
close index
set date british
set cent on
if used("barang")
use in barang
endif
if used("detailbeli")
use in detailbeli
endif
set defa to d:\sipbfifo\data
select a
use barang
SET ORDER TO KodeBrg
select b
USE detailbeli
SET ORDER TO kodebrg
return
b. Object FORM1 Procedure UNLOAD CLOSE DATABASES
CLOSE INDEXES
RETURN
c. Object CETAK Procedure CLICK SELECT DETAILBELI
SET ORDER TO KODEBRG
IF thisform.JB.Value=1
SET FILTER TO LEFT(kodebrg,1)="B"
ELSE
IF thisform.JB.Value=2
SET FILTER TO LEFT(kodebrg,1)="S"
ELSE
MESSAGEBOX("Pilih salah satu Jenis Barang yang mau
ditampilkan !",;
0,"Perhatian...!")
RETURN
ENDIF
ENDIF
127
IF EOF()
MESSAGEBOX("Tidak ada barang yang dapat ditampilkan
!",0,"Perhatian...!")
RETURN
ENDIF
SET RELATION TO KODEBRG INTO BARANG
REPORT FORM d:\SIPBFIFO\Prg\LAPPERSEDIAAN PREVIEW
FOR STOCK>0
RETURN
d. Object KELUAR Procedure CLICK thisform.release