Kamis, 21 Juni 2012

Contoh Membuat Program Penjualan Visual Basic 6.0 : Membuat Form Transaksi

Selamat datang kembali di tutorial belajar VB. Pada kali ini kita akan belajar yang lebih sulit lagi yaitu membuat form transaksi yang merupakan inti dari program ini dibuat. Kalau yang namanya penjualan sudah pasti ada transaksi yang terjadi disitu. Pada tutorial yang ke 1 dulu kita sudah membuat sebanyak 7 Table dan yang akan kita bahas disini adalah semua table tersebut yang dijadikan satu di dalam form transaksi ini

Membuat FORM TRANSAKSI

- Buat form baru lagi lalu isikan dengan isi dan properties dibawah ini :

NAME
CAPTION/TEXT
KETERANGAN
TAMBAHAN
Label1 No Faktur Label

Label2 Kode Pelanggan Label

Label3 Nama Pelanggan Label

Label4 Nomor Hp/Telpon Label

Label5 Alamat Label

Label6 ID User Label

Label7 Kode Buku Label

Label8 Nama Buku Label

Label9 Stok Buku Label

Label10 Harga Buku Label

Label11 Biaya Pengiriman Label

Label12 Jumlah beli Label

Label13 Total Harga Label

Label14 Total Bayar Label

Label15 Uang bayar Label

Label16 Uang Kembali Label

Label17 Masukan Kode Buku Label

Label18 Masukan Kode Pelanggan Label

txtnofak
-
Textbox

txtkdpel
-
Textbox

txtnmpel
-
Textbox

txttelpon
-
Textbox

txtalamat
-
Textbox

txtkasir
-
Textbox

txtkdbuku
-
Textbox

txtnmbuku
-
Textbox

txtstok
-
Textbox

txtharga
-
Textbox

txtkirim
-
Textbox

txtjumbel
-
Textbox

txttohar
-
Textbox

txttobay
-
Textbox

txtubar
-
Textbox

txtukem
-
Textbox

txtfindb
-
Textbox

txtfindp
-
Textbox

txtjam
-
Textbox

txttgl
-
Textbox

cmdfindp Find Pelanggan Command Button

cmdfindb Find Barang Command Button

Cmdadd &add Command Button

Cmdclear &clear Command Button

Cmdsave &save Command Button

Cmdexit &exit Command Button

Cmdlagi lagi Command Button

Cmdselesai selesai Command Button

Optdalam Dalam kota Command Button

Optluar Luar kota Command Button

Opttidak Tidak dikirim Command Button

Timer1
-
Timer Interval : 10
Dbgrid1
-
Dbgrid Data source: data6
Dbgrid2
-
Dbgrid Data source: data2
Dbgrid3
-
Dbgrid Data source: data1
Data1
Data

Data2
Data

Data3
Data

Data4

Data

Data5

Data

Data6

Data

Data7

Data

FTransaksi Transaksi Form

Frame1 Biaya Pengiriman Buku Frame

Frame2 Buku Frame Visible: False
Frame3 Pelanggan Frame Visible: False
Frame4
-
Frame

Frame5
-
Frame

CR
-
Crystal Report Jika Punya CR

Adapun Listing Program dari Form Transaksi Ini Adalah :
Private Sub Form_Activate()
Call nonaktif
Call kosong
TXTKASIR.Text = Menuutama.txtuser.Text
End Sub

Private Sub Form_Load()
Data1.DatabaseName = App.Path & "/buku.mdb"
Data1.RecordSource = "select * from Table_buku order by Kode_buku"
Data2.DatabaseName = App.Path & "/buku.mdb"
Data2.RecordSource = "select * from Table_pelanggan"
Data3.DatabaseName = App.Path & "/buku.mdb"
Data3.RecordSource = "select * from Table_transaksi"
Data4.DatabaseName = App.Path & "/buku.mdb"
Data4.RecordSource = "select * from Table_detail"
Data5.DatabaseName = App.Path & "/buku.mdb"
Data5.RecordSource = "select * from Table_user"
Data6.DatabaseName = App.Path & "/buku.mdb"
Data6.RecordSource = "select * from Table_bantu"
Data7.DatabaseName = App.Path & "/buku.mdb"
Data7.RecordSource = "select * from Table_bayar"
End Sub

