Assalamu'alaikum Wr Wb
Selamat Siang/Malam/Pagi/Sore, Selamat datang di Web sibukngoding.com. Masih di seri pembuatan Aplikasi Penjualan dengan menggunakanVB.Net dan database Maria DB. Setelah kemarin saya jelaskan tentang pembuatan form Transaksi Pembelian, pada kesempatan kali ini saya akan jelaskan source code yang digunakan dalam form Transaksi Pembelian.
Untuk langkah – langkahnya adalah sebagai berikut :
1. Import Data ODBC
Tekan F7 untuk masuk ke layar coding, kita import dulu ODBC nya karena untuk koneksi kita menggunakan Connector ODBC. Tuliskan Source Code di bawah ini di bagian paling atas.
Imports System.Data.Odbc
2. Sub Bersihkan barang
Berfungsi untuk membersihkan textbox yang terisi di bagian input barang pada transaksi.
Sub bersihkanbarang()
txtkodebarang.Clear()
txtnamabarang.Clear()
txthargabeli.Text = "0"
txtjumlah.Text = "0"
txtsubtotal.Text = "0"
txtkodebarang.Focus()
End Sub
3. Sub No Otomatis
Untuk membuat no otomatis pada nomor faktur pembelian.
Sub
Nootomatis()
Koneksi()
Dim Urutan AsString
Dim Hitung, Cari AsLong
CMD = New OdbcCommand("Select
* from tb_pembelian where no_faktur in (select max(no_faktur) from tb_pembelian)",
Conn)
RD = CMD.ExecuteReader
RD.Read()
If Not
RD.HasRows Then
Urutan = "NJ"&Date.Now.Year &"0001"
Else
Cari = Microsoft.VisualBasic.Right(RD.GetString(0),
4)
If Microsoft.VisualBasic.Left(RD.GetString(0), 6) <>"NJ"&Date.Now.Year
Then
Urutan
= "NJ"&Date.Now.Year &"0001"
Else
Hitung =
Microsoft.VisualBasic.Right(RD.GetString(0), 4) + 1
Urutan = "NJ"&Date.Now.Year & Microsoft.VisualBasic.Right("0000"& Hitung, 4)
End If
End If
RD.Close()
txtnofaktur.Text
= Urutan
Conn.Close()
End Sub
4. Sub AutoNumberRowsForGrid
Untuk membuat nomor di datagridview.
Sub AutoNumberRowsForGrid()
If DGV IsNotNothingThen
Dim count AsInteger = 0
While (count <= (DGV.Rows.Count - 1))
DGV.Rows(count).HeaderCell.Value = String.Format((count
+ 1).ToString(), "0")
count += 1
End While
End If
End Sub
5. Sub Buat Kolom
Untuk membuat dan menampilkan kolom pada datagridview.
Sub
BuatKolom()
With DGV
.Columns.Add("kode_barang",
"Kode_Barang")
.Columns.Add("nama_barang",
"Nama_Barang")
.Columns.Add("harga_beli", "Harga_Beli")
.Columns.Add("jumlah", "Jumlah")
.Columns.Add("sub_total", "SubTotal")
'-----------------
.Columns("Kode_Barang").Width = 90
.Columns("Nama_Barang").Width = 150
.Columns("Harga_Beli").Width = 90
.Columns("Jumlah").Width = 70
.Columns("Sub_Total").Width = 90
End With
End Sub
6. Sub Autocomplete Barang
Untuk membuat sugesti pada txtkodebarang
Sub
Autocompletebarang()
Koneksi()
CMD = New
OdbcCommand("SELECT kode_barang FROM
tb_barang", Conn)
RD = CMD.ExecuteReader
While
RD.Read
With
txtkodebarang
.AutoCompleteCustomSource.Add(RD(0).ToString)
.AutoCompleteMode = AutoCompleteMode.Suggest
.AutoCompleteSource = AutoCompleteSource.CustomSource
End With
End While
Conn.Close()
End Sub
7. Sub Autocomplete Pemasok
Untuk membuat sugesti pada txtkodepemasok
Sub
Autocompletepemasok()
Koneksi()
CMD = New
OdbcCommand("SELECT kode_pemasok FROM
tb_pemasok", Conn)
RD = CMD.ExecuteReader
While
RD.Read
With txtkodepemasok
.AutoCompleteCustomSource.Add(RD(0).ToString)
.AutoCompleteMode = AutoCompleteMode.Suggest
.AutoCompleteSource = AutoCompleteSource.CustomSource
End With
End While
Conn.Close()
End Sub
8. Sub Awal
Untuk mengatur tampilan awal pada saat aplikasi pertama kali dijalankan.
Sub awal()
Nootomatis()
DTP_tgl.Text =
Format(Now, "dd MMMM yyyy")
txtnofaktur.Enabled = False
DTP_tgl.Enabled
= False
RB_nonpemasok.Checked = True
txtkodepemasok.Enabled = False
txtnamapemasok.Enabled = False
txtkodepemasok.Text = "000"
txtnamapemasok.Text = "-"
txtnamabarang.Enabled = False
txthargabeli.Enabled
= False
txtsubtotal.Enabled = False
txttotalbarang.Text = "0"
txttotalharga.Text = "0"
txttotalbayar.Text = "0"
txtdiskon.Text
= "0"
txttotalbayar.Text = "0"
txtdibayar.Text
= "0"
txtkembalian.Text = "0"
txttotalbarang.Enabled = False
txttotalharga.Enabled = False
txttotalbayar.Enabled = False
txtkembalian.Enabled = False
DGV.Rows.Clear()
bersihkanbarang()
End Sub
9. Event Form Load
Klik 2x pada form lalu ketikkan source code berikut :
Private Sub FormPembelian_Load(ByVal
sender AsObject, ByVal
e As EventArgs) HandlesMyBase.Load
BuatKolom()
Autocompletebarang()
Autocompletepemasok()
awal()
End Sub
10. Event Keydown pada txtkodebarang
Bertujuan untuk menampilkan data nama barang dan harga beli ke dalam txtnamabarang dan txthargabeli setelah kode barang dipilih. Untuk masuk ke event KeyDown silahkan klik pada bagian (General) pilih txtkodebarang, kemudian pada bagian (Declaration) pilih KeyDown dan ketikkan coding berikut :
Private Sub TxtKodeBarang_KeyDown(ByVal
sender AsObject, ByVal
e As KeyEventArgs) Handles
txtkodebarang.KeyDown
If
e.KeyCode = Keys.Enter Then
Koneksi()
CMD = New OdbcCommand("SELECT
* FROM tb_barang WHERE kode_barang = '" + txtkodebarang.Text + "'", Conn)
RD =
CMD.ExecuteReader
If RD.Read Then
txtkodebarang.Text = RD(0).ToString
txtnamabarang.Text = RD(1).ToString
txthargabeli.Text
= RD(4).ToString
Conn.Close()
txtjumlah.Focus()
Else
MsgBox("Kode Barang Yang Anda Inputkan Salah")
txtkodebarang.Focus()
End If
End If
End Sub
11. Event Click pada BtPlus (Tombol +)
Berfungsi untuk menyimpan data kode barang (txtkodebarang), nama barang (txtnamabarang), harga beli (txthargabeli), jumlah (txtjumlah) dan subtotal (txtsubtotal) ke dalam datagridview. Klik 2x pada btplus lalu masukkan source code berikut :
Private Sub btplus_Click(ByVal sender AsObject, ByVal e As EventArgs) Handles
btplus.Click
If
Len(Trim(txtkodebarang.Text)) = 0 Then
MsgBox("Kode Barang Belum Diisi",
MsgBoxStyle.Information)
txtkodebarang.Focus()
Else If Len(Trim(txtnamabarang.Text)) = 0 Then
MsgBox("Data Belum Lengkap",
MsgBoxStyle.Information)
txtkodebarang.Focus()
Else
If Len(Trim(txthargabeli.Text)) = 0 Then
MsgBox("Data Belum Lengkap",
MsgBoxStyle.Information)
txtkodebarang.Focus()
Else If (Len(Trim(txtjumlah.Text))
= 0) Or (txtjumlah.Text = "0") Then
MsgBox("Jumlah Belum dimasukkan",
MsgBoxStyle.Information)
txtjumlah.Focus()
Else If Len(Trim(txtsubtotal.Text)) = 0 Then
MsgBox("Data Belum Lengkap",
MsgBoxStyle.Information)
txtjumlah.Focus()
Else
Try
Dim
rownumber AsInteger = DGV.Rows.Add()
DGV.Rows.Item(rownumber).Cells(0).Value = txtkodebarang.Text
DGV.Rows.Item(rownumber).Cells(1).Value = txtnamabarang.Text
DGV.Rows.Item(rownumber).Cells(2).Value = txthargabeli.Text
DGV.Rows.Item(rownumber).Cells(3).Value = txtjumlah.Text
DGV.Rows.Item(rownumber).Cells(4).Value = txtsubtotal.Text
'Hitung Total Harga di datagrid
Dim
totalharga, totalbarang AsInteger
totalharga = 0
totalbarang = 0
For t AsInteger = 0 To
DGV.Rows.Count - 1
totalharga = totalharga + Val(DGV.Rows(t).Cells(4).Value)
totalbarang = totalbarang + Val(DGV.Rows(t).Cells(3).Value)
Next
txttotalharga.Text = totalharga
txttotalbarang.Text = totalbarang
txttotalbayar.Text = totalharga
AutoNumberRowsForGrid()
bersihkanbarang()
Catch
ex As Exception
MsgBox("Gagal !!!!", MsgBoxStyle.Information)
End Try
End If
12. Event Click pada BtMin (Tombol -)
Berfungsi untuk menghapus data yang ada di dalam datagridview ketika terjadi salah input.
Klik 2x pada btmin lalu masukkan coding berikut :
Private Sub btmin_Click(ByVal sender AsObject, ByVal e As EventArgs) Handles
btmin.Click
Try
If
DGV.CurrentRow.Index <> DGV.NewRowIndex Then
DGV.Rows.RemoveAt(DGV.CurrentRow.Index)
'Hitung Total Harga di datagrid
Dim
totalharga, totalbarang AsInteger
totalharga = 0
totalbarang = 0
For t AsInteger = 0 To
DGV.Rows.Count - 1
totalharga = totalharga + Val(DGV.Rows(t).Cells(4).Value)
totalbarang = totalbarang + Val(DGV.Rows(t).Cells(3).Value)
Next
txttotalharga.Text = totalharga
txttotalbarang.Text = totalbarang
txttotalbayar.Text = totalharga
End If
Catch ex As Exception
MsgBox("Tidak Ada Data yang DiHapus",
MsgBoxStyle.Information)
End Try
End Sub
13. Event Keydown pada txtkodepemasok
Terdapat fungsi untuk menampilkan nama pemasok di txtnamapemasok berdasarkan kode pemasok yang dipilih. Untuk masuk ke event Keydown silahkan klik pada bagian (General) pilih txtkodepemasok, kemudian pada bagian (Declaration) pilih KeyDown dan ketikkan coding berikut :
Private Sub TxtKodePemasok_KeyDown(ByVal
sender AsObject, ByVal
e As KeyEventArgs) Handles
txtkodepemasok.KeyDown
If
e.KeyCode = Keys.Enter Then
Koneksi()
CMD = New OdbcCommand("SELECT
* FROM tb_pemasok WHERE kode_pemasok = '" + txtkodepemasok.Text + "'", Conn)
RD =
CMD.ExecuteReader
If
RD.Read Then
txtkodepemasok.Text = RD(0).ToString
txtnamapemasok.Text = RD(1).ToString
End If
Conn.Close()
txtkodebarang.Focus()
End If
End Sub
14. Event Keydown pada txtjumlah
Terdapat fungsi yang digunakan untuk mencari subtotal. Untuk masuk ke event Keydown klik pada bagian (General) pilih txtjumlah, kemudian pada bagian (Declaration) pilih KeyDown dan ketikkan coding berikut :
Private Sub TxtJumlah_KeyDown(ByVal
sender AsObject, ByVal
e As KeyEventArgs) Handles
txtjumlah.KeyDown
If
e.KeyCode = Keys.Enter Then
'Rumus Mencari Sub Total
txtsubtotal.Text = Val(txthargabeli.Text) *
Val(txtjumlah.Text)
btplus.Focus()
End If
End Sub
15. Event Keypress pada txtjumlah
Terdapat fungsi yang digunakan agar txtjumlah hanya bisa diinput angka. Untuk masuk ke event Keypress klik pada bagian (General) pilih txtjumlah, kemudian pada bagian (Declaration) pilih KeyPress dan ketikkan coding berikut :
Private Sub txtjumlah_KeyPress(ByVal
sender AsObject, ByVal
e As KeyPressEventArgs) Handles txtjumlah.KeyPress
'Agar hanya angka yang bisa diinputkan
If Not IsNumeric(e.KeyChar) And
e.KeyChar <> Chr(13) And e.KeyChar
<> vbBack Then e.Handled = True
End Sub
16. Event Keydown pada txtdiskon
Terdapat fungsi yang digunakan untuk menghitung total bayar setelah diskon. Disini diskon yang digunakan berupa persentase. Untuk masuk ke event Keydown klik pada bagian (General) pilih txtdiskon, kemudian pada bagian (Declaration) pilih KeyDown dan ketikkan coding berikut :
Private Sub txtdiskon_KeyDown(ByVal
sender AsObject, ByVal
e As KeyEventArgs) Handles
txtdiskon.KeyDown
If e.KeyCode = Keys.Enter Then
'Rumus mencari total bayar setelah didiskon
txttotalbayar.Text =
Val(txttotalharga.Text) - ((Val(txtdiskon.Text) / 100) * Val(txttotalharga.Text))
txtdibayar.Focus()
End If
End Sub
17. Event Keypress pada txtdiskon
Terdapat fungsi yang digunakan agar txtdiskon hanya bisa diinput angka. Untuk masuk ke event Keypress klik pada bagian (General) pilih txtdiskon, kemudian pada bagian (Declaration) pilih KeyPress dan ketikkan coding berikut :
Private Sub txtdiskon_KeyPress(ByVal
sender AsObject, ByVal
e As KeyPressEventArgs) Handles txtdiskon.KeyPress
'Agar hanya angka yang bisa diinputkan
If Not IsNumeric(e.KeyChar) And
e.KeyChar <> Chr(13) And e.KeyChar
<> vbBack Then e.Handled = True
End Sub
Terdapat fungsi yang digunakan untuk menghitung uang kembalian. Untuk masuk ke event Keydown klik pada bagian (General) pilih txtdibayar, kemudian pada bagian (Declaration) pilih KeyDown dan ketikkan coding berikut :
Private Sub txtdibayar_KeyDown(ByVal
sender AsObject, ByVal
e As KeyEventArgs) Handles
txtdibayar.KeyDown
If
e.KeyCode = Keys.Enter Then
If
(Len(Trim(txtdibayar.Text)) = 0) Or
(txtdibayar.Text = "0") Then
MsgBox("Data Belum Diisi...",
MsgBoxStyle.Information)
txtdibayar.Focus()
Else If
Val(txttotalbayar.Text) > Val(txtdibayar.Text) Then
MsgBox("Uang yang dimasukkan kurang.....",
MsgBoxStyle.Information)
txtdibayar.Focus()
Else
'Rumus mencari uang kembali
txtkembalian.Text = Val(txtdibayar.Text)
- Val(txttotalbayar.Text)
btsimpan.Focus()
End If
End If
End Sub
19. Event Keypress pada txtdibayar
Terdapat fungsi yang digunakan agar txtdibayar hanya bisa diinput angka. Untuk masuk ke event Keypress klik pada bagian (General) pilih txtdibayar, kemudian pada bagian (Declaration) pilih KeyPress dan ketikkan coding berikut :
Private Sub txtdibayar_KeyPress(ByVal
sender AsObject, ByVal
e As KeyPressEventArgs) Handles txtdibayar.KeyPress
'Agar hanya angka yang bisa diinputkan
If Not IsNumeric(e.KeyChar) And
e.KeyChar <> Chr(13) And e.KeyChar
<> vbBack Then e.Handled = True
End Sub
Berfungsi jika rbpemasok di pilih maka txtkodepemasok akan aktif dan kita bisa memilih pemasok di daftar pemasok. Klik 2x pada rbpemasok lalu masukkan source code berikut :
Private Sub rb_pemasok_CheckedChanged(ByVal
sender AsObject, ByVal
e As EventArgs) Handles
RB_pemasok.CheckedChanged
txtkodepemasok.Enabled
= True
txtkodepemasok.Clear()
txtnamapemasok.Clear()
txtkodepemasok.Focus()
End Sub
21. Radio Button pada rbnonpemasok
Berfungsi jika rbnonpemasok di pilih maka txtkodepemasok tidak akan aktif dan secara default kode pemasok tertulis ‘000’ yang menandakan bahwa kode tersebut khusus bukan pemasok. Klik 2 x pada rbnonpemasok lalu masukkan source code berikut:
Private Sub
rb_nonpemasok_CheckedChanged(ByVal sender As Object, ByVal e As EventArgs)
Handles RB_nonpemasok.CheckedChanged
txtkodepemasok.Enabled = False
txtkodepemasok.Text = "000"
txtnamapemasok.Text = "-"
txtkodebarang.Focus()
End Sub
22. Event Click Pada Btsimpan (Tombol Simpan)
Berfungsi untuk menyimpan data ke dalam database. Klik 2 x pada btsimpan lalu ketikkan source code berikut:
Private Sub btsimpan_Click(ByVal sender As Object, ByVal e As EventArgs) Handles
btsimpan.Click
Try
'validasi jika
data masih kosong
If Len(Trim(txtkodepemasok.Text)) = 0 Then
MsgBox("Data Pemasok Belum diinputkan...",
MsgBoxStyle.Information)
txtkodepemasok.Focus()
Else If (Len(Trim(txtdibayar.Text)) = 0) Or (txtdibayar.Text = "0")
Then
MsgBox("Transaksi belum dibayar...",
MsgBoxStyle.Information)
txtdibayar.Focus()
Else
'simpan data non pemasok
Koneksi()
CMD = New OdbcCommand("SELECT
kode_pemasok FROM tb_pemasok WHERE kode_pemasok = '" +
txtkodepemasok.Text + "'", Conn)
RD =
CMD.ExecuteReader
RD.Read()
If Not RD.HasRows Then
Koneksi()
CMD = New OdbcCommand("INSERT
INTO tb_pemasok VALUES (?,?,?,?)", Conn)
With CMD
.Parameters.AddWithValue("?",
txtkodepemasok.Text)
.Parameters.AddWithValue("?",
txtnamapemasok.Text)
.Parameters.AddWithValue("?", "000")
.Parameters.AddWithValue("?",
"-")
.ExecuteNonQuery()
End With
Conn.Close()
End If
'simpan Data ke tabel pembelian
Koneksi()
CMD = New OdbcCommand("INSERT
INTO tb_pembelian VALUES (?,?,?,?,?)", Conn)
With CMD
.Parameters.AddWithValue("?",
txtnofaktur.Text)
.Parameters.AddWithValue("?",
txtkodepemasok.Text)
.Parameters.AddWithValue("?",
Format(Now.Date, "yyyy-MM-dd"))
.Parameters.AddWithValue("?",
txttotalbarang.Text)
.Parameters.AddWithValue("?",
txttotalharga.Text)
.ExecuteNonQuery()
End With
Conn.Close()
awal()
MsgBox("Data Berhasil disimpan.....",
MsgBoxStyle.Information, "Informasi")
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Klik 2 x pada btkeluar lalu masukkan source code berikut
Private Sub btkeluar_Click(ByVal sender As Object, ByVal e As EventArgs) Handles
btkeluar.Click
Me.Close()
End Sub
Demikian contoh pembuatan Transaksi pembelian yang bisa saya sampaikan. Silahkan dimodifikasi sesuai selera anda dan jika ada pertanyaan bisa ditanyakan di kolom komentar. Untuk cara menjalankan program transaksi penjualan bisa dilihat di Part 3
Terimakasih atas kunjungannya, Selamat belajar dan jangan mudah menyerah.
Wassalamu'alaikum Wr Wb
Thank'S Christina Natalis Esti Utami
Hai semua...
ReplyDeleteBagi teman-teman yang sedang belajar bahasa Java, boleh coba menyimak software pertokoan "MiniMart" yg saya buat.
Softwarenya gratis sepenuhnya kok dan bersifat full open-source, teman-teman dapat menggunakan software ini utk belajar koding & pemrograman ataupun dipakai di usaha tokonya sendiri.
Bagi teman-teman yang berminat, silahkan download software-nya di sini :
https://helloyud.blogspot.com/2016/12/aplikasi-pertokoan-minimart.html
Silahkan juga membagikan / mem-posting ulang software ini di blog ataupun akun-akun media sosial yang teman-teman miliki, siapa tahu bisa bermanfaat bagi banyak orang.