Anda di halaman 1dari 111

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
Tipe File Keterangan
File
.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
Tipe File Keterangan
File
.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

3. Tipe Data dan Tipe Field


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
Data biner dgn panjang tidak
Dibatasi memory yang tersedia
Blob ditentukan. Nilai Blob disimpan dalam 4 bit pada tabel
dan atau sampai 2GB file.
file memo (.fpt)
1 bit per Semua karakter, angka, simbol,
Character Teks alpanumerik
karakter dll.
-$922337203685477.5807
Currency Jumlah nilai uang 8 bit sampai dengan
$922337203685477.5807
Data kronologis yang berisi bln, tgl,
Date 8 bit 0001-01-01 s/d 9999-12-31
tahun
0001-01-01 s/d 9999-12-31,
Date Data kronologis yang berisi bln, tgl,
8 bit plus 00:00:00 a.m. s/d 11:59:59
Time tahun, jam, menit, dan detik
pm.
Logical Nilai Boolean : Benar atau Salah 1 bit True (.T.) or False (.F.)
8 bit pada
-.9999999999E+19 s/d .
Numeric Integer atau angka desimal memori; 1-20
9999999999E+20
bit pada tabel
1 bit pernilai
heksadesimal
Varbinary Nilai-nilai biner Semua nilai heksadesimal
s/d total 255
bit
Tipe data varian bisa berupa tipe data
apa saja yang dimiliki Visual FoxPro
Tergantung
bahkan termasuk nilai nul.
nilai yang Tergantung nilai yang diberikan
Variant Namu sekali nilai diberikan pada tipe
diberikan pada pada tipe varian ini
varian ini, maka tipe varian
tipe varian ini
diasumsikan sama dengan tipe data
isi/nilai tsb.
Sumber : Wahana Komputer, (2007:46)
4

Tabel 3. Tipe-tipe field dalam Visual FoxPro


Tipe Data Keterangan Ukuran Range
Character Teks alpanumerik yang tidak ingin 1 bit per
Semua karakter, angka, symbol
(Binary) diubah melaui code page karakter
Angka yang memerlu-kan tingkat +/- 4.94065645841247E-324 s/d
Double 8 bit
keakuratan dan ketelitian tinggi +/- 8.9884656743115E307
8 bit pada
-.9999999999E+19 s/d .
Float Integer atau angka desimal memori ; 1-20
9999999999E+20
bit pada tabel
Integer Nilai angka tanpa desimal 4 bit -2147483647 s/d 2147483647
Sama dengan integer sekaligus
Intiger Nilai ditentukan pada nilai
memiliki nilai yang otomatis 4 bis
(Autoinc) autoincrement Next dan Step
meningkat. Read-only
General Referensi pada OLE object 4 bit pada tabel Dibatasi memori yang tersedia
Teks alpanumerik dengan panjang
Memo yang tidak ditentukan atau 4 bit pada tabel Dibatasi memori yang tersedia
referensi pada satu blok data
Memo Memo yang tidak diubah melalui
4 bit pada tabel Dibatasi memori yang tersedia
(Binary) code page
Teks alpanumerik
Sama dengan tipe Character, 1 bit per
Varchar bedanya, field Varchar tidak karakter s/d Semua karakter
memberikan spasi tambahan untuk total 254 bit
memenuhi panjang field
1 bit per
Varchar Tipe Varchar yang tidak ingin
karakter s/d Semua karakter
(Binary) diubah melaui code page
total 254 bit
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.
5

Pada tahap penulisan kode, dituliskan kode-kode yang dilekatkan pada kontrol-
kontrol yang dipakai. Sebagai gambaran, Jika operator menekan suatu tombol yang kita
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
6

c. Methods
d. LayOut
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

 
Record maya di
Record maya di
awal tabel akhir tabel

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