Private Sub CMDADD_Click()
Call Auto
Call aktif
CMDFINDP.Enabled = True
CMDADD.Enabled = False
CMDEXIT.Enabled = False
End Sub

Private Sub CMDCLEAR_Click()
Call kosong
Call hapus_grid
Call nonaktif
CMDADD.Enabled = True
CMDEXIT.Enabled = True
End Sub

Private Sub CMDEXIT_Click()
Unload Me
Menuutama.Show
End Sub

Sub aktif()
CMDCLEAR.Enabled = True
CMDSAVE.Enabled = False
End Sub

Sub nonaktif()

CMDFINDB.Enabled = False
CMDFINDP.Enabled = False
TXTKASIR.Enabled = False
TXTNOFAK.Enabled = False
TXTKDPEL.Enabled = False
TXTNMPEL.Enabled = False
TXTTELPON.Enabled = False
TXTALAMAT.Enabled = False
TXTKDBUKU.Enabled = False
TXTNMBUKU.Enabled = False
TXTSTOK.Enabled = False
TXTHARGA.Enabled = False
TXTJUMBEL.Enabled = False
TXTTOHAR.Enabled = False
TXTTOBAY.Enabled = False
TXTUBAR.Enabled = False
TXTUKEM.Enabled = False
TXTKIRIM.Enabled = False
OPTDALAM.Enabled = False
OPTLUAR.Enabled = False
OPTTIDAK.Enabled = False
CMDCLEAR.Enabled = False
CMDSAVE.Enabled = False
CMDLAGI.Enabled = False
CMDSELESAI.Enabled = False
End Sub

Sub kosong()

TXTNOFAK.Text = ""
TXTKDPEL.Text = ""
TXTNMPEL.Text = ""
TXTALAMAT.Text = ""
TXTTELPON.Text = ""
TXTKDBUKU.Text = ""
TXTNMBUKU.Text = ""
TXTSTOK.Text = ""
TXTHARGA.Text = ""
TXTJUMBEL.Text = ""
TXTTOHAR.Text = ""
TXTUBAR.Text = ""
TXTUKEM.Text = ""
TXTTOBAY.Text = ""
TXTKIRIM.Text = ""
OPTDALAM.Value = False
OPTLUAR.Value = False
OPTTIDAK.Value = False
End Sub

Private Sub CMDFINDB_Click()
Frame2.Visible = True
TXTFINDB.SetFocus
End Sub

Private Sub CMDFINDP_Click()
Frame3.Visible = True
TXTFINDP.SetFocus
End Sub

VISIBLE digunakan sebagai pilihan apakah suatu objek akan ditampilkan atau disembunyikan.
Jika VISIBLE = TRUE maka objek akan ditampilkan.
Jika VISIBLE = FALSE maka objek akan disembunyikan.
Private Sub TXTFINDB_Change()
Data1.RecordSource = "SELECT*FROM Table_buku WHERE Kode_buku LIKE’*" & TXTFINDB.Text & "*’"
DBGrid3.Refresh
Data1.Refresh
    If Data1.Recordset.EOF Then
    MsgBox "DATA TIDAK ADA !"
    End If
End Sub

Private Sub TXTFINDB_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
TXTKDBUKU.Text = Data1.Recordset!Kode_buku
TXTNMBUKU.Text = Data1.Recordset!Judul_buku
TXTSTOK.Text = Data1.Recordset!Stok_buku
TXTHARGA.Text = Data1.Recordset!Harga_buku
Frame2.Visible = False
TXTJUMBEL.Enabled = True
TXTJUMBEL.SetFocus
TXTFINDB.Text = ""
CMDFINDB.Enabled = False
End If
End Sub

Private Sub TXTFINDP_Change()
Data2.RecordSource = "SELECT*FROM Table_pelanggan WHERE Kode_pelanggan LIKE’*" & TXTFINDP.Text & "*’"
DBGrid2.Refresh
Data2.Refresh
    If Data2.Recordset.EOF Then
    MsgBox "DATA TIDAK ADA !"
    End If
