Anda di halaman 1dari 25

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 <= "9") Or e.KeyChar = vbBack) Then e.Handled() = True End Sub Private Sub BtnBatal_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnBatal.Click Call TabelKosong() 168

Created By Uus Rusmawan

Call TampilGrid() Call Kosong2() Call Kosong1() TxtKodeBrg.Focus() LblBaris.Text = "" End Sub Private Sub Penjualan_Closed(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Closed Call TabelKosong() End Sub Private Sub TxtDibayar_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TxtDibayar.KeyPress If e.KeyChar = Chr(13) Then 'jumlah pembayaran tidak boleh lebih kecil dari total atau kosong If Val(TxtDibayar.Text) < Val(LblJmlTotal.Text) Or TxtDibayar.Text = "" Then MessageBox.Show("jumlah pembayaran kurang") TxtDibayar.Focus() Exit Sub Else 'jumlah kembali = dibayar - total LblJmlKembali.Text = Val(TxtDibayar.Text) - Val(LblJmlTotal.Text) 'setelah dibayar Button Simpan aktifkan BtnSimpan.Enabled = True BtnSimpan.Focus() End If End If End Sub Private Sub BtnSimpan_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles BtnSimpan.KeyPress 'menekan ESC di Button simpan menyebabkan 'dibayar dan jumlah kembali jadi kosong 'ini digunakan untuk mengantisipasi 'kesalahan pengisian pembayaran If e.KeyChar = Chr(27) Then TxtDibayar.Focus() TxtDibayar.Text = "" LblJmlKembali.Text = "" BtnSimpan.Enabled = False End If End Sub Private Sub BtnSimpan_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnSimpan.Click Try 'simpan data ke tabel penjualan Call MdlJual.Koneksi() Conn.Open() Dim SqlInput1 As String = "insert into Penjualan(Faktur,Tanggal,Jam,Item,Total,Dibayar,Kembali,KodeKsr) values ('" & LblFaktur.Text & "','" & LblTanggal.Text & "','" & LblJam.Text & "','" &

169

Created By Uus Rusmawan

LblJmlItem.Text & "','" & LblJmlTotal.Text & "','" & TxtDibayar.Text & "','" & LblJmlKembali.Text & "','" & LblKodeKsr.Text & "')" Dim Sqlinput2 As OleDbCommand = New OleDbCommand(SqlInput1, Conn) Sqlinput2.ExecuteNonQuery() Dim DS As New DataSet DA = New OleDb.OleDbDataAdapter("select * from transaksi", MdlJual.Koneksi) DA.Fill(DS) Dim TBL As DataTable = DS.Tables(0) Dim baris As Integer = 0 'simpan data ke tabel detail berulang-ulang sesuai banyaknya data For baris = 0 To LblBaris.Text - 1 Dim SqlInputDetail As String = "insert into Detail(Faktur,KodeBrg,JmlJual) values ('" & LblFaktur.Text & "','" & TBL.Rows(baris)(0) & "','" & TBL.Rows(baris)(3) & "')" Dim SqlDetail As OleDbCommand = New OleDbCommand(SqlInputDetail, Conn) SqlDetail.ExecuteNonQuery() Next baris Try 'kurangi jumlah stok barang setelah dijual dengan cara 'mencari kodenya dalam transaksi Dim DTSTransaksi As New DataSet DATransaksi = New OleDb.OleDbDataAdapter("select * from Transaksi", MdlJual.Koneksi) DATransaksi.Fill(DTSTransaksi) Dim TBLtransaksi As DataTable = DTSTransaksi.Tables(0) For baris = 0 To LblBaris.Text - 1 Dim DTSBarang As New DataSet DABarang = New OleDb.OleDbDataAdapter("select * from barang where kodebrg='" & TBLtransaksi.Rows(baris)(0) & "'", MdlJual.Koneksi) DABarang.Fill(DTSBarang) Dim TBLBarang As DataTable = DTSBarang.Tables(0) If TBLBarang.Rows.Count <> 0 Then 'kurangi jumlah stok barang setelah dijual Dim Sqledit1 As String = "Update Barang set Jumlahbrg='" & Val(TBLBarang.Rows(0)(4)) - Val(TBLtransaksi.Rows(baris)(3)) & "' where kodebrg='" & TBLtransaksi.Rows(baris)(0) & "'" Dim Sqledit2 As OleDbCommand = New OleDbCommand(Sqledit1, Conn) Sqledit2.ExecuteNonQuery() End If Next baris Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.Information, "Perhatian") End Try Call TabelKosong() Call TampilGrid() Call Kosong2() Call Otomatis() BtnSimpan.Enabled = False LblBaris.Text = "" 170