Menurut tabel ASCII, ‘A’ terletak sebelum ‘B’, jadi
‘A’ > ‘B’ .F.
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} > .T. Tanggal 21 Desember 2000 memang lebih
{12/11/2000} 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. <ekspresi>
Operator
.NOT. Hasil .T. jika <ekspresi> bernilai .F.
“Tidak”
Hasil .F. jika <ekspresi> bernilai .T.
<ekspresi_1> .AND. <ekspresi_2>
Operator
.AND. Hasil berupa .T. hanya jika kedua <ekspresi> bernilai
“Dan”
.T.
Operator <ekspresi_1> .OR. <ekspresi_2>
.OR.
“Atau” 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.

Tombol-tombol
Tipe Kotak Bentuk
yang tersedia

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 16rgument 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 :
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
d. Pilih dan Klik ActiveX Control
39

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
x=0
41

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
next
42

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)
dua=substr(uang,kedua,1)
43

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
sen1=substr(uang,14,1)
44

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 o:\AFOX\susi
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:\prg\psb\data
SET DATE BRITISH
SET CENTURY ON
CLOSE DATABASES
CLOSE INDEXES
IF USED("NODAF")
USE IN NODAF
ENDIF
IF USED("Sekolah")
47

USE IN Sekolah
ENDIF
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
48

thisform.nilai.enabled=X
RETURN
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))
49

ELSE
IF n<100
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
50

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

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:\prg\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:\foxpro\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
2. Membuat Databse Sistem Informasi Penjualan Barang
3. Membuat Table Barang, Pelanggan, Faktur & Pejualan

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 Pelanggan pada Database SIPB dengan Struktur File sbb :

Gambar 8.1.2 Tabel Pelanggan


67

5. Buatkan Tabel Faktur pada Database SIPB dengan Struktur File sbb :

Gambar 8.1.3 Tabel Faktur


6. Buatkan Tabel Penjualan pada Database SIPB dengan Struktur File sbb :

Gambar 8.1.4 Tabel Penjualan

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


68

2. Procedure Program :
a. Object Form 1 Procedure LOAD
set exact on
set defa to d:\SIPB\data
* Menutup semua file yang tidak diperlukan
close data
close index
if USED("BARANG")
USE IN BARANG
endif
if USED("PENJUALAN")
USE IN PENJUALAN
ENDIF

* Membuka Tabel
SELECT A
USE PENJUALAN
SELECT B
use barang
set order to tag 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.stock.value=0
thisform.stockmin.value=0
thisform.hargadsr.value=0
thisform.hargajual.value=0
RETURN
69

e. Object Form1 Procedure NonKodeBrg


PARAMETERS keadaan
thisform.namabrg.enabled=keadaan
thisform.stock.enabled=keadaan
thisform.stockmin.enabled=keadaan
thisform.hargadsr.enabled=keadaan
thisform.hargajual.enabled=keadaan
RETURN

f. Object Form1 Procedure Tampilkan


thisform.kodebrg.value=barang.kodebrg
thisform.namabrg.value=barang.namabrg
thisform.stock.value=barang.stock
thisform.stockmin.value=barang.stockmin
thisform.hargadsr.value=barang.hargadsr
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.
70

thisform.keluar.enabled=.f.
thisform.hapus.enabled=.f.
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


if empty(thisform.KODEBRG.value)
messagebox("Kode Barang Harus Diisi !",0,;
"Perhatian...!")
thisform.KODEBRG.setfocus
return
endif
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
IF VAL(SUBSTR(TRIM(thisform.KODEBRG.Value),2,5))<1
messagebox("Mulai karakter ke 2 hrs diisi dengan;
no urut !",0+48,"Perhatian...")
thisform.KODEBRG.setfocus
RETURN
ENDIF
IF LEN(TRIM(thisform.KODEBRG.Value))<6
messagebox("Jumlah Kode harus 6 character !",0+48,;
"Perhatian...")
thisform.KODEBRG.setfocus
RETURN
ENDIF
SELECT BARANG
71

Locate for kodebrg=trim(thisform.KODEBRG.value)


If found()
thisform.grid1.setfocus()
thisform.refresh()
thisform.tampilkan()
jawab=messagebox("Kode barang tsb. sudah dipergunakan...",;
0+48,"Perhatian...")
thisform.kosongkan
thisform.KODEBRG.setfocus
return
else
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.kosongkan
thisform.NAMABRG.setfocus
thisform.grid1.enabled=.f.
endif
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,;
"Perhatian...")
thisform.stockmin.setfocus
RETURN
ENDIF
IF EMPTY(thisform.hargadsr.value)
72