End Sub

Private Sub TXTFINDP_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
TXTKDPEL.Text = Data2.Recordset!Kode_pelanggan
TXTNMPEL.Text = Data2.Recordset!Nama_Pelanggan
TXTTELPON.Text = Data2.Recordset!Telp_pelanggan
TXTALAMAT.Text = Data2.Recordset!Almt_pelanggan
Frame3.Visible = False
CMDFINDB.Enabled = True
CMDFINDP.Enabled = False
TXTFINDP.Text = ""
End If
End Sub

Private Sub CMDLAGI_Click()
CMDFINDB.Enabled = True
CMDSELESAI.Enabled = False
CMDLAGI.Enabled = False
TXTJUMBEL.Text = ""
End Sub

Private Sub CMDSELESAI_Click()
OPTDALAM.Enabled = True
OPTLUAR.Enabled = True
OPTTIDAK.Enabled = True
    If Data6.Recordset.RecordCount = 0 Then
    Data6.Recordset.AddNew
    Data6.Recordset!Nofak = TXTNOFAK.Text
    Data6.Recordset!Kode_buku = TXTKDBUKU.Text
    Data6.Recordset!Jumlah_beli = TXTJUMBEL.Text
    Data6.Recordset!Total_harga = Val(TXTTOHAR.Text)
    Data6.Recordset.Update
    Data6.Refresh
    DBGrid1.Refresh
    TXTTOBAY.Text = Val(TXTTOBAY.Text) + Val(TXTTOHAR.Text)
   End If

CMDLAGI.Enabled = False
CMDSELESAI.Enabled = False
TXTJUMBEL.Enabled = False
End Sub

Maksud dari If Data6.Recordset.RecordCount = 0 Then  dst… yang ada pada CmdSelesai ini adalah jika isi dari field data6 (Table_bantu) masih kosong maka terjadi penyimpanan data dan isi data txttobay adalah txttobay yang lama ditambah dengan txttohar.

Private Sub OPTDALAM_Click()
If OPTDALAM.Value = True Then
TXTKIRIM.Text = 5000
TXTTOBAY.Text = Val(TXTTOBAY.Text) + Val(TXTKIRIM.Text)
TXTUBAR.Enabled = True
TXTUBAR.SetFocus
OPTLUAR.Enabled = False
OPTTIDAK.Enabled = False
TXTUBAR.SetFocus
End If
End Sub

Private Sub OPTLUAR_Click()
If OPTLUAR.Value = True Then
TXTKIRIM.Text = 10000
TXTTOBAY.Text = Val(TXTTOBAY.Text) + Val(TXTKIRIM.Text)
TXTUBAR.Enabled = True
TXTUBAR.SetFocus
OPTDALAM.Enabled = False
OPTTIDAK.Enabled = False
TXTUBAR.SetFocus
End If
End Sub

Private Sub OPTTIDAK_Click()
If OPTTIDAK.Value = True Then
TXTKIRIM.Text = 0
TXTTOBAY.Text = Val(TXTTOBAY.Text) + Val(TXTKIRIM.Text)
TXTUBAR.Enabled = True
TXTUBAR.SetFocus
OPTLUAR.Enabled = False
OPTDALAM.Enabled = False
TXTUBAR.SetFocus
End If
End Sub

Maksud dari VALUE pada Option Button adalah:
Jika VALUE = TRUE berarti Option Button tersebut dipilih.
Jika VALUE = FALSE berarti Option Button tersebut tidak dipilih.
Keterangan dari data biaya pengirimannya adalah:
Jika yang dipilih adalah OptDalam (dalam kota) maka biaya kirimnya adalah 5000
Jika yang dipilih adalah OptLuar(luar kota) maka biaya kirimnya adalah 10000
Jika yang dipilih adalah OptTidak (tidak dikirim) maka biaya kirimnya adalah 0
Total bayar berisi penjumlahan dari Total bayar yang lama ditambah  biaya kirim tersebut.

