bab 11 aplikasi penjualan

Upload: surya

Post on 08-Jul-2015

664 views

Category:

Documents


0 download

TRANSCRIPT

Created By Uus Rusmawan

BAB 11 APLIKASI PENJUALAN (Database Access) Pada proses pembuatan sebuah aplikasi menggunakan VB.Net yang databasenya mengguakan Access, kita dapat membuat project baru terlebih dahulu atau membuat database lebih awal sebelum membuat project baru. Tetapi disarankan untuk membuat project terlebih dahulu. Dengan demikian akan terbentuk dua buah folder dengan nama BIN dan OBJ pada direktori nama project. Perhatikan contoh di bawah ini.

Gambar 11.1 Otomasi pembentukan dua folder Salah satu alasan membuat project lebih awal adalah pada saat mengakses database kita akan membuat sebuah module tersendiri dengan salah satu baris coding: Conn = New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath.ToString & "\DBJualnet1.mdb") Dengan cara seperti ini database akan langsung dibaca ke folder BIN di bawah nama folder project. Jika pembuatan database lebih awal daripada pembuatan project tentu database tersebut tidak dapat disimpan di folder BIN karena memang belum dibuat. Jadi akses ke database harus ditulis lengkap dengan nama PATHnya. Salah satu cara jika database dibuat lebih awal adalah menyalin database tersebut ke folder BIN di bawah nama folder program. Setelah selesai membuat project baru (misalnya) dengan nama Program 6 Penjualan Access, langkah berikutnya yang harus dipersiapkan adalah membuat database dan beberapa tabel yang diperlukan berikut indexnya. 11.1 Rancangan Database Buatlah sebuah database baru dengan nama DBJualNet1.mdb dan simpan pada folder C:\Pemrograman VB.Net\Program 6 Penjualan Access\Bin. Tujuannya agar module dapat langsung membaca database di posisi tersebut. Nama Objek DBJualNet1 Barang Kasir Penjualan Detail Transaksi Keterangan File Database Tabel Tabel Tabel Tabel Tabel Temporer

156

Created By Uus Rusmawan

A. Tabel Barang Nama Field KodeBrg NamaBrg HargaBeli HargaJual JumlahBrg B. Tabel Kasir Nama Field KodeKsr NamaKsr PasswordKsr C. Tabel Penjualan Nama Field Faktur Tanggal Jam Item Total Dibayar Kembali KodeKsr D. Tabel Detail Nama Field Faktur KodeBrg JmlJual Type Text Text Numeric Lebar 10 6 Integer Keterangan Type Text Date/Time Date/Time Numeric Numeric Numeric Numeric Text Lebar 10 8 8 Integer Long Integer Long Integer Long Integer 5 Keterangan Field Index (Primer) Type Text Text Text Lebar 5 30 10 Keterangan Field Index Type Text Text Number Number Number Lebar 6 30 Long Integer Long Integer Integer Keterangan Field Index

Field Index (Tamu)

E. Tabel Transaksi Nama Field Kode Nama Harga Jumlah Total Type Text Text Numeric Numeric Numeric Lebar 6 30 Long Integer Integer Long Integer Keterangan

11.2 Membuat Module Seperti yang telah dijelaskan sebelumnya, bahwa pembuatan module ini digunakan untuk menyederhanakan penulisan coding saat mengakses database. Buatlah sebuah module dengan cara: 1. Klik menu project 2. Add module

157

Created By Uus Rusmawan

3. 4. 5.

Ubah nama Module1.vb menjadi MdlJual.vb Klik Open Ketik coding berikut.

Module MdlJual Public Function Koneksi() As OleDb.OleDbConnection Dim Conn As OleDb.OleDbConnection Conn = New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath.ToString & "\DBJualnet1.mdb") Return Conn Conn = Nothing End Function Public DA As OleDb.OleDbDataAdapter Public DT As New DataTable Public Cmd As OleDb.OleDbCommand Dafaktur digunakan untuk melakukan binding faktur otomatis Public DAFaktur As OleDb.OleDbDataAdapter Public strSQL As String Public Conn = MdlJual.Koneksi End Module

11.3 Data Kasir Kasir adalah orang yang akan melakukan transaksi penjualan, oleh karena itu harus diolah terlebih dahulu. Hal ini diperlukan karena sebelum melakukan transaksi penjualan kasir harus melakukan login. Dalam pembuatan program pengolahan data kasir ini jika Anda tidak ingin repot, maka salinlah dari program pengolahan data barang yang telah ada, kemudian ubahlah beberapa bagian yang diperlukan agar proses program sesuai dengan yang diharapkan. Tapi ada baiknya jika Anda membuatnya dari awal. Buatlah form seperti gambar di bawah ini.

