60
Pada bab ini akan dijelaskan mengenai implementasi interface dan implementasi program. Sebelum aplikasi dijalankan, terlebih dahulu dilakukan instalasi pada komputer. Software yang dibutuhkan agar aplikasi dapat berjalan adalah Borland Delphi 5.0, ODBC, dan Microsoft Access XP.
Setelah software yang dibutuhkan telah tersedia, perlu dilakukan setting pada ODBC yaitu dengan membuat database alias agar aplikasi dapat mengenali database yang digunakan.
4.1. Implementasi database
Pada tahap implementasi, hal pertama yang dilakukan adalah membuat tabel dalam Microsoft Access. Tabel-tabel yang digunakan adalah sebagai berikut:
- Tabel supplier, terdiri dari 2 tabel yaitu tabel master untuk mencatat data-data supplier, dan tabel detail supplier yaitu untuk mencatat barang yang di- supply oleh supplier yang bersangkutan.
- Tabel customer, yaitu tabel untuk mencatat data-data customer.
- Tabel barang, yaitu tabel untuk mencatat data-data barang.
- Tabel account, yaitu tabel untuk mencatat account perusahaan.
- Tabel login manager, yaitu tabel untuk mencatat username dan password pengguna.
- Tabel order pembelian, yaitu mencatat pemesanan barang yang dilakukan perusahaan ke supplier, terdiri dari 2 tabel yaitu tabel master untuk mencatat data-data pemesanan barang, dan detail untuk mencatat barang-barang yang dipesan.
- Tabel pembelian, yaitu mencatat data-data pembelian barang yang dilakukan perusahaan, terdiri dari 2 tabel yaitu tabel master pembelian untuk mencatat data-data pembelian barang, dan tabel detail pembelian untuk mencatat barang-barang yang dibeli oleh perusahaan.
- Tabel terima barang, yaitu tabel yang menyimpan bukti nota penerimaan barang, terdiri dari 2 tabel yaitu tabel master untuk mencatat data-data penerimaan barang, dan detail barang untuk mencatat barang-barang yang diterima oleh perusahaan.
- Tabel pembayaran, yaitu tabel yang mencatat nota pembayaran yang dilakukan perusahaan atas pembelian barang yang telah dilakukan sebelumnya.
- Tabel order penjualan, yaitu tabel yang mencatat data-data pesanan barang yang dipesan oleh customer. Tabel order penjualan terdiri dari 2 tabel, yaitu master order penjualan untuk mencatat data-data pemesanan barang, dan detail order penjualan untuk mencatat barang-barang yang dipesan oleh customer.
- Tabel penjualan, yaitu tabel yang mencatat data-data penjualan, terdiri dari 2 tabel, yaitu tabel master penjualan untuk mencatat data-data penjualan, dan detail penjualan untuk mencatat barang-barang yang terjual.
- Tabel surat jalan, yaitu tabel yang mencatat surat bukti barang yang keluar atau dikirim ke customer. Tabel surat jalan terdiri dari 2 tabel, yaitu master surat jalan untuk mencatat data-data surat jalan, dan detail surat jalan digunakan untuk mencatat barang-barang yang keluar dari perusahaan.
- Tabel penerimaan uang, yaitu tabel yang menyimpan bukti pelunasan piutang dari customer.
- Tabel jurnal, yaitu tabel yang mencatat jurnal-jurnal akuntansi yang tidak dapat digolongkan dalam tabel jurnal kas masuk ataupun jurnal kas keluar selama periode akuntansi berjalan.
- Tabel jurnal kas, yaitu tabel yang mencatat jurnal-jurnal akuntansi yang berkaitan dengan transaksi masuk dan keluarnya kas selama periode akuntansi berjalan.
- Tabel gabung, yaitu tabel yang menggabungkan semua jurnal-jurnal akuntansi, yaitu pembelian, pembayaran utang, penjualan, penerimaan piutang, jurnal kas masuk, jurnal kas keluar, dan jurnal umum.
4.2. Implementasi program dan interface
Sebelum melakukan implementasi program, sebelumnya harus dilakukan koneksi antara Delphi 5.0 dan database Microsoft Access. Koneksi dapat dilakukan dengan cara masuk di start, setting, control panel, lalu pilih ODBC data sources. Pilih tab system dsn, tekan tombol add. Pilih Microsoft Access Driver, Finish. Data source name diisi dengan nama data source, dalam hal ini diisi Cskripsi. Pilih databasenya dengan cara klik tombol select, lalu akan tampil browse untuk memilih database yang digunakan. Maka selesailah koneksi ODBC, dan program siap untuk diimplementasikan.
Setelah implementasi tabel, dan setting koneksi ODBC, maka dilakukan implementasi program. Dalam implementasi program, hal pertama yang harus dilakukan adalah menghubungkan database dengan program, yaitu membuka data module pada Delphi 5.0 dan memasukkan komponen TDatabase, lalu kemudian di-set sesuai dengan koneksinya. Setelah database terhubung, maka untuk setiap tabelnya juga perlu dihubungkan dengan menggunakan komponen TTabel.
Setelah semua dilakukan baru dilakukan coding program untuk masing-masing form.
Form-form yang digunakan dapat dikelompokkan sebagai berikut.
• Master - Supplier - Customer - Barang - Account
- Login manager
• Transaksi
- Order pembelian - Pembelian - Terima barang - Bayar utang - Order penjualan - Penjualan - Surat jalan
- Terima piutang - Jurnal umum
- Jurnal penerimaan kas - Jurnal pengeluaran kas - Tutup buku
4.2.1. Form Login
Form login digunakan untuk mengijinkan pengguna masuk ke dalam database. Pada form login ini akan di-cek apakah username dan password yang dimasukkan sudah sesuai dengan data yang terdapat dalam tabel, yang sudah dimasukkan sebelumnya. Berikut adalah contoh coding program untuk mengecek validasi username dan password pengguna.
procedure TLogin.Button1Click(Sender: TObject);
var
PasswordDiterima: Boolean;
begin
PasswordDiterima := False;
if Datamodule2.TLogin.Locate('User', Login.Edit1.Text, []) then if Datamodule2.TLogin['Password'] = Login.Edit2.Text then begin
PasswordDiterima := True;
MenuUtama.ShowModal;
Close;
end;
if not PasswordDiterima then ShowMessage('Invalid username/password');
end;
Dari procedure diatas dapat dilihat bahwa jika username dan password yang dimasukkan oleh pengguna tidak sesuai maka sistem tidak akan masuk ke menu utama tetapi keluar pesan bahwa username dan password salah.
4.2.2. Form Menu Utama
Form menu utama adalah form utama untuk menjalankan form-form lainnya. Berikut adalah contoh coding untuk form menu utama.
procedure TMenuUtama.TBXLink1Click(Sender: TObject);
begin
case (Sender as TComponent).Tag of 0: Account.ShowModal;
1: Supplier.ShowModal;
2: Customer .ShowModal;
3: Barang.ShowModal;
4: OrderBeli.ShowModal;
5: Pembelian.ShowModal;
6: TrmBrg1.ShowModal;
7: Utang1.ShowModal;
8: OrderJual.ShowModal;
9: Jual.ShowModal;
10 : SuratJln.ShowModal;
11 : TerimaPiutang2.ShowModal;
12 : JurnalUmum.ShowModal;
13 : Close;
14 : KasMsk.ShowModal;
15 : KasKlr.ShowModal;
end;
end;
4.2.3. Form Supplier
Form supplier digunakan untuk mencatat data-data supplier. Master supplier menggunakan komponen dbedit yang langsung terhubung dengan database, sedangkan untuk detail barang menggunakan dbgrid yang juga langsung terhubung dengan database. Form supplier ini terhubung dengan tabel supplier dan tabel detail supplier.
4.2.4. Form Customer
Form customer digunakan untuk mencatat data-data customer. Dalam memasukkan field-field dari form digunakan komponen dbedit yang dapat langsung terhubung dengan database. Data-data customer ini disimpan dalam tabel Customer.
4.2.5. Form Barang
Form barang digunakan untuk mencatat data-data barang. Dalam memasukkan field-field dari form digunakan komponen dbedit yang dapat langsung terhubung dengan database. Data-data barang ini disimpan dalam tabel Barang.
4.2.6. Form Login Manager
Form login manager digunakan untuk mencatat username dan password pengguna. Dalam memasukkan field-field dari form digunakan komponen dbedit yang dapat langsung terhubung dengan database. Data-data login ini disimpan dalam tabel login.
4.2.7. Form Account
Form account digunakan untuk mencatat account yang dimiliki oleh perusahaan. Dalam memasukkan field-field dari form digunakan komponen dbedit yang dapat langsung terhubung dengan database. Data-data account ini disimpan dalam tabel account.
4.2.8. Form Order Pembelian
Form order pembelian terdiri dari master dan detail. Untuk master, digunakan dbedit yang dapat langsung terhubung dengan database, sedangkan untuk detailnya menggunakan dbgrid yang juga dapat langsung terhubung dengan database. Untuk master akan disimpan dalam tabel PO, sedangkan untuk detail akan disimpan dalam tabel detail PO.
4.2.9. Form Pembelian
Form pembelian terdiri dari master dan detail yang menggunakan dbedit dan dbgrid yang dapat langsung terhubung dengan database. Pada form pembelian ini, selain masuk ke tabel Pembelian dan Detail Pembelian, total pembelian juga akan langsung masuk ke tabel Gabung yang langsung masuk ke perhitungan akuntansi, yaitu utang bertambah di kredit dengan jumlah total pembelian di kali kurs, dan pembelian bertambah di debit dengan jumlah pembelian sama dengan bertambahnya utang. Berikut contoh coding program untuk mencatat data pembelian yang langsung diperhitungkan dalam akuntansi.
procedure TPembelian2.OkClick(Sender: TObject);
var Total: Real;
begin
DataModule2.Pembelian['Tanggal'] := DateTimePicker1.Date;
DataModule2.Pembelian['TglShip'] := DateTimePicker2.Date;
DataModule2.Pembelian['TglDelivery'] := DateTimePicker3.Date;
// Update TotalRp
DataModule2.Query1.SQL.Text := 'SELECT SUM(Quantity * UnitPrice) AS Total FROM
TDetPembelian WHERE NoSC = ' + QuotedStr(DBEdit1.Text);
DataModule2.Query1.Open;
if DataModule2.Query1['Total'] <> null then Total := DataModule2.Query1['Total']
else Total := 0;
DataModule2.Query1.Close;
DataModule2.Pembelian['TotalRp'] := Total * StrToFloat(DBEdit3.Text);
// update tabel utang
DataModule2.Utang.Append;
DataModule2.Utang['KodeSupplier'] := DBEdit2.Text;
DataModule2.Utang['NoSC'] := DBEdit1.Text;
DataModule2.Utang['Sisa'] := Total;
DataModule2.Utang.Post;
// post data ke tabel pembelian
if (PaymentTerms.ItemIndex = 0) and (DBEdit7.Text <> '') then
DataModule2.Pembelian['TglPayment1']:= DateTimePicker4.DateTime;
if (PaymentTerms.ItemIndex = 0) and (DBEdit8.Text <> '') then
DataModule2.Pembelian['TglPayment2']:= DateTimePicker5.DateTime;
if (PaymentTerms.ItemIndex = 0) and (DBEdit9.Text <> '') then
DataModule2.Pembelian['TglPayment3']:= DateTimePicker6.DateTime;
if (PaymentTerms.ItemIndex = 0) and (DBEdit10.Text <> '') then
DataModule2.Pembelian['TglPayment4']:= DateTimePicker7.DateTime;
if (PaymentTerms.ItemIndex = 1) and (DBEdit7.Text <> '') then
DataModule2.Pembelian['TglPayment1']:= DateTimePicker4.DateTime;
if (PaymentTerms.ItemIndex = 1) and (DBEdit8.Text <> '') then
DataModule2.Pembelian['TglPayment2']:= DateTimePicker5.DateTime;
DataModule2.Pembelian.Post;
//Pembelian bertambah di debit DataModule2.GL.Append;
DataModule2.GL['Tanggal'] := DateTimePicker1.Date;
DataModule2.GL['AccId'] := DBEdit12.Text;
DataModule2.GL['AccType'] := 'Pembelian';
DataModule2.GL['Keterangan'] := 'No. SC: '+ DBEdit1.Text;
DataModule2.GL['Debit'] := Label15.Caption;
DataModule2.GL.Post;
//Utang bertambah di kredit DataModule2.GL.Append;
DataModule2.GL['Tanggal'] := DateTimePicker1.Date;
DataModule2.GL['AccId'] := DBEdit11.Text;
DataModule2.GL['AccType'] := 'Utang Lancar';
DataModule2.GL['Keterangan'] := 'No. SC: '+ DBEdit1.Text;
DataModule2.GL['Kredit'] := Label15.Caption;
DataModule2.GL.Post;
close;
end;
4.2.10. Form Terima Barang
Form terima barang terdiri dari master dan detail, dimana master menggunakan dbedit dan detail menggunakan dbgrid yang dapat langsung terhubung dengan database. Untuk data master akan disimpan dalam tabel Terima Barang, sedangkan untuk detail akan disimpan dalam tabel Detail Terima Barang.
Barang yang diterima tidak dapat melebihi jumlah barang yang sudah disepakati dalam kontrak pembelian, dalam hal ini form pembelian. Untuk pengecekan data barang yang dikirim menggunakan coding program seperti di bawah ini.
procedure TTrmBrg2.okClick(Sender: TObject);
begin
DataModule2.TerimaBrg['Tanggal'] := DateTimePicker1.DateTime;
DataModule2.TerimaBrg.Post;
with DataModule2 do begin
// Update nilai Diterima di tabel TDetPembelian
Query1.SQL.Text := 'UPDATE TDetPembelian SET Diterima = Diterima + :Diterima
WHERE NoSC = :NoSC AND KodeBarang = :KodeBarang';
Query1.ParamByName('NoSC').AsString := TerimaBrg['NoSC'];
DetTerimaBrg.First;
while not DetTerimaBrg.Eof do begin
Query1.ParamByName('KodeBarang').AsString := DetTerimaBrg['KodeBarang'];
Query1.ParamByName('Diterima').AsInteger := DetTerimaBrg['JumlahBrg'];
Query1.ExecSQL;
DetTerimaBrg.Next;
end;
// Update nilai SisaPengiriman di tabel TDetPembelian
Query1.SQL.Text := 'UPDATE TDetPembelian SET SisaPengiriman = Quantity – Diterima WHERE NoSC = :NoSC';
Query1.ParamByName('NoSC').AsString := TerimaBrg['NoSC'];
Query1.ExecSQL;
// Cek apakah pengiriman barang sudah lengkap
Query1.SQL.Text := 'SELECT SUM(SisaPengiriman) AS Sisa FROM TDetPembelian
WHERE NoSC = :NoSC';
Query1.ParamByName('NoSC').AsString := TerimaBrg['NoSC'];
Query1.Open;
if Query1['Sisa'] = 0 then begin
Query2.SQL.Text := 'UPDATE TPembelian SET SudahDiterima='+
QuotedStr('T')+'WHERE NoSC = :NoSC';
Query2.ParamByName('NoSC').AsString := TerimaBrg['NoSC'];
Query2.ExecSQL;
end;
Query1.Close;
End; close;
end;
4.2.11. Form Pembayaran
Form pembayaran digunakan untuk mencatat bukti pembayaran yang dilakukan oleh perusahaan ke supplier. Dalam memasukkan field-field dari form digunakan komponen dbedit yang dapat langsung terhubung dengan database.
Data-data pembayaran ini disimpan dalam tabel Pembayaran. Pada form pembayaran ini, selain masuk ke tabel Pembayaran, total pembayaran juga akan langsung masuk ke tabel Gabung yang secara otomatis masuk ke perhitungan akuntansi. Berikut contoh coding program untuk mencatat data pembayaran yang langsung diperhitungkan dalam akuntansi.
procedure TUtang2.okClick(Sender: TObject);
begin
With DataModule2 do begin
Pembayaran['Tanggal'] := DateTimePicker1.DateTime;
Pembayaran.Post;
DataModule2.Query1.SQL.Text := 'Select Kurs from TPembelian where NoSC = ' + QuotedStr(DBEdit7.Text);
DataModule2.Query1.Open;
//Utang berkurang di debit GL.Append;
GL['Tanggal'] := DateTimePicker1.Date;
GL['AccId'] := DBEdit6.Text;
GL['AccType'] := 'Utang Lancar';
GL['Keterangan'] := 'NoKuitansi:' + DBEdit1.Text;
GL['Debit'] := Pembayaran['Total$'] * Query1['Kurs'];
GL.Post;
//Kas berkurang di kredit GL.Append;
GL['Tanggal'] := DateTimePicker1.Date;
GL['AccId'] := DBEdit8.Text;
GL['AccType'] := 'Kas';
GL['Keterangan'] := 'NoKuitansi:' + DBEdit1.Text;
GL['Kredit'] := Pembayaran['Bayar'] * Pembayaran['Kurs'];
GL.Post;
KasKeluar.Append;
KasKeluar['Tanggal'] := DateTimePicker1.Date;
KasKeluar['CashAcc'] := DBEdit8.Text;
KasKeluar['AccId'] := DBEdit6.Text;
KasKeluar['Keterangan'] := 'NoKuitansi:' + DBEdit1.Text;
KasKeluar['Debit'] := Pembayaran['Bayar'] * Pembayaran['Kurs'];
KasKeluar.Post;
//Potongan pembelian bertambah di kredit If DBEdit5.Text <> '0' then
begin
GL.Append;
GL['Tanggal'] := DateTimePicker1.Date;
GL['AccId'] := DBEdit9.Text;
GL['AccType'] := 'Potongan Pembelian';
GL['Keterangan'] := 'NoKuitansi: ' + DBEdit1.Text;
GL['Kredit'] := Pembayaran['Disc'] * Pembayaran['Kurs'];
GL.Post;
end;
//Selisih Kurs GL.Append;
GL['Tanggal'] := DateTimePicker1.Date;
GL['AccId'] := '00000';
GL['AccType'] := 'Selisih Kurs';
GL['Keterangan'] := 'NoKuitansi: ' + DBEdit1.Text;
GL['Kredit'] := (Query1['Kurs'] - Pembayaran['Kurs'])* Pembayaran['Total$'];
GL.Post;
DataModule2.Query1.Close;
end;
Close;
end;
4.2.12. Form Order Penjualan
Form order penjualan terdiri dari master dan detail. Untuk master, digunakan dbedit yang dapat langsung terhubung dengan database, sedangkan untuk detailnya menggunakan dbgrid yang juga dapat langsung terhubung dengan database. Untuk master akan disimpan dalam tabel SO, sedangkan untuk detail akan disimpan dalam tabel Detail SO.
4.2.13. Form Penjualan
Form penjualan terdiri dari master dan detail yang menggunakan dbedit dan dbgrid yang dapat langsung terhubung dengan database. Pada form penjualan ini, selain masuk ke tabel Penjualan dan Detail Penjualan, total penjualan juga akan langsung masuk ke tabel Gabung yang secara otomatis masuk ke perhitungan akuntansi, yaitu piutang bertambah di debit dengan jumlah total penjualan, dan penjualan bertambah di kredit. Berikut contoh coding program untuk mencatat data penjualan yang langsung diperhitungkan dalam akuntansi.
procedure TJual2.okClick(Sender: TObject);
var Total:Real;
begin
//Hitung Total
DataModule2.Query1.SQL.Text := 'SELECT SUM(Quantity*UnitPrice) as Total from TDetPenjualan Where NoSC='+ QuotedStr(DBEdit1.Text);
DataModule2.Query1.Open;
If DataModule2.Query1['Total'] <> null then Total := DataModule2.Query1['Total']
else Total := 0;
//Masukkan ke daftar piutang DataModule2.Piutang.Append;
DataModule2.Piutang['NoSC'] := DBEdit1.Text;
DataModule2.Piutang['KodeCustomer'] := DBEdit3.Text;
DataModule2.Piutang['Sisa'] := Total;
DataModule2.Piutang.Post;
DataModule2.Penjualan['Total'] := Total;
DataModule2.Penjualan['TglDipenuhi'] := DateTimePicker1.Date;
DataModule2.Penjualan['TglJatuhTempo'] := DateTimePicker3.Date;
DataModule2.Penjualan['Tanggal'] := DateTimePicker2.Date;
DataModule2.Penjualan.Post;
//Piutang bertambah di debit DataModule2.GL.Append;
DataModule2.GL['Tanggal'] := DateTimePicker1.Date;
DataModule2.GL['AccId'] := DBEdit4.Text;
DataModule2.GL['AccType'] := 'Piutang Lancar';
DataModule2.GL['Keterangan'] := 'No. SC: '+ DBEdit1.Text;
DataModule2.GL['Debit'] := Label11.Caption;
DataModule2.GL.Post;
//Penjualan bertambah di kredit DataModule2.GL.Append;
DataModule2.GL['Tanggal'] := DateTimePicker2.Date;
DataModule2.GL['AccId'] := DBEdit5.Text;
DataModule2.GL['AccType'] := 'Penjualan';
DataModule2.GL['Keterangan'] := 'No. SC: '+ DBEdit1.Text;
DataModule2.GL['Kredit'] := Label11.Caption;
DataModule2.GL.Post;
close;
end;
4.2.14. Form Surat Jalan
Form surat jalan terdiri dari master dan detail, dimana master menggunakan dbedit dan detail menggunakan dbgrid yang dapat langsung terhubung dengan database. Untuk data master akan disimpan dalam tabel Surat Jalan, sedangkan untuk detail akan disimpan dalam tabel Detail Surat Jalan.
Barang yang dikirim tidak dapat melebihi jumlah barang yang sudah disepakati dalam kontrak penjualan, dalam hal ini form penjualan. Untuk pengecekan data barang yang dikirim menggunakan coding program seperti di bawah ini.
procedure TSuratJln2.okClick(Sender: TObject);
begin
//Update nilai Dikirim ditabel detPenjualan With DataModule2 do
begin
DetSuratJln.First;
While not DetSuratJln.Eof do begin
Query1.SQL.Text := 'UPDATE TDetPenjualan set Dikirim = Dikirim + :Quantity Where
NoSC=' + QuotedStr(SuratJln['NoSC']) + 'AND KodeBarang = ' + QuotedStr(DetSuratJln['KodeBarang']);
Query1.ParamByName('Quantity').AsInteger := DetSuratJln['Quantity'];
Query1.ExecSQL;
DetSuratJln.Next;
end;
// Update SisaPengiriman di TDetPenjualan
Query1.SQL.Text := 'UPDATE TDetPenjualan set SisaPengiriman = Quantity - Dikirim
where NoSC = :SC';
Query1.ParamByName('SC').AsString := SuratJln['NoSC'];
Query1.ExecSQL;
//Update SudahDiterima di TPenjualan
Query1.SQL.Text := 'SELECT SUM(SisaPengiriman) AS Sisa FROM TDetPenjualan
WHERE NoSC = :NoSC';
Query1.ParamByName('NoSC').AsString := SuratJln['NoSC'];
Query1.Open;
if Query1['Sisa'] = 0 then begin
Query2.SQL.Text := 'UPDATE TPenjualan SET SudahDiterima='+
QuotedStr('T')+'WHERE NoSC = :NoSC';
Query2.ParamByName('NoSC').AsString := SuratJln['NoSC'];
Query2.ExecSQL;
end;
Query1.Close;
end;
DataModule2.SuratJln['Tanggal'] := DateTimePicker1.DateTime;
DataModule2.SuratJln.Post;
Close;
end;
end;
4.2.15. Form Terima Piutang
Form terima piutang digunakan untuk mencatat bukti pembayaran yang dilakukan oleh customer. Dalam memasukkan field-field dari form digunakan komponen dbedit yang dapat langsung terhubung dengan database. Data-data penerimaan piutang ini disimpan dalam tabel Terima Uang. Pada form terima piutang ini, selain masuk ke tabel Terima Uang, total pembayaran juga akan langsung masuk ke tabel Gabung yang secara otomatis masuk ke perhitungan akuntansi. Berikut contoh coding program untuk mencatat data penerimaan piutang yang langsung diperhitungkan dalam akuntansi.
procedure TTerimaPiutang.okClick(Sender: TObject);
begin
With DataModule2 do begin
TerimaUang['Tanggal'] := DateTimePicker1.Date;
TerimaUang.Post;
//cash bertambah di debit GL.Append;
GL['Tanggal'] := DateTimePicker1.Date;
GL['AccId'] := DBEdit7.Text;
GL['AccType'] := 'Kas';
GL['Keterangan'] := 'No. Kuitansi: '+ DBEdit1.Text;
GL['Debit'] := TerimaUang['Jumlah'];
GL.Post;
KasMasuk.Append;
KasMasuk['Tanggal'] := DateTimePicker1.Date;
KasMasuk['CashAcc'] := DBEdit7.Text;
KasMasuk['AccId'] := DBEdit3.Text;
KasMasuk['Keterangan'] := 'No. Kuitansi: '+ DBEdit1.Text;
KasMasuk['Kredit'] := TerimaUang['Jumlah'];
KasMasuk.Post;
//potongan penjualan bertambah di debit If DBEdit6.Text <> '0' then
begin
GL.Append;
GL['Tanggal'] := DateTimePicker1.Date;
GL['AccId'] := DBEdit3.Text;
GL['AccType'] := 'Potongan Penjualan';
GL['Keterangan'] := 'No. Kuitansi: '+ DBEdit1.Text;
GL['Debit'] := TerimaUang['Disc'];
GL.Post;
end;
//piutang berkurang di kredit GL.Append;
GL['Tanggal'] := DateTimePicker1.Date;
GL['AccId'] := DBEdit8.Text;
GL['AccType'] := 'Piutang Lancar';
GL['Keterangan'] := 'No. Kuitansi: '+ DBEdit1.Text;
GL['Kredit'] := TerimaUang['Total'];
GL.Post;
end;close;
end;
4.2.16. Form Jurnal Umum
Form jurnal umum digunakan untuk mencatat transaksi jurnal akuntansi selama periode akuntansi. Form ini menggunakan dbgrid yang dapat langsung terhubung dengan database. Data pada form ini akan disimpan dalam tabel Jurnal.
Selain masuk dalam tabel Jurnal, data-data yang masuk dalam jurnal umum juga
masuk ke Gabung yang secara otomatis akan masuk dalam perhitungan akuntansi.
Berikut adalah contoh coding untuk memasukkan data ke tabel Gabung.
procedure TJurnalUmum.okClick(Sender: TObject);
begin
if Label7.Caption <> '0' then begin
MessageDlg('Jumlah Debit dan Kredit tidak sama', MtInformation, [MbOk], 0);
end else begin
With DataModule2 do begin
Query2.SQL.Text := 'Select *, AccountType from TJurnal, TAccount Where AccountId=AccId';
Query2.Open;
while not Query2.Eof do begin
BJurnal.Append; GL.Append;
BJurnal['Nomor']:=Query2['Nomor'];
GL['Tanggal'] := Query2['Tanggal'];
BJurnal['Tanggal'] := Query2['Tanggal'];
GL['AccId'] := Query2['AccId'];
BJurnal['AccId'] := Query2['AccId'];
GL['AccType'] := Query2['AccountType'];
GL['Keterangan'] := Query2['Keterangan'];
BJurnal['Keterangan'] := Query2['Keterangan'];
GL['Debit'] := Query2['Debit'];
BJurnal['Debit'] := Query2['Debit'];
GL['Kredit'] := Query2['Kredit'];
BJurnal['Kredit'] := Query2['Kredit'];
BJurnal.Post;
GL.Post;
Query2.Next;
end;
Query2.Close;
Query1.SQL.Text := 'Delete * from TJurnal';
Query1.ExecSQL;
Jurnal.Refresh;
end;
close;
end; end;
4.2.17. Form Jurnal Kas Keluar
Form jurnal kas keluar digunakan untuk mencatat transaksi-transaksi akuntansi yang berkaitan dengan keluarnya kas kecuali pembayaran utang dagang.
Form jurnal kas keluar menggunakan dbgrid yang langsung terhubung dengan database dan akan tersimpan dalam tabel Jurnal Keluar Kas. Selain itu, data juga akan masuk dalam tabel Gabung, agar dapat secara otomatis masuk dalam
perhitungan akuntansi untuk menghasilkan laporan akuntansi. Berikut contoh coding program untuk form jurnal kas keluar.
procedure TKasKlr.BitBtn1Click(Sender: TObject);
begin
with DataModule2 do begin
if kas.State = dsEdit then Kas.Post;
Query2.SQL.Text := 'Select Sum(Total) as Tot from TBKas';
Query2.Open;
//Kas berkurang di GL debit GL.Append;
GL['Tanggal'] := DateTimePicker1.Date;
GL['AccId'] := Edit1.Text;
GL['Keterangan'] := 'Kas Keluar';
GL['AccType'] := 'Kas';
GL['Kredit'] := Query2['Tot'];
GL['Debit'] := 0;
GL.Post;
Query2.Close;
Query1.SQL.Text := 'Select * from TBKas';
Query1.Open;
Query1.First;
While not Query1.Eof do begin
//Masuk ke tabel kas keluar KasKeluar.Append;
KasKeluar['Tanggal'] := DateTimePicker1.Date;
KasKeluar['CashAcc'] := Edit1.Text;
KasKeluar['AccId'] := Query1['AccId'];
KasKeluar['Keterangan'] := Query1['Keterangan'];
KasKeluar['Debit'] := Query1['Total'];
KasKeluar.Post;
//masuk ke GL Kredit
Query2.SQL.Text := 'Select AccountType from TAccount where AccountId = '+
QuotedStr(Query1['AccId']);
Query2.Open;
GL.Append;
GL['Tanggal'] := DateTimePicker1.Date;
GL['AccId'] := Query1['AccId'];
GL['Keterangan'] := Query1['Keterangan'];
GL['AccType'] := Query2['AccountType'];
GL['Kredit'] := 0;
GL['Debit'] := Query1['Total'];
GL.Post;
Query2.Close; Query1.Next;
end;
Query1.Close;
Query1.SQL.Text := 'Delete from TBKas';
Query1.ExecSQL;
end; close; end;
4.2.18. Form Jurnal Kas Masuk
Form jurnal kas masuk digunakan untuk mencatat transaksi-transaksi akuntansi yang berkaitan dengan masuknya kas kecuali pelunasan piutang dagang.
Form jurnal kas masuk menggunakan dbgrid yang langsung terhubung dengan database dan akan tersimpan dalam tabel Jurnal Masuk Kas. Selain itu, data juga akan masuk dalam tabel Gabung, agar dapat secara otomatis masuk dalam perhitungan akuntansi untuk menghasilkan laporan akuntansi. Berikut contoh coding program untuk form jurnal kas masuk.
procedure TKasMsk.BitBtn1Click(Sender: TObject);
begin
with DataModule2 do begin
if Kas.State = dsEdit then Kas.Post;
Query2.SQL.Text := 'Select Sum(Total) as Tot from TBKas';
Query2.Open;
//kas bertambah di GL debit GL.Append;
GL['Tanggal'] := DateTimePicker1.Date;
GL['AccId'] := Edit1.Text;
GL['Keterangan'] := 'Kas Masuk';
GL['AccType'] := 'Kas';
GL['Debit'] := Query2['Tot'];
GL['Kredit'] := 0;
GL.Post;
Query2.Close;
Query1.SQL.Text := 'Select * from TBKas';
Query1.Open;
Query1.First;
While not Query1.Eof do begin
//Masuk ke tabel kas masuk KasMasuk.Append;
KasMasuk['Tanggal'] := DateTimePicker1.Date;
KasMasuk['CashAcc'] := Edit1.Text;
KasMasuk['AccId'] := Query1['AccId'];
KasMasuk['Keterangan'] := Query1['Keterangan'];
KasMasuk['Kredit'] := Query1['Total'];
KasMasuk.Post;
//masuk ke GL Kredit
Query2.SQL.Text := 'Select AccountType from TAccount where AccountId = '+
QuotedStr(Query1['AccId']);
Query2.Open;
GL.Append;
GL['Tanggal'] := DateTimePicker1.Date;
GL['AccId'] := Query1['AccId'];
GL['Keterangan'] := Query1['Keterangan'];
GL['AccType'] := Query2['AccountType'];
GL['Debit'] := 0;
GL['Kredit'] := Query1['Total'];
GL.Post;
Query2.Close;
Query1.Next;
end;
Query1.Close;
Query1.SQL.Text := 'Delete from TBKas';
Query1.ExecSQL;
end;
close;
end;
4.2.19. Form Tutup Buku
Proses tutup buku, adalah untuk men- set 0 account-account yang ditutup, sedangkan untuk account-account yang tidak ditutup akan dihitung saldo akhirnya. Sebelumnya dilakukan proses back-up agar sewaktu-waktu perusahaan dapat melihat kembali sejarah akuntansi di masa lampau. Selain itu, proses tutup buku juga akan menghapus semua data pembelian dan penjualan yang tidak lagi mempunyai utang dan piutang atau kewajiban untuk mengirim barang dan menerima barang. Berikut adalah contoh program untuk tutup buku.
procedure TBackup.BitBtn1Click(Sender: TObject);
function IsNull(V: Variant): Variant;
begin
if V = null then Result := 0 else Result := V;
end;
begin
if MessageDlg('Tutup buku akan menyimpan semua data.'+ #13 +'Apakah Anda Yakin?',
mtConfirmation, [mbYes, mbNo], 0) = mrYes then begin
Label3.Caption := 'Backup Data...';
Panel2.Visible := False;
Animate1.Active := True;
ProgressBar1.Position := 0;
// Copy File -- 10%
Repaint;
CopyFile(PChar(Edit1.Text), PChar(Edit2.Text), False);
ProgressBar1.Position := 10;
// Delete TGabung -- 15%
Label3.Caption := 'Hapus Buku Besar...';
Repaint;
With DataModule2 do begin
Query1.SQL.Text := 'Select accid, acctype, sum(debit-kredit) as total from tgabung group by accid, acctype';
Query1.Open; Query1.First;
Query2.SQL.Text := 'Delete * from TGabung';
Query2.ExecSQL;
ProgressBar1.Position := 15;
// Hitung saldo awal -- 25%
Label3.Caption := 'Hitung Saldo Awal...';
Repaint;
while not Query1.Eof do begin
GL.Append;
GL['Tanggal'] := now; GL['AccId'] := Query1['AccId'];
GL['Keterangan'] := 'Saldo Awal'; GL['AccType'] := Query1['AccType'];
if Query1['Total'] > 0 then GL['Debit'] := Query1['Total']
else GL['Kredit'] := Query1['Total']*-1;
GL.Post;
Query1.Next;
end;
Query1.Close;
ProgressBar1.Position := 25;
// Delete account TGabung -- 35%
Label3.Caption := 'Hapus Jurnal Umum...';
Repaint;
Query1.SQL.Text := 'Delete * from TGabung where acctype = '+ QuotedStr('Penjualan');
Query1.ExecSQL;
Query1.SQL.Text := 'Delete * from TGabung where acctype = '+ QuotedStr('Potongan Penjualan');
Query1.ExecSQL;
ProgressBar1.Position := 35;
// Hapus jurnal -- 45%
Label3.Caption := 'Hapus Jurnal Umum...';
Repaint;
Query1.SQL.Text := 'Delete * from TBJurnal';
Query1.ExecSQL;
Query1.SQL.Text := 'Select distinct a.* from TPembelian a, TUtangSupp b '+
'where a.NoSC = b.NoSC or SudahDiterima = ' + QuotedStr('F');
ProgressBar1.Position := 45;
// Hapus tabel pembelian -- 50%
Label3.Caption := 'Hapus Data Pembelian...';
Repaint;
Query1.Open;
Query2.SQL.Text := 'Delete * from TPembelian';
Query2.ExecSQL;
While Not Query1.Eof do begin
Pembelian.Append;
Pembelian['NoSC'] := Query1['NoSC'];
Pembelian['KodeSupplier'] := Query1['KodeSupplier'];
Pembelian['Tanggal'] := Query1['Tanggal'];
Pembelian.Post;
Query1.Next;
end;
Query1.Close;
ProgressBar1.Position := 50;
// Hapus detail pembelian -- 55%
Label3.Caption := 'Hapus Detail pembelian...';
Repaint;
Query1.SQL.Text := 'Select distinct a.* from TDetPembelian a, TUtangSupp b, TPembelian c
'+ ' where a.NoSC= b.NoSC and a.NoSC = c.NoSC or SudahDiterima = '+ QuotedStr('F');
Query1.Open;
Query2.SQL.Text := 'Delete * from TDetPembelian';
Query2.ExecSQL;
While Not Query1.Eof do begin
DetPembelian.Append;
DetPembelian['NoSC'] := Query1['NoSC'];
DetPembelian['KodeBarang'] := Query1['KodeBarang'];
DetPembelian['UnitPrice'] := Query1['UnitPrice'];
DetPembelian['Quantity'] := Query1['Quantity'];
DetPembelian.Post;
Query1.Next;
end;
Query1.Close;
ProgressBar1.Position := 55;
// Hapus tabel PO -- 70%
Label3.Caption := 'Hapus Order Pembelian...';
Repaint;
Query1.SQL.Text := 'Delete * from TPO';
Query1.ExecSQL;
Query1.SQL.Text := 'Delete * from TDetPO';
Query1.ExecSQL;
ProgressBar1.Position := 70;
// -- 100%
Label3.Caption := 'Done...';
Repaint;
ProgressBar1.Position := 100;
Panel2.Visible := True;
Animate1.Active := False;
end;
end;
4.3. Pembuatan Laporan Akuntansi
Pembuatan laporan akuntansi menggunakan Quick Report dari software Borland Delphi 5.0. Untuk menghasilkan laporan-laporan yang dibutuhkan menggunakan beberapa query untuk menampilkan field-field yang dibutuhkan.
Berikut adalah beberapa perintah sql dan coding program yang dibutuhkan dalam pembuatan laporan-laporan yang dibutuhkan.
4.3.1. Laporan Utang
Laporan utang adalah laporan yang menampilkan daftar utang perusahaan ke supplier yang belum terbayar. Berikut adalah perintah sql yang diperlukan untuk menghasilkan laporan utang.
select a.NoSC, c.Nama, (TotalRp/Kurs) as Total, TglPayment1, ((PaymentTerms2/100)*Total) as Payment1, TglPayment2, ((PaymentTerms3/100)*Total) as Payment2, TglPayment3, ((PaymentTerms4/100)*Total) as Payment3, TglPayment4, ((PaymentTerms5/100)*Total) as Payment4, Sisa
from TUtangSupp a, TPembelian b, TSupplier c
where a.NoSC = b.NoSC and c.KodeSupplier = a.KodeSupplier;
4.3.2. Laporan Piutang
Laporan piutang adalah laporan yang menampilkan daftar piutang yang dimiliki oleh perusahaan. Dalam menghasilkan laporan piutang digunakan 1 (satu) query dengan perintah sql sebagai berikut.
select a.*, TglJatuhTempo, nama
from TPiutangCust a, TPenjualan b, TCustomer c
where a.NoSC= b.NoSC and a.KodeCustomer = c.KodeCustomer order by tglJatuhTempo
4.3.3. Laporan Jurnal Umum
Laporan jurnal umum adalah laporan yang menampilkan kegiatan akuntansi perusahaan yang masuk dalam form jurnal umum. Dalam pembuatan laporan jurnal umum, tidak menggunakan query karena data yang diperlukan langsung dapat diambil dari tabel yang bersangkutan yaitu tabel Jurnal.
4.3.4. Laporan Buku Besar
Laporan buku besar adalah laporan yang menampilkan kegiatan akuntansi dari masing-masing account id yang dimiliki oleh perusahaan. Dalam pembuatan laporan buku besar tidak menggunakan query, karena data yang diperlukan dapat langsung diambil dari tabel. Untuk menyaring data yang akan di- print dalam pembuatan laporan digunakan perintah dalam Borland Delphi sebagai berikut.
procedure TBkBsr.ComboBox1Change(Sender: TObject);
begin
Case ComboBox1.ItemIndex of 0 : begin
DataModule2.Account.Filter := 'AccountType = '+ QuotedStr('Kas');
DataModule2.Account.Filtered := True;
end;
1 : begin
DataModule2.Account.Filter := 'AccountType = '+ QuotedStr('Piutang Lancar');
DataModule2.Account.Filtered := true;
end;
2 : begin
DataModule2.Account.Filter := 'AccountType = '+ QuotedStr('Aktiva Lancar');
DataModule2.Account.Filtered := true;
end;
3 : begin
DataModule2.Account.Filter := 'AccountType = '+ QuotedStr('Aktiva Tetap');
DataModule2.Account.Filtered := true;
end;
4 : begin
DataModule2.Account.Filter := 'AccountType = '+ QuotedStr('Aktiva Lainnya');
DataModule2.Account.Filtered := true;
end;
10: begin
DataModule2.Account.Filter := 'AccountType = '+
QuotedStr('Potongan Pembelian');
DataModule2.Account.Filtered := true;
end;
11: begin
DataModule2.Account.Filter := 'AccountType = '+ QuotedStr('Penjualan');
DataModule2.Account.Filtered := true;
end;
12: begin
DataModule2.Account.Filter := 'AccountType = '+
QuotedStr('Potongan Penjualan');
DataModule2.Account.Filtered := true;
end;
13: begin
DataModule2.Account.Filter := 'AccountType = '+ QuotedStr('Retur Penjualan');
DataModule2.Account.Filtered := true;
end;
end;
end;
4.3.5. Laporan Rugi Laba
Laporan rugi laba adalah suatu laporan yang menunjukkan pendapatan- pendapatan dan biaya-biaya dari suatu unit usaha untuk suatu periode tertentu.
Dalam menghasilkan laporan rugi laba, digunakan 9 (sembilan) query dengan perintah sql antara lain sebagai berikut.
select sum(debit - kredit)*-1 as TotPenjualan from tgabung
where acctype = 'Penjualan' group by acctype;
select sum(debit - kredit) as TotPotPenjualan from tgabung
where acctype = 'Potongan Penjualan' group by acctype;
Masing-masing query untuk menghasilkan 1 field yang dibutuhkan dalam pembuatan laporan rugi laba.
4.3.6. Laporan Perubahan Modal
Laporan perubahan modal adalah laporan yang memberikan penjelasan tentang perubahan-perubahan dalam posisi keuangan selama tahun buku yang bersangkutan. Dalam pembuatan laporan perubahan modal dibutuhkan 3 (tiga) query dengan perintah sql sebagai berikut.
select sum(Kredit) as SaldoAwa from tgabung
where (acctype = 'Modal') and (Keterangan = 'Saldo Awal');
select acctype, sum(debit - kredit)*-1 as TotModal from tgabung where (acctype = 'Modal')
group by acctype;
select acctype, sum(debit - kredit) as Drawing from tgabung where acctype = 'Drawings' group by acctype;
4.3.7. Laporan Neraca
Neraca adalah laporan yang menunjukkan keadaan keuangan perusahaan pada tanggal tertentu. Dalam pembuatan laporan neraca dibutuhkan 9 (sembilan) query, dimana 1 (satu) query untuk menghasilkan 1 (satu) field yang dibutuhkan.
Berikut beberapa perintah sql yang dibutuhkan untuk menghasilkan laporan neraca.
select acctype, sum(debit - kredit) as TotKas
from tgabung where acctype = 'Kas' group by acctype;
select acctype, sum(debit - kredit) as TotAktivaLancar
from tgabung where acctype = 'Aktiva Lancar' group by acctype;
select acctype, sum(debit - kredit)*-1 as TotUtLancar
from tgabung where acctype = 'Utang Lancar' group by acctype;
4.3.8. Laporan Penerimaan Kas
Laporan penerimaan kas berisi transaksi-transaksi akuntansi yang berpengaruh langsung terhadap penerimaan kas. Dalam pembuatan laporan penerimaan kas tidak dibutuhkan query, data yang dibutuhkan langsung diambil dari tabel yang bersangkutan yaitu tabel Jurnal Terima Kas. Laporan penerimaan kas dapat ditampilkan dengan penyaringan periode, berikut adalah coding program dalam menghasilkan laporan penerimaan kas.
if RadioButton2.Checked = true then begin
QRLabel4.Caption := 'Periode ' +
FormatDateTime('d-m-yyyy', DateTimePicker1.Date) + ' s/d ' + FormatDateTime('d-m-yyyy', DateTimePicker2.Date);
DataModule2.KasMasuk.Refresh;
DataModule2.KasMasuk.Filter := '(Tanggal >= ' + QuotedStr(DateToStr(DateTimePicker1.Date)) + ')' +
'and (Tanggal <= ' + QuotedStr(DateToStr(DateTimePicker2.Date)) + ')';
DataModule2.KasMasuk.Filtered := true;
end else begin
DataModule2.KasMasuk.Filtered := false;
DataModule2.KasMasuk.Refresh;
QRLabel4.Caption := ' ';
end;
QuickRep1.Preview;
4.3.9. Laporan pengeluaran kas
Laporan pengeluaran kas berisi transaksi-transaksi akuntansi yang berpengaruh langsung terhadap pengeluaran kas. Dalam pembuatan laporan pengeluaran kas tidak dibutuhkan query, data yang dibutuhkan langsung diambil
dari tabel yang bersangkutan yaitu tabel Jurnal Keluar Kas. Laporan pengeluaran kas dapat ditampilkan dengan penyaringan periode, berikut adalah coding program dalam menghasilkan laporan pengeluaran kas.
if RadioButton2.Checked = true then begin
QRLabel4.Caption := 'Periode ' +
FormatDateTime('d-m-yyyy', DateTimePicker1.Date) + ' s/d ' + FormatDateTime('d-m-yyyy', DateTimePicker2.Date);
DataModule2.KasKeluar.Filter := '(Tanggal >= ' + QuotedStr(DateToStr(DateTimePicker1.Date)) + ')' +
'and (Tanggal <= ' + QuotedStr(DateToStr(DateTimePicker2.Date)) + ')';
DataModule2.KasKeluar.Filtered := true;
end else begin
DataModule2.KasKeluar.Filtered := false;
DataModule2.KasKeluar.Refresh;
QRLabel4.Caption := ' ';
end;