Private Sub TXTJUMBEL_Change()
TXTTOHAR.Text = Val(TXTJUMBEL.Text) * Val(TXTHARGA.Text)
End Sub
Private Sub TXTJUMBEL_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
If Val(TXTJUMBEL.Text) > Val(TXTSTOK.Text) Then
MsgBox "stok terbatas"
Else
     Data6.Recordset.AddNew
    Data6.Recordset!No_faktur = TXTNOFAK.Text
    Data6.Recordset!Kode_buku = TXTKDBUKU.Text
Data6.Recordset!Jumlah_beli = Val(TXTJUMBEL.Text)
    Data6.Recordset!Total_harga = Val(TXTTOHAR.Text)
    Data6.Recordset.Update
    Data6.Refresh
    DBGrid1.Refresh
TXTTOBAY.Text = Val(TXTTOBAY.Text) + Val(TXTTOHAR.Text)
TXTJUMBEL.Text = ""
TXTTOHAR.Text = ""
CMDFINDB.Enabled = False
CMDLAGI.Enabled = True
CMDSELESAI.Enabled = True
TXTKDBUKU.Text = ""
TXTNMBUKU.Text = ""
TXTSTOK.Text = ""
TXTHARGA.Text = ""
TXTJUMBEL.Enabled = False
End If
End If
End Sub

Perhatikan bahwa TxtJumbel (jumlah beli) disitu ada 2 bagian yaitu CHANGE dan KEYPRESS.
CHANGE : Pada txtjumbel ketika ditulis suatu data maka secara langsung akan terjadi perkalian antara txtjumbel dan txtharga dan hasilnya akan ditaruh di txttohar (total harga).
KEYPRESS : Pada txtjumbel ketika ditekan Enter maka akan terjadi perhitungan data stok, Jika angka yang dimasukan pada txtjumbel lebih besar daripada angka yang ada di txtstok maka akan muncul pesan bahwa Stok terbatas. Tapi jika lebih kecil maka akan terjadi proses penyimpanan data.

Private Sub TXTUBAR_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
If Val(TXTUBAR.Text) < Val(TXTTOBAY.Text) Then
MsgBox "uang bayar kurang"
Else
TXTUKEM.Text = Val(TXTUBAR.Text) – Val(TXTTOBAY.Text)
CMDSAVE.Enabled = True
CMDSAVE.SetFocus
End If
End If
End Sub

Pada txtubar apabila ditekan Enter maka akan terjadi perhitungan data sebagai berikut :
Jika angka yang dimasukan pada txtubar (uang bayar)  lebih kecil dari angka yang ada di txttobay (total bayar) maka akan muncul pesan bahwa uang bayar kurang.
Tapi jika lebih besar maka terjadi pengurangan antara txtubar dikurangi dengan txttobay yang hasilnya diletakkan pada txtukem (uang kembali).

Private Sub Timer1_Timer()
TXTTGL.Text = Date
TXTJAM.Text = Time
End Sub

Listing ini digunakan untuk memunculkan tanggal dan waktu terjadinya transaksi (hari itu juga)
Txttgl berisi Tanggal terjadinya transaksi.
txtjam berisi Jam terjadinya transaksi.
Diperlukan Tool TIMER dan jangan lupa untuk merubah INTERVAL nya pada properties.

Sub hapus_grid()
    If Data6.Recordset.RecordCount <= 0 Then
        Exit Sub
    End If
        Data6.Recordset.MoveFirst
        Do While Not Data6.Recordset.EOF
        Data6.Recordset.Delete
        Data6.Recordset.MoveNext
    Loop
End Sub

Sub hapus_bayar()
If Data7.Recordset.RecordCount <= 0 Then
        Exit Sub
    End If
        Data7.Recordset.MoveFirst
        Do While Not Data7.Recordset.EOF
        Data7.Recordset.Delete
        Data7.Recordset.MoveNext
    Loop
End Sub

Private Sub CMDSAVE_Click()
‘TABLE DETAIL DAN TABLE BANTU
While Not Data6.Recordset.EOF
    Data4.Recordset.AddNew
                 Data4.Recordset!No_faktur = Data6.Recordset!No_faktur
                Data4.Recordset!Kode_buku = Data6.Recordset!Kode_buku
                Data4.Recordset!Jumlah_beli = Data6.Recordset!Jumlah_beli
                Data4.Recordset!Total_harga = Data6.Recordset!Total_harga