messagebox("Isi dulu Harga Dasar Barang !",0,;


"Perhatian...")
thisform.hargadsr.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 stock with thisform.stock.value
repl stockmin with thisform.stockmin.value
repl hargadsr with thisform.hargadsr.value
repl hargajual with thisform.hargajual.value
thisform.grid1.setfocus
thisform.Refresh
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.
thisform.hapus.enabled=.t.
thisform.cetak.enabled=.t.
73

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=.f.
thisform.simpan.enabled=.f.
thisform.batal.enabled=.f.
thisform.perbaiki.enabled=.f.
thisform.ud.enabled=.f.
thisform.cetak.enabled=.f.
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()
messagebox("Sorry Record ini tidak bisa dihapus ?";
,0,"Barang tsb sudah digunakan dalam transaksi... ")
RETURN
ENDIF
74

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


REPORT FORM d:\SIPB\Prg\LAPBARANG PREVIEW
RETURN

n. Object PERBAIKI Procedure CLICK


thisform.perbaiki.enabled=.f.
thisform.ud.enabled=.t.
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.nonkodebrg(.t.)
thisform.kendali(.f.)
thisform.namabrg.setfocus
75

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.hargadsr.value)
messagebox("Isi dulu Harga Dasar Barang !",0,;
"Perhatian...")
thisform.hargadsr.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,"Perhatian...!")
if jawab=6
SELECT BARANG
LOCATE FOR kodebrg=TRIM(thisform.kodebrg.value)
IF FOUND()
repl namabrg with thisform.namabrg.value
repl stock with thisform.stock.value
repl stockmin with thisform.stockmin.value
repl hargadsr with thisform.hargadsr.value
repl hargajual with thisform.hargajual.value
ENDIF
ELSE
thisform.grid1.SetFocus
76

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=.t.
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
thisform.refresh
RETURN
77

r. Object BERIKUTNYA Procedure CLICK


SELECT BARANG
set order to
skip
if bof()
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.hapus.enabled=.t.
thisform.batal.enabled=.f.
thisform.Tambah.enabled=.t.
thisform.simpan.enabled=.f.
thisform.keluar.enabled=.t.
thisform.cetak.enabled=.t.
thisform.perbaiki.enabled=.t.
thisform.ud.enabled=.f.
thisform.kodebrg.enabled=.f.
thisform.nonkodebrg(.f.)
thisform.kendali(.t.)
thisform.tampilkan
RETURN
78

8.3 Tugas 8
1. Buatkan Form Untuk Mengelola Data Pelanggan dengan disain seperti pada
Gambar 8.3.1.

Gambar 8.3.1 Disain Form Kelola Data Pelanggan


79

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 Persediaan Barang Sparepart. Dengan
disain sbb.:

Gambar 9.1.1 Report Daftar Persediaan Barang Sparepart

Isi TextBox :
Kode Barang : barang.kodebrg
Nama Barang : barang.namabrg
Jumlah Unit : barang.stock,
Format : Format Expression : 99,999
Type : Character
Aligment : Right
80

Harga Satuan : barang.hargadsr,