Created By Uus Rusmawan

TxtKodeBrg.Focus() Conn.Close() 'tampilkan faktur penjualan yang dibuat dengn crystal report Dim FLprFaktur As New LprFaktur FLprFaktur.TopMost() = True FLprFaktur.ShowDialog() FLprFaktur.Dispose() Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.Information, "Perhatian") TabelKosong() TampilGrid() End Try End Sub Private Sub ListBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles ListBox1.KeyPress 'mengisi kode barang dapat dilakukan dari list 'dengan cara memili lalu menekan enter If e.KeyChar = Chr(13) Then Dim DS As New DataSet DA = New OleDb.OleDbDataAdapter("select * from Barang where kodebrg='" & Microsoft.VisualBasic.Right(ListBox1.SelectedItem, 6) & "'", MdlJual.Koneksi) DA.Fill(DS) Dim TBL As DataTable = DS.Tables(0) If TBL.Rows.Count <> 0 Then TxtKodeBrg.Text = TBL.Rows(0)(0) LblNamaBrg.Text = TBL.Rows(0)(1) LblHargaJual.Text = TBL.Rows(0)(3) TxtJmlJual.Focus() End If End If 'baris yang ada dalam transaksi dapat dihapus 'dengan cara memilih kode barang dalam list lalu menekan tombol Escape If e.KeyChar = Chr(27) Then Try Call MdlJual.Koneksi() Conn.Open() Dim HapusBaris As String = "Delete * from transaksi where kode='" & Microsoft.VisualBasic.Right(ListBox1.SelectedItem, 6) & "'" Dim SqlKu As OleDbCommand = New OleDbCommand(HapusBaris, Conn) SqlKu.ExecuteNonQuery() Conn.Close() TampilGrid() Dim DS As New DataSet DA = New OleDb.OleDbDataAdapter("select * from transaksi", MdlJual.Koneksi) DA.Fill(DS) Dim TBL As DataTable = DS.Tables(0) If TBL.Rows.Count <> 0 Then Call CariTotal() Call CariItem() 171

Created By Uus Rusmawan

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 End Class

11.7 Pembuatan Laporan Hal-hal yang harus dipersiapkan dalam pembuatan laporan adalah Form dan laporan. Dalam pembuatan laporan boleh merancang file laporan dulu atau merancang form terlebih dahulu. Laporan dibuat dengan menggunakan Crystal Report yang terdiri dari Laporan Stok Barang, Laporan Penjualan Harian, Mingguan dan Bulanan. 11.7.1 Laporan Stok Barang Buatlah sebuah form untuk menampilkan laporan stok barang dengan bentuk seperti gambar 11.6.

Gambar 11.6 Form laporan stok barang Dengan mengikuti langkah-langkah yang dijelaskan pada bab 10, buatlah sebuah rancangan laporan stok barang seperti gambar 11.7.

172

Created By Uus Rusmawan

Gambar 11.7 Rancangan laporan stok barang Catatan : 1. 2. 3. 4. Nama Form = LprBarang.vb Nama Laporan = LapBarang.Rpt Posisi file LapBarang = C:\Pemrograman VB.NET\Program 6 Penjualan Access Tulis coding di bawah ini di dalam Form (LprBarang.vb) agar laporan selalu dalam keadaan Refresh.