‘ PENGURANGAN STOK
                 Data1.Recordset.MoveFirst
                Data1.Recordset.FindFirst "Kode_buku= ‘" & Data6.Recordset!Kode_buku & "’"
                                 If Not Data1.Recordset.NoMatch Then
                                 Data1.Recordset.Edit
                                 Data1.Recordset!Stok_buku = Val(Data1.Recordset!Stok_buku) – Val(Data6.Recordset!Jumlah_beli)
                                Data1.Recordset.Update
                                Data1.Refresh
                                End If
     Data4.Recordset.Update
    Data6.Recordset.MoveNext
    N = N + 1
Wend  
    Data4.Refresh
    Data6.Refresh
    ‘TABLE TRANSAKSI
    Data3.Recordset.AddNew
    Data3.Recordset!No_faktur = TXTNOFAK.Text
    Data3.Recordset!Tgl_faktur = TXTTGL.Text
    Data3.Recordset!Kode_pelanggan = TXTKDPEL.Text
    Data3.Recordset!Total_bayar = TXTTOBAY.Text
    Data3.Recordset!Id_user = TXTKASIR.Text
    Data3.Recordset!Biaya_kirim = TXTKIRIM.Text
    Data3.Recordset.Update
    Data3.Refresh
    ‘TABLE BAYAR
    Data7.Recordset.AddNew
    Data7.Recordset!No_faktur = TXTNOFAK.Text
    Data7.Recordset!Uang_bayar = TXTUBAR.Text
    Data7.Recordset!Uang_kembali = TXTUKEM.Text
    Data7.Recordset.Update
    Data7.Refresh

‘MENCETAK FAKTUR
‘CR.ReportFileName = App.Path & "\Faktur.rpt"
‘CR.SelectionFormula = "({Table_detail.No_faktur}=’" & TXTNOFAK.Text & "’)"
‘CR.WindowState = crptMaximized
‘CR.RetrieveDataFiles
‘CR.Action = 1

CMDADD.Enabled = True
CMDSAVE.Enabled = False
Call kosong
Call nonaktif
Call hapus_grid
Call hapus_bayar
CMDEXIT.Enabled = True
End Sub

Dalam Tombol Save ini terjadi Penyimpanan data pada beberapa Table yaitu : Table Detail (diambil dari Table Bantu), Table Transaksi (diambil dari form), dan Table Bayar (diambil dari form).
Isi dari Table Detail didapat dari isi dari Table Bantu. Sedangkan isi Table Bantu itu sendiri didapat dari data yang dimasukan pada form transaksi ini.
Pada Penyimpanan data ke dalam Table Detail terjadi perintah perulangan yaitu WHILE WEND karena data Table Bantu yang akan disimpan ke dalam Table Detail berjumlah banyak sehingga berulang ulang memasukannya.

Contoh dari perulangan itu adalah apabila ada pelanggan yang membeli buku banyak yang berbeda beda pastinya semua itu hanya dicatat dalam 1 faktur atau 1 struk saja. Makanya disini terjadi pengulangan. Karena tidak mungkin setiap 1 pelanggan yang membeli buku yang banyak harus menggunakan banyak faktur juga.
Didalam penyimpanan Table Detail diatas juga terjadi PENGURANGAN STOK.
Maksud Listing Programnya adalah:
FINDFIRST dipakai untuk mencari kode_buku yang ada pada data1 (Table_buku) yang sama dengan kode_buku yang ada pada data6 (Table_bantu).
Dan jika data tersebut ditemukan maka stok_buku yang ada di data1 (Table_buku) akan dikurangi oleh Jumlah_beli yang ada di data6 (Table_bantu).
Dan setelah data tersebut di Save, maka terjadi perintah untuk memanggil Sub Hapus_Grid dan Sub Hapus_bayar.
Dengan adanya  Sub Hapus_Grid  tersebut, maka semua data yang ada di data6 (table_bantu) akan dikosongkan karena sudah disimpan pada data4 (table_detail).
Dan dengan adanya  Sub Hapus_Bayar  tersebut, maka semua data yang ada di data7 (table_bayar) juga akan dikosongkan karena sudah dipakai dan ditampilkan di dalam Faktur.