Format : Format Expression : 99,999,999
Type : Character
Aligment : Right
Jumlah Harga : barang.hargadsr*barang.stock,
Format : Format Expression : 999,999,999
Type : Character
Aligment : Right
Pada Baris Group Footer :
Jumlah Barang :
"Jumlah Barang "+IIF(LEFT( Barang.kodebrg,1)="B","Bubutan","Sparepart")
Jumlah Harga : barang.hargadsr*barang.stock,
Format : Format Expression : 999,999,999
Type : Character
Aligment : Right
Calculate : Calculation Type : Sum
Reset Based On : Group Left(barang.kodebrg,1)
Pada Baris Summary :
Jumlah Harga : barang.hargadsr*barang.stock,
Format : Format Expression : 999,999,999
Type : Character
Aligment : Right
Calculate : Calculation Type : Sum
Reset Based On : Report

2. Simpan Report tersebut dengan nama File LAPBARANG

9.2 Tugas 9
1. Buatkan Report Daftar Pelanggan dengan disain seperti pada gambar 9.3.1 :
81

Gambar 9.3.1 Report Daftar Pelanggan


82

X. Praktek Visual FoxPro X

Materi :
1. Membuat Temporary File
2. Membuat File Transaksi Penjualan

10.1 Membuat Temporary File


Buatkan Tabel NoFakJual pada Free Table dengan struktu file sbb :

10.2 Membuat Form Transaksi Penjualan


1. Buatkan Form Kelola Data Barang dengan disain seperti pada Gambar 9.2.1:
83

10.3 Listing Program Transaksi Penjualan


a. Object Form1 Procedure LOAD
close index
close data
set date british
set cent on
set defa to d:\SIPB\data
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 kodebrg
set order to tag namabrg
select 2
use pelanggan
set order to tag nopel
set order to tag namapel
select 3
use faktur
set order to tag nofak
select 4
use penjualan
set order to tag nofak
select 5
use nofakjual
RETURN
84

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.nofak.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.bayar.Enabled=r
thisform.piutang.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
85

h. Object Form1 Procedure KOSONGKAN


thisform.namabrg.value=""
thisform.qty.value=0
thisform.kodebrg.value=""
thisform.hargajual.value=0
thisform.totjualsp.value=0
thisform.nopel.value=""
thisform.namapel.value=""
thisform.diskon.value=0
thisform.bayar.value=0
thisform.piutang.value=0
RETURN

i. Object Form1 Procedure TAMPILKAN


select faktur
thisform.nofak.value=faktur.nofak
thisform.nopel.value=faktur.nopel
thisform.tgljual.value=faktur.tgltran
thisform.totjualsp.value=faktur.totjualsp
thisform.diskon.value=faktur.diskon
thisform.bayar.value=faktur.bayar
thisform.piutang.value=faktur.piutang

select pelanggan
locate for nopel=TRIM(thisform.nopel.value)
thisform.namapel.value=pelanggan.namapel

SELECT penjualan
SET FILTER TO nofak=TRIM(thisform.nofak.value)
thisform.refresh
GO top
thisform.kodebrg.value=penjualan.kodebrg
thisform.qty.value=penjualan.qty
thisform.hargajual.value=penjualan.jumlah/penjualan.qty
SELECT barang
locate for kodebrg=TRIM(thisform.kodebrg.value)
thisform.namabrg.value=barang.namabrg
thisform.hargadsr.value=barang.hargadsr
86

thisform.kembalian.enabled=.t.
thisform.hitung.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


SET FILTER TO 
SET RELATION to
thisform.kembalian.enabled=.f.
thisform.hitung.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       

k. Object TAMBAH Procedure CLICK


public LNO
thisform.kosongkan
select barang
87

set order to tag namabrg

sele nofakjual
go bottom
if nofakjual.tgltran<>date()
   dele all
   pack
   append blank
   LNO=1
  else
   LNO=nofakjual.no+1 
endif   
tgl=day(date())
bln=month(date())
th=year(date())
IF tgl<10
   vtgl="0"+LTRIM(STR(tgl,2))
   ELSE
   vtgl=LTRIM(STR(tgl,2))
