bab iii pembahasan - repository.bsi.ac.id filesales membantu mempercepat proses penjualan dan mampu...
TRANSCRIPT
26
BAB III
PEMBAHASAN
3.1. Tinjauan Perusahaan
Dalam tinjauan perusahaan, penulis akan menjelaskan tentang sejarah
CV. Prestasi Gemilang dan struktur organisasinya beserta fungsinya.
3.1.1. Sejarah Perusahaan
CV. Prestasi Gemilang didirikan dengan SIUP No. 4/24.1PK/31.73.08/-
1.824.27/2018. CV. Prestasi Gemilang terdaftar sebagai Wajib Pajak (WP)
di kantor pelayanan pajak yang tersedia dengan NPWP No. 83.625529.9-086.000.
Perusahaan yang bertempat di Jl. H. Tohir No. 56A, Kampung Baru
RT: 002/04 Sukabumi Selatan, Kebon Jeruk – Jakarta Barat 11560 ini dipimpin
oleh Bapak Yudith Yulianur, S.E selaku Direktur Utama.
CV. Prestasi Gemilang adalah sebuah perusahaan yang bergerak
dibidang pengadaan barang dan jasa umum. Perusahaan ini adalah badan usaha
yang dibentuk sebagai perusahaan pengadaan barang untuk sekolah. Kami juga
menjalankan usaha yang bergerak dibidang pengadaan jasa pelayanan yang
meliputi pembuatan spanduk, percetakan, jasa service AC dan jasa service
computer. Visi CV. Prestasi Gemilang adalah diakui sebagai perusahaan yang
bertumbuh kembang, unggul dan terpercaya sebagai penyongkong kelancaran
operasional bersama pelanggan. Sedangkan misi CV. Prestasi Gemilang adalah
menjalankan bisnis pengadaan barang dan jasa, berorientasi pada kepuasan
pelanggan dan anggota perusahaan.
27
3.1.2. Struktur Organisasi & Fungsi
Sumber : CV. Prestasi Gemilang
Gambar III.1.
Struktur Organisasi CV. Prestasi Gemilang
Tabel III.1.
Jabatan dan Fungsi CV. Prestasi Gemilang
No Jabatan Fungsi
1 Komisaris
Melakukan pengawasan terhadap pengurusan perusahaan yang
dilakukan oleh Direktur serta memberikan nasihat berkenan dengan
kebijakan Direktur dan menjalan perusahaan.
2 Direktur Utama
Memimpin perusahaan dengan memberikan kebijakan-kebijakan
perusahaan serta menetapkan dan mengawasi prosedur kegiatan
perusahaan untuk mencapai sasaran yang ditetapkan perusahaan.
3 Corporate Secretary Memberikan masukan dalam pengambilan keputusan yang strategic
serta memberikan masukan dalam management
4 Sales dan Purchase
Sales membantu mempercepat proses penjualan dan mampu
meningkatkan penjualan perusahaan, sedangkan Purchase bertugas
dalam pencarian dan pembelian barang yang dibutuhkan oleh
perusahaan.
5 Administrasi Menyusun dan mencatat data informasi perusahaan
6 Teknik dan Produksi
Teknik berfungsi melakukan perbaikan dan pemeliharaan suatu sistem
atau mesin, sedangkan Produksi berfungsi menghasilkan suatu produk
barang
28
3.2. Tinjauan Kasus
CV. Prestasi Gemilang telah mencatat setiap transaksi (pembelian) yang
berjalan menggunakan nota transaksi yang kemudian di-input dalam Microsoft
Excel untuk digunakan sebagai daftar list pemesanan pelanggan. CV. Prestasi
Gemilang memiliki beberapa kelemahan, seperti masalah kehilangan data
transaksi, proses pencarian data yang relatif lama, tidak ada pencatatan akuntansi
pengeluaran kas untuk mengetahui aliran dana yang sudah dikeluarkan dan
ketidaktepatan waktu memberikan laporan akuntansi, terbukti laporan yang
diterima pimpinan tidak sesuai dengan jadwal yang telah ditentukan.
3.2.1. Proses Bisnis Sistem Berjalan
1. Proses Permintaan dan Pembelian Barang
Bagian purchase membuat daftar list barang yang akan dibelanjakan sesuai
dengan permintaan dari pelanggan, lalu melakukan pembelian barang kepada
supplier. Bagian purchase memberikan daftar list barang yang akan dibeli
kepada supplier, lalu supplier menyiapkan barang sesuai daftar list barang yang
telah diterima.
2. Proses Pembayaran
Apabila barang yang dibeli sudah siap, barang diserahkan oleh supplier dan
langsung diperiksa oleh bagian purchase. Apabila barang sudah lengkap,
bagian purchase melakukan pembayaran secara tunai kepada supplier dan
menerima bukti transaksi pembelian berupa nota.
29
3. Proses Pembuatan Laporan
Bagian corporate secretary melakukan rekap transaksi harian berdasarkan
bukti transaksi yang diberikan oleh bagian purchase dan membuat laporan
pembelian berdasarkan transaksi yang terjadi, lalu laporan akan diberikan
setiap akhir bulan kepada Direktur.
3.2.2. Activity Diagram
Gambar III.2.
Activity Diagram CV. Prestasi Gemilang
30
3.2.3. Dokumen Masukan
1. Nama Dokumen : Nota Pembelian
Fungsi : Sebagai bukti atas pembelian barang secara tunai
Sumber : Supplier
Tujuan : Perusahaan
Media : Kertas
Jumlah : Satu Lembar
Frekuensi : Setiap terjadi transaksi pembelian
Format : Lampiran A-1
3.2.4. Dokumen Keluaran
1. Nama Dokumen : Daftar Barang
Fungsi : Sebagai bukti pemesanan barang
Sumber : Perusahaan
Tujuan : Supplier
Media : Kertas
Jumlah : Satu Lembar
Frekuensi : Setiap terjadi transaksi pembelian
Format : Lampiran A-2
31
2. Nama Dokumen : Laporan Rekap Harian
Fungsi : Sebagai bukti laporan harian
Sumber : Corporate Secretary
Tujuan : Direktur
Media : Kertas
Jumlah : Satu Lembar
Frekuensi : Setiap terjadi transaksi pembelian
Format : Lampiran A-3
3. Nama Dokumen : Laporan Keuangan
Fungsi : Sebagai alat untuk mengetahui kondisi keuangan
dan kondisi perusahaan
Sumber : Corporate Secretary
Tujuan : Direktur
Media : Kertas
Jumlah : Satu Lembar
Frekuensi : Setiap akhir bulan
Format : Lampiran A-4
32
3.2.5. Permasalahan Pokok
Dari permasalahan yang ada, maka penulis dapat melihat permasalahan
apa saja yang terjadi pada CV. Prestasi Gemilang sebagai berikut :
1. Pencatatan akuntansi yang belum terintegrasi.
2. Kurangnya manajemen dalam mengatur pencatatan dan pembuatan
laporan.
3. Kurangnya efisiensi waktu didalam pengolahaan data perusahaan.
4. Hilangnya dokumen atau data transaksi karena tidak langsung diarsipkan.
3.2.6. Pemecahan Masalah
Dari permasalahan pokok diatas, penulis memberikan pemecahan
masalah pada CV. Prestasi Gemilang sebagai berikut :
1. Menciptakan sistem yang terkomputerisasi dengan membuat aplikasi
pembelian berbasis desktop menggunakan bahasa pemograman visual
basic.
2. Apabila sistem sudah terkomputerisasi, bisa sebagai penunjang kinerja
dalam hal pencatatan transaksi pembelian agar tertata rapi, terintegrasi
dengan baik dan tingkat kevalidan data dalam membuat laporan keuangan
mendapatkan hasil yang lebih akurat.
3. Apabila sistem sudah terkomputerisasi, mempermudah pengolahan data
sehingga lebih praktis.
4. Apabila sistem sudah terkomputerisasi, dokumen tidak akan hilang karna
sudah tersimpan didalam sistem.
33
3.3. Analisa Kebutuhan Software
3.3.1. Analisa Kebutuhan
Berdasarkan proses pembelian sistem berjalan pada CV. Prestasi
Gemilang, maka tahapan berikutnya adalah analisis kebutuhan. Berikut ini
spesifikasi kebutuhan (System Requirement) dari sistem pembelian pada
CV. Prestasi Gemilang.
Halaman Admin
A.1. Admin Login
A.2. Admin Mengelola Data Kategori Barang
A.3. Admin Mengelola Data Barang
A.4. Admin Mengelola Data Supplier
A.5. Admin Mengelola Pembelian
A.6. Admin Mengelola Data Akun
A.7. Admin Mengelola Jurnal
A.8. Admin Melihat Laporan Pembelian
A.9. Admin Melihat Laporan Pengeluaran Kas
A.10. Admin Melihat Laporan Jurnal
A.11. Admin Mengelola Pengaturan User
A.12. Admin Logout
Halaman Bagian Pembelian
A.1. Bagian Pembelian Login
A.2. Bagian Pembelian Mengelola Pembelian
A.3. Bagian Pembelian Melihat Laporan Pembelian
A.4. Bagian Pembelian Melihat Laporan Pengeluaran Kas
34
A.5. Bagian Pembelian Melihat Laporan Jurnal
A.6. Bagian Pembelian Logout
Halaman Pimpinan
A.1. Pimpinan Login
A.2. Pimpinan Melihat Laporan Pembelian
A.3. Pimpinan Melihat Laporan Pengeluaran Kas
A.4. Pimpinan Melihat Laporan Jurnal
A.5. Pimpinan Logout
3.3.2. Use Case Diagram
1. Use Case Diagram Admin
Gambar III.3.
Use Case Diagram Sistem Usulan Admin
35
2. Use Case Diagram Bagian Pembelian
Gambar III.4.
Use Case Diagram Sistem Usulan Bagian Pembelian
3. Use Case Diagram Pimpinan
Gambar III.5.
Use Case Diagram Sistem Usulan Pimpinan
36
Tabel III.2.
Deskripsi Use Case Diagram Halaman Admin
Use Case Narative Halaman Admin
Tujuan Admin dapat melihat data yang terdapat pada sistem
halaman admin
Deskripsi Sistem ini memungkinkan aktor untuk masuk ke
halaman admin yang didalamnya terdapat menu data
master (data kategori barang, data barang, data
supplier, dan data akun), menu transaksi (pembelian
dan jurnal), menu laporan (laporan transaksi pembelian
dan laporan pengeluran kas), serta menu pengaturan
untuk mengatur user
Skenario Utama
Aktor Admin
Kondisi Awal Aktor membuka aplikasi pembelian
Aksi Aktor Reaksi Sistem
1. Aktor login dengan menginput
username dan password
Sistem akan memvalidasi apakah username dan
password sudah benar. Jika salah, akan tampil pesan
username password salah. Jika benar, akan masuk
kedalam sistem pembelian dan tampil menu utama.
2. Aktor memilih menu kategori
barang
Sistem akan menampilkan informasi data ketegori
barang.
3. Aktor memilih menu barang Sistem akan menampilkan informasi data barang.
4. Aktor memilih menu supplier Sistem akan menampilkan informasi data supplier
5. Aktor memilih menu akun Sistem akan menampilkan informasi data akun
6. Aktor memilih menu pembelian Sistem akan menampilkan informasi data transaksi
pembelian
7. Aktor memilih menu jurnal Sistem akan menampilkan informasi jurnal
8. Aktor memilih menu laporan
transaksi pembelian
Sistem akan menampilkan informasi laporan
transaksi pembelian
9. Aktor memilih menu laporan
pengeluaran kas
Sistem akan menampilkan informasi laporan
pengeluaran kas
10. Aktor memilih menu pengaturan
user
Sistem akan menyimpan hak ases user
Kondisi Akhir Jika perintah sesuai maka sistem akan menampilkan
apa yang diinginkan
37
Tabel III.3.
Deskripsi Use Case Diagram Halaman Bagian Pembelian
Use Case Narative Halaman Bagian Pembelian
Tujuan Bagian pembelian dapat melihat data yang terdapat
pada sistem halaman bagian pembelian
Deskripsi Sistem ini memungkinkan aktor untuk masuk ke
halaman bagian pembelian yang didalamnya terdapat
menu menu transaksi yang terdiri dari pembelian dan
menu laporan yang terdiri dari laporan transaksi
pembelian
Skenario Utama
Aktor Bagian Pembelian
Kondisi Awal Aktor membuka aplikasi pembelian
Aksi Aktor Reaksi Sistem
1. Aktor login dengan menginput
username dan password
Sistem akan memvalidasi apakah username dan
password sudah benar. Jika salah, akan tampil pesan
username password salah. Jika benar, akan masuk
kedalam sistem pembelian dan tampil menu utama.
2. Aktor memilih menu pembelian Sistem akan menampilkan informasi data transaksi
pembelian
3. Aktor memilih menu laporan
transaksi pembelian
Sistem akan menampilkan informasi laporan transaksi
pembelian
4. Aktor memilih menu laporan
pengeluaran kas
Sistem akan menampilkan informasi laporan
pengeluaran kas
Kondisi Akhir Jika perintah sesuai maka sistem akan menampilkan
apa yang diinginkan
38
Tabel III.4.
Deskripsi Use Case Diagram Halaman Pimpinan
Use Case Narative Halaman Pimpinan
Tujuan Pimpinan dapat melihat data yang terdapat pada sistem
halaman Pimpinan
Deskripsi Sistem ini memungkinkan aktor untuk masuk ke
halaman pimpinan yang didalamnya terdapat menu
laporan yang meliputi laporan transaksi pembelian dan
laporan pengeluran kas.
Skenario Utama
Aktor Pimpinan
Kondisi Awal Aktor membuka aplikasi pembelian
Aksi Aktor Reaksi Sistem
1. Aktor login dengan menginput
username dan password
Sistem akan memvalidasi apakah username dan
password sudah benar. Jika salah, akan tampil pesan
username password salah. Jika benar, akan masuk
kedalam sistem pembelian dan tampil menu utama.
2. Aktor memilih menu laporan
transaksi pembelian
Sistem akan menampilkan informasi laporan transaksi
pembelian
3. Aktor memilih menu laporan
pengeluaran kas
Sistem akan menampilkan informasi laporan
pengeluaran kas
Kondisi Akhir Jika perintah sesuai maka sistem akan menampilkan
apa yang diinginkan
39
3.3.3. Activity Diagram
1. Activity Diagram Halaman Admin
Gambar III.6.
Activity Diagram Halaman Admin
46
2. Activity Diagram Halaman Bagian Pembelian
Gambar III.13.
Activity Diagram Halaman Bagian Pembelian
51
3.4. Desain
3.4.1. Entity Relationship Diagram (ERD)
Gambar III.18.
Entity Relationship Diagram (ERD)
3.4.2. Logical Record Structure (LRS)
Gambar III.19.
Logical Record Structured (LRS)
52
3.4.3. Spesifikasi File
a. Spesifikasi File User
Nama Database : Pembelian
Nama File : tblSysUser
Tipe File : File Master
Akses File : Random
Panjang Record : 51
Field Key : UserID
Tabel III.5.
Spesifikasi File User
No Elemen Data Akronim Tipe Panjang Keterangan
1 ID User UserID Short Text 10 Primary Key
2 Nama User UserName Short Text 30
3 Password User UserPassword Short Text 10
4 Tipe User ID UserTypeID Short Text 1
5 Time Update TimeUpdate Date/Time
b. Spesifikasi File Supplier
Nama Database : Pembelian
Nama File : Suppler
Tipe File : File Transaksi
Akses File : Random
Panjang Record : 425
Field Key : KodeSupplier
53
Tabel III.6.
Spesifikasi File Supplier
No Elemen Data Akronim Tipe Panjang Keterangan
1 Kode Supplier KodeSupplier Short Text 5 Primary key
2 Nama Nama Short Text 100
3 Alamat Alamat Short Text 250
4 Nomor Telepon NoTelp Short Text 50
5 Created By CreatedBy Short Text 10
6 Creation Date CreationDate Date/Time
7 Update By UpdateBy Short Text 10
8 Update Date UpdateDate Date/Time
c. Spesifikasi File Kategori Barang
Nama Database : Pembelian
Nama File : Kategori
Tipe File : File Transaksi
Akses File : Random
Panjang Record : 45
Field Key : KodeKategori
Tabel III.7.
Spesifikasi File Kategori Barang
No Elemen Data Akronim Tipe Panjang Keterangan
1 Kode Kategori KodeKategori Short Text 5 Primary Key
2 Kategori Kategori Short Text 20
3 Created By CreatedBy Short Text 10
4 Creation Date CreationDate Date/Time
5 Update By UpdateBy Short Text 10
6 Update Date UpdateDate Date/Time
54
d. Spesifikasi File Barang
Nama Database : Pembelian
Nama File : Barang
Tipe File : File Transaksi
Akses File : Random
Panjang Record : 285
Field Key : KodeBarang
Tabel III.8.
Spesifikasi File Barang
No Elemen Data Akronim Tipe Panjang Keterangan
1 Kode Barang KodeBarang Short Text 5 Primary Key
2 Nama Barang NamaBarang Short Text 250
3 Kode Kategori KodeKategori Short Text 5 Foreign Key
4 Satuan Satuan Short Text 5
5 Harga Harga Currency
6 Created By CreatedBy Short text 10
7 Creation Date CreationDate Date/Time
8 Update By UpdateBy Short Time 10
9 Update Date UpdateDate Date/Time
e. Spesifikasi File Akun
Nama Database : Pembelian
Nama File : Akun
Tipe File : File Master
Akses File : Random
Panjang Record : 55
Field Key : NoAkun
55
Tabel III.9.
Spesifikasi File Akun
No Elemen Data Akronim Tipe Panjang Keterangan
1 Nomor Akun NoAkun Short Text 5 Primary Key
2 Nama Akun NamaAkun Short Text 30
3 Created By CreatedBy Short Text 10
4 Creation Date CreationDate Date/Time
5 Update By UpdateBy Short Text 10
6 Update Date UpdateDate Date/Time
f. Spesifikasi File Pembelian
Nama Database : Pembelian
Nama File : Pembelian
Tipe File : File Transaksi
Akses File : Random
Panjang Record : 30
Field Key : NoPembelian
Tabel III.10.
Spesifikasi File Pembelian
No Elemen Data Akronim Tipe Panjang Keterangan
1 Nomor Pembelian NoPembelian Short Text 5 Primary Key
2 Tanggal Pembelian TglPembelian Date/Time
3 Kode Supplier KodeSupplier Short Text 5 Foreign Key
4 Ppn Ppn Short Text
5 Subtotal Subtotal Currency
6 Total Total Currency
7 Created By CreatedBy Short Text 10
8 Creation Date CreationDate Date/Time
9 Update By UpdateBy Short Text 10
10 Update Date UpdateDate Date/Time
56
g. Spesifikasi File Pembelian Detail
Nama Database : Pembelian
Nama File : PembelianDetail
Tipe File : File Transaksi
Akses File : Random
Panjang Record : 75
Field Key : NoPembelian
Tabel III.11.
Spesifikasi File Pembelian Detail
No Elemen Data Akronim Tipe Panjang Keterangan
1 Nomor Pembelian NoPembelian Short Text 5 Primary Key
2 Nomor Baris RowNo Long Integer
3 Kode Barang KodeBarang Short Text 50 Foreign Key
4 Harga Harga Currency
5 Jumlah Jumlah Long Integer
6 Created By CreatedBy Short Text 10
7 Creation Date CreationDate Date/Time
8 Update By UpdateBy Short Text 10
9 Update Date UpdateDate Date/Time
h. Spesifikasi File Jurnal
Nama Database : Pembelian
Nama File : Jurnal
Tipe File : File Master
Akses File : Random
Panjang Record : 30
Field Key : NoJurnal
57
Tabel III.12.
Spesifikasi File Jurnal
No Elemen Data Akronim Tipe Panjang Keterangan
1 Nomor Jurnal NoJurnal Short Text 5 Primary Key
2 Tanggal Jurnal TglJurnal Date/Time
3 Nomor Pembelian NoPembelian Short Text 5 Foreign Key
4 Created By CreatedBy Short Text 10
5 Creation Date CreationDate Date/Time
6 Update By UpdateBy Short Text 10
7 Update Date UpdateDate Date/Time
i. Spesifikasi File Jurnal Detail
Nama Database : Pembelian
Nama File : JurnalDetail
Tipe File : File Master
Akses File : Random
Panjang Record : 30
Field Key : NoJurnal
Tabel III.13.
Spesifikasi File Jurnal Detail
No Elemen Data Akronim Tipe Panjang Keterangan
1 Nomor Jurnal NoJurnal Short Text 5 Primary Key
2 Nomor Akun NoAkun Short Text 5 Foreign Key
3 Debet Debet Currency
4 Kredit Kredit Currency
5 Created By CreatedBy Short Text 10
6 Creation Date CreationDate Short Text
7 Update By UpdateBy Short Text 10
8 Update Date UpdateDate Short Text
59
3.4.5. Deployment Diagram
Gambar III.21.
Deployment Diagram
3.4.6. User Interface
Adapun Desain User Interface yang telah dibuat dalam sistem pembelian
CV. Prestasi Gemilang adalah sbb :
1. Menu Login
Gambar III.22.
Tampilan Menu Login
60
2. Menu Utama
Gambar III.23.
Tampilan Menu Utama
3. Menu Master Akun
Gambar III.24.
Tampilan Menu Master Akun
61
4. Menu Master Tambah dan Edit Akun
Gambar III.25.
Tampilan Menu Master Tambah dan Edit Akun
5. Menu Master Supplier
Gambar III.26.
Tampilan Menu Master Supplier
62
6. Menu Master Tambah dan Edit Supplier
Gambar III.27.
Tampilan Menu Master Tambah dan Edit Supplier
7. Menu Master Kategori Barang
Gambar III.28.
Tampilan Menu Master Kategori Barang
63
8. Menu Master Tambah dan Edit Kategori Barang
Gambar III.29.
Tampilan Menu Master Tambah dan Edit Kategori Barang
9. Menu Master Barang
Gambar III.30.
Tampilan Menu Master Barang
64
10. Menu Master Tambah dan Edit Barang
Gambar III.31.
Tampilan Menu Master Tambah dan Edit Barang
11. Menu Transaksi Pembelian
Gambar III.32.
Tampilan Menu Transaksi Pembelian
65
12. Menu Input Pembelian
Gambar III.33.
Tampilan Menu Input Pembelian
13. Menu Pengaturan User
Gambar III.34.
Tampilan Menu Pengaturan User
66
3.5. Implementasi
3.5.1. Code Generation
Dim rsLoadADO As New ADODB.Recordset
Dim iTableMaxLine As Integer
Dim sKey0 As String
Dim byEditType As Byte '1=add,2=edit
Dim sCurrentSQL As String
Dim sCriteria As String
Dim sOrderBy() As String '* 4
Dim byFormMode As Byte '1=Form,2=Table,3=Find
Dim sCurrentFormName As String
Dim bCheck As Boolean
Sub procRefreshSQL()
Select Case pubbyServerType
Case "1" 'SQL Server
SQL = "SELECT TOP 100 PERCENT Pembelian.NoPembelian,
Pembelian.TglPembelian, Supplier.Nama, Barang.NamaBarang,
PembelianDetail.Jumlah, PembelianDetail.Harga,
PembelianDetail.Jumlah*PembelianDetail.Harga AS TotalHarga,
PembelianDetail.CreatedBy, PembelianDetail.CreationDate,
PembelianDetail.UpdateBy, PembelianDetail.UpdateDate " & _
"FROM ((Pembelian INNER JOIN PembelianDetail ON
Pembelian.NoPembelian = PembelianDetail.NoPembelian) INNER JOIN
Supplier ON Pembelian.KodeSupplier = Supplier.KodeSupplier) INNER
JOIN Barang ON PembelianDetail.KodeBarang = Barang.KodeBarang "
& _
"ORDER BY Pembelian.NoPembelian DESC"
sCurrentSQL = "SELECT TOP " & iTableMaxLine & " * FROM " & _
"( " & SQL & ") DERIVEDTBL " & sCriteria & ""
Case "2" 'mySQL
Case "3" 'Access
SQL = "SELECT TOP 100 PERCENT Pembelian.NoPembelian,
Pembelian.TglPembelian, Supplier.Nama, Barang.NamaBarang,
PembelianDetail.Jumlah, PembelianDetail.Harga,
PembelianDetail.Jumlah*PembelianDetail.Harga AS TotalHarga,
PembelianDetail.CreatedBy, PembelianDetail.CreationDate,
PembelianDetail.UpdateBy, PembelianDetail.UpdateDate " & _
"FROM ((Pembelian INNER JOIN PembelianDetail ON
Pembelian.NoPembelian = PembelianDetail.NoPembelian) INNER JOIN
Supplier ON Pembelian.KodeSupplier = Supplier.KodeSupplier) INNER
67
JOIN Barang ON PembelianDetail.KodeBarang = Barang.KodeBarang "
& _
"ORDER BY Pembelian.NoPembelian DESC"
sCurrentSQL = "SELECT TOP " & iTableMaxLine & " * FROM " & _
"( " & SQL & ") DERIVEDTBL " & sCriteria & ""
End Select
End Sub
Sub procDeleteData()
Dim sMsgResult As VbMsgBoxResult
Dim sCurrentKey As String
Dim rsADO As New ADODB.Recordset
sCurrentKey = txt(0)
sMsgResult = MsgBox("Anda yakin hapus data '" & sCurrentKey & "'",
vbExclamation + vbYesNo + vbDefaultButton2, "[Confirmation]")
If sMsgResult = vbYes Then
Dim rsLoadADO As New ADODB.Recordset
Dim sSQL As String
sSQL = "SELECT * FROM Pembelian"
rsLoadADO.Open sSQL, cnnADO, adOpenDynamic, adLockReadOnly
rsLoadADO.Find "NoPembelian='" & sKey0 & "'"
If rsLoadADO.EOF = False And rsLoadADO.BOF = False Then
If rsLoadADO.EOF Then
rsLoadADO.MoveLast
If rsLoadADO.EOF Then sKey0 = "": GoTo res
sKey0 = rsLoadADO("NoPembelian") & ""
ElseIf rsLoadADO.BOF Then
rsLoadADO.MoveFirst
If rsLoadADO.BOF Then sKey0 = "": GoTo res
sKey0 = rsLoadADO("NoPembelian") & ""
Else
rsLoadADO.MoveNext
If rsLoadADO.EOF Then rsLoadADO.MoveLast
If sKey0 = rsLoadADO("NoPembelian") & "" Then
rsLoadADO.MovePrevious
If rsLoadADO.BOF Then
sKey0 = ""
rsLoadADO.Close
cnnADO.Execute "DELETE FROM Jurnal WHERE NoJurnal='" &
sCurrentKey & "'"
cnnADO.Execute "DELETE FROM PembelianDetail WHERE
NoPembelian='" & sCurrentKey & "'"
68
cnnADO.Execute "DELETE FROM Pembelian WHERE NoPembelian='"
& sCurrentKey & "'"
ToolbarView Me, EnFormTypeTable, tbMain
GoTo res2
End If
End If
sKey0 = rsLoadADO("NoPembelian") & ""
End If
Else 'no data
rsLoadADO.Close
sKey0 = ""
ToolbarView Me, EnFormTypeTable, tbMain
Exit Sub
End If
res:
rsLoadADO.Close
cnnADO.Execute "DELETE FROM PembelianDetail WHERE NoPembelian='"
& sCurrentKey & "'"
cnnADO.Execute "DELETE FROM Pembelian WHERE NoPembelian='" &
sCurrentKey & "'"
procLoadForm sKey0
procFormMode EnFormTypeForm
ToolbarView Me, EnFormTypeForm, tbMain
res2:
procLoadData
End If
End Sub
Sub procToolbarView()
FormSecurity Me, Me.Caption, byFormMode, byEditType
End Sub
Sub procSetFormMode(mode As Byte)
byFormMode = mode
End Sub
Sub procLoadCombo()
Dim iLoop As Integer
Dim rsADO As New ADODB.Recordset
Dim xd As New XArrayDB
Dim xd2 As New XArrayDB
cboFindOperator(0).Clear
cboFindOperator(0).AddItem "="
cboFindOperator(0).AddItem ">="
cboFindOperator(0).AddItem "<="
69
cboFindOperator(0).AddItem ">"
cboFindOperator(0).AddItem "<"
cboFindOperator(0).AddItem "<>"
cboFindOperator(0).AddItem "Contains"
cboFindOperator(0).AddItem "Contains*"
cboFindOperator(0).AddItem "*Contains"
cboFindOperator(0).ListIndex = 0
cboFindAction(0).Clear
cboFindAction(0).AddItem "DAN"
cboFindAction(0).AddItem "ATAU"
cboFindAction(0).AddItem "BATAL"
cboFindAction(0).AddItem "CARI"
sSQL = "SELECT * FROM Supplier ORDER BY Nama"
rsADO.Open sSQL, cnnADO, adOpenForwardOnly, adLockReadOnly
cbo(0).Clear: cbo(0).AddItem ""
Do While rsADO.EOF = False
cbo(0).AddItem rsADO("Nama") & " - " & rsADO("KodeSupplier")
rsADO.MoveNext
If rsADO.EOF Then Exit Do
Loop
rsADO.Close
'Berdasarkan Kode Barang
sSQL = "SELECT * FROM Barang ORDER BY KodeBarang"
rsADO.Open sSQL, cnnADO, adOpenKeyset, adLockReadOnly
xd.ReDim 0, rsADO.RecordCount - 1, 0, rsADO.RecordCount - 1
iLoop = 0
Do While rsADO.EOF = False
If IsVarNull(rsADO("KodeBarang") & "") = False Then
xd(rsADO.AbsolutePosition - 1, 0) = rsADO("KodeBarang") & ""
xd(rsADO.AbsolutePosition - 1, 1) = rsADO("NamaBarang") & ""
End If
rsADO.MoveNext
If rsADO.EOF Then Exit Do
Loop
rsADO.Close
Set TDBDD.Array = xd
TDBDD.Refresh
TDBDD.Columns(0).Caption = "KodeBarang"
TDBDD.Columns(1).Caption = "NamaBarang"
'Berdasarkan Nama Barang
sSQL = "SELECT * FROM Barang ORDER BY NamaBarang"
70
rsADO.Open sSQL, cnnADO, adOpenKeyset, adLockReadOnly
xd2.ReDim 0, rsADO.RecordCount - 1, 0, rsADO.RecordCount - 1
iLoop = 0
Do While rsADO.EOF = False
If IsVarNull(rsADO("KodeBarang") & "") = False Then
xd2(rsADO.AbsolutePosition - 1, 0) = rsADO("NamaBarang") & ""
xd2(rsADO.AbsolutePosition - 1, 1) = rsADO("KodeBarang") & ""
End If
rsADO.MoveNext
If rsADO.EOF Then Exit Do
Loop
rsADO.Close
Set TDBDDBarang.Array = xd2
TDBDDBarang.Refresh
TDBDDBarang.Columns(0).Caption = "NamaBarang"
TDBDDBarang.Columns(1).Caption = "KodeBarang"
On Error GoTo errLoadCombo
rsADO.Open sCurrentSQL, cnnADO, adOpenDynamic, adLockReadOnly
cboFindField(0).Clear
cboFindFieldType.Clear
For iLoop = 0 To rsADO.Fields.Count - 1
cboFindField(0).AddItem rsADO.Fields(iLoop).Name
cboFindFieldType.AddItem rsADO.Fields(iLoop).Type
Next iLoop
cboFindField(0).ListIndex = 0
ReDim sOrderBy(rsADO.Fields.Count) As String
' cboFindField(0).RemoveItem cboFindField(0).ListCount - 1
'Set Default
cboFindOperator(0).text = "Contains"
cboFindField(0).text = "NoPembelian"
Exit Sub
errLoadCombo:
MsgBox "Error while opening temporary table", vbCritical, "[Error]"
Unload Me
End Sub
Sub procLoadComboFind(Index As Integer)
Dim byLoop As Byte
For byLoop = 0 To cboFindField(Index - 1).ListCount - 1
cboFindField(Index).AddItem cboFindField(Index - 1).List(byLoop)
Next
cboFindField(Index).ListIndex = 0
71
cboFindOperator(Index).Clear
cboFindOperator(Index).AddItem "="
cboFindOperator(Index).AddItem ">="
cboFindOperator(Index).AddItem "<="
cboFindOperator(Index).AddItem ">"
cboFindOperator(Index).AddItem "<"
cboFindOperator(Index).AddItem "<>"
cboFindOperator(Index).AddItem "Contains"
cboFindOperator(Index).AddItem "Contains*"
cboFindOperator(Index).AddItem "*Contains"
cboFindOperator(Index).ListIndex = 0
cboFindAction(Index).Clear
cboFindAction(Index).AddItem "DAN"
cboFindAction(Index).AddItem "ATAU"
cboFindAction(Index).AddItem "BATAL"
cboFindAction(Index).AddItem "CARI"
End Sub
Function funcComboSet(str As String, cbo As ComboBox) As String
Dim iLoop As Integer, sTmp As String
If IsVarNull(str) Then str = " "
sTmp = " - " & str
For iLoop = 0 To cbo.ListCount - 1
If Right(cbo.List(iLoop), Len(sTmp)) = sTmp Then
funcComboSet = cbo.List(iLoop)
GoTo res
End If
Next
funcComboSet = str
cbo.List(0) = funcComboSet
res:
End Function
Sub procResetComboFind()
On Error Resume Next
cboFindField(0).ListIndex = 0
cboFindOperator(0).ListIndex = 0
txtFindValue(0).text = ""
cboFindAction(0).text = ""
If lblFind.Count > 0 Then
Dim byLoop As Byte
For byLoop = 1 To lblFind.Count - 1
cboFindField(byLoop).ListIndex = 0
72
cboFindOperator(byLoop).ListIndex = 0
txtFindValue(byLoop).text = ""
lblFind(byLoop).Visible = False
cboFindField(byLoop).Visible = False
cboFindOperator(byLoop).Visible = False
txtFindValue(byLoop).Visible = False
cboFindAction(byLoop).Visible = False
Next
End If
'Set Default
cboFindOperator(0).text = "Contains"
cboFindField(0).text = "Nama"
On Error GoTo 0
End Sub
Sub procFormMode(enType As EnFormType)
On Error Resume Next
Dim iLoop As Integer
Select Case enType
Case EnFormTypeAdd, EnFormTypeNoData
byEditType = 1
txt(0).SetFocus
BlankForm
dbTemporaryDAO.Execute "DELETE * FROM PembelianDetail"
DataMainDT(0).Refresh
DBGridMainDT(0).Refresh
DBGridDTRefresh
txt(0).Locked = False
Load SiapIsi(True)
Case EnFormTypeEdit
byEditType = 2
Load SiapIsi(True)
txt(0).Locked = True
DBGridDTRefresh
Case EnFormTypeAddCopy
byEditType = 3
Case Else
byEditType = 0
Load SiapIsi(False)
End Select
DBGridMainDT(0).Columns("Jumlah").ExternalEditor = "TDBNJumlah"
DBGridMainDT(0).Columns("Harga").ExternalEditor = "TDBNHarga"
DBGridDTRefresh
73
End Sub
Sub procLoadData(Optional sSQL As String)
Dim rsLoadADO As New ADODB.Recordset
Dim iRecordCount As Integer, i As Integer
' If IsVarNull(sSQL) Then
procRefreshSQL
sSQL = sCurrentSQL
' End If
DoEvents
rsLoadADO.Open sSQL, cnnADO, adOpenDynamic, adLockReadOnly
'Isi DataMain
DataMain.ConnectionString = cnnADODC
DataMain.RecordSource = sSQL
rsLoadADO.Close
DataMain.Refresh
DBGridRefresh
' DBGridMain.Columns("TimeUpdate").NumberFormat = "dd/mm/yyyy
hh:MM:ss"
' AutosTDB DBGridMain
End Sub
Sub procLoadDataFind(byIndex As Byte)
Dim i As Integer
Dim sAction As String
sCriteria = ""
procRefreshSQL
For i = 0 To byIndex
If lblFind(i).Visible = True Then
If i = 0 Then
If cboFindOperator(0).text = "Contains" Then
Select Case cboFindFieldType.List(cboFindField(0).ListIndex)
Case 7, 8, 135
sCriteria = cboFindField(0).text & "=" &
GetADOFindFieldType(cboFindField(0).ListIndex, cboFindFieldType) &
TDBDFindValue(0).Value &
GetADOFindFieldType(cboFindField(0).ListIndex, cboFindFieldType)
Case 3, 6
sCriteria = cboFindField(0).text & "=" &
GetADOFindFieldType(cboFindField(0).ListIndex, cboFindFieldType) &
TDBNFindValue(0).Value &
GetADOFindFieldType(cboFindField(0).ListIndex, cboFindFieldType)
Case Else
74
sCriteria = cboFindField(0).text & " LIKE " &
GetADOFindFieldType(cboFindField(0).ListIndex, cboFindFieldType) &
"%" & txtFindValue(0) & "%" &
GetADOFindFieldType(cboFindField(0).ListIndex, cboFindFieldType)
End Select
ElseIf cboFindOperator(0).text = "Contains*" Then
Select Case cboFindFieldType.List(cboFindField(0).ListIndex)
Case 7, 8, 135
sCriteria = cboFindField(0).text & "=" &
GetADOFindFieldType(cboFindField(0).ListIndex, cboFindFieldType) &
TDBDFindValue(0).Value &
GetADOFindFieldType(cboFindField(0).ListIndex, cboFindFieldType)
Case 3, 6
sCriteria = cboFindField(0).text & "=" &
GetADOFindFieldType(cboFindField(0).ListIndex, cboFindFieldType) &
TDBNFindValue(0).Value &
GetADOFindFieldType(cboFindField(0).ListIndex, cboFindFieldType)
Case Else
sCriteria = cboFindField(0).text & " LIKE " &
GetADOFindFieldType(cboFindField(0).ListIndex, cboFindFieldType) &
txtFindValue(0) & "%" &
GetADOFindFieldType(cboFindField(0).ListIndex, cboFindFieldType)
End Select
ElseIf cboFindOperator(0).text = "*Contains" Then
Select Case cboFindFieldType.List(cboFindField(0).ListIndex)
Case 7, 8, 135
sCriteria = cboFindField(0).text & "=" &
GetADOFindFieldType(cboFindField(0).ListIndex, cboFindFieldType) &
TDBDFindValue(0).Value &
GetADOFindFieldType(cboFindField(0).ListIndex, cboFindFieldType)
Case 3, 6
sCriteria = cboFindField(0).text & "=" &
GetADOFindFieldType(cboFindField(0).ListIndex, cboFindFieldType) &
TDBNFindValue(0).Value &
GetADOFindFieldType(cboFindField(0).ListIndex, cboFindFieldType)
Case Else
sCriteria = cboFindField(0).text & " LIKE " &
GetADOFindFieldType(cboFindField(0).ListIndex, cboFindFieldType) &
"%" & txtFindValue(0) &
GetADOFindFieldType(cboFindField(0).ListIndex, cboFindFieldType)
75
End Select
Else
Select Case cboFindFieldType.List(cboFindField(0).ListIndex)
Case 7, 8, 135
sCriteria = cboFindField(0).text & " " & cboFindOperator(0).text &
GetADOFindFieldType(cboFindField(0).ListIndex, cboFindFieldType) &
TDBDFindValue(0).Value &
GetADOFindFieldType(cboFindField(0).ListIndex, cboFindFieldType)
Case 3, 6
sCriteria = cboFindField(0).text & " " & cboFindOperator(0).text &
GetADOFindFieldType(cboFindField(0).ListIndex, cboFindFieldType) &
TDBNFindValue(0).Value &
GetADOFindFieldType(cboFindField(0).ListIndex, cboFindFieldType)
Case Else
sCriteria = cboFindField(0).text & " " & cboFindOperator(0).text &
GetADOFindFieldType(cboFindField(0).ListIndex, cboFindFieldType) &
txtFindValue(0) & GetADOFindFieldType(cboFindField(0).ListIndex,
cboFindFieldType)
End Select
End If
Else
If cboFindAction(i - 1).text = "ATAU" Then sAction = "OR"
If cboFindAction(i - 1).text = "DAN" Then sAction = "AND"
If cboFindOperator(i).text = "Contains" Then
Select Case cboFindFieldType.List(cboFindField(0).ListIndex)
Case 7, 8, 135
sCriteria = sCriteria & " " & sAction & " " & cboFindField(i).text &
"=" & GetADOFindFieldType(cboFindField(i).ListIndex,
cboFindFieldType) & TDBDFindValue(i).Value &
GetADOFindFieldType(cboFindField(i).ListIndex, cboFindFieldType)
Case 3, 6
sCriteria = sCriteria & " " & sAction & " " & cboFindField(i).text &
"=" & GetADOFindFieldType(cboFindField(i).ListIndex,
cboFindFieldType) & TDBNFindValue(i).Value &
GetADOFindFieldType(cboFindField(i).ListIndex, cboFindFieldType)
Case Else
sCriteria = sCriteria & " " & sAction & " " & cboFindField(i).text & "
LIKE " & GetADOFindFieldType(cboFindField(i).ListIndex,
cboFindFieldType) & "%" & txtFindValue(i) & "%" &
GetADOFindFieldType(cboFindField(i).ListIndex, cboFindFieldType)
End Select
ElseIf cboFindOperator(i).text = "Contains*" Then
76
Select Case cboFindFieldType.List(cboFindField(0).ListIndex)
Case 7, 8, 135
sCriteria = sCriteria & " " & sAction & " " & cboFindField(i).text &
"=" & GetADOFindFieldType(cboFindField(i).ListIndex,
cboFindFieldType) & TDBDFindValue(i).Value &
GetADOFindFieldType(cboFindField(i).ListIndex, cboFindFieldType)
Case 3, 6
sCriteria = sCriteria & " " & sAction & " " & cboFindField(i).text &
"=" & GetADOFindFieldType(cboFindField(i).ListIndex,
cboFindFieldType) & TDBNFindValue(i).Value &
GetADOFindFieldType(cboFindField(i).ListIndex, cboFindFieldType)
Case Else
sCriteria = sCriteria & " " & sAction & " " & cboFindField(i).text & "
LIKE " & GetADOFindFieldType(cboFindField(i).ListIndex,
cboFindFieldType) & txtFindValue(i) & "%" &
GetADOFindFieldType(cboFindField(i).ListIndex, cboFindFieldType)
End Select
ElseIf cboFindOperator(i).text = "*Contains" Then
Select Case cboFindFieldType.List(cboFindField(0).ListIndex)
Case 7, 8, 135
sCriteria = sCriteria & " " & sAction & " " & cboFindField(i).text &
"=" & GetADOFindFieldType(cboFindField(i).ListIndex,
cboFindFieldType) & TDBDFindValue(i).Value &
GetADOFindFieldType(cboFindField(i).ListIndex, cboFindFieldType)
Case 3, 6
sCriteria = sCriteria & " " & sAction & " " & cboFindField(i).text &
"=" & GetADOFindFieldType(cboFindField(i).ListIndex,
cboFindFieldType) & TDBNFindValue(i).Value &
GetADOFindFieldType(cboFindField(i).ListIndex, cboFindFieldType)
Case Else
sCriteria = sCriteria & " " & sAction & " " & cboFindField(i).text & "
LIKE " & GetADOFindFieldType(cboFindField(i).ListIndex,
cboFindFieldType) & "%" & txtFindValue(i) &
GetADOFindFieldType(cboFindField(i).ListIndex, cboFindFieldType)
End Select
Else
Select Case cboFindFieldType.List(cboFindField(0).ListIndex)
Case 7, 8, 135
sCriteria = sCriteria & " " & sAction & " " & cboFindField(i).text &
cboFindOperator(i).text &
77
GetADOFindFieldType(cboFindField(i).ListIndex, cboFindFieldType) &
TDBDFindValue(i).Value &
GetADOFindFieldType(cboFindField(i).ListIndex, cboFindFieldType)
Case 3, 6
sCriteria = sCriteria & " " & sAction & " " & cboFindField(i).text &
cboFindOperator(i).text &
GetADOFindFieldType(cboFindField(i).ListIndex, cboFindFieldType) &
TDBNFindValue(i).Value &
GetADOFindFieldType(cboFindField(i).ListIndex, cboFindFieldType)
Case Else
sCriteria = sCriteria & " " & sAction & " " & cboFindField(i).text &
cboFindOperator(i).text &
GetADOFindFieldType(cboFindField(i).ListIndex, cboFindFieldType) &
txtFindValue(i) & GetADOFindFieldType(cboFindField(i).ListIndex,
cboFindFieldType)
End Select
End If
End If
End If
Next
sCriteria = " WHERE " & sCriteria
procLoadData sCurrentSQL & sCriteria
End Sub
Sub procMoveData(sType As EnTableMove)
If IsVarNull(sKey0) Then
MsgBox "No data!", vbInformation, "Unable to move"
Exit Sub
End If
tbMain.Buttons("tbFirst").Enabled = True
tbMain.Buttons("tbPrevious").Enabled = True
tbMain.Buttons("tbNext").Enabled = True
tbMain.Buttons("tbLast").Enabled = True
Dim rsLoadADO As New ADODB.Recordset
Dim rsDAO As DAO.Recordset
Dim sSQL As String, sTmp As String
Dim iRecordCount As Integer
Select Case sType
Case EnTableMoveFirst
If DataMain.Recordset.EOF = False Then
DataMain.Recordset.MoveFirst
tbMain.Buttons("tbFirst").Enabled = False
tbMain.Buttons("tbPrevious").Enabled = False
78
End If
Case EnTableMovePrevious
If DataMain.Recordset.EOF = False Then
DataMain.Recordset.MovePrevious
If DataMain.Recordset.BOF = True Then
DataMain.Recordset.MoveFirst
tbMain.Buttons("tbFirst").Enabled = False
tbMain.Buttons("tbPrevious").Enabled = False
End If
End If
Case EnTableMoveNext
If DataMain.Recordset.EOF = False Then
DataMain.Recordset.MoveNext
If DataMain.Recordset.EOF = True Then
DataMain.Recordset.MoveLast
tbMain.Buttons("tbNext").Enabled = False
tbMain.Buttons("tbLast").Enabled = False
End If
End If
Case EnTableMoveLast
If DataMain.Recordset.BOF = False Then
If DataMain.Recordset.EOF = False Then
DataMain.Recordset.MoveLast
sKey0 = DBGridMain.Columns(0)
End If
tbMain.Buttons("tbNext").Enabled = False
tbMain.Buttons("tbLast").Enabled = False
End If
End Select
If DataMain.Recordset.EOF = False And DataMain.Recordset.BOF = False
Then
sKey0 = DataMain.Recordset(0)
Else
Exit Sub
End If
procLoadForm sKey0
End Sub
Sub procLoadForm(sKey0 As String)
Dim rsLoadADO As New ADODB.Recordset
Dim sSQL As String
DoEvents
79
sSQL = "SELECT * FROM Pembelian WHERE NoPembelian='" & sKey0 & "'"
rsLoadADO.Open sSQL, cnnADO, adOpenKeyset, adLockReadOnly
If rsLoadADO.EOF = False And rsLoadADO.BOF = False Then
Else
ToolbarView Me, EnFormTypeNoData, tbMain
procLoadFormDT sKey0, rsLoadADO
procFormMode EnFormTypeNoData
Exit Sub
End If
txt(0) = rsLoadADO("NoPembelian") & ""
TDBD(0).Value = rsLoadADO("TglPembelian")
cbo(0) = funcComboSet(rsLoadADO("KodeSupplier") & "", cbo(0))
procLoadFormDT sKey0, rsLoadADO
procLoadFormTotal rsLoadADO
rsLoadADO.Close
DBGridDTRefresh
End Sub
Sub procLoadFormDT(sKey0 As String, rsADO As ADODB.Recordset)
rsADO.Close
sSQL = "SELECT * FROM PembelianDetail WHERE NoPembelian='" & sKey0
& "'"
rsADO.Open sSQL, cnnADO, adOpenKeyset, adLockReadOnly
procSaveDataDTDAO rsADO
If rsADO.EOF = False And rsADO.BOF = False Then
Else
End If
DBGridDTRefresh
End Sub
Function funcSaveData() As Boolean
On Error GoTo err
Dim rsLoadADO As New ADODB.Recordset
Dim sSQL As String
Dim sCurrentKey0 As String
funcSaveData = False
If txt(0) = "" Then Exit Function
If txt(0) = "AUTO" Then
sCurrentKey0 = funcNomorBaru
txt(0) = sCurrentKey0
Else
sCurrentKey0 = txt(0)
End If
80
sSQL = "SELECT * FROM Pembelian WHERE NoPembelian='" &
sCurrentKey0 & "'"
rsLoadADO.Open sSQL, cnnADO, adOpenKeyset, adLockOptimistic
If rsLoadADO.EOF = False And rsLoadADO.BOF = False Then
If byEditType = 1 Or byEditType = 3 Then
MsgBox "Data sudah ada!", vbExclamation, "Perhatian"
rsLoadADO.Close
ToolbarView Me, EnFormTypeAdd, tbMain
pubsFormName = "PEMBELIAN - Baru"
sCurrentFormName = "PEMBELIAN - Baru"
procFormMode EnFormTypeAdd
End If
Else
lBaru = True
rsLoadADO.AddNew
End If
rsLoadADO("NoPembelian") = txt(0) & ""
rsLoadADO("TglPembelian") = TDBD(0).Value
rsLoadADO("KodeSupplier") = funcComboGet(cbo(0)) & ""
If lBaru Then
rsLoadADO("CreatedBy") = pubsUserID
rsLoadADO("CreationDate") = GetSQLDate(Date) & Format(Time, "
hh:MM:ss")
End If
rsLoadADO("UpdateBy") = pubsUserID
rsLoadADO("UpdateDate") = GetSQLDate(Date) & Format(Time, "
hh:MM:ss")
rsLoadADO.Update
rsLoadADO.Close
funcSaveData = True
sKey0 = sCurrentKey0
procSaveDataDT sKey0
procLoadForm sKey0
DataMain.Refresh
DBGridMain.Refresh
Exit Function
err:
' cnnADO.RollbackTrans
LoadErrorMsgBox "Pembelian Barang - Save Data
End Function
Sub procSaveDataDTDAO(rsADO As ADODB.Recordset)
81
Dim rsDAO As DAO.Recordset
Dim rsLoadADO As New ADODB.Recordset
Dim i As Integer
dbTemporaryDAO.Execute "DELETE * FROM PembelianDetail"
Set rsDAO = dbTemporaryDAO.OpenRecordset("PembelianDetail")
rsDAO.Index = "PrimaryKey"
If rsADO.EOF = False And rsADO.BOF = False Then
Do While rsADO.EOF = False
rsDAO.Seek "=", rsADO("NoPembelian"), rsADO("RowNo")
If rsDAO.NoMatch = True Then
rsDAO.AddNew
Else
rsDAO.Edit
End If
sSQL = "SELECT * FROM Barang WHERE KodeBarang = '" &
rsADO("KodeBarang") & "'"
rsLoadADO.Open sSQL, cnnADO, adOpenKeyset, adLockReadOnly
rsDAO("NoPembelian") = rsADO("NoPembelian") & ""
rsDAO("RowNo") = rsADO("RowNo")
rsDAO("KodeBarang") = rsADO("KodeBarang") & ""
rsDAO("NamaBarang") = rsLoadADO("NamaBarang") & ""
rsDAO("Jumlah") = rsADO("Jumlah")
rsDAO("Harga") = rsADO("Harga")
rsDAO("TotalHarga") = rsADO("Jumlah") * rsADO("Harga")
rsDAO("CreatedBy") = rsADO("CreatedBy") & ""
rsDAO("CreationDate") = rsADO("CreationDate") & ""
rsDAO("UpdateBy") = rsADO("UpdateBy") & ""
rsDAO("UpdateDate") = rsADO("UpdateDate") & ""
rsLoadADO.Close
' End If
' Next i
rsDAO.Update
rsADO.MoveNext
If rsADO.EOF Then Exit Do
Loop
End If
rsDAO.Close
Set rsDAO = Nothing
Set rsDAO = dbTemporaryDAO.OpenRecordset("PembelianDetail")
Set DataMainDT(0).Recordset = rsDAO
DataMainDT(0).Refresh
82
DBGridMainDT(0).Refresh
End Sub
Sub procSaveDataDT(sKey0 As String)
Dim rsLoadADO As New ADODB.Recordset
Dim rsADO As New ADODB.Recordset
Dim rsDAO As DAO.Recordset
Dim sSQL As String
Dim i As Integer
sSQL = "SELECT * FROM PembelianDetail WHERE NoPembelian='" & sKey0
& "'"
rsLoadADO.Open sSQL, cnnADO, adOpenKeyset, adLockOptimistic
DBGridMainDT(0).Update
DBGridMainDT(0).Close
DataMainDT(0).Refresh
Set rsDAO = dbTemporaryDAO.OpenRecordset("PembelianDetail")
rsDAO.Index = "PrimaryKey"
i = 1
'Hapus dan Update di server
If rsLoadADO.EOF = False And rsLoadADO.BOF = False Then
Do While rsLoadADO.EOF = False
rsDAO.Seek "=", rsLoadADO("NoPembelian"), rsLoadADO("RowNo")
If Not rsDAO.NoMatch Then
'Jika ketemu update di Server
rsLoadADO("NoPembelian") = txt(0)
rsLoadADO("RowNo") = i
rsLoadADO("KodeBarang") = rsDAO("KodeBarang")
rsLoadADO("Jumlah") = rsDAO("Jumlah")
rsLoadADO("Harga") = rsDAO("Harga")
rsLoadADO("UpdateBy") = rsDAO("UpdateBy")
rsLoadADO("UpdateDate") = rsDAO("UpdateDate")
rsDAO.Delete
Else
'Jika tidak ketemu hapus server
rsLoadADO.Delete
i = i - 1
End If
rsLoadADO.Update
rsLoadADO.MoveNext
i = i + 1
If rsLoadADO.EOF Then Exit Do
Loop
83
End If
On Error Resume Next
rsDAO.MoveFirst
On Error GoTo 0
Do While rsDAO.EOF = False
If Not IsVarNull(rsDAO("KodeBarang")) Then
rsLoadADO.AddNew
rsLoadADO("NoPembelian") = txt(0)
rsLoadADO("RowNo") = i
rsLoadADO("KodeBarang") = rsDAO("KodeBarang")
rsLoadADO("Jumlah") = rsDAO("Jumlah")
rsLoadADO("Harga") = rsDAO("Harga")
rsLoadADO("CreatedBy") = rsDAO("CreatedBy")
rsLoadADO("CreationDate") = rsDAO("CreationDate")
rsLoadADO("UpdateBy") = rsDAO("UpdateBy")
rsLoadADO("UpdateDate") = rsDAO("UpdateDate")
rsLoadADO.Update
End If
rsDAO.MoveNext
i = i + 1
Loop
rsDAO.Close
rsLoadADO.Close
'Simpan ke tabel jurnal
sSQL = "SELECT * FROM Jurnal WHERE NoJurnal='" & sKey0 & "'"
rsLoadADO.Open sSQL, cnnADO, adOpenKeyset, adLockOptimistic
cnnADO.Execute "DELETE FROM Jurnal WHERE NoJurnal='" & sKey0 & "'"
'Jurnal Pembelian Otomatis
rsLoadADO.AddNew
rsLoadADO("NoJurnal") = txt(0)
rsLoadADO("TanggalJurnal") = TDBD(0).Value
rsLoadADO("NoAkun") = "50001"
rsLoadADO("Debet") = TDBN(0).Value
rsLoadADO("Kredit") = 0
rsLoadADO("CreatedBy") = pubsUserID
rsLoadADO("CreationDate") = GetSQLDate(Date) & Format(Time, "
hh:MM:ss")
rsLoadADO("UpdateBy") = pubsUserID
rsLoadADO("UpdateDate") = GetSQLDate(Date) & Format(Time, "
hh:MM:ss")
rsLoadADO.Update
'Jurnal Pengeluaran Kas Otomatis
84
rsLoadADO.AddNew
rsLoadADO("NoJurnal") = txt(0)
rsLoadADO("TanggalJurnal") = TDBD(0).Value
rsLoadADO("NoAkun") = "11101"
rsLoadADO("Debet") = 0
rsLoadADO("Kredit") = TDBN(0).Value
rsLoadADO("CreatedBy") = pubsUserID
rsLoadADO("CreationDate") = GetSQLDate(Date) & Format(Time, "
hh:MM:ss")
rsLoadADO("UpdateBy") = pubsUserID
rsLoadADO("UpdateDate") = GetSQLDate(Date) & Format(Time, "
hh:MM:ss")
rsLoadADO.Update
rsLoadADO.Close
End Sub
Sub procPrintText()
'
End Sub
Private Sub cbo_KeyPress(Index As Integer, KeyAscii As Integer)
If KeyAscii = 13 Then
Sendkeys "{TAB}": Exit Sub
End If
If byEditType = 1 Or byEditType = 2 Or byEditType = 3 Then
AC_ComboKeyPress cbo(Index), KeyAscii
End Sub
Private Sub cboFindAction_Click(Index As Integer)
Select Case UCase(cboFindAction(Index).text)
Case "CARI"
procLoadDataFind CByte(Index)
ToolbarView Me, EnFormTypeTable, tbMain
Case "BATAL"
procResetComboFind
Case Else
If Index = cboFindAction.Count - 1 Then
Load lblFind(Index + 1)
lblFind(Index + 1).Top = lblFind(Index).Top + lblFind(Index).Height + 140
lblFind(Index + 1).Visible = True
lblFind(Index + 1).Caption = "Kriteria " & (Index + 2) & " :"
Load cboFindField(Index + 1)
cboFindField(Index + 1).Top = cboFindField(Index).Top +
cboFindField(Index).Height + 20
cboFindField(Index + 1).Visible = True
85
Load cboFindOperator(Index + 1)
cboFindOperator(Index + 1).Top = cboFindField(Index).Top +
cboFindField(Index).Height + 20
cboFindOperator(Index + 1).Visible = True
Load txtFindValue(Index + 1)
txtFindValue(Index + 1).Top = cboFindField(Index).Top +
cboFindField(Index).Height + 20
txtFindValue(Index + 1).Visible = True
txtFindValue(Index + 1).text = ""
Load cboFindAction(Index + 1)
cboFindAction(Index + 1).Top = cboFindField(Index).Top +
cboFindField(Index).Height + 20
cboFindAction(Index + 1).Visible = True
procLoadComboFind Index + 1
cboFindField(Index + 1).SetFocus
Else
lblFind(Index + 1).Visible = True
cboFindField(Index + 1).Visible = True
cboFindField(Index + 1).ListIndex = 0
cboFindOperator(Index + 1).Visible = True
cboFindOperator(Index + 1).ListIndex = 0
txtFindValue(Index + 1).Visible = True
txtFindValue(Index + 1).text = ""
cboFindAction(Index + 1).Visible = True
cboFindField(Index + 1).SetFocus
End If
End Select
End Sub
Private Sub cboFindAction_KeyPress(Index As Integer, KeyAscii As Integer)
If KeyAscii = 13 Then
If cboFindAction(0).text = "CARI" Then
cboFindAction_Click (0)
Else
Sendkeys "{TAB}"
End If
End If
End Sub
Private Sub cboFindField_Click(Index As Integer)
Select Case cboFindFieldType.List(cboFindField(Index).ListIndex)
Case 7, 8, 135 'TDBD
TDBDFindValue(Index).Visible = True
TDBNFindValue(Index).Visible = False
86
txtFindValue(Index).Visible = False
Case 3, 6 'TDBN
TDBDFindValue(Index).Visible = False
TDBNFindValue(Index).Visible = True
txtFindValue(Index).Visible = False
Case Else 'Text
TDBDFindValue(Index).Visible = False
TDBNFindValue(Index).Visible = False
txtFindValue(Index).Visible = True
End Select
End Sub
Private Sub cboFindField_KeyPress(Index As Integer, KeyAscii As Integer)
If KeyAscii = 13 Then Sendkeys "{TAB}"
End Sub
Private Sub cboFindOperator_KeyPress(Index As Integer, KeyAscii As Integer)
If KeyAscii = 13 Then Sendkeys "{TAB}"
End Sub
Private Sub DBGridMain_Click()
sKey0 = DBGridMain.Columns(0)
End Sub
Private Sub DBGridMain_DblClick()
On Error GoTo err
If DataMain.Recordset.EOF = False And DataMain.Recordset.BOF = False
Then
ToolbarView Me, EnFormTypeForm, tbMain
procFormMode EnFormTypeForm
procLoadForm sKey0
procToolbarView
End If
Exit Sub
err:
ToolbarView Me, EnFormTypeAdd, tbMain
pubsFormName = "PEMBELIAN - Baru"
sCurrentFormName = "PEMBELIAN - Baru"
DataMain.Refresh
DataMainDT(0).Refresh
procFormMode EnFormTypeNoData
MsgBox "No data!", vbInformation, "Unable to load"
End Sub
Private Sub DBGridMain_HeadClick(ByVal ColIndex As Integer)
If sOrderBy(ColIndex) = "ASC" Then
87
sOrderBy(ColIndex) = "DESC"
ElseIf sOrderBy(ColIndex) = "DESC" Then
sOrderBy(ColIndex) = "ASC"
Else: sOrderBy(ColIndex) = "ASC"
End If
Dim sSQL As String
procRefreshSQL
sSQL = sCurrentSQL & " ORDER BY " & DataMain.Recordset(ColIndex).Name
& " " & sOrderBy(ColIndex)
DataMain.RecordSource = sSQL
sSQL = Empty
DataMain.Refresh
DBGridRefresh
End Sub
Private Sub DBGridMainDT_AfterUpdate(Index As Integer)
Set rsDAO = dbTemporaryDAO.OpenRecordset("SELECT
SUM(Jumlah*Harga) AS Total FROM PembelianDetail WHERE
NoPembelian='" & txt(0) & "'")
TDBN(0).Value = rsDAO("Total")
rsDAO.Close
Set rsDAO = Nothing
End Sub
Private Sub DBGridMainDT_BeforeColEdit(Index As Integer, ByVal ColIndex As
Integer, ByVal KeyAscii As Integer, Cancel As Integer)
Select Case ColIndex
Case DBGridMainDT(Index).Columns("KodeBarang").ColIndex,
DBGridMainDT(Index).Columns("NamaBarang").ColIndex
Case Else
If IsVarNull(DBGridMainDT(Index).Columns("KodeBarang")) Then
MsgBox "Kode Barang tidak boleh kosong!", vbCritical, "Perhatian"
Cancel = 1
DBGridMainDT(0).SetFocus
Exit Sub
End If
End Select
End Sub
Private Sub DBGridMainDT_BeforeColUpdate(Index As Integer, ByVal ColIndex
As Integer, OldValue As Variant, Cancel As Integer)
Select Case Index
Case 0
Select Case ColIndex
88
Case DBGridMainDT(Index).Columns("KodeBarang").ColIndex,
DBGridMainDT(Index).Columns("NamaBarang").ColIndex
If IsVarNull(DBGridMainDT(Index).Columns("KodeBarang")) Then
MsgBox "Kode Barang tidak boleh kosong!", vbCritical, "Perhatian"
Cancel = 1
Exit Sub
End If
sSQL = "SELECT * FROM Barang WHERE KodeBarang='" &
DBGridMainDT(0).Columns("KodeBarang") & "'"
rsLoadADO.Open sSQL, cnnADO, adOpenKeyset, adLockReadOnly
If rsLoadADO.EOF Then
MsgBox "Kode Barang tidak ada!", vbCritical, "Perhatian"
Cancel = 1
rsLoadADO.Close
Set rsLoadADO = Nothing
Exit Sub
End If
DBGridMainDT(0).Columns("NamaBarang") =
rsLoadADO("NamaBarang")
rsLoadADO.Close
Set rsLoadADO = Nothing
Case DBGridMainDT(Index).Columns("Jumlah").ColIndex,
DBGridMainDT(Index).Columns("Harga").ColIndex
DBGridMainDT(Index).Columns("TotalHarga").Value =
DBGridMainDT(Index).Columns("Jumlah").Value *
DBGridMainDT(Index).Columns("Harga").Value
End Select
End Select
End Sub
Private Sub DBGridMainDT_BeforeUpdate(Index As Integer, Cancel As Integer)
If byEditType = 1 Then
If IsVarNull(txt(0)) Then Cancel = 1
DataMainDT(Index).Recordset("NoPembelian") = txt(0)
Else
DataMainDT(Index).Recordset("NoPembelian") = txt(0)
End If
If IsVarNull(DBGridMainDT(Index).Columns("RowNo")) Then
Set rsDAO = dbTemporaryDAO.OpenRecordset("SELECT RowNo FROM
PembelianDetail WHERE NoPembelian='" &
DataMainDT(Index).Recordset("NoPembelian") & "' ORDER BY
[RowNo] DESC")
If rsDAO.EOF = False And rsDAO.BOF = False Then
89
DataMainDT(Index).Recordset("RowNo") = rsDAO("RowNo") + 1
Else
DataMainDT(Index).Recordset("RowNo") = 1
End If
rsDAO.Close
Set rsDAO = Nothing
End If
If CreatedBy = "" Then
DBGridMainDT(Index).Columns("CreatedBy") = pubsUserID
DBGridMainDT(Index).Columns("CreationDate") = Format(Now,
"HH:MM:SS mm/dd/yyyy")
End If
DBGridMainDT(Index).Columns("UpdateBy") = pubsUserID
DBGridMainDT(Index).Columns("UpdateDate") = Format(Now, "HH:MM:SS
mm/dd/yyyy")
End Sub
Private Sub DBGridMainDT_KeyPress(Index As Integer, KeyAscii As Integer)
Select Case Index
Case 0
Select Case DBGridMainDT(0).Col
Case DBGridMainDT(0).Columns("KodeBarang").ColIndex
KeyAscii = LimitedInput(KeyAscii, False, EnKeyPressAZaz09,
EnKeyPressModeUp, False)
Case DBGridMainDT(0).Columns("NamaBarang").ColIndex
KeyAscii = LimitedInput(KeyAscii, False, EnKeyPressAZaz09Special,
EnKeyPressModeUp, False)
End Select
End Select
End Sub
Private Sub Form_Activate()
pubsFormName = sCurrentFormName
End Sub
Private Sub Form_Deactivate()
pubsFormName = ""
End Sub
Private Sub Form_Initialize()
' AutosTDB DBGridMain
End Sub
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case vbKeyF1
90
If tbMain.Buttons("tbNew").Enabled = True Then
ToolbarView Me, EnFormTypeAdd, tbMain
pubsFormName = "PEMBELIAN - Baru"
sCurrentFormName = "PEMBELIAN - Baru"
txt(0) = "AUTO"
TDBD(0).Value = Date
procFormMode EnFormTypeAdd
End If
Case vbKeyF2
If byEditType = 1 Or byEditType = 2 Or byEditType = 3 Then
If funcSaveData Then
procLoadData
procLoadForm sKey0
ToolbarView Me, EnFormTypeForm, tbMain
procFormMode EnFormTypeForm
pubsFormName = "PEMBELIAN"
sCurrentFormName = "PEMBELIAN"
End If
Else
If byFormMode = 2 Or byFormMode = 3 Then Exit Sub
If tbMain.Buttons("tbEdit").Enabled <> True Then Exit Sub
byEditType = 2
ToolbarView Me, EnFormTypeEdit, tbMain
pubsFormName = "PEMBELIAN - Koreksi"
sCurrentFormName = "PEMBELIAN - Koreksi"
procFormMode EnFormTypeEdit
procLoadForm sKey0
End If
Case vbKeyF3
If byEditType = 1 Or byEditType = 2 Or byEditType = 3 Then Exit Sub
If byFormMode = 3 Then Exit Sub
pubsFormName = "PEMBELIAN - Cari"
sCurrentFormName = "PEMBELIAN - Cari"
procFormMode EnFormTypeFind
ToolbarView Me, EnFormTypeFind, tbMain
cboFindField(0).SetFocus
Case vbKeyF4
If (byFormMode = 1 Or byFormMode = 3) Then 'form
If byEditType = 1 Or byEditType = 2 Or byEditType = 3 Then Exit Sub
procFormMode EnFormTypeTable
ToolbarView Me, EnFormTypeTable, tbMain
ElseIf (byFormMode = 2) Then 'Table
91
sKey0 = DBGridMain.Columns(0)
ToolbarView Me, EnFormTypeForm, tbMain
procFormMode EnFormTypeForm
procLoadForm sKey0
procToolbarView
End If
Case vbKeyF5
If byEditType = 0 Then
sCriteria = ""
If (byFormMode = 1) Then 'form
procLoadForm sKey0
ElseIf (byFormMode = 2) Then 'Table
procLoadData
End If
End If
Case vbKeyF6
Case vbKeyUp ', vbKeyRight
If byFormMode = 1 Then
If tbMain.Buttons("tbSave").Enabled = False Then procMoveData
EnTableMoveNext
End If
Case vbKeyDown ', vbKeyLeft
If byFormMode = 1 Then
If tbMain.Buttons("tbSave").Enabled = False Then procMoveData
EnTableMovePrevious
End If
Case vbKeyEscape
If byFormMode <> 1 Then Exit Sub
Dim lMsgResult As VbMsgBoxResult
If byEditType = 1 Or byEditType = 3 Then 'add
lMsgResult = MsgBox("Are you sure want to cancel this new Apliccation?",
vbExclamation + vbYesNo + vbDefaultButton2, "[Warning]")
ElseIf byEditType = 2 Then 'edit
lMsgResult = MsgBox("Are you sure want to cancel this modified
Apliccation?", vbExclamation + vbYesNo + vbDefaultButton2,
"[Warning]")
Else
Exit Sub
End If
If lMsgResult = vbYes Then
'If byEditType = 1 Or byEditType = 3 Then cnnADO.Execute "DELETE
FROM Aplikasi WHERE NoAplikasi='" & txt(0) & txt(1) & "'"
92
ToolbarView Me, EnFormTypeForm, tbMain
procFormMode EnFormTypeForm
procLoadForm sKey0
pubsFormName = "PEMBELIAN"
sCurrentFormName = "PEMBELIAN"
End If
End Select
End Sub
Private Sub Form_Load()
Me.WindowState = pubbyWindowState
iTableMaxLine = pubiTableMaxLine
procRefreshSQL
ToolbarView Me, EnFormTypeTable, tbMain
procLoadCombo
procLoadData
sKey0 = DBGridMain.Columns(0)
pubsFormName = "PEMBELIAN"
sCurrentFormName = "PEMBELIAN"
LoadFormConfig Me
End Sub
Private Sub Form_Resize()
On Error Resume Next
pubbyWindowState = Me.WindowState
If Me.Width < 9885 Then Me.Width = 9885
DBGridMain.Width = Me.Width - 350
DBGridMainDT(0).Width = Me.Width - 1000
picMain(0).Width = Me.Width - 350
picMain(1).Width = Me.Width - 350
DBGridMain.Height = Me.Height - 1400
picMain(0).Height = Me.Height - 1400
picMain(1).Height = Me.Height - 1400
DBGridMainDT(0).Height = Me.Height - 3800
lbl(4).Top = Me.Height - 2000
lbl(0).Top = Me.Height - 2050
TDBN(0).Top = Me.Height - 2100
lbl(0).Left = Me.Width - 3800
TDBN(0).Left = lbl(0).Left + lbl(0).Width + 200
End Sub
Private Sub Form_Unload(Cancel As Integer)
pubsFormName = ""
End Sub
Private Sub tbMain_ButtonClick(ByVal Button As MSComctlLib.Button)
93
pubsFormName = "PEMBELIAN"
sCurrentFormName = "PEMBELIAN"
Select Case Button.Key
Case "tbNew"
ToolbarView Me, EnFormTypeAdd, tbMain
pubsFormName = "PEMBELIAN - Baru"
sCurrentFormName = "PEMBELIAN - Baru"
txt(0) = "AUTO"
TDBD(0).Value = Date
procFormMode EnFormTypeAdd
Case "tbEdit"
ToolbarView Me, EnFormTypeEdit, tbMain
pubsFormName = "PEMBELIAN - Koreksi"
sCurrentFormName = "PEMBELIAN - Koreksi"
procFormMode EnFormTypeEdit
Case "tbDelete"
procDeleteData
Case "tbPrint"
procPrintText
Case "tbCancel"
ToolbarView Me, EnFormTypeForm, tbMain
procFormMode EnFormTypeTable
procLoadForm sKey0
Case "tbSave"
If funcSaveData Then
ToolbarView Me, EnFormTypeForm, tbMain
procFormMode EnFormTypeForm
procLoadData
Else
Exit Sub
End If
Case "tbForm"
ToolbarView Me, EnFormTypeForm, tbMain
procLoadForm sKey0
procFormMode EnFormTypeForm
Case "tbTable"
ToolbarView Me, EnFormTypeTable, tbMain
procFormMode EnFormTypeTable
Case "tbFirst"
procMoveData EnTableMoveFirst
Case "tbPrevious"
procMoveData EnTableMovePrevious
94
Case "tbNext"
procMoveData EnTableMoveNext
Case "tbLast"
procMoveData EnTableMoveLast
Case "tbNextX"
iTableMaxLine = iTableMaxLine + pubiTableMaxLine
procLoadData
Case "tbFind"
ToolbarView Me, EnFormTypeFind, tbMain
pubsFormName = "PEMBELIAN - Cari"
sCurrentFormName = "PEMBELIAN - Cari"
cboFindField(0).SetFocus
End Select
procToolbarView
End Sub
Private Sub TDBD_KeyPress(Index As Integer, KeyAscii As Integer)
If KeyAscii = 13 Then Sendkeys "{TAB}"
End Sub
Private Sub TDBDDBarang_RowChange()
DBGridMainDT(0).Columns("KodeBarang") =
TDBDDBarang.Columns("KodeBarang")
End Sub
Private Sub TDBDFindValue_KeyPress(Index As Integer, KeyAscii As Integer)
If KeyAscii = 13 Then Sendkeys "{TAB}"
End Sub
Private Sub TDBNFindValue_KeyPress(Index As Integer, KeyAscii As Integer)
If KeyAscii = 13 Then Sendkeys "{TAB}"
End Sub
Private Sub txt_GotFocus(Index As Integer)
txt(Index).SelStart = 0
txt(Index).SelLength = Len(txt(Index))
If Index = 0 Then
cmdCheck.Default = True
End If
End Sub
Private Sub txt_KeyPress(Index As Integer, KeyAscii As Integer)
If Index = 0 Then bCheck = True Else bCheck = False
KeyAscii = LimitedInput(KeyAscii, True, EnKeyPressAZ09,
EnKeyPressModeUp, True)
End Sub
Private Sub txt_LostFocus(Index As Integer)
95
' If Len(txt(0)) > 0 And Len(txt(0)) < txt(0).MaxLength Then txt(0).SetFocus:
Exit Sub
If Index = 0 Then
If bCheck Then cmdCheck_Click
cmdCheck.Default = False
End If
End Sub
Private Sub txtFindValue_KeyPress(Index As Integer, KeyAscii As Integer)
KeyAscii = LimitedInput(KeyAscii, True, EnKeyPressAZaz09Special,
EnKeyPressModeUp, True)
End Sub
Private Function DBGridRefresh()
DBGridMain.Refresh
DBGridMain.Font = Me.Font
DBGridMain.EvenRowStyle.BackColor = pubsTableBgColor1
DBGridMain.OddRowStyle.BackColor = pubsTableBgColor2
DBGridMain.AlternatingRowStyle = True
DBGridMain.Columns("NoPembelian").Width = 1000
DBGridMain.Columns("TglPembelian").Width = 1200
DBGridMain.Columns("Nama").Width = 6000
DBGridMain.Columns("NamaBarang").Width = 6000
DBGridMain.Columns("Jumlah").Width = 1000
DBGridMain.Columns("Harga").Width = 2000
DBGridMain.Columns("TotalHarga").Width = 2000
DBGridMain.Columns("TglPembelian").NumberFormat = "dd/mm/yyyy"
DBGridMain.Columns("Jumlah").NumberFormat = "###,##0"
DBGridMain.Columns("Harga").NumberFormat = "###,###,##0"
DBGridMain.Columns("TotalHarga").NumberFormat = "#,###,###,##0"
End Function
Private Function DBGridDTRefresh()
DBGridMain.Refresh
DBGridMain.Font = Me.Font
DBGridMain.EvenRowStyle.BackColor = pubsTableBgColor1
DBGridMain.OddRowStyle.BackColor = pubsTableBgColor2
DBGridMain.AlternatingRowStyle = True
DBGridMainDT(0).Font.Size = 10
DBGridMainDT(0).Columns("NoPembelian").Visible = False
DBGridMainDT(0).Columns("CreatedBy").Visible = False
DBGridMainDT(0).Columns("CreationDate").Visible = False
DBGridMainDT(0).Columns("UpdateBy").Visible = False
DBGridMainDT(0).Columns("updateDate").Visible = False
DBGridMainDT(0).Columns("RowNo").Width = 700
96
DBGridMainDT(0).Columns("KodeBarang").Width = 2000
DBGridMainDT(0).Columns("NamaBarang").Width = 6000
DBGridMainDT(0).Columns("Jumlah").Width = 1000
DBGridMainDT(0).Columns("Harga").Width = 2000
DBGridMainDT(0).Columns("TotalHarga").Width = 2000
DBGridMainDT(0).Columns("Jumlah").NumberFormat = "###,##0"
DBGridMainDT(0).Columns("Harga").NumberFormat = "###,###,##0"
DBGridMainDT(0).Columns("TotalHarga").NumberFormat =
"###,###,###,##0"
DBGridMainDT(0).Columns("NoPembelian").AllowFocus = False
DBGridMainDT(0).Columns("RowNo").AllowFocus = False
DBGridMainDT(0).Columns("TotalHarga").AllowFocus = False
DBGridMainDT(0).Columns("CreatedBy").AllowFocus = False
DBGridMainDT(0).Columns("CreationDate").AllowFocus = False
DBGridMainDT(0).Columns("UpdateBy").AllowFocus = False
DBGridMainDT(0).Columns("UpdateDate").AllowFocus = False
Select Case byEditType
Case 1, 2
DBGridMainDT(0).Columns("KodeBarang").DropDown = TDBDD
DBGridMainDT(0).Columns("NamaBarang").DropDown = TDBDDBarang
DBGridMainDT(0).Columns("KodeBarang").AutoCompletion = True
DBGridMainDT(0).Columns("NamaBarang").AutoCompletion = True
Case Else
DBGridMainDT(0).Columns("KodeBarang").DropDown = ""
DBGridMainDT(0).Columns("NamaBarang").DropDown = ""
End Select
End Function
Private Function SiapIsi(bLocked As Boolean)
On Error Resume Next
For iLoop = 0 To txt.UBound
Select Case iLoop
Case 3, 4 'Yang tidak boleh diisi
txt(iLoop).Locked = True
Case Else
txt(iLoop).Locked = Not bLocked
End Select
Next
For iLoop = 0 To cbo.UBound
cbo(iLoop).Locked = Not bLocked
Next
For iLoop = 0 To DBGridMainDT.UBound
DBGridMainDT(iLoop).AllowAddNew = bLocked
97
DBGridMainDT(iLoop).AllowDelete = bLocked
DBGridMainDT(iLoop).AllowUpdate = bLocked
Next
On Error GoTo 0
End Function
Private Function BlankForm()
On Error Resume Next
For iLoop = 0 To txt.UBound
Select Case iLoop
Case 0 'Yang tidak dikosongkan
Case Else
txt(iLoop) = ""
End Select
Next
For iLoop = 0 To cbo.UBound
cbo(iLoop) = ""
Next
TDBN(0).Value = 0
On Error GoTo 0
End Function
Private Sub cmdCheck_Click()
If byEditType = 2 Then Sendkeys "{TAB}": Exit Sub
If byEditType = 0 Then Sendkeys "{TAB}": Exit Sub
' If Len(txt(0)) < txt(0).MaxLength Then
' BlankForm
' Exit Sub
' End If
sSQL = "SELECT * FROM Pembelian WHERE NoPembelian='" & txt(0) & "'"
rsLoadADO.Open sSQL, cnnADO, adOpenKeyset, adLockReadOnly
If rsLoadADO.RecordCount <> 0 Then 'Jika Ketemu
rsLoadADO.Close
ToolbarView Me, EnFormTypeForm, tbMain
pubsFormName = "PEMBELIAN"
sCurrentFormName = "PEMBELIAN"
procFormMode EnFormTypeForm
procLoadForm txt(0)
Exit Sub
End If
rsLoadADO.Close
TDBD(0).SetFocus
SiapIsi (True)
End Sub
98
Function funcComboGet(cbo As ComboBox) As String
If InStr(cbo.text, " - ") Then
funcComboGet = Split(cbo.text, " - ")(1)
Else
funcComboGet = cbo.text
End If
End Function
Sub procLoadFormTotal(rsLoadADO As ADODB.Recordset)
rsLoadADO.Close
rsLoadADO.Open "SELECT Sum(Jumlah*Harga) AS Jumlah FROM
PembelianDetail WHERE NoPembelian = '" & sKey0 & "'", cnnADO,
adOpenForwardOnly, adLockReadOnly
TDBN(0).Value = Format(IIf(IsVarNull(rsLoadADO("Jumlah") & ""), "0",
rsLoadADO("Jumlah")), "###,##0")
End Sub
Function funcNomorBaru() As String
Dim rsLoadADO As New ADODB.Recordset
Dim sSQL As String
sSQL = "SELECT NoPembelian FROM Pembelian ORDER BY NoPembelian
DESC"
rsLoadADO.Open sSQL, cnnADO, adOpenDynamic, adLockReadOnly
If Not rsLoadADO.EOF And Not rsLoadADO.BOF Then
funcNomorBaru = Format((CDbl(Right(rsLoadADO("NoPembelian"), 4))) +
1, "B0000")
Else
funcNomorBaru = "B0001"
End If
rsLoadADO.Close
End Function
99
3.5.2. Blackbox Testing
Tabel III.14.
Hasil Pengujian Black Box Testing Form Kategori Barang
No Skenario
pengujian Test case
Hasil yang
diharapkan
Hasil
pengujian Kesimpulan
1
Membuat baru
data kategori
barang, kode
kategori dan
kategori tidak
diisi, lalu klik
simpan
Kode
Kategori:
(kosong)
Kategori:
(kosong)
Sistem tidak akan
menyimpan ketika
kolom tidak terisi
semua
Sesuai
harapan valid
2
Mengetikan kode
kategori dan
kategori tidak
diketik atau
kosong kemudian
klik simpan
Kode
Kategori:
K0001
Kategori:
(kosong)
Sistem tidak akan
menyimpan ketika
salah satu kolom
tidak terisi
Sesuai
harapan valid
3
Tidak mengetik
kode kategori
dan mengetik
kategori
kemudian klik
simpan
Kode
Kategori:
(kosong)
Kategori:
ATK
Sistem tidak akan
menyimpan ketika
salah satu kolom
tidak terisi
Sesuai
harapan valid
4
Mengetik kode
kategori dan
mengetik
kategori
kemudian klik
simpan
Kode
Kategori:
K0001
Kategori:
ATK
Sistem berhasil
tambah data kategori
barang dan
menyimpan data
kategori barang
Sesuai
harapan valid
5
Sistem dapat
melakukan
proses koreksi
data kategori
barang pada
program dengan
mengklik tombol
koreksi
Koreksi
kategori
Sistem akan
menampilkan form
kategori barang yang
akan dikoreksi, lalu
klik koreksi
kemudian klik
simpan, maka sistem
berhasil
mengkoreksi data
kategori barang dan
menyimpan data
kategori barang
Sesuai
harapan valid
100
6
Sistem dapat
melakukan
proses hapus data
kategori barang
pada program
dengan mengklik
tombol hapus
Hapus
kategori
Sistem akan
menampilkan form
kategori barang yang
akan dihapus, lalu
klik hapus, maka
sistem berhasil meng
hapus data kategori
barang
Sesuai
harapan valid
7
Sistem dapat
melakukan
proses cari data
kategori barang
pada program
dengan mengklik
tombol cari
Cari
kategori
Sistem akan mencari
kategori barang yang
diinginkan
Sesuai
harapan valid
3.5.3. Spesifikasi Hardware dan Software
Tabel III.15.
Spesifikasi Hardware dan Software
Kebutuhan Keterangan
Sistem Windows 7
Processor Intel® Core i3 @2.5 GHz up to 3.1 GHz
RAM 4 GB
Harddisk 500 GB
Monitor 14” LED
Keyboard 108 Key
Printer Dot Matrix
Mouse Standard
Software Kebutuhan menjalankan aplikasi secara local:
Bahasa script programming : Visual Basics
DBSM : Ms. Access