Gambar 11.2 Form Kasir Catatan : Pada aplikasi yang sebenarnya, proses penghapusan data merupakan sesuatu yang cukup riskan dilakukan karena jika salah satu data kasir dihapus maka kita akan kehilangan jejak transaksi karena masing-masing tabel dalam database mempunyai relasi. Jadi pertimbangkan kembali masalah penghapusan ini dengan baik. Penjelasan program pada data kasir tidak lagi dilakukan dengan asumsi pembaca telah memahaminya pada bab sebelumnya karena pola programnya sama.

158

Created By Uus Rusmawan

Contoh Validasi Entri Data Kasir Kode : KSR01 Nama : UUS Password : LUPA Coding : Lihat di CD pendukung 11.4 Data Barang Dalam bab ini proses pembuatan program data barang tidak akan diulang kembali. Silakan disalin dari form yang telah ada sebelumnya dengan bentuk sesuai selera tetapi dapat mengakomodai semua field atau dengan bentuk form sebagai berikut.

Gambar 11.3 Form Barang Contoh Validasi Entri Data Barang Kode Nama Harga Beli Harga Jual Jumlah : : : : : KOP001 KOPI KAPAL API 1000 1300 100

Kode terdiri dari tiga digit pertama kode barang dan tiga digit terakhir nomor urut. Sebenarnya sistem pengkodean ini dapat Anda atur sendiri. Harga jual jelas tidak boleh lebih kecil sama dengan harga beli karena tidak akan mendapatkan laba penjualan. Coding : Lihat di CD Pendukung

159

Created By Uus Rusmawan

11.5 Login Setelah data kasir diolah langkah selanjutnya adalah membuat program login dengan tampilan form seperti gambar di berikut.

Gambar 11. 4 Form Login Pada kenyataannya kode kasir dapat kita sembunyikan dengan cara mengubah tinggi form. Jadi yang terlihat hanya nama dan password saja. Kode dan nama kasir dari form login akan diambil oleh form penjualan. Coding 'tambahkan dua baris coding ini di bagian paling atas Imports System.Data Imports System.Data.OleDb Public Class Login Inherits System.Windows.Forms.Form 'definisikan beberapa variabel untuk 'membuat koneksi,dataadapter dan sejenisnya Dim Conn As OleDbConnection Dim Cmd As OleDbCommand Dim DA As OleDb.OleDbDataAdapter #Region " Windows Form Designer generated code " Public Sub New() MyBase.New() InitializeComponent() End Sub ... ... abaikan coding di area ini. . . #End Region Private Sub Login_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'batasi jumlah karakter TxtNamaKsr.MaxLength = 30 TxtPasswordKsr.MaxLength = 10 'karakter password diubah menjadi * TxtPasswordKsr.PasswordChar.Equals("*") TxtPasswordKsr.Enabled = False TxtKodeKsr.Enabled = False

160

Created By Uus Rusmawan

End Sub Private Sub TxtNamaKsr_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TxtNamaKsr.KeyPress 'jika menekan ESC form ditutup If e.KeyChar = Chr(27) Then Me.Close() 'jika menekan enter setelah mengisi nama kasir data langsung dicari If e.KeyChar = Chr(13) Then Dim DS As New DataSet DA = New OleDb.OleDbDataAdapter("select * from kasir where NamaKsr='" & TxtNamaKsr.Text & "'", MdlJual.Koneksi) DA.Fill(DS) Dim TBL As DataTable = DS.Tables(0) 'jika data ditemukan If TBL.Rows.Count 0 Then TxtNamaKsr.Enabled = False TxtNamaKsr.Text = UCase(TxtNamaKsr.Text) TxtPasswordKsr.Enabled = True 'password jadi fokus TxtPasswordKsr.Focus() Exit Sub Else 'jika data tidak ditemukan munculkan pesan MessageBox.Show("Nama Kasir tidak terdaftar") 'kembali ke nama kasir TxtNamaKsr.Focus() TxtNamaKsr.Text = "" Exit Sub End If End If End Sub Private Sub TxtPasswordKsr_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TxtPasswordKsr.KeyPress If e.KeyChar = Chr(27) Then Me.Close() 'End If e.KeyChar = Chr(13) Then Dim DS As New DataSet DA = New OleDb.OleDbDataAdapter("select * from kasir where NamaKsr='" & TxtNamaKsr.Text & "' and passwordksr='" & TxtPasswordKsr.Text & "'", MdlJual.Koneksi) DA.Fill(DS) Dim tbl As DataTable = DS.Tables(0) 'jika data ditemukan If tbl.Rows.Count 0 Then 'tampilkan kode kasir TxtKodeKsr.Text = tbl.Rows(0)(0) TxtPasswordKsr.Enabled = False TxtPasswordKsr.Text = UCase(TxtPasswordKsr.Text) 'tutup form login Me.Close() 'tampilkan form penjualan Dim FPenjualan As New Penjualan FPenjualan.TopMost() = True 'kode dan nama kasir do form penjualan diambil dari login FPenjualan.LblKodeKsr.Text = TxtKodeKsr.Text 161