ENDIF
 IF bln<10
   vbln="0"+LTRIM(STR(bln,2))
   ELSE
   vbln=LTRIM(STR(bln,2))
ENDIF  
IF LNO<10
   vno="000"+LTRIM(STR(LNO,4))
   ELSE
   IF LNO<100
   vno="00"+LTRIM(STR(LNO,4))
    ELSE
    IF LNO<1000
   vno="0"+LTRIM(STR(LNO,4))
   ELSE
   vno=LTRIM(STR(LNO,4))
   ENDIF
 ENDIF
ENDIF
thisform.nofak.value=vtgl+vbln+right(str(th,4),2)+vno
88

SELECT penjualan
SET FILTER TO NOFAK=TRIM(thisform.nofak.Value)
thisform.refresh
thisform.tgljual.value=date()
thisform.kembalian.enabled=.f.
thisform.hitung.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.)

SELECT pelanggan
LOCATE FOR UPPER(namapel)="KONSUMEN UMUM"
thisform.nopel.Value=pelanggan.nopel
thisform.namapel.Value=pelanggan.namapel
thisform.namapel.setfocus
RETURN         

l. 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

m. Object KODEBRG Procedure LOSTFOCUS


IF EMPTY(thisform.kodebrg.value)
89

   thisform.namabrg.value=""
   thisform.hargadsr.value=""
   thisform.hargajual.value=""
   thisform.kodebrg.setfocus
   return
ENDIF
SELECT BARANG
LOCATE FOR KODEBRG=TRIM(thisform.kodebrg.value)
IF FOUND()
thisform.namabrg.value=barang.Namabrg
thisform.hargadsr.value=barang.hargadsr
thisform.hargajual.value=barang.hargajual
thisform.qty.value=1
ELSE
thisform.namabrg.value=""
thisform.hargadsr.value=""
thisform.hargajual.value=""
thisform.kodebrg.setfocus
ENDIF
thisform.aktif(.f.)
thisform.hitung.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.hitung.setfocus
return

n. Object NAMABRG Procedure INTERACTIVECHANGE


thisform.kodebrg.value=barang.kodebrg
thisform.hargadsr.value=barang.hargadsr
thisform.hargajual.value=barang.hargajual
thisform.qty.value=1
thisform.aktif(.f.)
thisform.hitung.Enabled=.t.
thisform.simpan.Enabled=.f.
thisform.tambah.Enabled=.f.
90

thisform.batal.Enabled=.f.
thisform.keluar.Enabled=.f.
thisform.cetak.Enabled=.f.
thisform.kendali(.f.)
return

o. Object HITUNG Procedure CLICK


if EMPTY(thisform.nofak.Value)
   messagebox("Anda Harus klik dulu tombol tambah [+]”;
   +chr(13)+”sebelum memulai ransaksi!",;
   0,"Perhatian...")
   thisform.hitung.enabled=.f.
   thisform.keluar.enabled=.t.
   thisform.tambah.enabled=.t.
   thisform.tambah.setfocus
   RETURN