Private Sub LprBarang_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.CrystalReportViewer1.RefreshReport() End Sub 5. Laporan ini akan dipangil dari menu utama dengan coding sebagai berikut:

Private Sub MenuItem8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem8.Click Dim FLprBarang As New LprBarang FLprBarang.TopMost() = True FLprBarang.ShowDialog() FLprBarang.Dispose() End Sub 6. Saat program di RUN akan dihasilkan bentuk laporan sebagai berikut:

Gambar 11.8 Laporan stok barang

173

Created By Uus Rusmawan

11.7.2 Laporan Harian Dengan mengikuti langkah-langkah pembuatan laporan stok barang, rancanglah sebuah laporan dengan bentuk seperti gambar 11.9 kemudian simpan dengan nama LapHarian. Laporan ini telah dikelompokkan berdasarkan tanggal dan nama barang sehingga tidak akan ada nama barang yang sama ditampilkan pada tanggal yang dipilih. Pengelompokan ini dapat dilakukan dengan menggunakan Insert Sumary atau pada level Group By dipilih tanggal dan nama barang.

Gambar 11.9 Rancangan laporan harian

Hasil laporan :

Gambar 11.10 Laporan harian 11.7.3 Laporan Mingguan Rancanglah sebuah laporan dengan bentuk seperti gambar 11.11 kemudian simpan dengan nama LapMingguan.

174

Created By Uus Rusmawan

Gambar 11.11 Rancangan laporan mingguan Hasil laporan antara tanggal 14 s/d 15 adalah sebagai berikut.

Gambar 11.12 Laporan Mingguan 11.7.4 Laporan Bulanan Rancanglah sebuah laporan dengan bentuk seperti gambar 11.13 kemudian simpan dengan nama LapBulanan.

175

Created By Uus Rusmawan

Gambar 11.13 Rancangan laporan bulanan

Hasil laporan :

Gambar 11.14 Laporan bulanan Catatan : Pembuatan laporan harian, mingguan dan bulanan ini telah dibahas dalam buku kami yang berjudul KONSEP DAN IMPLEMENTASI VB.6.0. Silakan dibaca. Bahkan pada saat buku ini dibuat kami merancang laporan dengan menggunakan Crystal Report versi 4.6 kemudian diimport ke Solution Explorer sekaligus melakukan konversi. Agar tidak terjadi pemborosan waktu dan tempat, laporan harian, mingguan dan bulanan ditampilkan dalam satu form dengan menyiapkan parameter yang akan dipilih. Bentuk form tersebut terlihat di bawah.

176

Created By Uus Rusmawan

Gambar 11.15 Rancangan Form laporan Coding : Imports System.Data Imports System.Data.OleDb Public Class Laporan Inherits System.Windows.Forms.Form #Region " Windows Form Designer generated code " Public Sub New() MyBase.New() InitializeComponent() End Sub ... #End Region 'fungsi untuk menampilkan tanggal pada masing-masing combo Sub TampilList() Dim DS As New DataSet DA = New OleDb.OleDbDataAdapter("select tanggal from Penjualan", MdlJual.Koneksi) DA.Fill(DS) Dim TBL As DataTable = DS.Tables(0) 'format tanggal di combo1 dan 4 dd/mm/yy Dim Temp1 As String 'format tanggal di combo2 dan 3 yyyy, MM, dd untuk membaca tanggal antara Dim Temp2 As String Dim i As Integer = 0 For i = 0 To TBL.Rows.Count - 1

177

Created By Uus Rusmawan