Created By Uus Rusmawan

FPenjualan.LblNamaKsr.Text = TxtNamaKsr.Text FPenjualan.ShowDialog() FPenjualan.Dispose() Else 'jika password salah munculkan pesan MessageBox.Show("Password Salah") TxtPasswordKsr.Focus() TxtPasswordKsr.Text = "" Exit Sub End If End If End Sub End Class 11.6 Transaksi Penjualan Transaksi penjualan merupakan form utama kita. Rancangan form dapat disesuaikan dengan kebutuhan, artinya tidak harus sama dengan ide penulis. Disini hanya digunakan tiga buah TextBox dengan alasan pada ketiga hal inilah data dientri. Sedangkan data lainnya hanya berupa tampilan yang tidak memerlukan entri data di dalamnya. Oleh karena itu sebagian besar objek terbuat dari Label. ListBox merupakan fasilitas tambahan untuk memudahkan mengentri kode barang dan dengan fasilitas ini pula kode barang yang telah dientri ke dalam DataGrid dapat dihapus atau dibatalkan.

Gambar 11.5 Form Penjualan Coding Imports System.Data Imports System.Data.OleDb Public Class Penjualan 'definisikan beberapa variabel untuk koneksi, adapter,dataset dan sejenisnya Inherits System.Windows.Forms.Form Dim Cmd As OleDbCommand Dim DA As OleDbDataAdapter Dim strConn, StrSQL As String 162

Created By Uus Rusmawan

Dim Dim Dim Dim Dim Dim Dim Dim Dim Dim Dim Dim

DS As New DataSet DSPenjualan As New DataSet DSDetail As New DataSet DSKasir As New DataSet DSBarang As New DataSet DABarang As OleDb.OleDbDataAdapter DATransaksi As OleDb.OleDbDataAdapter DAPenjualan As OleDb.OleDbDataAdapter DADetail As OleDb.OleDbDataAdapter DAKasir As OleDb.OleDbDataAdapter Harga, Jumlah, Hasil As Single Nama As String

#Region " Windows Form Designer generated code " Public Sub New() MyBase.New() InitializeComponent() End Sub ... ... abaikan coding di area ini #End Region Private Sub Penjualan_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Activated 'pada saat form aktif panggil nomor faktur otomatis Call Otomatis() 'isi lisbox dibersihkan ListBox1.Items.Clear() 'tampilkan isi list Call TampilList() 'button simpan dinonaktifkan BtnSimpan.Enabled = False 'tampilkan tanggal hari ini LblTanggal.Text = Today() 'kode barang jadi fokus TxtKodeBrg.Focus() 'kode kasir disembunyikan LblKodeKsr.Visible = False End Sub Private Sub Penjualan_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'saat form di-load tampilkan grid TampilGrid() 'kode barang jadi fokus TxtKodeBrg.Focus() End Sub Sub Otomatis() 'definisikan urutan dan hitung Dim Urutan As String Dim Hitung As Long 'cari faktur terbesar 163

Created By Uus Rusmawan

