bab iii pembahasan - repository.bsi.ac.id filesales membantu mempercepat proses penjualan dan mampu...

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

Upload: lykhanh

Post on 19-May-2019

218 views

Category:

Documents


0 download

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

40

Gambar III.7.

Activity Diagram Halaman Admin Lanjutan

41

Gambar III.8.

Activity Diagram Halaman Admin Lanjutan

42

Gambar III.9.

Activity Diagram Halaman Admin Lanjutan

43

Gambar III.10.

Activity Diagram Halaman Admin Lanjutan

44

Gambar III.11.

Activity Diagram Halaman Admin Lanjutan

45

Gambar III.12.

Activity Diagram Halaman Admin Lanjutan

46

2. Activity Diagram Halaman Bagian Pembelian

Gambar III.13.

Activity Diagram Halaman Bagian Pembelian

47

Gambar III.14.

Activity Diagram Halaman Bagian Pembelian Lanjutan

48

Gambar III.15.

Activity Diagram Halaman Bagian Pembelian Lanjutan

49

3. Activity Diagram Halaman Pimpinan

Gambar III.16.

Activity Diagram Halaman Pimpinan

50

Gambar III.17.

Activity Diagram Halaman Pimpinan Lanjutan

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

58

3.4.4. Sequence Diagram

Gambar III.20.

Sequence Diagram Transaksi Pembelian

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

101

3.5.4. Pembagian Tugas Outline SIA

Tabel III.16.

Pembagian Tugas Outline SIA

NO JENIS KEGIATAN RIZKA INDRA. H M. RIFQI A.W

1 Analisa Sistem Berjalan

2 Analisa Kebutuhan Sistem

3 UML

4 Rancangan User Interface

5 Program Modul Master

6 Modul Transaksi

7 Testing

8 Laporan

9 Penggabungan Program