Temp1 = TBL.Rows(i)(0) Temp2 = Format(TBL.Rows(i)(0), "yyyy, MM, dd") ComboBox1.Items().Add(Temp1) ComboBox2.Items().Add(Temp2) ComboBox3.Items().Add(Temp2) ComboBox4.Items().Add(Temp1) Next End Sub Private Sub Laporan_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Call TampilList() End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 'tanggal harus dipilih dulu If ComboBox1.Text = "" Then MsgBox("Pilih Tanggal..!") ComboBox1.Focus() Exit Sub Else Try 'cari laporan yang tanggalnya dipilih di combo1 Dim Cari As String = "totext({Penjualan.Tanggal}) = '" & ComboBox1.Text & "'" Me.CrystalReportViewer1.SelectionFormula = Cari 'refresh laporan Me.CrystalReportViewer1.RefreshReport() 'pangil file laporan harian di posisi C:\...\... Me.CrystalReportViewer1.ReportSource = "C:\Pemrograman VB.NET\Program 6 Penjualan Access\bin\lapharian.rpt" Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.Information, "Perhatian") End End Try End If End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click 'kedua tanggal harus diisi If ComboBox2.Text = "" Or ComboBox3.Text = "" Then MsgBox("Pilih Tanggal pertama dan kedua..!") Exit Sub Else Try 'tampilkan laporan antara tgl ... s/d tgl ... Dim cari As String = "{Penjualan.Tanggal} in date (" & ComboBox2.Text & ") to date (" & ComboBox3.Text & ")" Me.CrystalReportViewer1.SelectionFormula = cari Me.CrystalReportViewer1.RefreshReport() Me.CrystalReportViewer1.ReportSource = "C:\Pemrograman VB.NET\Program 6 Penjualan Access\bin\LapMingguan.rpt" Catch ex As Exception 178

Created By Uus Rusmawan

MsgBox(ex.Message, MsgBoxStyle.Information, "Perhatian") End End Try End If End Sub Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click If ComboBox4.Text = "" Then MsgBox("Pilih Tanggal..!") Exit Sub Else Try 'tampilkan laporan yang bulannya = combo4 Dim cari As String = "month({Penjualan.Tanggal})=" & Month(ComboBox4.Text) & "" Me.CrystalReportViewer1.SelectionFormula = cari Me.CrystalReportViewer1.RefreshReport() Me.CrystalReportViewer1.ReportSource = "C:\Pemrograman VB.NET\Program 6 Penjualan Access\bin\LapBulanan.rpt" Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.Information, "Perhatian") End End Try End If End Sub End Class 11.8 Rincian Penjualan Form ini berfungsi untuk melihat rincian penjualan dengan cara memilih nomor faktur di ListBox. Buatlah form seperti gambar di bawah ini.

Gambar 11.16 Form rincian penjualan Coding Public Class Rincian Inherits System.Windows.Forms.Form #Region " Windows Form Designer generated code " 179

Created By Uus Rusmawan

Public Sub New() MyBase.New() InitializeComponent() End Sub ... ... #End Region Private Sub Rincian_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim DS As New DataSet DA = New OleDb.OleDbDataAdapter("select * from Penjualan", 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 Temp = TBL.Rows(i)(0) ListBox1.Items().Add(Temp) Next End Sub Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged DA = New OleDb.OleDbDataAdapter("select NamaBrg as [Nama Barang], HargaJual as [Harga Barang],JmlJual as Jumlah, HargaJual*JmlJual as Total from Barang,detail where Detail.kodeBrg=Barang.kodeBrg and Faktur='" & ListBox1.Text & "'", MdlJual.Koneksi) Dim DT As New DataTable DT.Clear() DA.Fill(DT) Me.DataGrid1.DataSource = DT Me.DataGrid1.ReadOnly = True Dim DS As New DataSet DA = New OleDb.OleDbDataAdapter("select Tanggal,NamaKsr from kasir,penjualan where penjualan.kodeksr=kasir.kodeksr and Faktur='" & ListBox1.Text & "'", MdlJual.Koneksi) DA.Fill(DS) Dim TBL As DataTable = DS.Tables(0) If TBL.Rows.Count <> 0 Then LblTanggal.Text = TBL.Rows(0)(0) LblKasir.Text = TBL.Rows(0)(1) End If End Sub End Class

180

Anda mungkin juga menyukai