Studi Kasus Pemrograman Delphi
Studi Kasus Pemrograman Delphi
Spesifikasi Software
Dapat mengelola data Barang, Pelanggan, Supplier, dan Transaksi Penjualan. Untuk setiap pengolahan data harus tersedia fasilitas Penambahan, Pengeditan, Penghapusan dan Pencarian data. Dapat melakukan operasi penjualan barang. Dapat mencetak Laporan Barang, Pelanggan, Supplier, dan Penjualan baik keseluruhan atau berdasarkan kriteria tertentu
Struktur Database
Berdasarkan spesifikasi software, dapat disimpulkan bahwa sistem yang akan dibangun terdiri dari data berikut : Data Barang Data Pelanggan Data Supplier Data Penjualan
Data Barang
Spesifikasi untuk data Barang Kode barang harus dapat dimasukan dengan menggunakan pengkodean Barcode Data barang harus menampung gambar produk Harga dibedakan menjadi HargaBeli dan HargaJual Data barang harus dapat digunakan untuk membuat rencana penambahan barang ketika stok telah menipis. Hal ini bisa dilakukan dengan membuat field Stok dan StokMinimal. Dapat melakukan pencarian pada field Kode, Nama, Harga Jual dan Stok.
Disusun Oleh : Andri Heryandi, S.T.
Field Kode menggunakan tipe AlphaNumeric (A) dengan panjang 13 Karakter, sesuai dengan aturan Barcode EAN (standar pengkodean barcode untuk produk retail).
Indexed Field
Nama
Unique Maintained
IdxHargaJual HargaJual
IdxStok
Stok
Untuk menambahkan Secondary Index pada suatu tabel paradox, caranya adalah :
Buka Database Desktop Klik Tools Utilities Restructure, cari file Barang.DB, klik Open Di Table Properties, pilih Secondary Index Klik tombol Define, untuk membuat Secondary Index. Pilih Field yang akan diindex dan pilih IndexOption-nya. Klik tombol OK. Isi IndexName-nya sesuai dengan Nama Index. Klik OK. Jika telah selesai, klik tombol Save untuk menyimpan hasil restruktur tabel.
Data Supplier
Spesifikasi untuk data Supplier Setiap supplier memiliki kode yang bersifat unik berupa angka yang terus bertambah (autoincrement) Data yang harus disimpan terdiri dari Nama Supplier, Alamat, Kota, No Telepon, Fax, dan EMa
Indexed Field
Nama Kota
Unique Maintained
IdxEMail
Data Pelanggan
Spesifikasi untuk data pelanggan Setiap pelanggan memiliki kode yang bersifat unik berupa angka yang terus bertambah (autoincrement) Data yang harus disimpan terdiri dari Nama Pelanggan, Alamat, Kota, No Telepon, Fax, dan EMail.
Indexed Field
Nama Kota
Unique Maintained
IdxEMail
Data Penjualan
Spesifikasi untuk data Penjualan Sebuah faktur memiliki nomor faktur berupa angka yang terus bertambah (autoincrement) Sebuah faktur boleh terdiri dari lebih dari 1 item penjualan. Ini menandakan bahwa kita memiliki 2 tabel yaitu tabel penjualan (Faktur) dan tabel Isi Faktur (Detail Penjualan) yang mempunyai relasi One-To-Many (satu ke banyak) Data yang disimpan dalam faktur terdiri dari pelanggan, tanggal dan waktu transaksi, total pembayaran. Data yang disimpan dalam item faktur adalah data barang, harga, qty.
Disusun Oleh : Andri Heryandi, S.T.
Pada field NomorPenjualan dan KodeBarang pada kolom Key keduanya diisi *. Itu artinya primary key pada tabel ini merupakan kombinas dari 2 field yaitu Nomor dan KodeBarang. Ini akan mengakibatkan tidak boleh ada NomorPenjualan dan KodeBarang yang sama keduanya.
Name : FUtama (Form Utama) Caption : Program Penjualan PT. Sweet Water
Simpan form utama dengan mengklik File Save atau Save As. Simpan dengan nama file UFUtama.pas (Unit Form Utama) di folder yang telah dibuat. Simpan project dengan mengklik File Save Project As. Simpan dengan nama file Penjualan.dp
Disusun Oleh : Andri Heryandi, S.T.
Data Module digunakan untuk memusatkan komponen-komponen non visual (komponen yang ketika dirun tidak terlihat di form seperti komponen database, dialog, dan lain-lain) Langkah membuat Data Module, adalah :
Klik File New Data Module Klik Data Module, ganti property Name dengan DM (agar lebih singkat) Simpan data module dengan mengklik File Save. Simpan dengan nama file UDM.pas (Unit Data Module
Disusun Oleh : Andri Heryandi, S.T.
Tempatkan sebuah komponen TTable ke Data Module DM. Isi properti tersebut
DatabaseName TableName Name Active
2.
: TBarang : DsBarang
3.
Untuk mempermudah dalam mengakses field, buatlah komponenkomponen fieldnya dengan cara :
Double klik di table TBarang Klik kanan di Field Editor, klik Add All Fields
Disusun Oleh : Andri Heryandi, S.T.
Caption Name
Simpan form tersebut. Klik File Save. Simpan dalam nama file UFBarang.pas. Karena form ini akan menggunakan data dari TBarang yang ada di data module, maka form ini harus dikenalkan dengan data modul DM dengan cara File Use Unit. Pilih file UDM.pas, kemudian klik tombol OK.
5.
DBNavigator
TTambah TEdit THapus TLaporan
Panel3 TTutup
TCari
Panel2
Name Caption Align Name Caption Align Name Caption Align Name DataSource Align
Name DataSource VisibleButton Name Caption Name Caption Name Caption Name Caption
: DBNavigator1 : DM.DsBarang : nbFirst, nbPrior, nbNext, nbLast : TTambah : Tambah : TEdit : Edit : THapus : Hapus : TLaporan : Laporan
: TTutup : Tutup
7.
3.
4.
10.
15.
12.
Name Caption
Name Caption
16.
13.
end;
end;
end;
end;
'Kode Barang : '+DM.TBarangKode.value+#13+ 'Nama Barang : '+DM.TBarangNama.value+#13+#13+ 'akan dihapus?'; if MessageDlg(Pesan,mtConfirmation,[mbYes,mbNo],0)=mrYes then begin DM.TBarang.Delete; end; end;
Buatlah sebuah form yang akan digunakan untuk pengisian data barang, baik untuk penambahan data atau pengeditan data. Langkah yang dilakukan adalah :
Buat form baru. Klik File New Form Atur property form tersebut dengan :
15.
DBEdit1, aturpropert :
7.
DataSource DataField DataSource DataField DataSource DataField DataSource DataField DataSource DataField DataSource DataField
: DM.DsBarang : Kode
8.
2.
DBEdit2, aturpropert :
: DM.DsBarang : Nama : DM.DsBarang : HargaBeli : DM.DsBarang : HargaJual : DM.DsBarang : Stok : DM.DsBarang : StokMinimal
9.
3.
DBEdit3, aturpropert :
10.
4.
DBEdit4, aturpropert :
11.
12.
5.
DBEdit5, aturpropert :
DBImage1, atur property : DataSource : DM.DsBarang DataField : Gambar OpenPictureDialog1. Ada di tab komponen Dialog. TSimpan (TBitBtn), atur property : Caption : Simpan TBatal (TBitBtn), atur property : Caption : Batal TBrowse (TBitBtn), atur property : Caption : Browse TPaste (TBitBtn), atur property : Caption : Paste
6.
DBEdit6, aturpropert :
Jika ketika mengisi DataSource ternyata pilihannya kosong, maka UDM harus dikenalkan ke FIsiBaran Disusun Oleh : Andri Heryandi, S.T. File Use Unit Pi UDM.
Karena dalam prosedure ini menggunakan fungsi clipboard, maka agar perintah ini dikenal, di pernyataan uses (ada di bagian atas unit) harus ditambah dengan nama unit ClipBrd
TIPS dan TRIK Pada FIsiBarang kita menginginkan bahwa user hanya akan keluar kalau menekan tombol Simpan atau Batal. FIsiBarang yang tadi dibu masih mempunyai kelemahan yaitu form dapat ditutup dengan mengklik tombol Close (X) atau Alt+F4. Untuk menangani masalah d atas, klik FIsiBarang, isi event OnCloseQuery dengan perintah beriku
procedure TFIsiBarang.FormCloseQuery(Sender: Tobject; begin var CanClose: Boolean);
if DM.TBarang.State in [dsInsert, dsEdit] then // Jika Status masih kondisi Tambah / Edit
begin CanClose:=False; // Layar tidak boleh ditutup ShowMessage(Gunakan tombol Simpan atau Batal untuk menutup window ini);
end;
end;
Kembali ke FBarang (gunakan View Form /Shift+F12) untuk bergant unit/form. Isi event OnClick tombol TTambah dengan :
Dialog ini menyatakan bahwa Form FBarang memerlukan FisiBarang yang ada di unit UFIsiBaran Apakah anda ingin mengambahkan Uses UFIsiBara
Disusun Oleh : Andri Heryandi, S.T.
Menghubungkan FBarang ke FUtama berguna agar FBarang dapat dipanggil oleh FUtama. Caranya : Buka FUtama (gunakan Shift+F12, pilih FUtama) File Use Unit Pilih UFBarang Klik OK Buat sebuah tombol dengan caption DATA BARANG. Isi Name dengan TDataBarang
Langkah-langkah untuk pengolahan Data Supplier mirip dengan pengolahan data Barang. Hanya saja semua yang mengakses TBarang diganti dengan TSupplier
Langkah-langkah untuk pengolahan Data Pelangga mirip dengan pengolahan data Barang. Hanya saja semua yang mengakses TBarang diganti dengan TPelanggan
Tempatkan 2 buah Table dan 2 buah Datasource ke Data Modul, Atur propertinya seperti di bawah ini :
Name : TPenjualan TableName: Penjualan.DB Active : True Name : TDetailPenjualan TableName: DetailPenjualan.DB Active : True Name Dataset Name Dataset : DsPenjualan : TPenjualan : DsDetailPenjualan : TDetailPenjualan
Disusun Oleh : Andri Heryandi, S.T.
Align Caption
3.
Align
Name Caption Align Name DataSource Align
: alBottom
: Panel3 : (kosongkan) : alClient : DBGrid1 : DM.DsPenjualan : alTop
Name
Caption Name
: TPenjualanBaru
: Penjualan Baru : TLihatFaktur
4.
5.
11.
Caption
: Lihat Faktur
Name Caption
: TTutup : Tutup
6.
MATERI BARU
Tipe-tipe Field
2.
Field Lookup
(Lookup Field)
Field lookup adalah tipe field yang isi datanya berada pada tabel lain yang diakses berdasarkan kunci tertentu / relasi tertentu (misalnya Nama Pelanggan pada tabel Penjualan berasal dari field Nama yang ada di tabel Pelanggan)
3.
Field perhitungan adalah tipe field yang isi datanya merupakan hasil perhitungan atau operasi tertentu (misalnya field Keuntungan yang diambil berdasarkan perhitungan HargaJual dikurangi HargaBeli.
Disusun Oleh : Andri Heryandi, S.T.
Tipe-Tipe Field
Tipe-Tipe Field
Tipe-Tipe Field
Name Component Type Size Field Type Key Fields Dataset Lookup Key Result Field
: Nama field baru : Nama komponent field baru : Tipe data field baru : Ukuran field baru : Lookup : Field kunci relasi ke tabel lain : Tabel sumber data yang akan dilookup : Field kunci yang ada di tabel sumber data : Field yang akan diambil datanya (dari tabel 2)
Disusun Oleh : Andri Heryandi, S.T.
Tipe-Tipe Field
Tabel TPenjualan
Tipe-Tipe Field
Hasil Lookup
Tipe-Tipe Field
Double klik di tabel yang akan dibuat fieldnya Klik kanan di Field Editor, pilih New Fields kemudian is propertiesnya.
Name Component Type Size Field Type
: Nama field baru : Nama komponent field baru : Tipe data field baru : Ukuran field baru : Calculated
Cari event OnCalcField di table yang ditambah field perhitungan. Isi dengan rumus perhitungannya.
Tipe-Tipe Field
Tabel TBarang
Tipe-Tipe Field
Cari event OnCalcField pada TBarang. Isi event tersebut dengan perintah d bawah ini :
procedure TDM.TBarangCalcFields(DataSet: TDataSet); begin TBarangKeuntungan.Value:=TBarangHargaJual.value - TBarangHargaBeli.value; end;
Perhatian : Field Perhitungan hanya bisa dilihat datanya ketika program telah dirun.
Tipe-Tipe Field
Field SubTotal
Name : Keuntungan Type/Size : Currency/sudah ditentukan Field Type : Calculated Perintah yang ada dalam event OnCalcFields milik TBarang adalah :
Field Kota
Name Type/Size Field Type Key Field Dataset Lookup Key Result Field
Field SubTotal
Name : SubTotal Type/Size : Currency/sudah ditentukan Field Type : Calculated Perintah yang ada dalam event OnCalcFields milik TDetailPenjualan adalah :
MATERI BARU
Relasi Master/Detail
Pengertian/Definisi Relasi Master/Detail adalah suatu relasi antara 2 buah tabel yang mempunyai hubungan master/detail. Contoh relasi master detail adalah : Relasi antara Penjualan dan DetailPenjualan Relasi antara Data Pegawai dengan Data Anak, Data Pendidikan, Data Prestasi Relasi antara Data Mahasiswa dengan Data Nilai Relasi antara Data Kelas dengan Data Mahasiswa Master/detail biasanya digunakan untuk relasi 2 tabel yang mempunyai derajat relasi One-To-Many. Jika sebuah data di tabel master dipilih, maka tabel detailnya hanya menampilkan data sesuai dengan data yang ditunjuk di tabel master. Contoh jika di tabel master dipilih Nomor Faktur 1, maka di tabel detail hanya akan menampilkan daftar detail penjualan nomor faktur 1 saja.
Disusun Oleh : Andri Heryandi, S.T.
Relasi Master/Detail
Relasi Master/Detail
Aktifkan Data Modul Klik tabel yang menjadi detail (TDetailPenjualan) Isi properti MasterSource : TPenjualan Di properti MasterField klik tombol [] Di pilihan Detail Field isi dengan Field NomorPenjualan Di pilihan Master Field isi dengan Field Nomor Klik tombol Add (lihat slide berikutnya) Klik OK.
Dengan pengaturan master/detail ini, maka setiap ada perpindahan record di tabel master (TPenjualan), maka isi dari tabel detail hanya akan menampilkan data dengan kode penjualan yang sedang ditunjuk di TPenjualan.
Disusun Oleh : Andri Heryandi, S.T.
Sampai langkah ini, pengolahan penjualan baru dapat menampilkan data penjualan secara master detail saja. Tetapi proses penambahan penjualan baru belum dilakukan. Materi selanjutnya adalah bagaimana membuat menyusun transaksi penjuala
Disarankan untuk membuat tabel temporary item penjuala Jika transaksinya telah benar-benar terjadi (tidak dibatalkan), maka data yang ada di tabel item temporary penjualan akan dipindahkan ke tabel penjualan. Jika ternyata transaksi dibatalkan, maka data yang ada di tabel temporary item akan dihapus dan tidak ditambahkan ke tabel penjualan
Tempatkan Komponen Table di data module untuk TempItemJual.DB dengan nama tabel TTempItemJual. Tempatkan pula Datasource dengan Nama DsTempItemJual
File New Form Ganti Name menjadi FIsiPenjualan Isi Caption dengan Pembuatan Faktur Baru File Save dengan nama UFIsiPenjualan.pa
5.
Name Text Name Text Name Text Name Text Name Text Name Caption
: EKode : <kosongkan> : ENama : <kosongkan> : EAlamat : <kosongkan> : EKota : <kosongkan> : ENoTelepon : <kosongkan> : TCari : Cari
6.
Name DataSource Name Caption Name Caption Name Caption Name Caption Name
: DBGrid1 : DM.DsTempItemJual : TTambah : Tambah Item : TEdit : Edit Item : THapus : Hapus Item : TSelesai : Selesai : TDataPelanggan : Data Pelanggan
3.
7.
4.
8.
5.
9.
6.
10.
3.
4.
5.
Isi event OnClick tombol Penjualan Baru yang ada di form FPenjualan
procedure TFPenjualan.TPenjualanBaruClick(Sender: TObject); begin // Hapus Semua Data yang ada di Temporary Item Jual DM.TTempItemJual.First; While DM.TTempItemJual.Eof = false do DM.TTempItemJual.Delete; FISiPenjualan.EKode.Clear; FISiPenjualan.ENama.Clear; FISiPenjualan.EAlamat.Clear; FISiPenjualan.EKota.Clear; FISiPenjualan.ENoTelepon.Clear; FIsiPenjualan.Showmodal; end; // Tampilkan Form Isi Penjualan
procedure TFIsiPenjualan.TCariClick(Sender: TObject); begin if DM.TPelanggan.Locate('Kode',EKode.Text,[])=true then begin ENama.Text:=DM.TPelanggan.FieldByName('Nama').AsString; EAlamat.Text:=DM.TPelanggan.FieldByName('Alamat').AsString; EKota.Text:=DM.TPelanggan.FieldByName('Kota').AsString; ENoTelepon.Text:=DM.TPelanggan.FieldByName('NoTelepon').AsString; end else begin Showmessage('Pelanggan Tidak Ditemukan'); ENama.Clear; EAlamat.Clear; EKota.Clear; ENoTelepon.Clear; end; end;
Isi event OnClick tombol Data Pelanggan yang ada di form FIsiPenjualan
procedure TFIsiPenjualan.TDataPelangganClick(Sender: begin FPelanggan.Showmodal; end; TObject);
Isi event OnClick tombol Tambah Item yang ada di form FIsiPenjualan
procedure TFIsiPenjualan.TTambahClick(Sender: begin DM.TTempItemJual.Append; FIsiItemJual.Showmodal; end; TObject);
Isi event OnClick tombol Edit Item yang ada di form FIsiPenjualan
procedure TFIsiPenjualan.TEditClick(Sender: begin DM.TTempItemJual.Edit; FIsiItemJual.Showmodal; end; TObject);
procedure TFIsiPenjualan.THapusClick(Sender: TObject); var pesan:string; begin pesan:='Anda yakin item berikut : '+#13+#13+ 'Kode Barang : '+DM.TTempItemJualKodeBarang.value+#13+ 'Nama Barang : '+DM.TTempItemJualNamaBarang.value+#13+#13+ 'Akan dihapus ?'; if messagedlg(pesan,mtconfirmation,[mbyes,mbno],0)=mryes then begin DM.TTempItemJual.Delete; end; end;
procedure TFIsiPenjualan.TSelesaiClick(Sender: TObject); var Total:Currency; begin if MessageDlg('Transaksi selesai?',mtconfirmation,[mbyes,mbno],0)=mryes then begin if DM.TPelanggan.Locate('Kode',EKode.Text,[])=false then begin Showmessage('Kode Pelanggan harus diisi dan terdaftar di Pelanggan'); EKode.SetFocus; Exit; end; // Di sini, dipastikan bahwa pelanggan diisi dengan benar DM.TPenjualan.Append; DM.TPenjualanWaktuTransaksi.Value:=Now; DM.TPenjualanTotal.value:=0;// untuk sementara 0 DM.TPenjualanKodePelanggan.value:=StrToInt(EKode.Text); DM.TPenjualan.Post; // Simpan sementara, agar nomor penjualan dapat dihasilkan otomatis
end;
end;
Isi event OnClick tombol TDataBarang yang ada di Futama dengan perintah di bawah ini :
procedure TFUtama.TDataPenjualanClick(Sender: TObject);
begin
FPenjualan.Showmodal;
end;