ENDIF
sele barang
locate for namabrg=TRIM(thisform.namabrg.value)
if barang.STOCK<thisform.qty.value
    IF barang.STOCK=0
       messagebox("Stock Barang Kosong",0+64,"Periksa 
Stock Barang")
      else 
       messagebox("Stock Barang Kurang",0+64,"Periksa 
Stock Barang")
   endif
   thisform.qty.value=barang.stock
   thisform.qty.setfocus
   return
endif   
jml=thisform.hargajual.value*thisform.qty.value
thisform.totjualsp.value=thisform.totjualsp.value+jml

sele penjualan
if thisform.qty.value>0 .and. thisform.hargajual.value>0
appe blank
REPLACE Nofak with thisform.Nofak.value
REPLACE kodebrg with thisform.kodebrg.value
91

REPLACE qty with thisform.qty.value
REPLACE jumlah with 
thisform.hargajual.value*thisform.qty.value
SET FILTER TO Nofak =TRIM(thisform.Nofak.value)
thisform.refresh()
ENDIF

sele barang
locate for namabrg=TRIM(thisform.namabrg.value)
if thisform.qty.value>0 .and. thisform.hargajual.value>0
qty1=barang.stock
qty1=qty1­thisform.qty.value
REPLACE barang.stock with qty1
endif
thisform.bayar.value=thisform.totjualsp.value
thisform.namabrg.value=""
thisform.kodebrg.value=""
thisform.qty.value=0
thisform.hargajual.value=0
thisform.aktif(.f.)
thisform.aktif3(.t.)
thisform.hitung.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.)
IF TRIM(UPPER(thisform.namapel.value))="KONSUMEN UMUM"
   thisform.piutang.enabled= .F.
  ELSE
   thisform.piutang.enabled= .t.
endif   
thisform.kodebrg.setfocus
RETURN

p. Object BATAL Procedure CLICK


IF EMPTY(THISFORM.kodebrg.Value) .OR.;
   EMPTY(THISFORM.namabrg.Value) .OR.;
92

   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 barang
  LOCATE FOR kodebrg=TRIM(thisform.kodebrg.Value)
  IF FOUND()
     if thisform.qty.value>0
        qty1=barang.stock
        qty1=qty1+thisform.qty.value
        repl barang.stock with qty1
     endif
  ENDIF  
 sele penjualan 
  loca for penjualan.kodebrg=TRIM(thisform.kodebrg.value) .and.;
  nofak=TRIM(thisform.nofak.Value)
  IF FOUND()
     ljml=thisform.hargajual.value*thisform.qty.value
      dele FOR penjualan.kodebrg=TRIM(thisform.kodebrg.value) .and. ;
      nofak=TRIM(thisform.nofak.Value)
  ELSE
    ljml=0
  ENDIF
  thisform.totjualsp.value=thisform.totjualsp.value­ljml
  thisform.bayar.value=thisform.totjualsp.value
ENDIF
IF thisform.totjualsp.Value=0
   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.
   thisform.keluar.Enabled=.t.
93

   thisform.cetak.Enabled=.f.
   thisform.kendali(.t.)
   thisform.refresh
 else
   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
RETURN
q. Object BATAL Procedure RIGHTCLICK
thisform.keluar.enabled=.t.

r. Object SIMPAN Procedure CLICK


if thisform.bayar.value>thisform.totjualsp.value
   messagebox("Maaf Anda Keliru Memasukan Jumlah Bayar...",;
   0,"Perhatian...")
   thisform.bayar.setfocus
   retu
ENDIF
IF TRIM(UPPER(thisform.namapel.value))="KONSUMEN UMUM" .and.;
   thisform.piutang.value>0
   messagebox("Pembeli Umum harus kontan...",0,"Perhatian...")
   thisform.bayar.setfocus
   RETURN
ENDIF    
if thisform.totjualsp.value>0
   select faktur
   locate for nofak=trim(thisform.nofak.value)
   if ! found()
      append blank
   endif
   repl nofak with thisform.nofak.value
94

   repl totjualsp with thisform.totjualsp.value
   repl tgltran with thisform.tgljual.value
   repl nopel with thisform.nopel.value
   repl diskon with thisform.diskon.value 
   repl bayar with thisform.bayar.value
   repl piutang with thisform.piutang.value

   sele NOfakJUAL
   go bottom
   repl tgltran with thisform.tgljual.value
   repl no with LNO
ENDIF
thisform.refresh
thisform.kembalian.enabled=.t.
thisform.hitung.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

s. Object KEMBALIAN Procedure CLICK


do form d:\prg\sipb\prg\hitungkembalian.scx
thisform.kembalian.enabled=.f.
thisform.hitung.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.
95

thisform.kendali(.t.)
thisform.aktif(.f.)
thisform.aktif1(.f.)
thisform.aktif2(.f.)
thisform.aktif3(.f.)
RETURN

t. Object CETAK Procedure CLICK


SELECT pelanggan
SET ORDER TO NOPEL
SELECT barang
SET ORDER TO KODEBRG   
select penjualan
SET RELATION TO nofak INTO faktur,kodebrg INTO barang,;
faktur.Nopel INTO Pelanggan
REPORT form d:\prg\SIPB\prg\kwjual PREVIEW
thisform.kembalian.enabled=.t.
thisform.hitung.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 penjualan
set dele off
PACK
SET RELATION TO
SET FILTER TO 
thisform.release
RETURN
96

v. Object GRID1 Procedure AfterRowColChange


LPARAMETERS nColIndex
thisform.kodebrg.value=penjualan.kodebrg
thisform.qty.value=penjualan.qty
thisform.hargajual.value=penjualan.jumlah/penjualan.qty
SELECT BARANG
LOCATE FOR kodebrg=trim(thisform.kodebrg.value)
thisform.hargadsr.value=barang.hargadsr
thisform.namabrg.value=barang.namabrg
RETURN

w. 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
x. Object SEBELUMNYA Procedure CLICK
select faktur
skip -1
if bof()
go top
endif
thisform.tampilkan
thisform.refresh
RETURN

y. Object BERIKUTNYA Procedure CLICK


select faktur
skip
if eof()
go bottom
endif
thisform.tampilkan
thisform.refresh
97

RETURN

z. 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

10.4 Tugas 10
1. Buatkan Tabel PEMASOK pada Database SIPB dengan struktur file sbb:

2. Buatkan Tabel FAKTURB pada Database SIPB dengan struktur file sbb:
98

3. Buatkan Tabel PEMBELIAN pada Database SIPB dengan struktur file sbb:

4. Buatkan Tabel NoFakBeli pada Free Table dengan struktur file sbb:

6. Buatkan Form PEMBELIAN dengan disain sbb:


99
100

XI. Praktek Visual FoxPro XI

Materi :
Membuat Report Faktur Penjualan

11.1 Disain Report Faktur


1. Buatkan Report Faktur Penjualan dengan disain sbb:

2. Isi TextBox:
Nomor Pelanggan : “Nopel : “+faktur.nopel
Nama Pelanggan : pelanggan.namapel
Nomor Faktur : ltrim(faktur.nofak)
101

Nama Barang : barang.namabrg


Quantity : penjualan.qty
Format : Format Expression : 9,999
Aligment : Right
Harga Satuan : penjualan.jumlah/ penjualan.qty
Format : Format Expression : 99,999,999
Aligment : Right
Jumlah : penjualan.jumlah
Format : Format Expression : 999,999,999
Aligment : Right
Total Transaksi : faktur.totjualsp
Format : Format Expression : 999,999,999
Aligment : Right
Diskon : faktur.diskon
Format : Format Expression : 99,999,999
Aligment : Right
Total Bayar : faktur.bayar
Format : Format Expression : 999,999,999
Aligment : Right
Sisa/Piutang : faktur.piutang
Format : Format Expression : 99,999,999
Aligment : Right
Tanggal Titik Mangsa : date()

3. Simpan dengan nama File Kuitansi, kemudian jalankan report dari form transaksi
penjualan.

11.2 Tugas 11
Buatkan Report kuitansi pembelian (disain report mirip dengan Report kuitansi
penjualan)
102

XII. Praktek Visual FoxPro XII

Materi :
Membuat Laporan Harian Penjualan

12.1 Disain Laporan Harian


1. Copy-kan File Free Table TMPJUAL ke LAPJUAL dan LAPJUAL1
2. Perbaiki idex-nya, samakan dengan file TMPJUAL
3. Buatkan Report Laporan Harian dengan disain sbb:

2. Isi TextBox:
Per Tanggal : faktur.tgltran
No.Faktur : faktur.nofak
Nama Pelanggan : pelanggan.namapel
Jumlah Penjualan : faktur.totjualsp
Format : Format Expression : 999,999,999
Aligment : Right
103

Diskon : faktur.diskon
Format : Format Expression : 99,999,999
Aligment : Right
Jumlah Bayar : Faktur.Bayar
Format : Format Expression : 999,999,999
Aligment : Right
Jumlah Piutang : Faktur.Piutang
Format : Format Expression : 999,999,999
Aligment : Right

Baris Summery atau SubGroup TglTran :


Jumlah Penjualan : faktur.TotJualSP
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.Bayar
Format : Format Expression : 999,999,999
Aligment : Right
Calculate : Calculation Type : SUM
Reset Based On : Group:Lapjual.TglTran
Jumlah Piutang : Faktur.Piutang
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 :
104

2. Listing Program :
a. Object Form1 Procedure ACTIVATE
close data
close index
set date british
set cent on
if used("faktur")
   use in faktur
endif   
if used("pelanggan")
   use in pelanggan
endif
*if used('tmpuser')
*   use in tmpuser
*endif
set defa to d:\prg\sipb\data
select a
use faktur
set order to tag nofak
set order to tag tgltran
reindex
select b
USE pelanggan
SET ORDER TO TAG NOPEL
*Select c
*Use tmpuser
thisform.tgl1.day=DAY(DATE())
thisform.tgl1.month=MONTH(DATE())
thisform.tgl1.year=YEAR(DATE())
thisform.tgl1.setfocus()
return
105

b. Object Form1 Procedure UNLOAD


close data
close index
return

c. Object KELUAR Procedure CLICK


thisform.release()
return

d. Object CETAK Procedure CLICK


tgl1=thisform.tgl1.day
bln1=thisform.tgl1.month
thn1=thisform.tgl1.year
tgl1a=TRIM(str(tgl1,2))+"/"+TRIM(str(bln1,2))
+"/"+str(thn1,4)
tgla=ctod(tgl1a)
select faktur
SET FILTER TO tgltran=tgla
GO botto
IF EOF()
   MESSAGEBOX("Sory tidak ada record yang bisa 
ditampilkan",;
   0,"Perhatian...")
   RETURN
ENDIF
SET RELATION TO NOPEL INTO PELANGGAN
repo form d:\prg\sipb\prg\laphariansp preview  
return

3. Simpan Form dengan nama File LAPHARIANSP, kemudian jalankan form.

12.3 Tugas 12
Buatkan Report Laporan Harian pembelian (disain report mirip dengan Report Laporan
Harian Penjualan)
106

XIII. Praktek Visual FoxPro XIII

Materi :
Membuat Menu Program

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

5. Klik File pada baris pertama


6. Klik tombol create, kemudian buatkan sub menu berikut :
107

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

13.2 Membuat Form Login


1. Membuat Table USER
a. Pada database SIPB buatkan table USER seperti pada gambar 13.2.1.
108

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:\PRG\SIPB\DATA
if used('user')
   use in user
endif
109

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
sele user
LOCATE FOR nmid=TRIM(thisform.nmid.value)
if ! found()
   messagebox("Maaf User Id Anda Belum Terdaftar...!",;
   0,"Perhatian...")
   thisform.nmid.setfocus()
   retu
 else
   set order to tag pswd
110

   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:\prg\sipb\prg\MENUUTAMA2.MPR
         ELSE
         IF tmpuser.st=2
            DO d:\prg\sipb\prg\MENUUTAMA.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
SET CENTURY ON
SET DATE BRITISH
SET DEFA TO D:\PRG\SIPB\DATA
PUSH MENU _MSYSMENU
111

MODI WINDOWS SCREEN TITLE 'DUTA FAMILIY MOTOR'


WITH _SCREEN
.VISIBLE=.T.
.WINDOWSTATE=2
.picture='D:\PRG\SIPB\Gb\LATAR1.JPG'
ENDWITH
RELEASE ALL
DO d:\PRG\SIPB\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

Anda mungkin juga menyukai