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 kontrolkontrol 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 .app .exe .pjt .dct .dcx .fpt .idx .cdx Ekstensi File .qpr .sct .vcx .vct .frt .fxp .h .mnt .mpr .mpx .err
Tipe File Generated Application Executeable program Project memo Database memo Database index Table memo Single index Compound index Tipe File Generated query program Form memo Visual class library Visual class library memo Report memo Compiled program Header file Menu memo Generated menu program Compiled menu program Compilation error
Sumber : Wahana Komputer, (2007:21)
3. Tipe Data dan Tipe Field
Keterangan Aplikasi yang hanya bisa dijalan-kan dalam Visual FoxPro Aplikasi/program yang siap dijalankan File memo project File memo database File index database File memo table Index tunggal Kumpulan satu atau lebih index tunggal Keterangan File query File memo form File library kelas Visual FoxPro File memo library kelas Visual PoxPro File memo report Visual FoxPro File program yang telah dikompilasi File header biasanya digunakan intern di dalam pengkodean File memo menu Visual FoxPro File menu yang bisa dijalankan File menu yang telah dikompilasi File penyimpanan hasil kesalahan yang terjadi saat kompilasi program/aplikasi
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
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 Variant Namu sekali nilai diberikan pada tipe diberikan pada diberikan 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) 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 Angka yang memerlu-kan tingkat keakuratan dan ketelitian tinggi
1 bit per karakter
Semua karakter, angka, symbol
8 bit
+/- 4.94065645841247E-324 s/d +/- 8.9884656743115E307
Double Float Integer Intiger (Autoinc) General Memo Memo (Binary)
Varchar
Varchar (Binary)
Integer atau angka desimal
8 bit pada -.9999999999E+19 s/d memori ; 1-20 .9999999999E+20 bit pada tabel 4 bit -2147483647 s/d 2147483647
Nilai angka tanpa desimal Sama dengan integer sekaligus memiliki nilai yang otomatis 4 bis meningkat. Read-only Referensi pada OLE object 4 bit pada tabel Teks alpanumerik dengan panjang yang tidak ditentukan atau 4 bit pada tabel referensi pada satu blok data Memo yang tidak diubah melalui 4 bit pada tabel code page Teks alpanumerik Sama dengan tipe Character, 1 bit per bedanya, field Varchar tidak karakter s/d memberikan spasi tambahan untuk total 254 bit memenuhi panjang field 1 bit per Tipe Varchar yang tidak ingin karakter s/d diubah melaui code page total 254 bit
Nilai ditentukan pada nilai autoincrement Next dan Step Dibatasi memori yang tersedia Dibatasi memori yang tersedia Dibatasi memori yang tersedia
Semua karakter
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 kontrolkontrol 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 maya di awal tabel
Record 3
Record 4
Record N
EOF
Record maya di 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
ENDIF Dalam hal ini, berupa ekspresi logika, yang bernilai .T. (benar) atau .F. (salah). Apabila bernilai .T., maka akan dijalankan. Sebaiknya, jika bernilai .F., tidak akan dijalankan. Selain bentuk di atas, juga terdapat bentuk seperti berikut : IF ELSE ENDIF Pada bentuk ini, dijalankan jika bernilai .T. dijalankan jika 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 < > = == <> atau # <= atau =< >= atau => $
Keterangan Kurang dari Lebih besar dari Sama dengan Tepat sama dengan (bermanfaat untuk pembandingan string karakter) Tidak sama dengan Kurang dari atau sama dengan 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
‘A’ > ‘B’
.F.
‘A’ < ‘a’ 2>1 “Yogya”=”YOGYA” “ABCD” = “ABC” “ABCD” = “ABC” “ABCD” = = “ABC”
.T. .T. .F. .T. .F. .F.
“AB” $ “ABCD” “BC” $ “ABCD” “ABCD” $ “AB” {21/12/2000} {12/11/2000}
.T. .T. .F. .T.
>
Keterangan Menurut tabel ASCII, ‘A’ terletak sebelum ‘B’, jadi nilai ‘A’ lebih kecil daripada ‘B’ Menurut tabel ASCII, ‘A’ terletak sebelum ‘a’ Nilai 2 memang lebih besar daripada 1 Hurup kecil berbeda dengan hurup kapital Jika SET EXACT dalam keadaan OFF Jika SET EXACT dalam keadaan ON Selalu menghasilkan .F., tidak tergantung pada keadaan SET EXACT String “AB” ada pada “ABCD” String “BC” ada pada “ABCD” String “ABCD” tidak ada pada string “AB” 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
.NOT.
Operator “Tidak”
.AND.
Operator “Dan”
.OR.
Operator “Atau”
Format .NOT. <ekspresi> Hasil .T. jika <ekspresi> bernilai .F. Hasil .F. jika <ekspresi> bernilai .T. <ekspresi_1> .AND. <ekspresi_2> Hasil berupa .T. hanya jika kedua <ekspresi> bernilai .T. <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(,<ekspresi_1>,<ekspresi_2>) Fungsi IIF memberikan nilai <ekspresi_1> jika bernilai .T., atau nilai <ekspresi_2> jika 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 CASE OTHERWISE ENDCASE Dimana : Bila bernilai .T., maka saja yang akan dijalankan.
14
Bilai bernilai .T., maka saja yang akan dijalankan. hanya akan dijalankan sekiranya tidak ada yang bernilai .T. Bagian OTHERWISE bisa tidak disertakan. Jika bagian ini tidak disertakan, dan tak satupun 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(, [,[<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
0
OK
1
OK, Cancel
2
Abort, Retry, Ignore
3
Yes, No, Cancel
Bentuk
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 1 2 3 4 5 6 7
Tombol yang dipilih OK Cancel Abort Retry Ignore Yes 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 Dalam hal ini, 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. 2. 3. 4. 5.
Tahapan pembuatan form Perangkat untuk pembuatan form Membuat label, text box, dan tombol command pada form Mengatur properti 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
1.3
pada toolbar Standard
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
86 71 56 41 0
- 100 - 85 - 70 - 55 - 40
AM
HM
4 3 2 1 0
A B C D 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. 2. 3. 4. 5.
2.1
Tahap pembuatan form Penggunaan fasilitas Option Group & Check Box Penggunaan Perintah IF Penggunaan Perintah Do Case Menyimpan, Menguji dan Menutup form
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 Interactivechange object Gol 7. Mengisi Control Field Entry Text2 dengan Formula a. Double klik Control Text2 b. Cari dan pilih Procedure InteractiveChange
dari
Procedure
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
2.3
pada toolbar Standard
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, InteractiveChange, lalu ketik procedure berikut :
kemudian
pilih
procedure
pilih
procedure
if thisform.tengah.value=1 thisform.gbtengah.picture=thisform.image1.picture else thisform.gbtengah.picture="" endif 9. Double Klik control CheckBox Kanan, InteractiveChange, lalu ketik procedure berikut :
kemudian
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. 2. 3. 4. 5.
3.1
Tahap pembuatan form Penggunaan fasilitas Olecontrol Penggunaan Perintah DO WHILE Penggunaan Perintah FOR NEXT Menyimpan, Menguji dan Menutup form
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. g. h. i. j.
Klik tombol Ok Pilih dan klik control View Classes pada Form Controls Toolbar Pilih dan klik ActiveX Controls Pilih dan klik Control Microsoft ProgressBar Control, Version 5.0 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 REPLACE REPLACE REPLACE REPLACE
tgldaf WITH CTOD(vtgl) NoDaf WITH thisform.nodaf.Value Nama WITH thisform.nama.Value asalsek WITH thisform.asalsek.Value 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. 2. 3.
Buat file Project dengan nama TGS6 Buat file Database dengan nama DATATGS6 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 VIP KELAS 1 KELAS 2 KELAS 3 Jumlah Bayar = Lama Rawat * Tarip
VII.
QUIZ
250,000 300,000 200,000 100,000 50,000
66
VIII.
Praktek Visual FoxPro VIII
Materi : 1. 2. 3. 4.
Membuat Project File Sistem Informasi Penjualan Barang Metode FIFO Membuat Databse Sistem Informasi Penjualan Barang Membuat Table Barang, Pemasok, Pembelian dan DetailBeli 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 Harga Satuan : barang.hargaJual, Format : Format Expression Type Aligment
: Right : 99,999,999 : Character : 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 ; 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 loca for detailbeli.kodebrg=TRIM(thisform.kodebrg.value) .and.
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.valuethisform.diskon.value thisform.jmluang.value=thisform.totbayar.value thisform.kembalian.value=thisform.jmluang.valuethisform.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 No.Faktur Nama Pelanggan Jumlah Penjualan
Diskon
: faktur.TglJual : faktur.nofakjual : pelanggan.namapel : faktur.totaljual Format : Format Expression Aligment : faktur.diskon
: 999,999,999 : Right
115
Format
Jumlah Bayar
Jumlah Piutang
: Format Expression Aligment : Faktur.TotalBayar Format : Format Expression Aligment : Faktur.TotalLaba Format : Format Expression Aligment
Baris Summery atau SubGroup TglTran : Jumlah Penjualan : faktur.TotalJual Format : Format Expression Aligment Calculate : Calculation Type Reset Based On Diskon : faktur.diskon Format : Format Expression Aligment Calculate : Calculation Type Reset Based On Jumlah Bayar : Faktur.TotalBayar Format : Format Expression Aligment Calculate : Calculation Type Reset Based On Jumlah Piutang : Faktur.TotalLaba Format : Format Expression Aligment Calculate : Calculation Type Reset Based On
: 99,999,999 : Right : 999,999,999 : Right : 999,999,999 : Right
: 999,999,999 : Right : SUM : Group:Lapjual.TglTran : 99,999,999 : Right : SUM : Group:Lapjual.TglTran : 999,999,999 : Right : SUM : Group:Lapjual.TglTran : 999,999,999 : Right : SUM : 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