Aplikasi Penjualan VB 6.0
Dengan menggunakan pola
yang sama seperti program pembelian, kita dapat membuat program
penjualan. Perbedaannya hanya sedikit saja, yaitu pada program pembelian jumlah
barang akan bertambah sedangkan pada program penjualan jumlah barang berkurang.
Jika diperlukan kita dapat menambahkan tabel palanggan.
Normalisasi File
Model normalisasi file
program penjualan dapat dilihat pada gambar di bawah ini, dengan asumsi
penjualan ini sifatnya bebas (bukan hanya pada pelanggan) maka tabel pelanggan
tidak dibuat.
Database Dan Tabel
Untuk mengetahui file
database dan struktur masing-masing tabel berikut type data dan kunci primer
maupun kunci tamunya silakan buka CD pendukung buku ini.
Asumsi – asumsi
Karena model program
penjualan hampir sama dengan program pembelian maka disini kami ambil beberapa
asumsi, antara lain:
1.
Pengolahan data barang
telah dibuat
2.
Pengolahan data kasir
telah dibuat
3.
Form login telah dibuat
Anda dapat melihat
semua program yang disebutkan di atas dalam CD pendukung buku.
Membuat Module
Langkah awal pembuatan
program penjualan kita mulai dengan pembuatan module dengan coding di bawah
ini.
Public Conn
As New ADODB.Connection
Public RSBarang As ADODB.Recordset
Public RSkasir As ADODB.Recordset
Public RSPenjualan As ADODB.Recordset
Public RSDetailJual As ADODB.Recordset
Public RSTR1 As ADODB.Recordset
Public RSTR2 As ADODB.Recordset
Public Sub BukaDB()
Set Conn = New ADODB.Connection
Set RSBarang = New ADODB.Recordset
Set RSkasir = New ADODB.Recordset
Set RSPenjualan = New ADODB.Recordset
Set RSDetailJual = New ADODB.Recordset
Set RSTR1 = New ADODB.Recordset
Set RSTR1 = New ADODB.Recordset
Conn.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data
Source=" & App.Path & "\ADOJual.mdb"
End Sub
Transaksi Penjualan
Ilustrasi pada program
ini adalah sebagai berikut:
1.
Nomor
faktur muncul secara otomatis, berubah setiap hari dan setiap ganti transaksi
setelah faktur sebelumnya disimpan.
2.
Nama
kasir dan kode kasir muncul secara otomatis dari hasil login. Kode kasir tidak
ditampilkan dalam form (LblKodeKsr.Visible = False).
3.
Tanggal
dan jam muncul secara otomatis diambil dari sistem komputer, oleh karena itu
diharapkan mengecek kembali validasi tanggal dan jam komputer sebelum program
dijalankan.
4.
Saat
melakukan transaksi, kode barang dapat diketik di kolom kode atau mengambil
dari list. Jika kode barang ditemukan maka datanya akan ditampilkan dan kita
tinggal mengisi jumlah penjualannya.
5.
Jumlah
total item barang dan total harga muncul otomatis setelah mengisi kode barang
dan jumlah barang yang dibeli, begitupun dengan jumlah total harga.
6.
Terakhir
kita tinggal mengisi jumlah pembayaran dan menyimpannya.
Data yang dihasilkan
oleh program penjualan terlihat pada kedua tabel berikut.
Penjualan
|
|||||||
Faktur
|
Tanggal
|
Jam
|
Total
|
Item
|
Dibayar
|
Kembali
|
KodeKsr
|
0709090001
|
08/09/07
|
10:38:26
PM
|
13750
|
6
|
15000
|
1250
|
KSR01
|
DetailJual
|
||
Faktur
|
KodeBrg
|
JmlJual
|
07090900011
|
KOP01
|
1
|
07090900012
|
MIE01
|
2
|
07090900013
|
PEP01
|
3
|
Dengan kondisi seperti
itu, selebihnya keputusan ada pada pembaca, apakah akan memilih model pertama
atau kedua. Jika kita mengikuti aturan main perancangan database maka model
kedua dapat dikatakan lebih baik dari model pertama, karena dalam sebuah tabel
harus ada satu kunci primer dan selebihnya adalah kunci tamu (dalam hal ini
kode barang). Tetapi model kedua sisi kelemahannya adalah tidak dapat menyimpan
data ke tabel detail dengan cara menggabungkan jumlah jual walaupun ada kode
barang yang sama, karena kita akan kehilangan nomor faktur yang setiap barisnya
terus berbeda.
Coding
Private Sub Timer1_Timer()
Jam = Time$
End Sub
Private Sub Form_Activate()
Adodc1.ConnectionString =
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & App.Path &
"\ADOJual.mdb"
Adodc1.RecordSource = "Transaksi"
Set DTGrid.DataSource = Adodc1
DTGrid.Refresh
If KodeKsr = "" Then
MsgBox
"Kasir tidak terdeteksi"
Login.Show
Exit Sub
End If
Call BukaDB
RSBarang.Open "Barang", Conn
List1.Clear
Do Until RSBarang.EOF
List1.AddItem
RSBarang!NamaBrg & Space(50) & RSBarang!KodeBrg
RSBarang.MoveNext
Loop
Call Auto
Call Tabel_Kosong
Adodc1.Recordset.MoveFirst
Tanggal = Date
CmdSimpan.Enabled = False
End Sub
Private Sub Form_Load()
KodeKsr =
Login.TxtKodeKsr
NamaKsr =
Login.TxtNamaKsr
DTGrid.Col = 1
CmdSimpan.Enabled
= False
End Sub
Private Sub Auto()
Call BukaDB
RSPenjualan.Open "select * from Penjualan Where Faktur
In(Select Max(Faktur)From Penjualan)Order By Faktur Desc", Conn
RSPenjualan.Requery
Dim Urutan As
String * 10
Dim Hitung As
Long
With RSPenjualan
If .EOF Then
Urutan =
Right(Date, 2) + Mid(Date, 4, 2) + Left(Date, 2) + "0001"
Faktur =
Urutan
Else
If
Left(!Faktur, 6) <> Right(Date, 2) + Mid(Date, 4, 2) + Left(Date, 2) Then
Urutan = Right(Date, 2) + Mid(Date, 4, 2) + Left(Date, 2) +
"0001"
Else
Hitung = (!Faktur) + 1
Urutan = (Right(Date, 2) + Mid(Date, 4, 2) + Left(Date, 2)) +
Right("0000" & Hitung, 4)
End If
End If
Faktur =
Urutan
End With
End Sub
Function Tabel_Kosong()
Adodc1.Recordset.MoveFirst
Do While Not
Adodc1.Recordset.EOF
Adodc1.Recordset.Delete
Adodc1.Recordset.MoveNext
Loop
For i = 1 To 10
Adodc1.Recordset.AddNew
Adodc1.Recordset!Nomor = i
Adodc1.Recordset.Update
Next i
DTGrid.Col = 1
End Function
Private Sub DTGrid_KeyDown(KeyCode As Integer, Shift As
Integer)
Select Case KeyCode
Case vbKeyEscape
Adodc1.Recordset!Kode = Null
Adodc1.Recordset!Nama = Null
Adodc1.Recordset!Harga = Null
Adodc1.Recordset!Jumlah = Null
Adodc1.Recordset!Total = Null
Adodc1.Recordset.Update
Call
TotalItem
Call
TotalHarga
DTGrid.Refresh
End Select
End Sub
Private Sub DTGrid_AfterColEdit(ByVal ColIndex As Integer)
If DTGrid.Col = 1
Then
Call BukaDB
RSBarang.Open
"Select * from Barang where Kodebrg='" & Adodc1.Recordset!Kode
& "'", Conn
If
RSBarang.EOF Then
Pesan =
MsgBox("Kode Barang Tidak Terdaftar")
DTGrid.Col = 1
Exit Sub
End If
Adodc1.Recordset!Kode = RSBarang!KodeBrg
Adodc1.Recordset!Nama = RSBarang!NamaBrg
Adodc1.Recordset!Harga = RSBarang!HargaJual
DTGrid.Col =
4
DTGrid.Refresh
Exit Sub
End If
If DTGrid.Col = 4
Then
Adodc1.Recordset!Jumlah = Adodc1.Recordset!Jumlah
Adodc1.Recordset!Total = Adodc1.Recordset!Harga *
Adodc1.Recordset!Jumlah
Adodc1.Recordset.Update
Adodc1.Recordset.MoveNext
DTGrid.Col =
1
Call
TotalHarga
Call
TotalItem
End If
End Sub
Function TotalItem()
On Error Resume Next
Adodc1.Recordset.MoveFirst
Item = 0
Do While Not Adodc1.Recordset.EOF And
Adodc1.Recordset!Jumlah <> 0
Item = Item +
Adodc1.Recordset!Jumlah
Adodc1.Recordset.MoveNext
Item = Item
Loop
End Function
Function TotalHarga()
On Error Resume Next
Adodc1.Recordset.MoveFirst
Total = 0
Do While Not Adodc1.Recordset.EOF And
Adodc1.Recordset!Total <> 0
Total = Total +
Adodc1.Recordset!Total
Adodc1.Recordset.MoveNext
Total =
Format(Total, "#,###,###")
Loop
End Function
Private Sub Bersihkan()
Item =
""
Total =
""
Dibayar =
""
Kembali =
""
End Sub
Private Sub Dibayar_KeyPress(Keyascii As Integer)
If Keyascii = 13
Then
If Dibayar =
"" Or Val(Dibayar) < (Total) Then
MsgBox "Jumlah Pembayaran Kurang"
Dibayar.SetFocus
Else
Dibayar =
Format(Dibayar, "###,###,###")
If
Dibayar = Total Then
Kembali = Dibayar - Total
Else
Kembali = Format(Dibayar - Total, "###,###,###")
End If
CmdSimpan.Enabled = True
CmdSimpan.SetFocus
End If
End If
If Not (Keyascii
>= Asc("0") And Keyascii <= Asc("9") Or Keyascii =
vbKeyBack) Then Keyascii = 0
End Sub
Private Sub CmdSimpan_Keypress(Keyascii As Integer)
If Keyascii = 27
Then
CmdSimpan.Enabled = False
Dibayar =
""
Dibayar.SetFocus
End If
End Sub
Private Sub CmdSimpan_Click()
Dim SQLTambahJual
As String
SQLTambahJual =
"Insert Into
Penjualan(Faktur,Tanggal,Jam,Total,Item,Dibayar,Kembali,KodeKsr)" & _
"values('" & Faktur & "','" & Tanggal
& "','" & Jam & "','" & Total &
"','" & Item & "','" & Dibayar & "','"
& Kembali & "','" & KodeKsr & "')"
Conn.Execute
(SQLTambahJual)
Adodc1.Recordset.MoveFirst
Do While Not
Adodc1.Recordset.EOF
If
Adodc1.Recordset!Kode <> vbNullString Then
Dim
SQLTambahDetail As String
SQLTambahDetail = "Insert Into Detailjual(Faktur,Kodebrg,JmlJual)
" & _
"values ('" & Faktur + Adodc1.Recordset!Nomor &
"','" & Adodc1.Recordset!Kode & "','" &
Adodc1.Recordset!Jumlah & "')"
Conn.Execute (SQLTambahDetail)
End If
Adodc1.Recordset.MoveNext
Loop
Adodc1.Recordset.MoveFirst
Do While Not
Adodc1.Recordset.EOF
If
Adodc1.Recordset!Kode <> vbNullString Then
Call
BukaDB
RSBarang.Open "Select * from Barang where Kodebrg='" &
Adodc1.Recordset!Kode & "'", Conn
If Not
RSBarang.EOF Then
Dim
Kurangi As String
Kurangi = "update barang set jumlahbrg='" &
RSBarang!JumlahBrg - Adodc1.Recordset!Jumlah & "' where
kodebrg='" & Adodc1.Recordset!Kode & "'"
Conn.Execute (Kurangi)
End If
End If
Adodc1.Recordset.MoveNext
Loop
Bersihkan
Form_Activate
Call Cetak
End Sub
Private Sub CmdBatal_Click()
Dibayar =
""
Total =
""
Item =
""
Form_Activate
End Sub
Private Sub Cmadodc1utup_Click()
Unload Me
End Sub
Function Cetak()
Call BukaDB
RSPenjualan.Open "select * from penjualan Where Faktur
In(Select Max(Faktur)From penjualan)Order By Faktur Desc", Conn
Layar.Show
Dim Total, JmlJual, JmlHasil As Double
Dim MGrs As String
Layar.Font = "Courier New"
Layar.Print
Layar.Print
RSkasir.Open "select * From Kasir where KodeKsr=
'" & RSPenjualan!KodeKsr & "'", Conn
Layar.Print Tab(5); "Faktur :
"; RSPenjualan!Faktur
Layar.Print Tab(5); "Tanggal :
"; Format(RSPenjualan!Tanggal, "DD-MMMM-YYYY")
Layar.Print Tab(5); "Jam :
"; Format(RSPenjualan!Jam, "HH:MM:SS")
Layar.Print Tab(5); "Kasir :
"; RSkasir!NamaKsr
MGrs = String$(33, "-")
Layar.Print Tab(5); MGrs
RSDetailJual.Open "select * from detailjual Where
left(Faktur,10)='" & RSPenjualan!Faktur & "'", Conn
RSDetailJual.MoveFirst
No = 0
Do While Not RSDetailJual.EOF
No = No + 1
Set RSBarang =
New ADODB.Recordset
RSBarang.Open
"select * From Barang where Kodebrg= '" & RSDetailJual!KodeBrg
& "'", Conn
RSBarang.Requery
Harga =
RSBarang!HargaJual
Jumlah =
RSDetailJual!JmlJual
Hasil = Harga *
Jumlah
Layar.Print
Tab(5); No; Space(2); RSBarang!NamaBrg
Layar.Print
Tab(10); RKanan(Jumlah, "##"); Space(1); "X";
Layar.Print
Tab(15); Format(Harga, "###,###,###");
Layar.Print
Tab(25); RKanan(Hasil, "###,###,###")
RSDetailJual.MoveNext
Loop
Layar.Print Tab(5); MGrs
Layar.Print Tab(5); "Total :";
Layar.Print Tab(25); RKanan(RSPenjualan!Total,
"###,###,###");
Layar.Print Tab(5); "Dibayar :";
Layar.Print Tab(25); RKanan(RSPenjualan!Dibayar,
"###,###,###");
Layar.Print Tab(5); MGrs
Layar.Print Tab(5); "Kembali :";
If RSPenjualan!Dibayar = RSPenjualan!Total Then
Layar.Print
Tab(34); RSPenjualan!Dibayar - RSPenjualan!Total
Else
Layar.Print Tab(25);
RKanan(RSPenjualan!Dibayar - RSPenjualan!Total, "###,###,###");
End If
Layar.Print Tab(5); MGrs
Layar.Print Tab(5); "Terima Kasih atas kunjungan
Anda"
Layar.Print
Layar.Print
Layar.Print
Conn.Close
End Function
Private Function RKanan(NData, CFormat) As String
RKanan =
Format(NData, CFormat)
RKanan =
Space(Len(CFormat) - Len(RKanan)) + RKanan
End Function
Private Sub List1_keyPress(Keyascii As Integer)
If Keyascii = 13
Then
If
DTGrid.SelText <> Right(List1, 5) Then
DTGrid.SelText = Right(List1, 5)
Adodc1.Recordset.Update
Call
BukaDB
RSBarang.Open "Select * from Barang where KodeBrg='" &
Right(List1, 5) & "'", Conn,
adOpenDynamic, adLockOptimistic
RSBarang.Requery
If Not
RSBarang.EOF Then
Adodc1.Recordset!Kode = RSBarang!KodeBrg
Adodc1.Recordset!Nama = RSBarang!NamaBrg
Adodc1.Recordset!Harga = RSBarang!HargaJual
Adodc1.Recordset.Update
DTGrid.SetFocus
DTGrid.Col = 4
End If
End If
End If
End Sub
Private Sub CmdTutup_Click()
Unload Me
End Sub
Laporan Penjualan
Catatan :
Dengan kecerdikan yang
Anda miliki, kami yakin Anda dapat membuat program penjualan dengan konsep ADO hanya dalam waktu 3
menit saja. Caranya adalah sebagai berikut :
1.
Salinlah
semua program pembelian ke folder lain.
2.
Ubah
nama database dari ADOBeli.mdb menjadi ADOJual.mdb
3.
Ubahlah
semua hal yang berkaitan dengan kata BELI menjadi kata JUAL
4.
Buanglah
semua hal yang berkaitan dengan tabel pemasok (jika itu memang tidak
dibutuhkan, artinya penjualan yang dilakukan sifatnya bebas).
5.
Sebaliknya,
jika penjualan ini sifatnya terbatas hanya pada pelanggan, maka ubahlah semua
hal yang berkaitan dengan tabel pemasok menjadi tabel pelanggan.
6.
Jika
data yang disimpan akan dibuat mirip dengan program pembelian (nomor faktur di
tabel detail disimpan berulang tanpa adanya penambahan nomor urut transaksi
yang diambil dari Grid), maka hapuslah coding berikut ini (yang dicetak tebal) pada
saat data disimpan.
Adodc1.Recordset.MoveFirst
Do While Not
Adodc1.Recordset.EOF
If
Adodc1.Recordset!Kode <> vbNullString Then
Dim
SQLTambahDetail As String
SQLTambahDetail = "Insert Into Detailjual(Faktur,Kodebrg,JmlJual)
" & _
"values ('" & Faktur +
Adodc1.Recordset!nomor & "','" & Adodc1.Recordset!Kode &
"','" & Adodc1.Recordset!Jumlah & "')"
Conn.Execute (SQLTambahDetail)
End If
Adodc1.Recordset.MoveNext
Loop
Sekarang, bagaimana
menurut Anda, membuat program penjualan begitu mudah bukan..?. dan terakhir,
kembali gunakan kecerdikan Anda..! bukankah dengan kedua program tersebut Anda dapat
membuat program inventori…?.
1 comments so far
pelpeglob-ri Cherrie Hanisch download
enildislang
EmoticonEmoticon