MENCETAK FAKTUR hanya dipakai jika anda mempunyai software pembuat laporan yang bernama CRYSTAL REPORT. Jika tidak punya, silahkan hapus rumusnya. Tapi jika anda punya, gunakan listing program tersebut dan hilangkan  tanda petik di depan rumusnya. Untuk keterangan lebih lanjut baca  

Tutorial Membuat Laporan dengan Crystal Report.

Private Sub Auto()
Data3.RecordSource = "select * from Table_Transaksi Where No_faktur In(Select Max(No_faktur)From Table_Transaksi)Order By No_faktur Desc"
Data3.Refresh
    Dim Urutan As String * 10
    Dim Hitung As Long
    With Data3.Recordset
        If .EOF Then
            Urutan = Right(Date, 2) + Mid(Date, 4, 2) + Left(Date, 2) + "0001"
            No_faktur = Urutan
        Else
            If Left(!No_faktur, 6) <> Right(Date, 2) + Mid(Date, 4, 2) + Left(Date, 2) Then
                Urutan = Right(Date, 2) + Mid(Date, 4, 2) + Left(Date, 2) + "0001"
            Else
                Hitung = (!No_faktur) + 1
                Urutan = (Right(Date, 2) + Mid(Date, 4, 2) + Left(Date, 2)) + Right("0000" & Hitung, 4)
            End If
        End If
        TXTNOFAK.Text = Urutan
    End With
End Sub

Sub AUTO ini digunakan untuk memunculkan nomor faktur secara otomatis.
Jumlah karakter dari nomor faktur ini adalah 10 digit angka yang terdiri dari: 2 angka pertama untuk Tahun faktur, 2 angka berikutnya untuk Bulan faktur, 2 angka berikutnya untuk Tanggal faktur dan 4 angka terakhir digunakan untuk Nomor faktur.
Contoh: jika ada Nomor Faktur yang bertuliskan 0806250099 maka
Tahun faktur tersebut adalah 08 (2008)
Bulan faktur tersebut adalah 06 (Juni)
Tanggal faktur tersebut adalah 25
Nomor faktur tersebut adalah 0099

PERHATIAN : untuk memakai nomor faktur otomatis ini, settingan waktu komputer anda harus berformat ”dd/mm/yy”  (2 digit angka hari/bulan/tahun). Contoh: 30/12/09.

Jika belum dirubah, maka rubahlah format tanggal tersebut dari CONTROL PANEL lalu pilihlah REGIONAL AND LANGUAGE OPTIONS lalu tekan tombol CUSTOMIZE dan pilih DATE lalu rubahlah SHORT DATE FORMAT menjadi dd/mm/yy jika sudah tekan Oke.

CARA MEMAKAI FORM TRANSAKSI INI :

1. Klik Add, untuk memasukan data transaksi yang baru
2. Klik tombol find yang ada disamping kode pelanggan lalu masukan kode pelanggan pada kotak pencarian data kemudian tekan enter.
3. Klik tombol find yang ada disamping kode buku lalu masukan kode buku pada kotak pencarian data kemudian tekan enter.
4. Masukan jumlah beli, lalu tekan enter.
5. Klik tombol Lagi untuk membeli buku yang lainnya lagi.
6. Klik tombol Selesai bila semua buku yang diinginkan sudah selesai dimasukkan.
7. Pilih cara pengiriman buku yang telah disediakan.
8. Masukan uang bayar pada tempat yang disediakan.
9. Klik Save, untuk menyimpan data atau Klik Clear, untuk mengosongkan dan membatalkan data yang  akan disimpan.
10. Klik Exit untuk keluar.
- Jangan lupa untuk mengganti Name dari form ini di properties menjadi ”Ftransaksi” dan menyimpannya dengan nama ”Transaksi.frm”.

Demikianlah pembahasan tentang program transaksi yang memang sangat panjang dan lebar. Tapi jika anda mengerti maka terasa tidak terlalu sulit untuk membuatnya. Selamat menikmati tutorial selanjutnya !

vb-transaksi

Tidak ada komentar:

Posting Komentar