BAB 11 Aplikasi Penjualan by rysasahrial.99

VIEWS: 102 PAGES: 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 PATH-
nya. 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                             Keterangan
DBJualNet1                            File Database
Barang                                Tabel
Kasir                                 Tabel
Penjualan                             Tabel
Detail                                Tabel
Transaksi                             Tabel Temporer



156
Created By Uus Rusmawan



A. Tabel Barang

    Nama Field             Type              Lebar              Keterangan
KodeBrg                    Text                6           Field Index
NamaBrg                    Text               30
HargaBeli                 Number          Long Integer
HargaJual                 Number          Long Integer
JumlahBrg                 Number            Integer

B. Tabel Kasir

   Nama Field         Type        Lebar                  Keterangan
KodeKsr               Text          5      Field Index
NamaKsr               Text         30
PasswordKsr           Text         10

C. Tabel Penjualan

   Nama Field          Type             Lebar                Keterangan
Faktur                 Text              10          Field Index (Primer)
Tanggal              Date/Time            8
Jam                  Date/Time            8
Item                  Numeric          Integer
Total                 Numeric        Long Integer
Dibayar               Numeric        Long Integer
Kembali               Numeric        Long Integer
KodeKsr                Text               5          Field Index (Tamu)

D. Tabel Detail

     Nama Field            Type            Lebar             Keterangan
Faktur                     Text             10
KodeBrg                    Text              6
JmlJual                   Numeric         Integer


E. Tabel Transaksi

    Nama Field           Type                Lebar             Keterangan
Kode                     Text                  6
Nama                     Text                 30
Harga                   Numeric           Long Integer
Jumlah                  Numeric             Integer
Total                   Numeric           Long Integer


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.    Ubah nama Module1.vb menjadi MdlJual.vb
4.    Klik Open
5.    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         :   KOP001
Nama         :   KOPI KAPAL API
Harga Beli   :   1000
Harga Jual   :   1300
Jumlah       :   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   DS As New DataSet
  Dim   DSPenjualan As New DataSet
  Dim   DSDetail As New DataSet
  Dim   DSKasir As New DataSet
  Dim   DSBarang As New DataSet

  Dim   DABarang As OleDb.OleDbDataAdapter
  Dim   DATransaksi As OleDb.OleDbDataAdapter
  Dim   DAPenjualan As OleDb.OleDbDataAdapter
  Dim   DADetail As OleDb.OleDbDataAdapter
  Dim   DAKasir As OleDb.OleDbDataAdapter
  Dim   Harga, Jumlah, Hasil As Single
  Dim   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.   Nama Form = LprBarang.vb
2.   Nama Laporan = LapBarang.Rpt
3.   Posisi file LapBarang = C:\Pemrograman VB.NET\Program 6 Penjualan Access
4.   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

								
To top