Form Pengembalian digunakan untuk melakukan transaksi
pengembalian. Seperti Form Peminjaman, form ini juga
menggunakan konsep master detail gabungan dari table
Kembali dan DPinjam. Pada form ini metode input
transaksi dibuat semudah mungkin. Pada bagian kanan
terdapat daftar koleksi yang belum dikembalikan oleh
member bersangkutan.
Langkah-langkah :
1. Pastikan project Rental.dpr telah dibuka. 2. Buat form baru, klik menu File – New – Form.
3. Ubah property form yang baru dibuat seperti pada table di bawah ini : Komponen Property Value
Form1 Caption Pengembalian BorderStyle bsSingle
Name FKembali
Position poDesktopCenter WindowState wsMaximized
4. Klik menu File – Save All untuk menyimpan project. Simpan Unit1 menjadi UFKembali.pas dalam folder Rental.
5. Klik menu File – Use Unit, pilih UFUtama, klik OK untuk melanjutkan. 6. Copy dan Paste ToolBar1 dari form FPinjam ke dalam FKembali.
7. Tambahkan 3 buah GroupBox1 dari tab Standard ke dalam FKembali, atur property seperti table di bawah ini :
Komponen Tab Parent Property Value GroupBox1 Standard FKembali Align alTop
Caption
GroupBox2 Standard FKembali Align alLeft
Caption Koleksi Yang Dikembalikan GroupBox3 Standard FKembali Align alBottom
Caption
8. Tambahkan 1 buah Splitter dari tab Additional ke dalam FKembali. 9. Tambahkan 1 buah GroupBox dari tab Standard ke dalam FKembali, atur
property seperti table di bawah ini :
Komponen Tab Parent Property Value GroupBox4 Standard FPinjam Align alClient
Caption Koleksi Belum Kembali 10. Tambahkan 3 buah ADOTable dan 4 buah ADOQuery atur property
seperti table di bawah ini :
Komponen Tab Parent Property Value ADOTable1, ADOTable2, ADOTable3, ADOQuery1, ADOQuery2, ADOQuery3, ADOQuery4 Connection FUtama.ADOConnection1
ADOTable1 ADO FKembali Name Kembali TableName Kembali ADOTable2 ADO FKembali Name DKembali
TableName DPinjam ADOTable3 ADO FKembali Name DPinjam
CursorLocation clUseServer TableName DPinjam ADOQuery1 ADO FKembali Name qMember
SQL Select Member.MemberID, Member.Nama, Member.Alamat, Member.Kota, Member.Handphone From Member Order by Member.Nama
ADOQuery2 ADO FKembali Name qKaryawan
SQL Select Karyawan.KaryawanID,
Karyawan.Nama From Karyawan
Order by Karyawan.Nama
ADOQuery3 ADO FKembali Name qKoleksi
SQL Select Koleksi.KoleksiID,
Koleksi.Judul From Koleksi
Order by Koleksi.Judul
ADOQuery4 ADO FKembali Name qBKembali
SQL Select Pinjam.PinjamID, Pinjam.TglPinjam, Pinjam.MemberID, DPinjam.DPinjamID, DPinjam.KoleksiID, Koleksi.Judul, Koleksi.HargaDenda, DPinjam.TglHarusKembali From Pinjam, DPinjam, Koleksi Where (Pinjam.PinjamID = DPinjam.PinjamID) and (DPinjam.KoleksiID = Koleksi.KoleksiID) and (DPinjam.KembaliID = 0) and (Pinjam.MemberID = :MemberID)
11. Pilih qBKembali pada Object TreeView, klik tombol ellipsis pada property Parameters untuk membuka jendela Edit Parameters, ubah property seperti table di bawah ini :
Komponen Property Value TParameters[0] DataType ftInteger
12. Buat persistent field table Kembali, klik dua kali Kembali pada Object TreeView untuk membuka field editor, klik kanan dan pilih Add All Fields.
13. Dengan cara yang sama dengan point 12, buat persistent field table DKembali, DPinjam, qMember, qKaryawan, qKoleksi dan qBKembali. 14. Klik dua kali Kembali pada Object TreeView untuk membuka field
editor, pilih field TotalDenda, ubah property seperti table di bawah ini : Komponen Property Value
KembaliTotalDenda Currency True
15. Klik dua kali DKembali pada Object TreeView untuk membuka field editor, pilih field HargaDenda, ubah property seperti table di bawah ini :
Komponen Property Value DKembaliHargaDenda Currency True
16. Tambahkan 3 buah DataSource dari tab Data Acces, ubah property seperti table di bawah ini :
Komponen Tab Parent Property Value Datasource1 Data Access FKembali Dataset Kembali DataSource2 Data Access FKembali Dataset DKembali DataSource3 Data Access FKembali Dataset qBKembali
17. Buat hubungan master detail antara table Kembali dan DKembali, pilih table DKembali pada Object TreeView, ubah property seperti table di bawah ini :
Komponen Property Value DKembali MasterSource Datasource1
18. Pilih table DKembali pada Object TreeView, klik tombol elipsisi pada property MasterField untuk membuka Field Link Designer. Pilih KembaliID pada Detail Fields dan KembaliID pada Master Fields. Klik Add untuk menambahkan ke dalam Joined Fields. Klik OK untuk melanjutkan.
19. Tambahkan field baru NamaMember pada table Kembali, klik dua kali Kembali pada Object TreeView untuk membuka Field Editor, klik kanan dan pilih New Fields, lengkapi informasi pada jendela New Field seperti table di bawah ini :
Field Section Property Value NamaMember Field Properties Name NamaMember
Type String
Size 30
Field type Field type Lookup Lookup Definition Key Fields MemberID
Dataset qMember Lookup Keys MemberID Result Field Nama
20. Tambahkan field baru Alamat pada table Kembali, sama seperti point 19, lengkapi informasi pada jendela New Field seperti table di bawah ini :
Field Section Property Value Alamat Field Properties Name Alamat
Type String
Size 50
Field type Field type Lookup Lookup Definition Key Fields MemberID
Dataset qMember Lookup Keys MemberID Result Field Alamat
21. Tambahkan field baru Kota pada table Kembali, lengkapi informasi pada jendela New Field seperti table di bawah ini :
Field Section Property Value
Kota Field Properties Name Kota
Type String
Field type Field type Lookup Lookup Definition Key Fields MemberID
Dataset qMember Lookup Keys MemberID Result Field Kota
22. Tambahkan field baru Handphone pada table Kembali, lengkapi informasi pada jendela New Field seperti table di bawah ini :
Field Section Property Value Handphone Field Properties Name Handphone
Type String
Size 30
Field type Field type Lookup Lookup Definition Key Fields MemberID
Dataset qMember Lookup Keys MemberID Result Field Handphone
23. Tambahkan field baru NamaKaryawan pada table Kembali, lengkapi informasi pada jendela New Field seperti table di bawah ini :
Field Section Property Value
NamaKaryawan Field Properties Name NamaKaryawan Type String
Size 30
Field type Field type Lookup Lookup Definition Key Fields KaryawanID
Dataset qKaryawan Lookup Keys KaryawanID Result Field Nama
24. Klik dua kali DKembali pada Object TreeView untuk membuka Field Editor, tambahkan field baru JudulKoleksi pada table DKoleksi, lengkapi informasi pada jendela New Field seperti table di bawah ini :
Field Section Property Value JudulKoleksi Field Properties Name JudulKoleksi
Type String
Size 100
Field type Field type Lookup Lookup Definition Key Fields KoleksiID
Dataset qKoleksi Lookup Keys KoleksiID Result Field Judul
25. Klik dua kali qBKembali pada Object TreeView untuk membuka field editor, tambahkan field baru Telat pada table qBKembali, lengkapi informasi pada jendela New Field seperti table di bawah ini :
Field Section Property Value Telat Field Properties Name Telat
Field type Field type Calculated
26. Tambahkan field baru Denda pada table qBKembali, lengkapi informasi pada jendela New Field seperti table di bawah ini :
Field Section Property Value Denda Field Properties Name Denda
Type Currency Field type Field type Calculated
27. Masih pada field editor table qBKembali, pilih field Denda, ubah property seperti table di bawah ini :
Komponen Property Value qBKembaliDenda Currency True
28. Klik dua kali Kembali pada Object TreeView untuk membuka field editor. Pilih field KembaliID, TglKembali, MemberID, NamaMember, Alamat, Kota dan Handphone, lakukan drag and drop ke dalam GroupBox1.
29. Tambahkan DBGrid1 dari tab Data Control ke dalam GroupBox2, atur property seperti table di bawah ini :
Komponen Tab Parent Property Value
DBGrid1 Data Control GroupBox2 Align alClient
Datasource DataSource2
Options.dgRowSelect False
Options.dgAlwaysShowSelection False
Options.dgEditing True
30. Klik dua kali DBGrid1 pada Object TreeView untuk membuka Column Editor, tambahkan 4 buah dengan mengklik kanan pada Column Editor, pilih Add. Ubah property masing-masing kolom seperti table di bawah ini :
Komponen Property Value
DBGrid1.Columns[0] FieldName KoleksiID Title.Caption ID
DBGrid1.Columns[1] FieldName JudulKoleksi Title.Caption Judul Koleksi DBGrid1.Columns[2] FieldName TglHarusKembali
Title.Caption Tgl Harus Kembali DBGrid1.Columns[3] FieldName Denda
Title.Caption Denda DBGrid1.Columns[0], DBGrid1.Columns[1], DBGrid1.Columns[2], DBGrid1.Columns[3] Title.Alignment taCenter Title.Font.Style.fsBold True
31. Klik dua kali table Kembali pada Object TreeView untuk membuka field editor, pilih field Nama Karyawan dan TotalDenda, lakukan drag and drop ke dalam GroupBox3.
32. Tambahkan DBNavigator1 dari tab Data Control ke dalam GroupBox3, atur property seperti table di bawah ini :
Komponen Tab Parent Property Value
DBNavigator1 Data Control GroupBox3 Align alBottom
Datasource Datasource1 Flat True VisibleButtons.nbInsert False VisibleButtons.nbDelete False VisibleButtons.nbEdit False VisibleButtons.nbPost False VisibleButtons.nbCancel False VisibleButtons.nbRefresh False
33. Tambahkan DBGrid2 dari tab Data Control ke dalam GroupBox4, atur property seperti table di bawah ini :
Komponen Tab Parent Property Value
DBGrid2 Data Control GroupBox4 Align alClient
Datasource DataSource3
Options.dgRowSelect True Options.dgAlwaysShowSelection True 34. Klik dua kali DBGrid2 pada Object TreeView untuk membuka Column
Editor, tambahkan 6 buah kolom, ubah property masing-masing kolom seperti table di bawah ini :
Komponen Property Value
DBGrid2.Columns[0] FieldName TglPinjam Title.Caption Tgl Pinjam DBGrid2.Columns[1] FieldName KoleksiID
Title.Caption ID DBGrid2.Columns[2] FieldName Judul
Title.Caption Judul Koleksi DBGrid2.Columns[3] FieldName TglHarusKembali
Title.Caption Tgl Harus Kembali DBGrid2.Columns[4] FieldName Telat
Title.Caption Telat DBGrid2.Columns[5] FieldName Denda
Title.Caption Denda DBGrid2.Columns[0], DBGrid2.Columns[1], DBGrid2.Columns[2], DBGrid2.Columns[3], DBGrid2.Columns[4], DBGrid2.Columns[5] Title.Alignment taCenter Title.Font.Style.fsBold True
DBEdit1, DBLookUpCombobox2, DBLookupCombobox3, DBLookupCombobox4, DBLookUpCombobox5, DBEdit4 Enabled False
36. Atur layout form FKembali seperti gambar di bawah ini :
37. Tambahkan unit DateUtils pada blok Uses di unit UFKembali, lihat Latihan 27 point 38.
38. Tambahkan variable KembaliID dengan type Integer pada blok Public di unit UFKembali, lihat Latihan 27 point 39.
39. Buat procedure UpdateqBKembali dan Procedure UpdateTotalDenda pada blok Private di unit UFKembali, tekan Ctrl+Shift+C untuk membuat blok procedure tersebut (lihat Latihan 27 point 40), ketikkan perintah seperti table di bawah ini :
Komponen Event Code
FKembali UpdateqBKembali procedure TFKembali.UpdateqBKembali; begin qBKembali.Close; If DBEdit3.Text = '' then qBKembali.Parameters[0].Value := 0 else qBKembali.Parameters[0].Value := strtoint(DBEdit3.Text); qBKembali.Open; end;
UpdateTotalDenda procedure TFKembali.UpdateTotalDenda; var
TempTotal: Real; PrevRecord: TBookmark; begin
Komponen Event Code PrevRecord := DKembali.GetBookmark; try DKembali.DisableControls; DKembali.First; TempTotal := 0;
while not DKembali.EOF do begin
TempTotal := TempTotal + DKembaliHargaDenda.Value; DKembali.Next;
end;
If not (Kembali.State in dsEditModes) then Kembali.Edit; KembaliTotalDenda.Value := TempTotal;
finally
DKembali.EnableControls; if PrevRecord <> nil then begin DKembali.GoToBookmark(PrevRecord); DKembali.FreeBookmark(PrevRecord); end; end; end;
40. Pilih FKembali pada Object TreeView, buat event onCreate, onShow dan onClose, ketikkan perintah seperti table di bawah ini :
Komponen Event Code
FKembali onCreate procedure TFKembali.FormCreate(Sender: TObject); begin
KembaliID := 0; end;
onShow procedure TFKembali.FormShow(Sender: TObject); begin Kembali.Open; DKembali.Open; DPinjam.Open; qMember.Open; qKaryawan.Open; qKoleksi.Open; UpdateqBKembali;
If KembaliID > 0 then Kembali.Locate('KembaliID', KembaliID, []) else Kembali.Insert;
end;
onClose procedure TFKembali.FormClose(Sender: TObject; var Action: TCloseAction); begin Kembali.Close; DPinjam.Close; DKembali.Close; qMember.Close; qKaryawan.Close; qKoleksi.Close; qBKembali.Close; end;
41. Pilih SpeedButton1, SpeedButton2, SpeedButton3 dan SpeedButton4 pada Object TreeView, buat event onClick, ketikkan perintah seperti table di bawah ini :
Komponen Event Code SpeedButton1,
SpeedButton2, SpeedButton3, SpeedButton4
onClick procedure TFKembali.SpeedButton1Click(Sender: TObject); begin
Case (Sender as TSpeedButton).Tag of 1 : Kembali.Post;
2 : Kembali.Delete; 3 : ;
4 : Kembali.Cancel; End;
If (Sender as TSpeedButton).Tag in [2,4] then Close; end;
42. Pilih DBEdit3 pada Object TreeView, buat event onChange, ketikkan perintah seperti table di bawah ini :
Komponen Event Code
DBEdit3 onChange procedure TFkembali.DBEdit3Change(Sender: TObject); begin
UpdateqBKembali; end;
43. Pilih table Kembali pada Object TreeView, buat event AfterScroll, BeforeDelete dan onNewRecord, ketikkan perintah seperti table di bawah ini :
Komponen Event Code
Kembali AfterScroll procedure TFKembali.KembaliAfterScroll(DataSet: TDataSet); begin
UpdateqBKembali; end;
BeforeDelete procedure TFKembali.KembaliBeforeDelete(DataSet: TDataSet); begin
If MessageDlg('Hapus data?',mtConfirmation, [mbYes, mbNo], 0) = mrNo
then Abort; end;
onNewRecord procedure TFKembali.KembaliNewRecord(DataSet: TDataSet); begin
If DBEdit3.Enabled then ActiveControl := DBEdit3; KembaliTglKembali.Value := Today;
KembaliTotalDenda.Value := 0;
KembaliKaryawanID.Value := FUtama.KaryawanID; end;
44. Pilih qBKembali pada Object TreeView, buat event onCalcFields, ketikkan perintah seperti table di bawah ini :
Komponen Event Code
qBKembali onCalcFields procedure TFKembali.qBKembaliCalcFields(DataSet: TDataSet); var
Komponen Event Code
Telat : Integer; begin
Telat := Trunc(Today - qBKembaliTglHarusKembali.Value); If Telat <= 0 then qBKembaliTelat.Value := 0
else qBKembaliTelat.Value := Telat;
qBKembaliDenda.Value := qBKembaliTelat.Value * qBKembaliHargaDenda.Value; end;
45. Pilih DataSource1 pada Object TreeView, buat event onStateChange, ketikkan perintah seperti table di bawah ini :
Komponen Event Code
DataSource1 onStateChange procedure TFKembali.DataSource1StateChange(Sender: TObject);
begin
SpeedButton1.Enabled := (Kembali.State in dsEditModes) and (FUtama.HakAkses in [1,2]);
SpeedButton2.Enabled := (Kembali.State in [dsBrowse]) and (FUtama.HakAkses in [1,2]);
SpeedButton3.Enabled := (Kembali.State in [dsBrowse]) and (FUtama.HakAkses in [1,2]); DBEdit3.Enabled := FUtama.HakAkses in [1,2]; DBLookUpCombobox1.Enabled := FUtama.HakAkses in [1,2]; DBGrid1.Enabled := FUtama.HakAkses in [1,2]; DBGrid2.Enabled := FUtama.HakAkses in [1,2]; DBNavigator1.Enabled := FUtama.HakAkses in [2]; end;
46. Pilih DBGrid1 pada Object TreeView, buat event onDblClick, ketikkan perintah seperti table di bawah ini :
Komponen Event Code
DBGrid1 onDblClick procedure TFKembali.DBGrid1DblClick(Sender: TObject); begin
If MessageDlg('Batalkan pengembalian?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
Begin DKembali.Edit; DKembaliKembaliID.Value := 0; DKembaliDenda.Value := 0; DKembali.Post; UpdateqBKembali; UpdateTotalDenda; End; end;
47. Pilih DBGrid2 pada Object TreeView, buat event onDblClick, ketikkan perintah seperti table di bawah ini :
Komponen Event Code
DBGrid2 onDblClick procedure TFKembali.DBGrid2DblClick(Sender: TObject); begin
Komponen Event Code
[mbYes, mbNo], 0) = mrYes then Begin
If qBKembaliMemberID.Value = strtoint(DBEdit3.Text) then Begin
If Kembali.State in dsEditModes then Kembali.Post; If DPinjam.Locate('DPinjamID', qBKembaliDPinjamID.Value, []) then Begin DPinjam.Edit; DPinjamKembaliID.Value := KembaliKembaliID.Value; DPinjamDenda.Value := qBKembaliDenda.Value; DPinjam.Post; DKembali.Close; DKembali.Open; UpdateqBKembali; UpdateTotalDenda; End; End
Else MessageDlg('Member tidak cocok!', mtInformation, [mbOK], 0); End;
end;
48. Kembali ke form FUtama, klik menu View – Forms, pilih FUtama, klik OK untuk melanjutkan.
49. Klik menu File – Use Unit, pilih FKembali, klik OK untuk melanjutkan. 50. Pilih Pengembalian1 pada Object TreeView, buat event onClick,
ketikkan perintah seperti table di bawah ini : Komponen Event Code
Pengembalian1 onClick procedure TFUtama.Pengembalian1Click(Sender: TObject); begin
FKembali.ShowModal; end;
51. Pilih SpeedButton4 pada Object TreeView, buat event onClick, ketikkan perintah seperti table di bawah ini :
Komponen Event Code
SpeedButton4 onClick procedure TFUtama.SpeedButton4Click(Sender: TObject); begin
FKembali.ShowModal; end;