Dim DS As New DataSet DA = New OleDb.OleDbDataAdapter("select Faktur from Penjualan order by faktur desc", MdlJual.Koneksi) DA.Fill(DS) Dim TBL As DataTable = DS.Tables(0) 'jika masih kosong.. If TBL.Rows.Count = 0 Then 'nomor faktur adalah yymmdd0001 Urutan = Microsoft.VisualBasic.Right(Today(), 2) + Mid(Today(), 4, 2) + Microsoft.VisualBasic.Left(Today(), 2) + "0001" Else 'jika faktur sudah ada, lakukan binding dengan membaca faktur terakhir DAFaktur = New OleDb.OleDbDataAdapter("Select Faktur from Penjualan order by faktur desc", MdlJual.Koneksi) Dim DTTblFaktur As New DataTable DTTblFaktur.Clear() DAFaktur.Fill(DTTblFaktur) Me.BindingContext(DTTblFaktur).Position = Me.BindingContext(DTTblFaktur).Position.MaxValue 'jika 6 digit sebelah kiri faktur terakhir tidak sama dengan tanggal hari ini If Microsoft.VisualBasic.Left(TBL.Rows(0)(0), 6) Microsoft.VisualBasic.Right(Today(), 2) + Mid(Today(), 4, 2) + Microsoft.VisualBasic.Left(Today(), 2) Then 'maka nomor fakturnya adalah yymmdd0001 Urutan = Microsoft.VisualBasic.Right(Today(), 2) + Mid(Today(), 4, 2) + Microsoft.VisualBasic.Left(Today(), 2) + "0001" Else 'jika 6 digit sebelah kiri faktur terakhir = tanggal hari ini Hitung = (TBL.Rows(0)(0)) + 1 'maka nomor faktur terakhir + 1 Urutan = Microsoft.VisualBasic.Left(TBL.Rows(0)(0), 6) + Microsoft.VisualBasic.Right("0000" & Hitung, 4) End If End If 'tampilkan nomor faktur LblFaktur.Text = Urutan End Sub Sub CariTotal() Dim DS As New DataSet 'jumlahkan kolom total di tabel transaksi DA = New OleDb.OleDbDataAdapter("select sum(total) from transaksi", MdlJual.Koneksi) DA.Fill(DS) Dim TBL As DataTable = DS.Tables(0) 'tampilkan di LblTotal If TBL.Rows.Count 0 Then LblJmlTotal.Text = TBL.Rows(0)(0) Else LblJmlTotal.Text = 0 End Sub Sub CariItem() Dim DS As New DataSet 'jumlahkan kolom jumlah di tabel transaksi DA = New OleDb.OleDbDataAdapter("select sum(jumlah) from transaksi", MdlJual.Koneksi) 164

Created By Uus Rusmawan

DA.Fill(DS) Dim TBL As DataTable = DS.Tables(0) 'tampilkan di lbljmlitem If TBL.Rows.Count 0 Then LblJmlItem.Text = TBL.Rows(0)(0) Else LblJmlItem.Text = "" End Sub Sub CariBaris() Dim DS As New DataSet 'hitung jumlah kode di tabel transaksi DA = New OleDb.OleDbDataAdapter("select count(Kode) from transaksi", MdlJual.Koneksi) DA.Fill(DS) Dim TBL As DataTable = DS.Tables(0) 'tampilkan di lblbaris If TBL.Rows.Count 0 Then LblBaris.Text = TBL.Rows(0)(0) Else LblBaris.Text = "" End Sub Sub TampilList() Dim DS As New DataSet 'pilih semua field tabel barang DA = New OleDb.OleDbDataAdapter("select * from Barang", MdlJual.Koneksi) DA.Fill(DS) Dim TBL As DataTable = DS.Tables(0) Dim Temp As String Dim i As Integer = 0 For i = 0 To TBL.Rows.Count - 1 'tampilkan di list namanya dulu kemudian kode (beri spasi 50 kali) 'agar kode tidak terlihat. posisi dapat ditukar Temp = TBL.Rows(i)(1) & Space(50) & TBL.Rows(i)(0) 'Temp = TBL.Rows(i)(1) & vbTab & TBL.Rows(i)(0) ListBox1.Items().Add(Temp) Next End Sub Sub Kosong1() TxtKodeBrg.Text = "" LblNamaBrg.Text = "" LblHargaJual.Text = "" TxtJmlJual.Text = "" LblTotal.Text = "" LblStok.Text = "" End Sub Sub Kosong2() LblJmlTotal.Text = Nothing TxtDibayar.Text = Nothing LblJmlKembali.Text = Nothing LblJmlItem.Text = Nothing LblTotal.Text = Nothing LblBaris.Text = Nothing End Sub

165

Created By Uus Rusmawan

