Aplikasi Penjualan dengan VB.Net dan MariaDB V1 : Membuat Form Transaksi Pembelian Part 3


Assalamu’alaikum Wr Wb

Selamat Datang di Web Sibukngoding.com. Pada kesempatan kali ini saya akan melanjutkan seri pembuatan Aplikasi Penjualan dengan VB.net dan database MariaDB. Pada pertemuan sebelumnya telah saya jelaskan pembuatan transaksi pembelian yang saya bagi dalam 2 part yaitu form dan sourcecode. Untuk source code secara keseluruhan sebagai berikut :

Imports System.Data.Odbc
'--------------------------------------------
Sub bersihkanbarang()
        txtkodebarang.Clear()
        txtnamabarang.Clear()
        txthargabeli.Text = "0"
        txtjumlah.Text = "0"
        txtsubtotal.Text = "0"
        txtkodebarang.Focus()
    End Sub
    '--------------------------------------------
    Sub Nootomatis()
        Koneksi()
        Dim Urutan As String
        Dim Hitung, Cari As Long
        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
    '----------------------------------------------------------
    Sub AutoNumberRowsForGrid()
        If DGV IsNot Nothing Then
            Dim count As Integer = 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
    '------------------------------------------------------------
    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
    '-------------------------------------------------------------
    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
    '------------------------------------------------------------
    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
    '----------------------------------------------
    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
    '---------------------------------------------------------
    Private Sub FormPembelian_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
        BuatKolom()
        Autocompletebarang()
        Autocompletepemasok()
        awal()
    End Sub
    '-------------------------------------------------------------------
    Private Sub TxtKodeBarang_KeyDown(ByVal sender As Object, 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
    '------------------------------------------------------------------------
    Private Sub btplus_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btplus.Click
        If Len(Trim(txtkodebarang.Text)) = 0 Then
            MsgBox("Kode Barang Belum Diisi", MsgBoxStyle.Information)
            txtkodebarang.Focus()
        ElseIf Len(Trim(txtnamabarang.Text)) = 0 Then
            MsgBox("Data Belum Lengkap", MsgBoxStyle.Information)
            txtkodebarang.Focus()
        ElseIf Len(Trim(txthargabeli.Text)) = 0 Then
            MsgBox("Data Belum Lengkap", MsgBoxStyle.Information)
            txtkodebarang.Focus()
        ElseIf (Len(Trim(txtjumlah.Text)) = 0) Or (txtjumlah.Text = "0") Then
            MsgBox("Jumlah Belum dimasukkan", MsgBoxStyle.Information)
            txtjumlah.Focus()
        ElseIf Len(Trim(txtsubtotal.Text)) = 0 Then
            MsgBox("Data Belum Lengkap", MsgBoxStyle.Information)
            txtjumlah.Focus()
        Else
            Try
                Dim rownumber As Integer = 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 As Integer
                totalharga = 0
                totalbarang = 0
                For t As Integer = 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
    End Sub
    '----------------------------------------------------------------------
    Private Sub btmin_Click(ByVal sender As Object, 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 As Integer
                totalharga = 0
                totalbarang = 0
                For t As Integer = 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
    '--------------------------------------------------------------------------
    Private Sub TxtKodePemasok_KeyDown(ByVal sender As Object, 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
    '----------------------------------------------------------------------------
    Private Sub TxtJumlah_KeyDown(ByVal sender As Object, 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
    '-----------------------------------------------------------------------------------
    Private Sub TxtJumlah_KeyPress(ByVal sender As Object, 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
    '------------------------------------------------------------
    Private Sub txtdiskon_KeyDown(ByVal sender As Object, 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
    '-------------------------------------------------------------------------
    Private Sub txtdiskon_KeyPress(ByVal sender As Object, 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
    '----------------------------------------------------------------------
    Private Sub txtdibayar_KeyDown(ByVal sender As Object, 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()
            ElseIf 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
    '-------------------------------------------------------------------------
    Private Sub txtdibayar_KeyPress(ByVal sender As Object, 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
    '-------------------------------------------------------------------------------
    Private Sub rb_pemasok_CheckedChanged(ByVal sender As Object, ByVal e As EventArgs) Handles RB_pemasok.CheckedChanged
        txtkodepemasok.Enabled = True
        txtkodepemasok.Clear()
        txtnamapemasok.Clear()
        txtkodepemasok.Focus()
    End Sub
    '--------------------------------------------------------------------------------
    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
    '-----------------------------------------------------------------------------------
    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()
            ElseIf (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()
                'Simpan Data ke tabel detail pembelian
                'Koneksi()
                'For i As Integer = 0 To DGV.Rows.Count - 1
                'CMD = New OdbcCommand("INSERT INTO detail_pembelian VALUES (?,?,?,?,?)", Conn)
                'With CMD
                '.Parameters.AddWithValue("?", txtnofaktur.Text)
                '.Parameters.AddWithValue("?", DGV.Rows(i).Cells(0).Value)
                '.Parameters.AddWithValue("?", DGV.Rows(i).Cells(3).Value)
                '.Parameters.AddWithValue("?", DGV.Rows(i).Cells(2).Value)
                ' .Parameters.AddWithValue("?", DGV.Rows(i).Cells(4).Value)
                ' .ExecuteNonQuery()
                'End With
                 awal()
                MsgBox("Data Berhasil disimpan.....", MsgBoxStyle.Information, "Informasi")
            End If
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub
    '-----------------------------------------------------------
    Private Sub btkeluar_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btkeluar.Click
        Me.Close()
    End Sub
End Class
Untuk hasil setelah di run adalah sebagai berikut :

Untuk tampilan awal, tanggal akan terisi otomatis sesuai tanggal sekarang, no faktur muncul secara otomatis. Langkah pertama adalah memilih radio button pemasok atau non pemasok. Jika memilih radio button pemasok maka kursor akan aktif di kode pemasok, dan kalian tinggal isi kode pemasoknya.

Kode pemasok yang kalian input di data pemasok akan muncul sebagai pilihan, pilih salah satu kemudian enter. Maka akan muncul nama pemasok secara otomatis. Lalu kursor akan pindah ke bagian kode barang. Silahkan masukkan kode barangnya.

Setelah kalian pilih kode barangnya maka akan muncul nama barang dan harga beli secara otomatis. Tinggal isi jumlah barang yang akan dibeli lalu enter, jika coding kalian benar akan muncul sub totalnya seperti gambar di bawah.


Setelah memasukkan jumlah barangnya dan muncul sub total kalian klik tombol plus (+), barang yang kalian input tadi akan tampil di datagridview dan total barang dan total harga akan otomatis muncul. Jika kalian ingin membatalkan atau menghapus barang kalian bisa klik tombol min (-).

Sekarang tinggal mengisi diskon jika ada. Lalu kalian tekan enter. Total bayar setelah diskon akan muncul. Dan kursor akan berpindah ke bagian dibayar, silahkan isi sejumlah uang lalu enter. Kembalian akan otomatis muncul.




Jika sudah klik button simpan agar data tersimpan di database. Kalian berhasil jika muncul tampilan seperti di atas.
Demikian contoh pembuatan transaksi pembelian yang bisa saya bagikan. Karena aplikasi di atas adalah versi sederhananya, kalian bisa modifikasi sesuai keinginan kalian ya guys. Jika ada pertanyaan silahkan tanyakan di kolom komentar.

Terimakasih atas kunjungannya, selamat belajar dan jangan mudah menyerah.

Wassalamu’alaikum Wr Wb



Comments