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


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

18. Event Keydown pada txtdibayar
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

20. Radio Button pada rbpemasok
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

23. Event Click pada BtKeluar (Tombol Keluar)
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 

Comments

  1. Hai semua...

    Bagi 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.

    ReplyDelete

Post a Comment

- Berkomentarlah dengan bijak, Komentar akan di moderasi dahulu sebelum ditampilkan.