Sub TampilGrid() DA = New OleDb.OleDbDataAdapter("Select * From Transaksi", MdlJual.Koneksi) Dim DTTransaksi As New DataTable DTTransaksi.Clear() DA.Fill(DTTransaksi) Me.DataGrid1.DataSource = DTTransaksi Me.DataGrid1.ReadOnly = True End Sub Sub TabelKosong() DA = New OleDb.OleDbDataAdapter("Delete * From Transaksi", MdlJual.Koneksi) Dim DTTransaksi As New DataTable DTTransaksi.Clear() DA.Fill(DTTransaksi) DataGrid1.DataSource = DTTransaksi DataGrid1.ReadOnly = True End Sub Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick 'menampilkan jam komputer LblJam.Text = TimeOfDay() End Sub Private Sub BtnTutup_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnTutup.Click Call TabelKosong() 'End Me.Close() End Sub Private Sub TxtKodeBrg_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TxtKodeBrg.KeyPress 'jika menekan Tabulasi dibayar jadi fokus If e.KeyChar = Chr(9) Then TxtDibayar.Focus() 'jika menekan enter If e.KeyChar = Chr(13) Then TxtKodeBrg.Text = UCase(TxtKodeBrg.Text) Dim DS As New DataSet 'cari data barang yang kodenya diketik DA = New OleDb.OleDbDataAdapter("select * from barang where kodebrg='" & TxtKodeBrg.Text & "'", MdlJual.Koneksi) DA.Fill(DS) Dim TBL As DataTable = DS.Tables(0) 'jika data ditemukan If TBL.Rows.Count 0 Then 'tampilkan nama barang, harga jual dan jumlah stok LblNamaBrg.Text = TBL.Rows(0)(1) LblHargaJual.Text = TBL.Rows(0)(3) LblStok.Text = TBL.Rows(0)(4) 'jumlah jual jadi fokus TxtJmlJual.Focus() Exit Sub 166

Created By Uus Rusmawan

Else 'jika data tidak ditemukan munculkan pesan MessageBox.Show("Kode Barang Tidak Terdaftar") TampilGrid() 'kembali ke kode barang TxtKodeBrg.Focus() End If End If If e.KeyChar = Chr(27) Then 'jika menekan ESC di kode barang, maka hapus 'transaksi baris terakhir Try Dim DS As New DataSet DA = New OleDb.OleDbDataAdapter("select * from transaksi", MdlJual.Koneksi) DA.Fill(DS) Dim TBL As DataTable = DS.Tables(0) Call MdlJual.Koneksi() Conn.Open() Dim HapusBaris As String = "Delete * from transaksi where kode='" & TBL.Rows(LblBaris.Text - 1)(0) & "'" Dim SqlKu As OleDbCommand = New OleDbCommand(HapusBaris, Conn) SqlKu.ExecuteNonQuery() Conn.Close() TampilGrid() If TBL.Rows.Count 0 Then 'tampilkan total, jumlah dan item 'setelah proses penghapusan karena data telah berubah Call CariTotal() Call CariItem() Call CariBaris() Else Call Kosong2() End If Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.Information, "Perhatian") Call Kosong2() End Try End If End Sub Private Sub TxtJmlJual_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TxtJmlJual.KeyPress If e.KeyChar = Chr(13) Then 'kode barang harus diisi sebelum mengisi jumlah If TxtKodeBrg.Text = "" Then MessageBox.Show("Kode barang masih kosong") TxtJmlJual.Text = "" TxtKodeBrg.Focus() Exit Sub End If 'jumlah barang tidak boleh kosong If TxtJmlJual.Text = "" Then 167

Created By Uus Rusmawan

MessageBox.Show("Jumlah harus diisi") TxtJmlJual.Focus() Exit Sub End If 'jika jumlah barang telah diisi maka, jumlah jual 'tidak boleh lebih dari stok yang tersedia If TxtJmlJual.Text > 0 Then Dim DS As New DataSet DA = New OleDb.OleDbDataAdapter("select * from barang where kodebrg='" & TxtKodeBrg.Text & "'", MdlJual.Koneksi) DA.Fill(DS) Dim TBL As DataTable = DS.Tables(0) If TBL.Rows.Count 0 Then Dim stok As Integer stok = TBL.Rows(0)(4) If Val(TxtJmlJual.Text) > stok Then MessageBox.Show("Stok barang tinggal '" & stok & "', lihat jumlah stok di bawah") TxtJmlJual.Text = "" TxtJmlJual.Focus() Exit Sub End If End If 'jika jumlah barang yang dijual < dari stok, maka 'tampilkan total harganya LblTotal.Text = Val(LblHargaJual.Text) * Val(TxtJmlJual.Text) 'simpan data ke tabel transaksi (grid) Call MdlJual.Koneksi() Conn.Open() Dim TambahGrid As String = "insert into Transaksi(Kode,Nama,Harga,Jumlah,Total) values ('" & TxtKodeBrg.Text & "','" & LblNamaBrg.Text & "','" & LblHargaJual.Text & "','" & TxtJmlJual.Text & "','" & LblTotal.Text & "')" Dim SqlKu As OleDbCommand = New OleDbCommand(TambahGrid, Conn) SqlKu.ExecuteNonQuery() Conn.Close() Kosong1() TxtKodeBrg.Focus() TampilGrid() Call CariTotal() Call CariItem() Call CariBaris() End If End If 'hanya dapat diisi angka 0 - 9 If Not ((e.KeyChar >= "0" And e.KeyChar