LISTING PROGRAM
7. Tampilan Form Penyerahan Cucian
Private Sub Form_Activate()
'adodc di pasang provider pada saat run time, dan pembacaan database menggunaman app path agar aman dari ketergantungan direktori dan folder
Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & App.Path & "\DBLoundry.mdb"
'sumber data untuk adodc adalah tabel transaksi Adodc1.RecordSource = "Transaksi"
'hub datagrid ke adodc
Set DataGrid1.DataSource = Adodc1 DataGrid1.Refresh
'jika kode kasir tidak terdeteksi dalam form transaksi munculkan pesan...
If Kodeksr = "" Then
MsgBox "Kasir tidak terdeteksi" Login.Show
Exit Sub End If
'buka database dan tabel barang, nama barang dan kode tampilkan dalam list
Call BukaDB
RSBarang.Open "Barang", Conn List1.Clear
Do Until RSBarang.EOF
List1.AddItem RSBarang!NamaBrg & Space(50) & RSBarang!Kodebrg RSBarang.MoveNext
Loop
'buka database dan tabel konsumen, kode konsumen tampilkan dalam combo
RSKonsumen.Open "Konsumen", Conn Combo1.Clear
Do Until RSKonsumen.EOF
Combo1.AddItem RSKonsumen!NomorKsm RSKonsumen.MoveNext
Loop
'panggil prosedur nomor pemesanan otomatis Call AutoPsn
'panggil prosedur nomor konsumen otomatis Call AutoKsm
'panggil prosedur untuk mengosongkan tabel transaksi Call Tabel_Kosong Adodc1.Recordset.MoveFirst Tanggal = Date TglMintakrm.Value = Date NomorKsm.Enabled = False CmdSimpan.Enabled = False End Sub
Private Sub Form_Load()
'kode dna nama kasir diambil dari login Kodeksr = Login.TxtKodeKsr
DataGrid1.Col = 1
CmdSimpan.Enabled = False End Sub
'Private Sub TeleponKsm_Change() 'End Sub
Private Sub Timer1_Timer() Jam = Time$
End Sub
'prosedur untuk memanggil nomor pemesanan otomatis dengan pola PYYMMDD999
Private Sub AutoPsn() Call BukaDB
RSPesanan.Open ("select * from pesanan Where NomorPsn In(Select Max(NomorPsn)From Pesanan)Order By NomorPsn Desc"), Conn
RSPesanan.Requery
Dim Urutan As String * 10 Dim Hitung As Long
With RSPesanan If .EOF Then
Urutan = "P" + Format(Date, "YYMMDD") + "001" NomorPsn = Urutan
Exit Sub Else
If Mid(!NomorPsn, 2, 6) <> Format(Date, "YYMMDD") Then Urutan = "P" + Format(Date, "YYMMDD") + "001" Else
Hitung = Right(!NomorPsn, 9) + 1
Urutan = "P" + Format(Date, "YYMMDD") + Right("000" & Hitung, 3) End If End If NomorPsn = Urutan End With End Sub
'prosedur untuk membuat nomor konsumen otomatis dengan pola KSM999 Private Sub AutoKsm()
Call BukaDB
RSKonsumen.Open ("select * from Konsumen Where NomorKsm In(Select Max(NomorKsm)From Konsumen)Order By NomorKsm Desc"), Conn
RSKonsumen.Requery
Dim Urutan As String * 6 Dim Hitung As Long
With RSKonsumen If .EOF Then Urutan = "KSM001" NomorKsm = Urutan Else Hitung = Right(!NomorKsm, 3) + 1
Urutan = "KSM" + Right("000" & Hitung, 3) End If
NomorKsm = Urutan End With
End Sub
Private Sub Nomorksm_Change() Call BukaDB
RSKonsumen.Open "Select * from konsumen where nomorksm='" & NomorKsm & "'", Conn
RSKonsumen.Requery
If Not RSKonsumen.EOF Then
NamaKsm = RSKonsumen!NamaKsm RayonKsm = RSKonsumen!RayonKsm KelasKsm = RSKonsumen!KelasKsm End If
End Sub
Private Sub kelasksm_KeyPress(Keyascii As Integer) If Keyascii = 13 Then
Call BukaDB
RSKonsumen.Open "Select * from konsumen where kelasksm='" & KelasKsm & "'", Conn
RSKonsumen.Requery
If Not RSKonsumen.EOF Then
NomorKsm = RSKonsumen!NomorKsm NamaKsm = RSKonsumen!NamaKsm RayonKsm = RSKonsumen!RayonKsm KelasKsm = RSKonsumen!KelasKsm List1.SetFocus Else NamaKsm.SetFocus End If End If
If Not (Keyascii >= Asc("0") And Keyascii <= Asc("9") Or Keyascii = vbKeyBack) Then Keyascii = 0
End Sub
Private Sub Namaksm_KeyPress(Keyascii As Integer) Keyascii = Asc(UCase(Chr(Keyascii)))
If Keyascii = 13 Then Call BukaDB
RSKonsumen.Open "Select * from konsumen where namaksm='" & NamaKsm & "'", Conn
RSKonsumen.Requery
If Not RSKonsumen.EOF Then
NomorKsm = RSKonsumen!NomorKsm RayonKsm = RSKonsumen!RayonKsm KelasKsm = RSKonsumen!KelasKsm End If RayonKsm.SetFocus End If End Sub
Private Sub rayonksm_KeyPress(Keyascii As Integer) Keyascii = Asc(UCase(Chr(Keyascii)))
If Keyascii = 13 Then Call BukaDB
RSKonsumen.Open "Select * from konsumen where rayonksm='" & RayonKsm & "'", Conn
RSKonsumen.Requery
If Not RSKonsumen.EOF Then
NomorKsm = RSKonsumen!NomorKsm NamaKsm = RSKonsumen!NamaKsm KelasKsm = RSKonsumen!KelasKsm End If
DataGrid1.SetFocus End If
End Sub
Private Sub Combo1_KeyPress(Keyascii As Integer) Keyascii = Asc(UCase(Chr(Keyascii)))
If Keyascii = 13 Then If Combo1 = "" Then Call AutoKsm
MsgBox "silakan isi data konsumen baru" Kosongksm KelasKsm.SetFocus Exit Sub Else DataGrid1.SetFocus End If End If If Keyascii = 27 Then Combo1 = "" Call AutoKsm
MsgBox "silakan isi data konsumen baru" Kosongksm
KelasKsm.SetFocus Exit Sub
End If End Sub
Private Sub Combo1_Click() Call BukaDB
RSKonsumen.Open "Select * from Konsumen where Nomorksm='" & Combo1 & "'", Conn
If Not RSKonsumen.EOF Then
NomorKsm = RSKonsumen!NomorKsm End If
Conn.Close End Sub
'prosedur untuk mengosongkan tabel transaksi dari bekas entrian data
Function Tabel_Kosong()
Adodc1.Recordset.MoveFirst
Do While Not Adodc1.Recordset.EOF Adodc1.Recordset.Delete Adodc1.Recordset.MoveNext Loop For i = 1 To 1 Adodc1.Recordset.AddNew Adodc1.Recordset!Nomor = i Adodc1.Recordset.Update Next i DataGrid1.Col = 1 End Function
'jika transaksi di baris pertama telah selesai maka tambahkan satu nomor baru dibawahnya
Function Tambah_Baris()
For i = Adodc1.Recordset.RecordCount To Adodc1.Recordset.RecordCount
Adodc1.Recordset.AddNew
Adodc1.Recordset.Update Next i
End Function
Private Sub DataGrid1_KeyPress(Keyascii As Integer) Keyascii = Asc(UCase(Chr(Keyascii)))
End Sub
'jika kolom 1 (kode barang) diisi data, maka buka database dan tabel barang,
'carilah data barang yang kodenya diketik, jika tidak ditemukan maka munculkan pesan
'jika ditemukan maka tampilkan nama barang dan tarifnya
Private Sub DataGrid1_AfterColEdit(ByVal ColIndex As Integer) If DataGrid1.Col = 1 Then
Call BukaDB
RSBarang.Open "Select * from Barang where Kodebrg='" & Adodc1.Recordset!Kode & "'", Conn
If RSBarang.EOF Then
Pesan = MsgBox("Kode Barang Tidak Terdaftar") List1.SetFocus Exit Sub End If Adodc1.Recordset!Kode = RSBarang!Kodebrg Adodc1.Recordset!Nama = RSBarang!NamaBrg Adodc1.Recordset!Harga = RSBarang!Tarif DataGrid1.Col = 4 Exit Sub End If
'jika kolom diisi data maka tampilkan totalnya sebagai perkalian antara tarif dan jumlah
If DataGrid1.Col = 4 Then Adodc1.Recordset!Jumlah = Adodc1.Recordset!Jumlah Adodc1.Recordset!Total = Adodc1.Recordset!Harga * Adodc1.Recordset!Jumlah Adodc1.Recordset.Update Call Tambah_Baris Adodc1.Recordset.MoveNext DataGrid1.Col = 1 Adodc1.Recordset.MoveLast DataGrid1.Refresh Total = TotalHarga JmlItem = TotalItem End If End Sub
'prosedur untuk mencari total dalam grid Function TotalHarga()
Set TTlHarga = New ADODB.Recordset
TTlHarga.Open "select sum(Total) as JumTotal from Transaksi", Conn
TotalHarga = TTlHarga!JumTotal End Function
'prosedur untuk mencari total item dalam grid Function TotalItem()
Set TTlItem = New ADODB.Recordset
TTlItem.Open "select sum(Jumlah) as JumItem from Transaksi", Conn
TotalItem = TTlItem!Jumitem End Function
Private Sub Bersihkan() JmlItem = "" Total = "" DP = "" Sisa = "" Stok = "" End Sub Sub Kosongksm() NamaKsm = "" RayonKsm = "" KelasKsm = "" End Sub
'validasi pada pembayaran agar jangan kurang atau tidak diisi Private Sub DP_KeyPress(Keyascii As Integer)
If Keyascii = 13 Then If DP = "" Then DP = 0
Sisa = Total
ElseIf DP = Total Then Sisa = 0
ElseIf DP > Val(Total) Then
MsgBox "Kembali : " & DP - Total & "" Sisa = 0
ElseIf DP < Val(Total) Then Sisa = Total - DP End If CmdSimpan.Enabled = True CmdSimpan.SetFocus End If
If Not (Keyascii >= Asc("0") And Keyascii <= Asc("9") Or Keyascii = vbKeyBack) Then Keyascii = 0
End Sub
Private Sub CmdSimpan_Keypress(Keyascii As Integer) If Keyascii = 27 Then CmdSimpan.Enabled = False DP = "" DP.SetFocus End If End Sub
'pengisian data konsumen dalam dilakukan langsung pada form transaksi
Sub SimpanKsm() Call BukaDB
RSKonsumen.Open "select * from konsumen where nomorksm='" & NomorKsm & "'", Conn
RSKonsumen.Requery If RSKonsumen.EOF Then
Dim SQLTambahksm As String
SQLTambahksm = "Insert Into Konsumen(NomorKsm,namaksm,RayonKsm,Rayonksm)" & _
"values('" & NomorKsm & "','" & NamaKsm & "','" & RayonKsm & "','" & KelasKsm & "')"
Conn.Execute (SQLTambahksm) End If
End Sub
Private Sub CmdSimpan_Click()
If NamaKsm = "" Or RayonKsm = "" Or KelasKsm = "" Then MsgBox "data pemesan belum lengkap"
Exit Sub End If
'simpan data transaksi ke tabel pesanan (hanya satu kali) Dim Input1 As String
Input1 = "Insert Into Pesanan(NomorPsn,TanggalPsn,Totalitem,TotalHrg,DP,Sisa,Nomorksm,Kod
eksr,TglMintakrm,Ket)" & _
"values('" & NomorPsn & "','" & Tanggal & "','" & JmlItem & "','" & Total & "','" & DP & "','" & Sisa & "','" & NomorKsm & "','" & Kodeksr & "','" & TglMintakrm & "','BELUM DIKIRIM')"
Conn.Execute (Input1)
'simpan data transaksi ke tabel detail pesanan (berulang kali sebanyak data dalam grid)
RSTransaksi.Open "select * from Transaksi", Conn RSTransaksi.MoveFirst
Do While Not RSTransaksi.EOF
If RSTransaksi!Kode <> vbNullString Then Dim SQLTambahDetail As String
SQLTambahDetail = "Insert Into DetailPsn(Nomorpsn,KodeBrg,Tarif,Jumlahpsn) " & _
"values ('" & NomorPsn & "','" & RSTransaksi!Kode & "','" & RSTransaksi!Harga & "','" & RSTransaksi!Jumlah & "')"
Conn.Execute (SQLTambahDetail) End If RSTransaksi.MoveNext Loop Call SimpanKsm Bersihkan Kosongksm Combo1.SetFocus Form_Activate Call Cetak End Sub
Private Sub CmdBatal_Click() Bersihkan
Combo1.SetFocus Form_Activate End Sub
Private Sub CmdTutup_Click() Unload Me
End Sub
Function Cetak() Call BukaDB
RSPesanan.Open "select * from Pesanan Where NomorPsn In(Select Max(NomorPsn)From Pesanan)Order By NomorPsn Desc", Conn
Tampilkan.Show
Dim JmlHarga, JmlJual, JmlHasil As Double Dim MGrs As String
Tampilkan.Font = "Courier New" Tampilkan.Print
Tampilkan.Print
RSKasir.Open "select * From Kasir where KodeKsr= '" & RSPesanan!Kodeksr & "'", Conn
RSKonsumen.Open "select * From Konsumen where Nomorksm= '" & RSPesanan!NomorKsm & "'", Conn
Tampilkan.Print Tab(5); "Nomor : "; RSPesanan!NomorPsn
Tampilkan.Print Tab(5); "Tanggal : "; Format(RSPesanan!TanggalPsn, "DD-MMMM-YYYY")
Tampilkan.Print Tab(5); "Kasir : "; RSKasir!Namaksr MGrs = String$(33, "-")
Tampilkan.Print Tab(5); "Pemesan : "; RSKonsumen!NamaKsm Tampilkan.Print Tab(5); "Rayon : "; RSKonsumen!RayonKsm Tampilkan.Print Tab(5); "Kelas : "; RSKonsumen!KelasKsm Tampilkan.Print Tab(5); MGrs
RSDetailPsn.Open "select * from detailpsn Where NomorPsn='" & RSPesanan!NomorPsn & "'", Conn
RSDetailPsn.MoveFirst no = 0
Do While Not RSDetailPsn.EOF no = no + 1
Set RSBarang = New ADODB.Recordset
RSBarang.Open "select * From Barang where Kodebrg= '" & RSDetailPsn!Kodebrg & "'", Conn
RSBarang.Requery
Harga = RSBarang!Tarif
Jumlah = RSDetailPsn!JumlahPsn Hasil = Harga * Jumlah
Tampilkan.Print Tab(5); no; Space(2); RSBarang!NamaBrg
Tampilkan.Print Tab(10); RKanan(Jumlah, "##"); Space(1); "X"; Tampilkan.Print Tab(15); Format(Harga, "###,###,###");
Tampilkan.Print Tab(25); RKanan(Hasil, "###,###,###") RSDetailPsn.MoveNext
Loop
Tampilkan.Print Tab(5); MGrs
Tampilkan.Print Tab(5); "Total :";
Tampilkan.Print Tab(25); RKanan(RSPesanan!TotalHrg, "###,###,###"); Tampilkan.Print Tab(5); "Uang Muka :";
Tampilkan.Print Tab(25); RKanan(RSPesanan!DP, "###,###,###"); Tampilkan.Print Tab(5); MGrs
Tampilkan.Print Tab(5); "Sisa :";
Tampilkan.Print Tab(25); RKanan(RSPesanan!Sisa, "###,###,###"); Tampilkan.Print Tab(5); MGrs Tampilkan.Print Tampilkan.Print Tampilkan.Print Conn.Close End Function
Private Function RKanan(NData, CFormat) As String RKanan = Format(NData, CFormat)
RKanan = Space(Len(CFormat) - Len(RKanan)) + RKanan End Function
'data tersebut akan masuk ke dalam grid
'hal ini dibuat untuk memudahkan proses transaksi Private Sub List1_keyPress(Keyascii As Integer) If Keyascii = 13 Then
If DataGrid1.SelText <> Right(List1, 5) Then DataGrid1.SelText = Right(List1, 5) Adodc1.Recordset.Update
Call BukaDB
RSBarang.Open "Select * from Barang where KodeBrg='" & Right(List1, 5) & "'", Conn
RSBarang.Requery
If Not RSBarang.EOF Then
Adodc1.Recordset!Kode = RSBarang!Kodebrg Adodc1.Recordset!Nama = RSBarang!NamaBrg Adodc1.Recordset!Harga = RSBarang!Tarif Adodc1.Recordset.Update DataGrid1.SetFocus DataGrid1.Col = 4 End If End If End If End Sub