BAB 4 PERANCANGAN DAN IMPLEMENTASI
4.1 Perancangan Basis Data Langkah selanjutnya yang perlu dilakukan adalah perancangan basis data yang dibagi kedalam 3 tahapan, yaitu : 1. Perancangan Basis Data Konseptual 2. Perancangan Basis Data Logikal 3. Perancangan Basis Data Fisikal
4.1.1
Perancangan Basis Data Konseptual Perancangan basis data konseptual merupakan suatu proses pembuatan model dengan menggunakan informasi yang diperoleh dari perusahaan. Beberapa langkah penting dalam merancang basis data secara konseptual adalah : 1. Identifikasi tipe entity 2. Identifikasi tipe relasional 3. Identifikasi dan asosiasi atribut suatu entity 4. Menentukan domain atribut 5. Identifikasi candidate dan primary key setiap entitas 6. Memeriksa model dari redudancy 7. Memvalidasi model data konseptual lokal terhadap transaksi pengguna
59
60 4.1.1.1
Identifikasi Tipe Entity Tahap ini ditentukan entitas-entitas utama yang dibutuhkan pada
perancangan basis data. Tabel 4.1 Identifikasi Tipe-Tipe Entity NO Nama Entity
Deskripsi
1.
Keterangan yang berhubungan dengan penyediaan
Barang
barang 2.
M erk
M erk pada barang
3.
Jenis
Jenis barang
4.
Customer
Daftar pelanggan
5.
Pegawai
Daftar pegawai
6.
Order
Daftar pemesanan
7.
Supplier
Daftar pemasok barang
8.
Divisi
Bagian dari pegawai
9.
Faktur_Penerimaan_Barang
M enunjukan bukti daftar barang yang sudah diterima
10.
Faktur_Penjualan
M enunjukan bukti daftar barang yang dijual ke pelanggan
11.
Nota_Tagihan
M enunjukkan daftar piutang kepada pelanggan
12.
Surat_Jalan_Order
M enunjukkan informasi surat jalan yang menyertai order
13.
Surat_Jalan_Customer
M enunjukkan informasi surat jalan yang menyertai nota tagihan
61 14.
Daftar_Pemesanan
4.1.1.2
Daftar Pemesanan barang oleh cutomer
Mengidentifikasikan Tipe-Tipe Relasi
Gambar 4.1 Entity-Relationship Diagram Konseptual
62
4.1.1.3
Mengidentifikasi dan Menghubungkan Atribut dengan TipeTipe Entitas, Domain Atribut, Primary Key dan Candidate key Tabel 4.2 Pembatas Multiplicity Tipe Relational
Entity Name Barang
Multiplicity Relationship
Entity Name
Multiplicity
1..*
Terhadap
Order
1..*
1..*
Terhadap
Faktur_Penerimaan_
1..*
Barang
Customer
Pegawai
1..*
Terhadap
Faktur_Penjualan
1..*
1..*
Terhadap
Daftar_Pemesanan
1..*
1..*
M emiliki
M erk
1..1
1..1
M emiliki
Jenis
1..*
1..1
M emiliki
Daftar_Pemesanan
1..*
1..1
M emiliki
Faktur_Penjualan
1..*
1..1
M emiliki
Nota_Tagihan
1..*
1..1
M elakukan
Order
1..*
1..1
M elakukan
Faktur_Penjualan
1..*
1..1
M enerima
Faktur_Penerimaan_
1..*
Barang 1..1
M enerima
Daftar_Pemesanan
1..*
Divisi
1..1
M emiliki
Pegawai
1..*
Faktur_Penjualan
1..*
Terhadap
Nota_tagihan
1..1
Surat_Jalan_Order
1..1
M emiliki
Order
1..1
63 Supplier
1..1
M enerima
Order
1..*
1..1
M elakukan
Faktur_Penerimaan_
1..*
Barang
Surat_Jalan_Customer
4.1.1.4
1..1
M embuat
Surat_Jalan
1..*
1..1
M emiliki
Faktur_Penjualan
1..*
1..1
Terhadap
Customer
1..1
Mengidentifikasikan Asosiasi Atribut Suatu Entity
Entitas Customer Tabel 4.3 Entitas Customer Attribute
Description
Date Type &
Nulls
Length Kd_Customer
M engidentifikasi setiap
Multi Valued
Char(5)
No
No
Varchar(20)
No
No
Alamat_Customer Alamat dari customer
Varchar(100)
No
No
Telp_Customer
Varchar(30)
No
Yes
customer Nama_Customer
Nama dari customer
Nomor telpon dari customer
64
Entitas Barang Tabel 4.4 Entitas Barang Attribute
Description
Data Type &
Nulls
Length Kd_Barang
M engidentifikasikan Barang
Multi Valued
Char(5)
No
No
Varchar(20)
No
No
Char(5)
No
No
yang tersedia Nama_Barang
Nama barang yang tersedia
Kd_M erk_Barang M engidentifikasikan merk barang Nama_M erk
Nama merk pada barang
Varchar(20)
No
No
Kd_Jenis_Barang
M engidentifikasikan Jenis
Char(5)
No
No
barang yang tersedia Jenis_Barang
Jenisa dari suatu barang
Varchar(10)
No
No
Harga
Harga dari masing-masing
M oney
No
No
Varchar(5)
No
No
Integer
No
No
barang yang tersedia Ukuran
Ukuran dari barang yang tersedia
Qty
Jumlah dari setiap barang
65
Entitas Jenis Tabel 4.5 Entitas Jenis Attribute
Description
Data Type &
Nulls
Lenght Kd_Jenis_Barang M engidentifikasikan jenis
Multi Valued
Char(5)
No
No
Varchar(15)
No
No
barang yang tersedia Jenis_Barang
Jenis dari suatu barang
Entitas Merk Tabel 4.6 Entitas Merk Attribute
Description
Data Type &
Nulls
Lenght Kd_M erk_Barang
M engidentifikasikan merk
Multi Valued
Char(5)
No
No
Varchar(15)
No
No
dari barang yang tersedia Nama_M erk_Barang Nama merk dari suatu barang
66
Entitas Pegawai Tabel 4.7 Entitas Pegawai Attribute
Description
Data Type &
Nulls
Lenght Kd_Pegawai
M engidentifikasi pegawai yang
Multi Valued
Char(5)
No
No
Char(5)
No
No
Varchar(30)
No
No
Alamat_Pegawai Alamat dari pegwai
Varchar(100)
No
No
Telp_Pegawai
Varchar(30)
No
No
bekerja Kd_Divisi
M engidentifikasi divisi yang ada pada perusahaan secara unik
Nama_Pegawai
Nama dari pegawai
Nomor telepon dari pegawai
Entitas Divisi Tabel 4.8 Entitas Divisi Attribute
Description
Data Type &
Nulls
Lenght Kd_Divisi
M engidentifikasikan divisi
Multi Valued
Char(5)
No
No
Varchar(30)
No
No
yang ada pada perusahaan Nama_Divisi
Nama dari Divisi
67
Entitas S uplier Tabel 4.9 Entitas Supplier Attribute
Description
Data Type &
Nulls
Lenght Kd_Supplier
M engidentifikasikan setiap
Multi Valued
Char(5)
No
No
Varchar(30)
No
No
Alamat_Supplier Alamat dari supplier
Varchar(100)
No
No
Telp_Supplier
Varchar(30)
No
No
supplier Nama_Supplier
Nama dari supplier
Nomor dari supplier
Entitas Order Tabel 4.10 Entitas Order Attribute
Description
Data Type &
Nulls
Lenght
Multi Valued
No_Order
M engidentifikasikan nomor order
Char(5)
No
No
Kd_Supplier
M engidentifikasikan setiap
Char(5)
No
No
supplier Nama_Supplier
Nama dari supplier
Varchar(30)
No
No
Tanggal
Tanggal Order
Datetime
No
No
Kd_Pegawai
M engidentifikasikan setiap
Char(5)
No
No
Varchar(30)
No
No
pegawai Nama_Pegawai
Nama dari pegawai
68 Kd_Barang
M engidentifikasikan setiap
Char(5)
No
No
barang Nama_barang
Nama dari barang yang dipesan
Varchar(20)
No
No
Ukuran
Ukuran dari barang yang dipesan
Varchar(5)
No
No
Harga_Beli
Harga beli barang
Decimal
No
No
Qty
Jumlah Pembelian setiap barang
Interger
No
No
Sub_Total
Harga Sub total pemesanan barng
Decimal
No
No
Decimal
No
No
dari supplier Total
Total harga pemesanan barang dari supplier
Entitas Daftar_Pemesanan Tabel 4.11 Entitas Daftar Pemesanan Attribute
Description
Data Type &
Nulls
Lenght No_Daftar_Pemesan M engidentifikasikan daftar an
Multi Valued
Char(5)
No
No
pemesanan yang ada pada perusahaan
Status_Pemesanan
Status Pemesanan
Char(10)
No
No
Kd_Customer
M engidentifikasikan setiap
Char(5)
No
No
pembeli Nama_Customer
Nama dari customer
Varchar(30
No
No
Alamat_Customer
Alamat dari customer
Varchar(100)
No
No
69 Telp_Customer
Nomor telepon customer
Varchar(15)
No
No
Kd_Pegawai
M engidentifikasikan pegawai
Char(5)
No
No
yang bekerja Tanggal
Tanggal pemesanan barang
Datetime
No
No
Kd_Barang
M engidentifikasikan setiap
Char(5)
No
No
barang yang tersedia Nama_Barang
Nama dari barang
Varchar(20)
No
No
Harga_Jual
Harga jual barang
Decimal
No
No
Qty
Jumlah pemesanan u tuk tiap
Integer
No
No
Decimal
No
No
Decimal
No
No
barang Sub_total
Harga sub total pemesanan barang
Total
Total Harga pemesanan harga
Entitas Faktur_Penerimaan_Barang Tabel 4.12 Entitas Faktur Penerimaan Barang Attribute
Description
Data Type &
Nulls
Lenght No_Faktur
M engidentifikasikan faktur
Multi Valued
Char(5)
No
No
Char(5)
No
No
penerimaan barang yang ada pada perusahaan Kd_Supplier
M engidentifikasikan setiap supplier
70 Nama_Supplier
Nama dari supplier
Varchar(30)
No
No
Tanggal
Tanggal faktur penerimaan
Datetime
No
No
Char(5)
No
No
barang Kd_barang
M engidentifikasikan setiap barang yang tersedia secara unik
Nama_Barang
Nama dari setiap barang
Varchar(20)
No
No
Harga_Beli
Harga beli barang
Decimal
No
No
Qty
Jumlah pemesanan untuk
Integer
No
No
Decimal
No
No
Decimal
No
No
setiap barang Sub_Total
Harga sub total pemesanan barang ke supplier
Total
Total harga pemesanan barang
Entitas Faktur_Penjualan Tabel 4.13 Faktur Penjualan Attribute
Description
Data Type &
Nulls
Lenght No_Faktur_Penjualan M engidentifikasikan faktur
Multi Valued
Char(5)
No
No
Char(5)
No
No
penjualan yang ada pada perusahaan Kd_Customer
M engidentifikasikan setiap pembeli
71 Nama_Customer
Nama dari customer
Varchar(30)
No
No
Tanggal
Tanggal faktur penjualan
Datetime
No
No
Kd_Barang
M engidentifikasikan setiap
Char(5)
No
No
barang yang tersedia Nama_Barang
Nama dari setiap barang
Varchar(20)
No
No
Harga_Jual
Harga jual barang
Decimal
No
No
Qty
Jumlah penjualan tiap barang
Integer
No
No
Sub_Total
Harga sub total penjualan
Decimal
No
No
Decimal
No
No
barang Total
Total Harga Penjualan
Entitas Nota_Tagihan Tabel 4.14 Entitas Nota Tagihan Attribute
Description
Data Type
Nulls
& Lenght No_Nota_Tagihan
M engidentifikasikan nota
Multi Valued
Char(5)
No
No
Char(5)
No
No
tagihan yang ada pada perusahaan Kd_Customer
M engidentifikasikan setiap customer
Nama_Customer
Nama dari customer
Varchar(30)
No
No
Tanggal
Tanggal nota tagihan
Datetime
No
No
Char(5)
No
No
No_Faktur_Penjualan M engidentifikasikan faktur
72 penjualoan yang ada pada perusahaan Tanggal_Pembelian
Tanggal pembelian pada nota
Datetime
No
No
tagihan Harga_Jual
Harga jual barang
Decimal
No
No
Sub_Total
Harga sub total penjualan
Decimal
No
No
Decimal
No
No
barang Total
Total Harga Penjualan
Entitas S urat_Jalan_Order Tabel 4.15 Entitas Surat Jalan_Order Attribute
Description
Data Type &
Nulls
Lenght No_Surat_Jalan_Order M engidentifikasikan surat
Multi Valued
Char(5)
No
No
Char(5)
No
No
jalan order yang tersedia No_Order
M engidentifikasikan order yang tersedia
Tanggal
Tanggal Surat Jalan
Datetime
No
No
Kd_Supplier
M engidentifikasikan setiap
Char(5)
No
No
supplier Nama_Supplier
Nama dari supplier
Varchar(30)
No
No
Alamat_Supplier
Alamat dari supplier
Varchar(100)
No
No
Telp_Supplier
Nomor telpon dari supplier
Varchar(15)
No
No
73 Kd_Barang
M engidentifikasikan setiap
Char(5)
No
No
Varchar(20)
No
No
barang yang tersedia Nama_Barang
Nama dari setiap barang
Entitas S urat_Jalan_Customer Tabel 4.16 Entitas Surat Jalan_Customer Attribute
Description
Data Type & Nulls Lenght
No_Surat_Jalan_Customer M engidentifikasikan
Multi Valued
Char(5)
No
No
Char(5)
No
No
surat jalan customer yang tersedia No_Faktur Penjualan
M engidentifikasikan faktur penjualoan yang ada pada perusahaan
Tanggal
Tanggal surat jalan
Datetime
No
No
Kd_Customer
M engidentifikasikan
Char(5)
No
No
setiap customer Nama_Customer
Nama dari supplier
Varchar(30)
No
No
Alamat_Customer
Alamat dari customer
Varchar(100) No
No
Telp_Customer
Nomor telpon dari
Varchar(15)
No
No
Char(5)
No
No
customer Kd_Barang
M engidentifikasikan setiap barang yang
74 tersedia Nama_Barang
4.1.1.5
Nama dari setiap barang
Varchar(20)
No
No
Menentukan domain Atribut Tabel 4.17 Domain Atribut
Attributes Kd_Customer
Domain 5 karakter, 1 karakter di depan berupa huruf ’C’ dan karakter sisanya berupa angka 000-999
Kd_Barang
5 karakter, 1 karakter di depan berupa huruf ’B’ dan karakter sisanya berupa angka 000-999
Kd_M erk
5 karakter, 1 karakter di depan berupa huruf ’M ’ dan karakter sisanya berupa angka 000-999
Kd_Jenis
5 karakter, 1 karakter di depan berupa huruf ’J’ dan karakter sisanya berupa angka 000-999
Kd_Pegawai
5 karakter, 1 karakter di depan berupa huruf ’P’ dan karakter sisanya berupa angka 000-999
Kd_Devisi
5 karakter, 1 karakter di depan berupa huruf ’D’ dan karakter sisanya berupa angka 000-999
Kd_Supplier
5 karakter, 1 karakter di depan berupa huruf ’S’ dan karakter sisanya berupa angka 000-999
No _Order
5 karakter, 2 karakter di depan berupa huruf ’O’ dan
75 karakter sisanya berupa angka 000-999 No_Daftar_Pemesanan
5 karakter, 2 karakter di depan berupa huruf ’DP’ dan karakter sisanya berupa angka 000-999
No_Faktur_Penerimaan_Barang 5 karakter, 2 karakter di depan berupa huruf ’FP’ dan karakter sisanya berupa angka 000-999 No_Faktur_Penjualan
5 karakter, 1 karakter di depan berupa huruf ’F’ dan karakter sisanya berupa angka 000-999
No_Nota_Tagihan
5 karakter, 2 karakter di depan berupa huruf ’NT’ dan karakter sisanya berupa angka 000-999
No_Surat_Jalan_Order
5 karakter, 2 karakter di depan berupa huruf ’SO’ dan karakter sisanya berupa angka 000-999
No_Surat_Jalan_Customer
5 karakter, 2 karakter di depan berupa huruf ’SC’ dan karakter sisanya berupa angka 000-999
4.1.1.6
Menentuan Candidate Key dan Primary Key Tabel 4.18 Candidate dan Primary Key
Entity Name
Candidate Key
Primary Key
Customer
Kd_Customer
Kd_Customer
Barang
Kd_Barang
Kd_Barang
M erk
Kd_M erk
Kd_M erk
Jenis
Kd_Jenis
Kd_Jenis
Pegawai
Kd_Pegawai
Kd_Pegawai
76 Supplier
Kd_Supplier
Kd_Supplier
Divisi
Kd_Divisi
Kd_Divisi
Order
No_Order
No_Order
Daftar_Pemesanan
No_Daftar_Pemesanan
No_Daftar_Pemesanan
Faktur_Penerimaan_Barang No_Faktur_Penerimaan_Barang No_Faktur_Penerimaan_ Barang Faktur_Penjualan
No_Faktur_Penjualan
No_Faktur_Penjualan
Nota_Tagihan
No_Nota_Tagihan
No_Nota_Tagihan
Surat_Jalan_Order
No_Surat_Jalan_Order
No_Surat_Jalan_Order
Surat_Jalan_Customer
No_Surat_Jalan_Customer
No_Surat_Jalan_Customer
4.1.1.7
Memeriksa Model dari Redudancy
M odel data konseptual tidak memiliki redundansi karena tidak ada dua entity yang menunjuk pada objek yang sama dalam perusahaan.
4.1.1.8
Memvalidasi
Model
Konseptual
Lokal
dengan
Transaksi
Pengguna Tujuan dari langkah ini adalah untuk meyakinkan bahwa model konseptual lokal mendukung transaksi user. Keterangan transaksi : a.
M embuat daftar_pemesanan
b.
M embuat order
77 c.
M embuat penjualan
d.
M embuat penerimaan barang
e.
M embuat nota tagihan
f.
M embuat surat jalan order
g.
M embuat surat jalan customer
h.
Cetak laporan daftar_pemesanan
i.
Cetak laporan order
j.
Cetak laporan penjualan
k.
Cetak laporan penerimaan_barang
l.
Cetak laporan nota_tagihan
m.
Cetak laporan surat_jalan_order
n.
Cetak laporan surat_jalan_customer
78
Gambar 4.2 Memvalidasi model konseptual dengan transaksi pengguna
79 4.1.1.9 Meninjau Model Konseptual Lokal dengan Pengguna
Gambar 4.3 ERD dengan Primary Key
80
4.1.2
Perancangan Basis Data logikal Perancangan basis data logikal merupakan suatu proses pembuatan model dengan menggunakan informasi yang diperoleh dari perusahaan serta berdasarkan pada model data spesifik, tetapi bebas dari DBM S tertentu dan pertimbangan fisik lainnya. Berikut ini adalah langkah-langkah penting dalam merancang basis data logikal : 1. M enghilangkan fitur yang tidak sesuai dengan model relasional Untuk menghilangkan fitur yang tidak sesuai dengan model relasional, maka yang perlu dihilangkan : a. Many to many (*.*) binary relationship b. Complex relationship types c. Multi valued attributes 2. M enurunkan relasi untuk model data logikal lokal 3. M emvalidasi relasi dengan menggunakan normalisasi 4. M emvalidasi relasi terhadap transaksi user 5. M emeriksa integrity constraints
81
4.1.2.1
Menghilangkan fitur-fitur yang tidak sesuai dengan Model Relational
Menghilangkan Many to Many (* : *) Binary Relationship
Terhadap Barang
Header_Order 1,*
1.*
Detail_Order
Header_Order
Barang
No_Order
Kd_Barang 1..*
1..1 1..1 M emiliki
Detail_Order No_Order Kd_Barang
1..1 Terhadap
Gambar 4.4 Relasi Biner many-to-many (*:*) Order
82
Terhadap
Header_Penerimaan_Barang 1..*
Barang 1..*
Detail_Penerimaan_Barang
Header_Penerimaan_Barang
Barang
No_Penerimaan_Barang
Kd_Barang
1..1
M emiliki
1..*
1..1
Detail_Penerimaan_Barang
1..1
Terhadap
No_Penerimaan_Barang Kd_Barang
Gambar 4.5 Relasi Biner many-to-many (*:*) Penerimaan Barang
83
Terhadap
Header_Penjualan 1..*
Barang 1..*
Detail_Penjualan
Header_Penjualan
Barang
Kd_Penjualan
Kd_Barang
1..1
1..*
M emiliki
1..1
Detail_Penjualan
1..1
Terhadap
No_Penjualan Kd_Barang
Gambar 4.6 Relasi Biner many-to-many (*:*) Penjualan
84
Terhadap
Header_Daftar_Pemesanan 1..*
Barang 1..*
Detail_Daftar_Pemesanan
Header_Daftar_Pemesanan
Barang
No_Daftar_Pemesanan
Kd_Barang
1..1
M emiliki
1..*
1..1
Detail_Daftar_Pemesanan
1..1
Terhadap
No_Daftar_Pemesanan Kd_Barang
Gambar 4.7 Relasi Biner many to many (*.*) Daftar Pemesanan
85
Terhadap Header_Surat_Jalan_Order
Barang
1..*
1..* Detail_Surat_Jalan_Order
Header_Surat_Jalan_Order
Barang
No_Surat_Jalan_Order
1..1
Kd_Barang 1..*
Detail_Surat_Jalan_Order 1..1
M emiliki
No_Surat_Jalan_Order Kd_Barang
Terhadap
1..1 Gambar 4.8 Relasi Biner many to many (*.*) S urat Jalan Order
86
Terhadap Header_Surat_Jalan_Customer
Barang
1..*
1..* Detail_Surat_Jalan_Customer
Header_Surat_Jalan_Customer
Barang
No_Surat_Jalan_Customer
Kd_Barang
1..1
1..* Detail_Surat_Jalan_Customer
M emiliki
No_Surat_Jalan_Customer Kd_Barang
1..1 Terhadap
1..1 Gambar 4.9 Relasi Biner many to many (*.*) S urat Jalan Customer
87 4.1.2.2
Menurunkan Relasi untuk Model Data Logikal Langkah ini bertujuan membuat relasi untuk model data logikal lokal untuk merepresentasikan entity, relationship, dan atribut yang telah kita identifikasikan. Entity yang terdapat dalam menurunkan relasi untuk M odel Data Logikal :
4.1.2.2.1
Strong Entity Types
Tabel 4.19 Tabel yang Diturunkan dari Tipe Entity Kuat No 1
Nama Entity Header_Barang
Tabel @Kd_Barang,
Nama_Barang,
Kd_M erk,
Kd_Supplier, Kd_Jenis, Harga. 2
Detail_Barang
@Kd_Barang, Ukuran, Qty
3
Pegawai
@Kode_Pegawai,
Nama_Pegawai,
Alamat_Pegawai, Telepon_Pegawai 4
Customer
@Kode_Customer,
Nama_Customer,
Alamat_Customer, Telepon_Supplier 5
Supplier
@Kode_Supplier,
Nama_Supplier,
Alamat_Supplier, Telpon_Supplier 6
Header_Daftar_Pemesanan
@No_Daftar_Pemesanan_Barang,
Kd_Pegawai,
Kd_Customer, Tanggal, Status_Pemesanan 7
Detail_Daftar_Pemesanan
@No_Daftar_Pemesanan_Barang, Ukuran, Harga_Jual, Qty, Sub_Total
Kd_Barang,
88 8
Header _Order
@No_Order, Kd_Pegawai, Kd_Supplier, Tanggal
9
Detail_Order
@No_Order, Kd_Barang, Ukuran, Harga_Beli Qty, Sub_Total
10
Header_Penerimaan_Barang
@No_Faktur_Penerimaan_Barang,
Kd_Supplier,
Kd_Pegawai, Tanggal 11
Detail_Penerimaan_Barang
@No_Faktur_Penerimaan_Barang,
No_Order,
Harga_Beli 12
Header_Penjualan
@No_Faktur_Penjualan,
Kd_Pegawai,
Kd_Customer, Tanggal 13
Detail_Penjualan
@No_Faktur_Penjualan,
Kd_Barang,
Ukuran,
Harga Jual, Qty, Sub_Total 14
Header_Nota_Tagihan
@No_Nota_Tagihan, Kd_Customer, Kd_Pegawai, Tanggal
15
Detail_Nota_Tagihan
@No_Nota_Tagihan,
No_Daftar_Pemesanan,
Harga_Jual 16
Header_Surat_Jalan_Order
@No_Surat_Jalan_Order,Kd_Supplier,Kd_Pegawai, Tanggal
17
Detail_Surat_Jalan_Order
@No_Surat_Jalan_Order, No_Order
18
Header_Surat_Jalan_Customer @No_Surat_Jalan_Customer,Kd_Customer, Kd_Pegawai, Tanggal
19
Detail_Surat_Jalan_Customer
@No_Surat_Jalan_Customer, No_Nota_Tagihan
89
4.1.2.2.2
Weak Entity Types
Tabel 4.20 Tabel yang Diturunkan dari Tipe Entity Lemah No
Nama Entity
Tabel
1
M erk
@Kd_M erk, Nama_M erk
2
Jenis
@Kd_Jenis, Jenis
3
Divisi
@Kode_Divisi, Nama_Divisi
4.1.2.2.3 Tipe relasi Biner one-to-many (1:*) Divisi(Kd_Divisi, Nama_Divisi) Primary Key Kd_Divisi
Pegawai (Kd_Pegawai, Nama_Pegawai, Alamat_Pegawai, Kd_Divisi) Primary Key Kd_Pegawai Foreign Key Kd_Divisi references Divisi (Kd_Divisi)
Gambar 4.10 Relasi Biner one-to-many (1:*) Divisi terhadap Pegawai
90
Jenis _Barang (Kd_Jenis_Barang, Jenis_Barang)
Header_Barang (Kd_Barang, Nama_Barang, Kd_M erk_Barang, Kd_Supplier, Kd_Jenis_Barang, Harga) Primary Key Kd_Barang Foreign Key Kd_M erk references M erk (Kd_M erk) Foreign Key Kd_Jenis references Jenis (Kd_Jenis) Foreign Key Kd_Supplier references Supplier (Kd_Supplier)
Gambar 4.11 Relasi Biner one-to-many (1:*) Jenis_Barang terhadap Header_Barang
Merk _Barang (Kd_ M erk _Barang, M erk _Barang)
Header_Barang (Kd_Barang, Nama_Barang, Kd_M erk_Barang, Kd_Supplier, Kd_Jenis_Barang, Harga) Primary Key Kd_Barang Foreign Key Kd_M erk references M erk (Kd_M erk) Foreign Key Kd_Jenis references Jenis (Kd_Jenis) Foreign Key Kd_Supplier references Supplier (Kd_Supplier)
Gambar 4.12 Relasi Biner one-to-many (1:*) Merk_Barang terhadap Header_Barang
91 4.1.2.2.4 Tipe relasi biner one-to-one(1:1) Detail_Surat_Jalan_Order (No_Surat_Jalan_Order, No_Order) Primary Key No_Surat_Jalan_Order Primary Key No _Order
Header_Order (No_Order, Kd_Pegawai, Kd_Supplier, Tanggal) Primary Key No_Order Foreign_Key Kd_Pegawai references Pegawai(Kd_Pegawai) Foreign_Key Kd_Supplier references Supplier(Kd_Supplier)
Gambar 4.13 Relasi Biner one-to-one (1:1) Detail_Surat_Jalan terhadap Header_Order
Detail_Surat_Jalan_Customer(No_Surat_Jalan _Customer, No_Nota_Tagihan) Primary Key No_Surat_Jalan_ Customer Primary Key No_ Nota_Tagihan
Header_ Nota_Tagihan (No_ Nota_Tagihan, Kd_Pegawai, Kd_Customer, Tanggal) Primary Key No_ Nota_Tagihan Foreign_Key Kd_Pegawai references Pegawai(Kd_Pegawai) Foreign_Key Kd_ Customer references Supplier(Kd_ Customer)
Gambar 4.14 Relasi Biner one-to-one (1:1) Detail_Surat_Customer terhadap Header_Nota_Tagihan
92
4.1.2.2.5 Tipe relasi biner many-to-many(*:*) Header_Barang (Kd_Barang,Nama_Barang,Kd_M erk_Barang, Kd_Supplier, Kd_Jenis_Barang, Harga) Primary Key (Kd_Barang) Foreign Key Kd_M erk references M erk(Kd_M erk_Barang) Foreign Key Kd_Jenis references Jenis(Kd_Jenis_Barang) Foreign Key Kd_Supplier references Supplier(Kd_Supplier)
Header_Order (No_Order, Kd_Supplier,Tanggal, Total) Primary Key (No_Order) Foreign Key Kd_Supplier references Supplier (Kd_Supplier)
Detail_Order (No_Order,Kd_Barang,Qty, Sub_Total) Gambar 4.15 Many to many (*.*) relationship antara entity Header_Order dengan Header_Barang
93 Header_Barang (Kd_Barang, Nama_Barang,Kd_M erk, Kd_Supplier, Kd_Jenis, Harga, Tanggal_Update) Primary Key (Kd_Barang) Foreign Key Kd_M erk references M erk(Kd_M erk) Foreign Key Kd_Jenis references Jenis(Kd_Jenis) Foreign Key Kd_Supplier references Supplier(Kd_Supplier)
Header_Penerimaan_Barang (No_Faktur_Penerimaan_Barang, Kd_Supplier, Tanggal, Kd_Barang, Total) Primary Key (No_Faktur_Penerimaan_Barang)
Detail_Penerimaan_Barang (No_Faktur_Penerimaan_Barang,Kd_Barang,Qty, Sub_Total)
Gambar 4.16 Many to many (*.*) relationship antara entity Header_Penerimaan_Barang dengan Header_Barang
94
Header_Barang (Kd_Barang, Nama_Barang, Kd_M erk, Harga) Primary Key (Kd_Barang) Foreign Key Kd_M erk_Barang refrerences Merk_Barang ( Kd_M erk_Barang) Foreign Key Kd_Jenis_Barang references Jenis_Barang (Kd_Jenis_Barang) Foreign Key Kd_Supplier references Supplier (Kd_Supplier)
Header_Penjualan (No_Faktur_Penjualan, Kd_Customer, Tanggal, Kd_Barang, Total) Primary Key (No_Faktur_Penjualan)
Detail_Penjualan ( No_Faktur_Penjualan, Kd_Barang, Qty, Sub_Total)
Gambar 4.17 Many to many (*.*) relationship antara entity Header_Penjualan dengan Header_Barang
95
Header_Barang ( Kd_Barang, Nama_Barang, Kd_M erk_Barang, Kd_Supplier, Kd_Jenis_Barang, Harga) Primary Key ( Kd_Barang) Foreign Key Kd_M erk_Barang references M erk_Barang (Kd_M erk_Barang) Foreign Key Kd_Jenis_Barang references Jenis_Barang (Kd_Jenis_Barang) Foreign Key Kd_Supplier references Supplier (Kd_Supplier)
Header_Daftar_Pemesanan (No_Daftar_Pemesanan, Kd_Pegawai, Kd_Customer, Kd_Barang, Total) Primary Key (No_Daftar_Pemesanan)
Detail_Daftar_Pemesanan ( No_Daftar_Pemesanan, Kd_Barang, Qty, Sub_Total) Gambar 4.18 Many to many (*.*) relationship antara entity Header_Daftar_Pemesanan dengan Header_Barang
96 4.1.2.3
Validasi Relasi dengan Normalisasi Tujuan
dari normalisasi
adalah
untuk
menghilangkan
redundansi semaksimal mungkin dan menghindarkan adanya data yang tidak konsisten terutama bila dilakukan penghapusan atau penambahan data sebagai akibat dari adanya data rangkap. Proses normalisasi terdiri dari langkah-langkah berikut: •
First normal form (1NF) adalah langkah menghilangkan repeating group.
•
Second normal form (2NF) adalah langkah menghilangkan ketergantungan parsial pada primary key.
•
Third normal form (3NF) adalah langkah menghilangkan ketergantungan transitif pada primary key.
Langkah-langkah normalisasi yang dilakukan : 1. Header_Barang Telah memenuhi syarat normalisasi, yaitu UNF, 1NF,2NF. UNF Header_Barang
=
Kd_Barang,
Kd_M erk_Barang,
Kd_Jenis_Barang, Kd_Supplier, Nama_Barang, Harga_Barang. 1NF Header_Barang
=@Kd_Barang,
Nama_Barang,
@Kd_M erk_Barang, @Kd_Supplier, @Kd_Jenis_Barang, Harga 2NF
97 Header_Barang
=@Kd_Barang,
Nama_Barang,
@Kd_M erk_Barang, @Kd_Supplier, @Kd_Jenis_Barang, Harga 3NF → terdapat ketergantungan transitif, yaitu M erk_Barang, Jenis_Barang, Supplier. M erk_Barang =@Kd_M erk_Barang, Nama_M erk_Barang Supplier
=@Kd_Supplier,
Nama_Supplier,
Alamat_Supplier,
Telp_Supplier Jenis_Barang =@Kd_Jenis_Barang, Jenis_Barang 2. Detail_Barang Telah memenuhi syarat normalisasi UNF, 1NF, 2NF, 3NF UNF Detail_Barang =@Kd_Barang, Ukuran, Qty 1NF → tidak terjadi repeating group Detail_Barang =@Kd_Barang, Ukuran, Qty 2NF → tidak terjadi ketergantungan parsial Detail_Barang =@Kd_Barang, Ukuran, Qty 3NF → tidak terjadi ketergantungan transitif Detail_Barang =@Kd_Barang, Ukuran, Qty 3. Merk_Barang Tabel M erk_Barang sudah memenuhi syarat normalisasi UNF, 1NF, 2NF, 3NF UNF M erk_Barang =Kd_M erk_Barang, Nama_M erk_Barang 1NF → tidak terjadi repeating group
98 M erk_Barang = @Kd_M erk_Barang, Nama_M erk_Barang 2NF → tidak terjadi ketergantungan parsial M erk_Barang = @Kd_M erk_Barang, Nama_M erk_Barang 3NF → tidak terjadi ketergantungan transitif M erk_Barang = @Kd_M erk_Barang, Nama_M erk_Barang 4. Customer Tabel Customer sudah memenuhi syarat normalisasi UNF, 1NF, 2NF, 3NF UNF Customer = Kd_Customer, Nama_Customer, Alamat_Customer, Telp_Customer 1NF → tidak terjadi repeating group Customer = @Kd_Customer, Nama_Customer, Alamat_Customer, Telp_Customer 2NF → tidak terjadi ketergantungan parsial Customer = @Kd_Customer, Nama_Customer, Alamat_Customer, Telp_Customer 3NF → tidak terjadi ketergantungan transitif Customer = @Kd_Customer, Nama_Customer, Alamat_Customer, Telp_Customer 5. Jenis_Barang Tabel Jenis_Barang sudah memenuhi syarat normalisasi UNF, 1NF, 2NF, 3NF UNF
99 Jenis_Barang = Kd_Jenis_Barang, Jenis_Barang 1NF → tidak terjadi repeating group Jenis_Barang = @Kd_Jenis_Barang, Jenis_Barang 2NF → tidak terjadi ketergantungan parsial Jenis_Barang = @Kd_Jenis_Barang, Jenis_Barang 3NF → tidak terjadi ketergantungan transitif Jenis_Barang = @Kd_Jenis_Barang, Jenis_Barang 6. Supplier Tabel supplier sudah memenuhi syarat normalisasi UNF, 1NF, 2NF, 3NF UNF Supplier
=
Kd_Supplier,
Nama_Supplier,
Alamat_Supplier,
Telp_Supplier 1NF → tidak terjadi repeating group Supplier = @Kd_Supplier, Nama_Supplier, Alamat_Supplier, Telp_Supplier 2NF → tidak terjadi ketergantungan parsial Supplier = @Kd_Supplier, Nama_Supplier, Alamat_Supplier, Telp_Supplier 3NF → tidak terjadi ketergantungan transitif Supplier = @Kd_Supplier, Nama_Supplier, Alamat_Supplier, Telp_Supplier 7. Pegawai
100 Tabel Pegawai sudah memenuhi syarat normalisasi UNF, 1NF, 2NF, 3NF UNF Pegawai
=
Kd_Pegawai,
Nama_Pegawai,
Alamat_Pegawai,
Telp_Pegawai, Kd_Divisi 1NF → tidak terjadi repeating group Pegawai = @Kd_Pegawai, Nama_Pegawai, Alamat_Pegawai, Telp_Pegawai, Kd_Divisi 2NF → tidak terjadi ketergantungan parsial Pegawai = @Kd_Pegawai, Nama_Pegawai, Alamat_Pegawai, Telp_Pegawai, Kd_Divisi 3NF → terjadi ketergantungan transitif, yaitu Divisi Kd_Pegawai, Kd_Divisi. Pegawai = @Kd_Pegawai, Nama_Pegawai, Alamat_Pegawai, Telp_Pegawai, Kd_Divisi Divisi = @Kd_Divisi, Nama_Divisi 8. Divisi Tabel Divisi sudah memenuhi syarat normalisasi UNF, 1NF, 2NF, 3NF UNF Divisi = Kd_Divisi, Nama_Divisi 1NF → tidak terjadi repeating group Divisi = @Kd_Divisi, Nama_Divisi 2NF → tidak terjadi ketergantungan parsial
101 Divisi = @Kd_Divisi, Nama_Divisi 3NF → tidak terjadi ketergantungan transitif Divisi = @Kd_Divisi, Nama_Divisi 9. Header_Penerimaan_Barang UNF Header_Penerimaan_Barang =
No_Faktur_penerimaan_Barang,
Kd_Supplier, Kd_Pegawai,Tanggal 1NF Header_Penerimaan_Barang = @No_Faktur_penerimaan_Barang, @Kd_Supplier, @Kd_Pegawai,Tanggal 2NF Header_Penerimaan_Barang = @No_Faktur_penerimaan_Barang, @Kd_Supplier,@ Kd_Pegawai,Tanggal 3NF →
terjadi ketergantungan transitif, yaitu Supplier dan
Pegawai. Header_Penerimaan_Barang = @No_Faktur_penerimaan_Barang, Kd_Supplier, Kd_Pegawai,Tanggal Supplier = @Kd_Supplier, Nama_Supplier, Alamat_Supplier, Telp_Supplier Pegawai = @Kd_Pegawai, Nama_Pegawai, Alamat_Pegawai, Telp_Pegawai 10. Detail_Penerimaan_Barang UNF
102 Detail_Penerimaan_Barang
=
No_Faktur_penerimaan_Barang,
No_Order, Harga_Beli 1NF Detail_Penerimaan_Barang = @No_Faktur_penerimaan_Barang, @No_Order, Harga_Beli 2NF Detail_Penerimaan_Barang = @No_Faktur_penerimaan_Barang, @No_Order, Harga_Beli Header_Penerimaan_Barang = @No_Faktur_penerimaan_Barang, Kd_Supplier, Kd_Pegawai,Tanggal Header_Order = @ No_Order, Kd_Supplier, Kd_Pegawai, Tanggal 3NF → terjadi ketergantungan transitif Detail_Penerimaan_Barang = @No_Faktur_penerimaan_Barang, @No_Order, Harga_Beli Header_Order = @ No_Order, Kd_Supplier, Kd_Pegawai, Tanggal Supplier = @Kd_Supplier, Nama_Supplier, Alamat_Supplier, Telp_Supplier Pegawai = @Kd_Pegawai, Nama_Pegawai, Alamat_Pegawai, Telp_Pegawai 11. Header_penjualan UNF Header_penjualan
=
Kd_Customer, Tanggal
No_Faktur_Penjualan,
Kd_Pegawai,
103 1NF Header_penjualan
=
@No_Faktur_Penjualan,
@Kd_Pegawai,
@No_Faktur_Penjualan,
@Kd_Pegawai,
Kd_Customer, Tanggal 2NF Header_penjualan
=
@Kd_Customer, Tanggal 3NF Header_penjualan
=
@No_Faktur_Penjualan,
Kd_Pegawai,
Kd_Customer, Tanggal Pegawai = @Kd_Pegawai, Nama_Pegawai, Alamat_Pegawai, Telp_Pegawai Customer = @Kd_Customer, Nama_Customer, Alamat_Customer, Telp_Customer 12. Detail_Penjualan UNF Detail_Penjualan = No_Faktur_Penjualan, Kd_Barang, Ukuran, Qty, Harga_Jual 1NF Detail_Penjualan = @No_Faktur_Penjualan, @Kd_Barang, Qty, Harga_Jual, Ukuran 2NF Detail_Penjualan = @No_Faktur_Penjualan, Kd_Barang, Qty, Harga_Jual, Ukuran
104 Header_penjualan
=
@No_Faktur_Penjualan,
Kd_Pegawai,
Kd_Customer, Tanggal Header_Barang = @Kd_barang, Nama_Barang, Kd_Jenis_Barang, Kd_M erk_Barang, Nama_Barang, Harga_Barang 3NF Detail_Penjualan = @No_Faktur_Penjualan, @Kd_Barang, Qty, Harga_Jual, Ukuran Header_Barang = @Kd_barang, Nama_Barang, Kd_Jenis_Barang, Kd_M erk_Barang, Nama_Barang, Harga_Barang Jenis_Barang = @ Kd_Jenis_Barang + Nama_Jenis_Barang M erk_Barang = @ Kd_M erk_Barang + Nama_M erk_Barang Header_penjualan
=
@No_Faktur_Penjualan,
Kd_Pegawai,
Kd_Customer, Tanggal Pegawai = @Kd_Pegawai, Nama_Pegawai, Alamat_Pegawai, Telp_Pegawai Customer = @Kd_Customer, Nama_Customer, Alamat_Customer, Telp_Customer 13. Header_Order UNF Header_Order = No_Order, Kd_Pegawai, Kd_Supplier, Tanggal 1NF Header_Order = @No_Order,@ Kd_Pegawai,@ Kd_Supplier, Tanggal 2NF
105 Header_Order = @No_Order, Kd_Pegawai, Kd_Supplier, Tanggal 3NF Header_Order = @No_Order, Kd_Pegawai, Kd_Supplier, Tanggal Pegawai = @Kd_Pegawai, Nama_Pegawai Supplier = @Kd_Supplier, Nama_Supplier 14. Detail_Order UNF Detail_Order = No_Order, Kd_Barang, Ukuran, Qty, Harga_Beli 1NF Detail_Order
=
@No_Order,
@Kd_Barang,
Ukuran,
Qty,
Harga_Beli 2NF Detail_Order = @No_Order, Kd_Barang, Ukuran, Qty, Harga_Beli Header_Barang = @Kd_Barang, Nama_Barang, Ukuran, Qty, Kd_Jenis_Barang, Kd_M erk_Barang 3NF Detail_Order = @No_Order, Kd_Barang, Ukuran, Qty, Harga_Beli Header_Barang = @Kd_Barang, Nama_Barang, Ukuran, Qty Kd_Jenis_Barang, Kd_M erk_Barang Jenis_Barang = @ Kd_Jenis_Barang + Nama_Jenis_Barang M erk_Barang = @ Kd_M erk_Barang + Nama_M erk_Barang Header_Order = @No_Order, Kd_Pegawai, Kd_Supplier, Tanggal Pegawai = @Kd_Pegawai, Nama_Pegawai Supplier = @Kd_Supplier, Nama_Supplier
106 15. Header_Pemesanan_Barang UNF Header_Pemesanan_Barang
=
No_Daftar_Pemesanan_barang,
Kd_Pegawai, Kd_Customer, Tanggal, Status_Pemesanan 1NF
Header_Pemesanan_Barang
@No_Daftar_Pemesanan_barang,
= @Kd_Pegawai,
@Kd_Customer, Tanggal, Status_Pemesanan 2NF Header_Pemesanan_Barang = @No_Daftar_Pemesanan_barang, @Kd_Pegawai, @Kd_Customer, Tanggal, Status_Pemesanan 3NF Header_Pemesanan_Barang = @No_Daftar_Pemesanan_barang, Kd_Pegawai, Kd_Customer, Tanggal, Status_Pemesanan Customer = @Kd_Customer, Nama_Customer, Alamat_Customer, Telp_Customer Pegawai = @Kd_Pegawai, Nama_Pegawai, Alamat_Pegawai, Telp_Pegawai 16. Detail_Pemesanan_Barang UNF Detail_Pemesanan_Barang
=
No_Daftar_Pemesanan_barang,
Kd_Barang, Ukuran, Qty, Harga_Jual 1NF Detail_Pemesanan_Barang =
@No_Daftar_Pemesanan_barang,
@Kd_Barang, Ukuran, Qty, Harga_Jual
107 2NF Detail_Pemesanan_Barang =
@No_Daftar_Pemesanan_barang,
Kd_Barang, Ukuran, Qty, Harga_Jual Header_Barang = @Kd_Barang, Nama_Barang, Ukuran, Qty Kd_Jenis_Barang, Kd_M erk_Barang 3NF Detail_Pemesanan_Barang =
@No_Daftar_Pemesanan_barang,
@Kd_Barang, Ukuran, Qty, Harga_Jual Header_Barang = @Kd_Barang, Nama_Barang, Ukuran, Qty Kd_Jenis_Barang, Kd_M erk_Barang Jenis_Barang = @ Kd_Jenis_Barang + Nama_Jenis_Barang M erk_Barang = @ Kd_M erk_Barang + Nama_M erk_Barang Header_Pemesanan_Barang = @No_Daftar_Pemesanan_barang, Kd_Pegawai, Kd_Customer, Tanggal, Status_Pemesanan Customer = @Kd_Customer, Nama_Customer, Alamat_Customer, Telp_Customer Pegawai = @Kd_Pegawai, Nama_Pegawai, Alamat_Pegawai, Telp_Pegawai 17. Header_Nota_Tagihan UNF Header_Nota_Tagihan Kd_Customer, Tanggal 1NF
=
No_Nota_Tagihan,
Kd_Pegawai,
108 Header_Nota_Tagihan = @No_Nota_Tagihan, @Kd_Pegawai, Kd_Customer, Tanggal 2NF Header_Nota_Tagihan = @No_Nota_Tagihan, @Kd_Pegawai, Kd_Customer, Tanggal 3NF → terjadi ketergantungan transitif, yaitu Customer dan Pegawai Header_Nota_Tagihan
=
@No_Nota_Tagihan,
Kd_Pegawai,
Kd_Customer, Tanggal Customer = @Kd_Customer, Nama_Customer, Alamat_Customer, Telp_Customer Pegawai = @Kd_Pegawai, Nama_Pegawai, Alamat_Pegawai, Telp_Pegawai 18. Detail_Nota_Tagihan UNF Detail_Nota_Tagihan = No_Nota Tagihan, No_Daftar_Pemesanan, Harga_Jual 1NF → tidak terjadi repeating group Detail_Nota_Tagihan
=
@No_Nota
Tagihan,
@No_Daftar_Pemesanan, Harga_Jual 2NF → tidak terjadi ketergantungan parsial Detail_Nota_Tagihan
=
No_Daftar_Pemesanan, Harga_Jual 3NF
@No_Nota
Tagihan,
109 Detail_Nota_Tagihan
=
@No_Nota
Tagihan,
@No_Daftar_Pemesanan, Harga_Jual Header_Daftar_Pemesanan =
@No_Daftar_Pemesanan_barang,
Kd_Pegawai, Kd_Customer, Tanggal, Status_Pemesanan Customer = @Kd_Customer, Nama_Customer, Alamat_Customer, Telp_Customer Pegawai = @Kd_Pegawai, Nama_Pegawai, Alamat_Pegawai, Telp_Pegawai 19. Header_Surat_Jalan_Order UNF Header_Surat_Jalan_Order = No_Surat_Jalan_Order, Kd_Supplier, Kd_Pegawai, Tanggal 1NF Header_Surat_Jalan_Order
=
@No_Surat_Jalan_Order,
@Kd_Supplier, @Kd_Pegawai, Tanggal 2NF Header_Surat_Jalan_Order
=
@No_Surat_Jalan_Order,
@Kd_Supplier, @Kd_Pegawai, Tanggal 3NF → terjadi ketergantungan transitif, yaitu Supplier, dan pegawai No_Surat_Jalan_Order, Kd_Pegawai, Kd_Supplier Header_Surat_Jalan_Order
=
@No_Surat_Jalan_Order,
Kd_Supplier, Kd_Pegawai, Tanggal Supplier = @Kd_Supplier, Nama_Supplier
110 Pegawai = @Kd_Pegawai, Nama_Pegawai, Alamat_Pegawai, Telp_Pegawai 20. Detail_Surat_Jalan_Order UNF Detail_Surat_jalan_Order = No_Surat_Jalan_Order, No_Order 1NF Detail_Surat_jalan_Order = @No_Surat_Jalan_Order, @No_Order 2NF Detail_Surat_jalan_Order = @No_Surat_Jalan_Order, @No_Order 3NF Detail_Surat_jalan_Order = @No_Surat_Jalan_Order, No_Order Header_Order = @No_Order, Kd_Pegawai, Kd_Supplier, Tanggal Pegawai = @Kd_Pegawai, Nama_Pegawai Supplier = @Kd_Supplier, Nama_Supplier 21. Header_Surat_Jalan_Customer UNF Header_Surat_Jalan_Customer
=
No_Surat_Jalan_Customer,
Kd_Customer, Kd_Pegawai, Tanggal 1NF Header_Surat_Jalan_Customer
=
@No_Surat_Jalan_Customer,
@Kd_Customer,@ Kd_Pegawai, Tanggal 2NF
111 Header_Surat_Jalan_Order
=
@No_Surat_Jalan_Customer,
@Kd_Customer, @Kd_Pegawai, Tanggal 3NFNo_Surat_Jalan_Customer, Kd_Pegawai, Kd_Customer Header_Surat_Jalan_Customer
=
@No_Surat_Jalan_Customer,
Kd_Customer, Kd_Pegawai, Tanggal Customer = @Kd_Customer, Nama_Customer, Alamat_Customer, Telp_Customer Pegawai = @Kd_Pegawai, Nama_Pegawai, Alamat_Pegawai, Telp_Pegawai 22. Detail_Surat_Jalan_Customer Tabel Detail_Surat_Jalan_Customer
sudah
memenuhi syarat
normalisasi UNF, 1NF, 2NF, 3NF UNF Detail_Surat_Jalan_Customer=
No_Surat_Jalan_Customer,
No_Nota_Tagihan, Harga_Jual 1NF Detail_Surat_jalan_Order
=
@No_Surat_Jalan_Customer,
@No_Nota_Tagihan 2NF Detail_Surat_Jalan_Customer
=
@No_Surat_Jalan_Customer,
=
@No_Surat_Jalan_Customer,
@No_Nota_Tagihan 3NF Detail_Surat_Jalan_Customer No_Nota_Tagihan, Harga_Jual
112 Header_Nota_Tagihan
=
@No_Nota_Tagihan,
Kd_Pegawai,
Kd_Customer, Tanggal Customer = @Kd_Customer, Nama_Customer, Alamat_Customer, Telp_Customer Pegawai = @Kd_Pegawai, Nama_Pegawai, Alamat_Pegawai, Telp_Pegawai
4.1.2.4 Memeriksa Integrity Constraint Tujuan dari langkah ini untuk menentukan batasan integritas yang dapat melindungi basis data dari ketidakkonsistenan. Ada 5 batasan integristas yang didefinisikan yaitu : 1. Required data Beberapa atribut harus mengandung sebuah nilai valid, dengan kata lain atribut-atribut ini tidak diperkenankan mengandung nilai null. Batasan
ini
sudah
diidentifikasikan
pada
saat
atribut
didokumentasikan dalam kamus data. 2. Attribute domain constraints Setiap atribut memiliki sebuah domain, yaitu kumpulan dari nilai yang legal. Aturan-aturan seperti ini telah diidentifikasikan pada saat memilih atribut-atribut domain untuk data model. 3. Multiplicity Multiplicity menampilkan constraints relasi antar entity dalam database. 4. Entity integrity
yang ditempatkan pada
113 Primary key dari suatu entity tidak boleh memiliki nilai null. Aturan-aturan seperti ini harus telah dipertimbangkan pada saat mengidentifikasikan primary key untuk setiap entitiy. 5. Referential integritiy Referential integrity berarti apabila suatu foreign key mengandung suatu nilai, maka nilai tersebut harus menunjuk pada tuple yang terdapat pada relasi parent.
114 4.1.2.5
Validasi Relasi melalui Transaksi Pengguna
Gambar 4.19 Memvalidasi model logikal dengan pengguna
115
Penjelasan : a. M embuat Header_Daftar_Pemesanan M engambil No_Daftar_Pemesanan _Barang, Kd_Barang, Ukuran, Qty, Harga_Jual dari Detail_Daftar_Pemesanan. M engambil Kd_Barang,
Ukuran, Qty dari
Header_Barang. M engambil Kd_Customer dari Customer M engambil Kd_Pegawai dari Pegawai. b. M embuat Header_Order M engambil No_ Order, Kd_Barang, Ukuran, Qty, Harga_Beli dari Detail_ Order. M engambil
Kd_Barang,
Ukuran,
Qty
dari
Header_Barang.
M engambil
Kd_Pegawai dari Pegawai. M engambil Kd_Supplier dari Supplier. c. M embuat Header_Penjualan M engambil No_Faktur_Penjualan, Kd_Barang, Ukuran, Qty, Harga_Jual dari Detail_Penjualan. M engambil Kd_Barang, Ukuran, Qty dari Header_Barang. M engambil Kd_Pegawai dari Pegawai. M engambil Kd_Customer dari Customer. d. M embuat Header_Penerimaan_Barang M engambil
No_Faktur_Penerimaan_Barang,
No_Order
dari
Detail_Penerimaan_Barang. M engambil No_Order, Kd_Pegawai, Kd_Supplier, Harga_Beli dari Header_Order. M engambil Kd_Supplier dari Supplier. M engambil Kd_Pegawai dari Pegawai. e. M embuat Header_Nota_Tagihan M engambil No_Nota_Tagihan, No_Daftar_Pemesanan dari Detail_Nota_Tagihan. M engambil No_Daftar_Pemesanan, Kd_Pegawai, Kd_Customer, Harga_Jual dari
116 Header_Daftar_Pemesanan. M engambil Kd_Pegawai dari Pegawai. M engambil Kd_Customer dari Customer. f. M embuat Surat_Jalan_Order M engambil No_Surat_Jalan_Order, No_Order dari Detail Surat_Jalan_Order. M engambil No_Order, Kd_Pegawai, Kd_Supplier dari Header_Order. M engambil Kd_Supplier dari Supplier. M engambil Kd_Pegawai dari Pegawai. g. M embuat Surat_Jalan_Customer M engambil
No_Surat_Jalan_Customer,
Surat_Jalan_Customer.
M engambil
No_Nota_Tagihan No_Nota_Tagihan,
dari
Detail
Kd_Customer,
Kd_Pegawai dari Header_Nota_Tagihan. M engambil Kd_Customer dari Customer. M engambil Kd_Pegawai dari Pegawai. h. Cetak laporan Header_Daftar_Pemesanan Ambil No_Daftar_Pemesanan dari Header_Daftar_Pemesanan. Berdasarkan No_Daftar_Pemesanan_Barang, Kd_Barang, Ukuran, Qty, Harga_Jual ambil dari Detail_Daftar_Pemesanan. Berdasarkan Kd_Barang, Nama_Barang, Ukuran, Qty ambil dari Header_Barang. Ambil Kd_Customer, Nama Customer dari Customer. i. Cetak laporan Header_Order Ambil No_Order dari Header_Order. Berdasarkan No_Order, Kd_Barang, Ukuran, Qty, Harga_Beli ambil dari Detail_Order. Berdasarkan Kd_Barang, Nama_Barang, Ukuran, Qty ambil dari Header_Barang. Ambil dari Kd_Supplier dari Supplier. j. Cetak laporan Header_Penjualan Ambil
No_Faktur_Penjualan
dari
Header_Penjualan.
Berdasarkan
No_Faktur_Penjualan, Kd_Barang, Qty, Harga_Jual ambil dari Detail_Penjualan.
117 Berdasarkan Kd_Barang, Nama_Barang, Ukuran, Qty ambil dari Header_Barang. Ambil Kd_Customer, Nama_Customer dari Customer. Ambil Kd_Pegawai, Nama_Pegawai dari Pegawai. k. Cetak laporan Header_Penerimaan_Barang Ambil
No_Faktur_Penerimaan_Barang
dari
Header_Penerimaan_Barang.
Berdasarkan No_Faktur_Penerimaan_Barang, No_Order, Harga_Beli ambil dari Detail_Penerimaan_Barang. Berdasarkan Kd_Barang, Nama_Barang, Ukuran, Qty dari Header_Barang. Ambil Kd_Supplier, Nama_Supplier dari Supplier. l. Cetak laporan Header_Nota_Tagihan Ambil
No_Nota_Tagihan
No_Nota_Tagihan, Detail_Nota_Tagihan.
dari
Header_Nota_Tagihan.
No_Daftar_Pemesanan, Berdasarkan
Harga_Jual
Kd_Barang,
Ukuran,
Berdasarkan ambil
Qty
dari
ambil dari
Header_Barang. Ambil Kd_Customer, Nama_Customer dari Customer. m. Cetak laporan Header_Surat_Jalan_Order Ambil No_Surat_Jalan_Order dari Header_Surat_Jalan_Order. Berdasarkan No_Surat_Jalan_Order, No_Order ambil dari Detail_Surat_Jalan_Order. Ambil Kd_Supplier, Nama_Supplier dari Supplier. n. Cetak laporan Header_Surat_Jalan_Customer Ambil
No_Surat_Jalan_Customer
Berdasarkan
No_Surat_Jalan_Customer,
Detail_Surat_Jalan_Customer. Customer.
dari
Ambil
Header_Surat_Jalan_Customer. No_Nota_Tagihan
Kd_Customer,
ambil
Nama_Customer
dari dari
118
4.1.2.6
Meninjau Model Data Logikal dengan Pengguna
Gambar 4.20 Model Diagram Relasional Global
119 4.1.2.7
Membangun dan Memvalidasi Model Data Logikal Global Tujuan dari langkah ini adalah untuk menggabungkan model data logikal lokal individual ke dalam sebuah model data logikal global. Berikut ini adalah tabel model data logikal global :
Tabel 4.21 Membangun dan Memvalidasi Model Data Logikal Global Header_Barang
(Kd_Barang,
Nama_Barang,
Kd_Supplier,
Kd_M erk_Barang,
Kd_Jenis_Barang, Harga_Barang) Primary Key Kd_Barang Foreign Key Kd_Supplier references Supplier (Kd_Supplier) Foreign Key Kd_M erk_Barang references M erk_Barang (Kd_M erk_Barang) Foreign Key Kd_Jenis_Barang references Jenis_Barang (Kd_Jenis_Barang) Detail_Barang (Kd_Barang, Ukuran, Qty) Foreign Key Kd_Barang references Header_Barang (Kd_Barang) Merk_Barang (Kd_M erk_Barang, M erk_Barang) Primary Key Kd_M erk_Barang Jenis_Barang (Kd_Jenis_Barang, Jenis_Barang) Primary Key Kd_Jenis_Barang Customer (Kd_Customer, Nama_Customer, Alamat_Customer, Telp_Customer) Primary Key Kd_Customer Supplier (Kd_Supplier, Nama_Supplier, Alamat_Supplier, Telp_Supplier) Primary Key Kd_Supplier Pegawai (Kd_Pegawai, Kd_Divisi, Nama_Pegawai, Alamat_Pegawai, Telp_Pegawai) Primary Key Kd_Pegawai Foreign Key Kd_Divisi references Divisi (Kd_Divisi)
120 Divisi (Kd_Divisi, Nama_Divisi) Primary Key Kd_Divisi Header_Order (No_Order, Kd_Supplier, Kd_Pegawai, Tanggal) Primary Key No_Order Foreign Key Kd_Supplier references Supplier (Kd_Supplier) Foreign Key Kd_Pegawai references Pegawai (Kd_Pegawai) Detail_Order (No_Order, Kd_Barang, Qty, Harga_Beli) Foreign Key No_Order references Header_Order ( No_Order ) Foreign Key Kd_Barang references Header_Barang (Kd_Barang) Header_Penjualan (No_Faktur_Penjualan, Kd_Customer, Tanggal, Kd_Pegawai) Primary Key No_Faktur_Penjualan Foreign Key Kd_Customer references Customer (Kd_Customer) Foreign Key Kd_Pegawai references Pegawai (Kd_Pegawai) Detail_Penjualan (No_Faktur_Penjualan, Kd_Barang, Qty, Harga_Jual) Foreign
Key
No_Faktur_Penjualan
references
Header_Penjualan
(No_Faktur_Penjualan) Foreign Key Kd_Barang references Header_Barang (Kd_Barang) Header_Penerimaan_Barang
(
No_Faktur_Pengiriman_Barang,
Kd_Supplier,
Tanggal, Kd_Pegawai) Primary Key No_Faktur_Penerimaan_Barang Foreign Key Kd_Supplier references Supplier (Kd_Supplier) Foreign Key Kd_Pegawai references Pegawai (Kd_Pegawai) Detail_Penerimaan_Barang
(
No_Faktur_Penerimaan_Barang,
No_Order,
121 Harga_Beli) Foreign Key No_Faktur_Penerimaan_Barang references Header_Penerimaan_Barang (No_Faktur_Penerimaan_Barang) Foreign Key No_Order references Header_Order (No_Order) (No_Daftar_Pemesanan_Barang,
Header_Daftar_Pemesanan
Kd_Pegawai,
Kd_Customer, Tanggal, Status_Pemesanan) Primary Key No_Daftar_Pemesanan_Barang Foreign Key Kd_Customer references Customer (Kd_Customer) Foreign Key Kd_Pegawai references Pegawai (Kd_Pegawai) Detail_Daftar_Pemesanan
(No_Daftar_Pemesanan_Barang,
Kd_Barang,
Qty,
Harga_Jual) Foreign
Key
(No_Daftar_Pemesanan_Barang
references
Header_Daftar_Pemesanan_Barang (No_Daftar_Pemesanan_Barang) Foreign Key Kd_Barang references Header_ Barang (Kd_Barang) Header_Nota_Tagihan (No_Nota_Tagihan, Kd_Customer, Tanggal, Kd_Pegawai) Primary Key No_Nota_Tagihan Foreign Key Kd_Customer references Customer (Kd_Customer) Foreign Key Kd_Pegawai references Pegawai (Kd_Pegawai) Detail Nota_Tagihan (No_Nota_Tagihan , No_Daftar_Pemesanan, Harga_Jual) Foreign Key No_Nota_Tagihan references Header_Nota_Tagihan (No_Nota_Tagihan) Foreign
Key
No_Daftar_Pemesanan_Barang
references
Header_Daftar_Pemesanan_Barang (No_Daftar_Pemesanan_Barang) Header_Surat_Jalan_Order (No_Surat_Jalan_Order,
Kd_Supplier,
Kd_Pegawai,
122 Tanggal) Primary Key No_Surat_Jalan_Order Foreign Key Kd_Supplier references Supplier (Kd_Supplier) Foreign Key Kd_Pegawai references Pegawai (Kd_Pegawai) Detail_Surat_Jalan_Order (No_Surat_Jalan_Order, No_Order) Foreign
Key
No_Surat_Jalan_Order
references
Header_Surat_Jalan_Order
(No_Surat_Jalan_Order) Foreign Key No_Order references Header_Order (No_Order) Header_Surat_Jalan_Customer
(No_Surat_Jalan_Customer,
Kd_Customer,
Kd_Pegawai, Tanggal) Primary Key No_Surat_Jalan_Customer Foreign Key Kd_Pegawai references Pegawai (Kd_Pegawai) Foreign Key Kd_Customer references Customer (Kd_Customer) Detail_Surat_Jalan_Customer (No_Surat_Jalan_Customer, No_Nota_Tagihan) Foreign Key No_Surat_Jalan_Customer references Header_Surat_Jalan_Customer (No_Surat_Jalan_Customer) Foreign Key No_Nota_Tagihan references Header_Nota_Tagihan (No_Nota_Tagihan)
123 4.1.2.8
Pemilihan DBMS Pemilihan DBM S digunakan untuk memilih DBM S yang tepat untuk mendukung aplikasi basis data.
1. Kemudahan Penggunaan DBM S sebaiknya dapat digunakan dengan mudah oleh pengguna 2. Kemudahan dalam administrasi Pengadministrasian harus mudah dilakukan 3. Kehandalan DBM S harus mampu mengamankan data apabila terjadi kegagalan dan kerusakan piranti lunak atau keras 4. Biaya Biaya yang dikeluarkan untuk DBM S sebaiknya tidak melebihi anggaran yang diperkirakan oleh perusahaan. 5. Keamanan DBM S sebaiknya dapat bekerja dengan komponan perangkat keras dan piranti lunak lainnya dengan baik didalam sistem manajemen informasi. 6. Kompatibilitas DBM S harus dapat bekerja dengan komponen perangkat keras dan piranti lunak lainnya dengan baik didalam system manajemen informasi. 7. Persyaratan minimum DBM S harus mampu bekerja pada platform komputer untuk menjalankan sistem manajemen informasi.
124 8. Kedeketan dengan basis data Apabila strukutur dan operasi dari DBM S telah dketahui, maka waktu yang seharusnya dihabiskan untuk mempelajari DBM S dapat difokuskan kepada perancangan.
9. Skalabilitas M empertimbangkan faktor besar atau kecilnya suatu perusahaan, dan seberapa banyak data yang ditampung pada DBM S yang digunakan.
Berikut ini adalah perbandingan antara M icrosoft SQL Server 2000 dengan MySQL 4.0 Tabel 4.22 Perbandingan Microsoft SQL server 2000 dengan MyS QL 4.0 Perbedaan
SQL Server 2000
Tipe DBM S
Transactional
MySQL 4.0 relational Relational database server
database server Biaya
dengan driver InnoDB
$1000 - $5000(Profesional $0 Edition)
Kebutuhan Perangkat Keras
-
$395
Komersial)
Intel Pentium II atau AM D Kebutuhan K6-II
(Lisensi
processor,
berdasarkan
64MB system operasinya.
RAM , 380 M B Harddisk Space Kebutuhan Lunak
Perangkat Windows 2000 atau versi Linux
berbasis
Unix,
setelahnya hingga Windows MyODBC ( untuk ODBC
125 XP, Internet Explore 5.0
driver
support),
Connector/J (untuk JDBC driver support) Kelebihan
kehandalan Gratis, Dokumentasi secara
M endukung dan
keamanan
tingkat online
entreprise,
dapat
menjalankan berbagai basis data dalam satu server Kekurangan
Biaya
cukup
tinggi, Tidak
sepenuhnya
memerlukan windows 2000 compatibel dengan SQL92 server
(yang masalah
menyebabkan dengan
aplikasi
server yang membuat query SQL-nya sendiri) Keterbatasan basis data
Terbatas
mendekati
2 Terbatas hingga 32 index
milliar objek basis data
tiap table, ukuran basis data terbatas
hingga
ukuran
terbesar file dari system operasinya Pemenuhan ACID
Ya
Ya
Kemampuan
M endukung
failover Peranti lunak open source
clusters, pemulihan point in time,
dapat
melakukan
126 restart jika terhenti Keamanan
M enggunakan
M enggunakan
authentifikasi penggunaan Authentifikasi penggunaan dengan
pilihan
menyatukan
untuk dengan
menyatukan
keamanan keamanan root dan kernel
basis data dengan Windows versi system operasi open
Standard
2000 server
source
SQL99,ODBC,JDBT-
SQL-92
intermediete,
SQL,XM L
ODBC
(memerlukan
MyIDBC), JDBC
Data – data diatas menunjukkan MySQL 4.0 memiliki biaya lebih rendah, bebas lisensi. Dikarenakan PT.MUTIARA FIBRINDO menginginkan platform berbasis windows. M aka kami memilih SQL server 2000 untuk pengerjaan basis datanya.
4.1.3
Perancangan Basis Data Fisikal Perancangan basis data fisikal merupakan proses pembuatan deskripsi dari suatu implementasi basis data pada secondary storage. Beberapa langkah dalam merancang basis data secara fisik adalah sebagai berikut : 1. M erancang relasi dasar 2. M endesain representasi dari derived data 3. M endesain enterprise constraint 4. M enganalisa transaksi
127 5. M emilih index 6. M emperkirakan kebutuhan kapasitas penyimpanan 7. M erancang user view 8. M erancang mekanisme keamanan
4.1.3.1 Perancangan Relasi Dasar Tujuan dari tahap ini adalah untuk menentukan bagaimana menggambarkan relasi dasar yang diidentifikasikan oleh model data logikal global dalam DBM S. DBDL ( Database Design Languange) yang digunakan adalah sebagai berikut : •
Barang
Domain KodeBarang : variable lenght character string, lenght 5 Domain KodeM erk : variable lenght character string, lenght 5 Domain NamaBarang : variable lenght character string, lenght 20 Domain NamaM erk : variable lenght character string, lenght 15 Domain KodeJenis : variable lenght character string, lenght 5 Domain NamaJenis : variable lenght character string, lenght 15 Domain Ukuran : variable lenght character string, lenght 5 Domain Harga : money Header_Barang ( KdBarang
KodeBarang
NOTNULL
KdM erkBarang KodeM erk
NOTNULL
NamaBarang NamaBarang
NOTNULL
M erkBrg
NOTNULL
NamaM erk
128 KdJnsBarang KodeJenis
NOTNULL
JnsBrg
NamaJenis
NOTNULL
Harga
Harga
NOTNULL
Ukuran
Ukuran
NOTNULL
PRIMARY KEY (KdBarang), FOREIGN KEY (KdM erk) REFERENCES M erk_Barang (KdM erk) ON
UPDATE
CAS CADE
ON
DELETE
NOACTION;
•
Jenis_Barang
Domain KodeJenisBarang
: variable lenght character string,
lenght 5 Domain NamaJenisBarang : variable lenght character string, lenght 30 Jenis_Barang ( KdJnsBrg
KodeJenisBarang
NOTNULL
JnsBrg
NamaJenisBarang
NOTNULL
PRIMARY KEY (KdJnsBrg); •
Customer
Domain KodeCustomer : variable lenght character string, lenght 5 Domain NamaCustomer : variable lenght character string, lenght 30
129 Domain AlamatCustomer : variable lenght character string, lenght 100 Domain TelpCustomer : variable lenght character string, lenght 30 Customer ( KdCustomer KodeCustomer
NOTNULL
NamaCustomer NamaCustomer
NOTNULL
AlamatCustomer AlamatCustomer
NOTNULL
PRIMARY KEY (KdCustomer) •
Supplier
Domain Kd_Supplier : Variabel lenght character string, lenght 5 Domain Nama_Supplier : Variabel lenght character string, lenght 30 Domain Alamat_Supplier : Variabel lenght character string, lenght 100 Domain Telp_Supplier : Variabel lenght character string, lenght 30 Supplier ( KdSupplier
KodeSupplier
NOTNULL
NamaSupplier NamaSupplier
NOTNULL
AlamatSupplier Alamat_Supplier
NOTNULL
TelpSupplier TelpSupplier
NOTNULL
PRIMARY KEY (KdSupplier) •
Pegawai
130 Domain KodePegawai : variabel lenght character string, lenght 5 Domain NamaPegawai : variabel lenght character string, lenght 15 Domain AlamatPegawai : variabel lenght character string, lenght 100 Domain KdDivisi : variabel lenght character string, lenght 20 Pegawai ( KdPegawai
KodePegawai
NOTNULL
NamaPegawai NamaPegawai
NOTNULL
NamaPegawai AlamatPegawai
NOTNULL
KdDivisi KodeDivisi
NOTNULL
PRIMARY KEY (KdPegawai) •
Header_Penjualan
Domain NomorFakturPenjualan : variabel lenght character string, lenght 5 Domain KodeCustomer : variabel lenght character string, lenght 5 Domain TglFakJual : variabel datetime Domain KdPegawai : variabel lenght character string, lenght 5 Header_Penjualan ( NoFakPenjualan NomorFakturJual
NOTNULL
KdCustomer KodeCustomer
NOTNULL
Tanggal
TglFakJual
NOTNULL
KdPegawai
KodePegawai
NOTNULL
PRIMARY KEY (NoFakPenjualan),
131 FOREIGN KEY (KdCustomer) REFERENCES Customer (KdCustomer) ON UPDATE C AS CADE ON DELETE NO ACTION, FOREIGN
KEY
(KdPegawai)
REFERENCES
Pegawai
(KdPegawai) ON UPDATE C AS CADE ON DELETE NO ACTION
•
Detail_Penjualan
Domain NomorFakturPenjualan : variable lenght character string, lenght 5 Domain KodeBarang : variable lenght character string, lenght 5 Domain Ukuran : variable lenght charachter string, lenght 5 Domain HargaJual : variable money Domain Quantity : integer Detail_Penjualan ( NoFakPenjualan NomorFakturPenjualan
NOTNULL
KdBarang
KodeBarang
NOTNULL
Ukuran
Ukuran
NOTNULL
HargaJual
HargaJual
NOTNULL
Qty
Qty
NOTNULL
PRIMARY KEY (NoFakPenjualan, KdBarang), FOREIGN KEY (NoFakturPenjualan) REFERENCES Header_Penjualan (NoFakturPenjualan) ON UPDATE C AS CADE ON DELETE NO ACTION,
132 FOREIGN KEY (KdBarang) REFERENC ES Header_Barang (KdBarang) ON UPDATE C AS CADE ON DELETE NO ACTION •
Header_Penerimaan_Barang
Domain NoFakturPenerimaan : variable lenght character string, lenght 5 Domain KodeSupplier : variable lenght character string, lenght 5 Domain KodePegawai : variabel lenght character string, lenght 5 Domain Tanggal : variabel datetime Header_Penerimaan_Barang ( NoFakPenerimaan NoFakturPenerimaan
NOTNULL
KdSupplier
KodeSupplier
NOTNULL
KdPegawai
KodePegawai
NOTNULL
Tanggal
Tanggal
NOTNULL
PRIMARY KEY (NoFakPenerimaan), FOREIGN KEY (KdSupplier) REFERENCES Supplier (KdSupplier) ON UPDATE C AS CADE ON DELETE NO ACTION, FOREIGN
KEY
(KdPegawai)
REFERENCES
Pegawai
(KdPegawai) ON UPDATE CAS CADE ON DELETE NO ACTION •
Detail_Penerimaan_Barang
133 Domain NoFakturPenerimaan : variable lenght character string, lenght 5 Domain NoOrder : variable lenght character string, lenght 5 Domain HargaBeli : money Detail_Penerimaan_Barang ( NoFakPenerimaan NoFakturPenerimaan
NOTNULL
NoOrder
KodeBarang
NOTNULL
HargaBeli
HargaBeli
NOTNULL
PRIMARY KEY (NoFakPenerimaan, KdBarang) FOREIGN KEY (NoOrder) REFERENCES Header_Order (NoOrder), ON UPDATE C AS CADE ON DELETE NO ACTION FOREIGN
KEY
(NoFakPenerimaan)
REFERENCES
Header_Penerimaan_Barang (NoFakPenerimaan), ON UPDATE C AS CADE ON DELETE NO ACTION
•
Header_Order
Domain NoOrder : variable lenght character string, lenght 5 Domain KodeSupplier : variable lenght character string, lenght 5 Domain KodePegawai : variable lenght character string, lenght 5 Domain Tanggal : datetime Header_Order ( NoOrder
NoOrder
NOTNULL
KdSupplier
KodeSupplier
NOTNULL
134 KdPegawai
KodePegawai
NOTNULL
Tanggal
Tanggal
NOTNULL
PRIMARY KEY (NoOrder) FOREIGN
KEY
(KdSupplier)
REFERENCES
Supplier
(KdSupplier) ON UPDATE C AS CADE ON DELETE NO ACTION, FOREIGN
(KdPegawai)
KEY
REFERENCES
Pegawai(KdPegawai) ON UPDATE C AS CADE ON DELETE NO ACTION
•
Detail_Order
Domain NoOrder : variable lenght character string, lenght 5 Domain KodeBarang : variable lenght character string, lenght 5 Domain Quantity : integer Detail_Order ( NoOrder
NoOrder
NOTNULL
KdBarang
KodeBarang
NOTNULL
Qty
Qty
NOTNULL
PRIMARY KEY (NoOrder, KdBarang) FOREIGN
KEY
(KdBarang)
REFERENCES
Barang
(KdBarang) ON UPDATE C AS CADE ON DELETE NO ACTION, FOREIGN KEY (NoOrder) REFERENCES Header_Order (NoOrder)
135 ON UPDATE C AS CADE ON DELETE NO ACTION
•
Header_Daftar_Pemesanan
Domain NoDaftarPemesanan : variable lenght character string, lenght 5 Domain KodePegawai : variable lenght character string, lenght 5 Domain KodeCustomer : variabel lenght character string, lenght 5 Domain StatusPemesanan : variabel lenght character string, lenght 10 Domain Tanggal : variable datetime Header_Daftar_Pemesanan ( NoDaftPemesanan NoDaftarPemesanan KdPegawai
KodePegawai
NOTNULL
NOTNULL
KdCustomer KodeCustomer
NOTNULL
StatusPemesanan StatusPemesanan
NOTNULL
Tanggal
NOTNULL
Tanggal
PRIMARY KEY (NoDaftPemesanan) FOREIGN
KEY
(KdPegawai)
REFERENCES
Pegawai
(KdPegawai) ON UPDATE C AS CADE ON DELETE NO ACTION, FOREIGN KEY (KdCustomer) REFERENCES Customer (KdCustomer) ON UPDATE C AS CADE ON DELETE NO ACTION
136 •
Detail_Daftar_Pemesanan
Domain NoDaftarPemesanan : variable lenght character string, lenght 5 Domain KodeBarang : variable lenght character string, lenght 5 Domain Qty : integer Domain Ukuran : variable lenght character string, lenght 5 Domain HargaJual : money Detail_Daftar_Pemesanan ( NoDafPemesanan NoDaftarPemesanan
NOTNULL
KdBarang
KodeBarang
NOTNULL
Qty
Qty
NOTNULL
Ukuran
Ukuran
NOTNULL
HargaJual
HargaJual
NOTNULL
PRIMARY KEY (NoDaftPemesanan, KdBarang), FOREIGN
KEY
(NoDaftPemesanan)
REFERENCES
Header_Daftar_Pemesanan (NoDaftPemesanan) ON UPDATE C AS CADE ON DELETE NO ACTION, FOREIGN
KEY
(KdBarang)
REFERENCES
Barang
(KdBarang) ON UPDATE C AS CADE ON DELETE NO ACTION •
Header_Nota_Tagihan
Domain NoNotaTagihan : variable lenght character string, lenght 5 Domain KodeCustomer : variable lenght character string, lenght 5
137 Domain KodePegawai : variable lenght character string, lenght 5 Domain Tanggal : datetime Header_Nota_Tagihan ( NoNotaTagihan NoNotaTagihan
NOTNULL
KdCustomer KodeCustomer
NOTNULL
KdPegawai
KodePegawai
NOTNULL
Tanggal
Tanggal
NOTNULL
PRIMARY KEY (NoNotaTagihan) FOREIGN KEY (KdCustomer) REFERENCES Customer (KdCustomer) ON UPDATE C AS CADE ON DELETE NO ACTION, FOREIGN
KEY
(KdPegawai)
REFERENCES
Pegawai
(KdPegawai) ON UPDATE C AS CADE ON DELETE NO ACTION
•
Detail_Nota_Tagihan
Domain NoNotaTagihan : variable length character string, lenght 5 Domain NoDaftPemesanan : variable length character string, lenght 5 Domain HargaJual : money Detail_Nota_Tagihan ( NoNotaTagihan NoNotaTagihan
NOTNULL
NoDaftPemesanan NoFakturPenjualan
NOTNULL
138 HargaJual
HargaJual
NOTNULL
PRIMARY KEY (NoNotaTagihan, NoDaftPemesanan) FOREIGN
KEY
(NoNotaTagihan)
REFERENCES
Header_Nota_Tagihan (NoNotaTagihan) ON UPDATE C AS CADE ON DELETE NO ACTION, FOREIGN
KEY
(NoDaftPemesanan)
REFERENCES
Header_Daftar_Pemesanan (NoDaftPemesanan) ON UPDATE C AS CADE ON DELETE NO ACTION
•
Header_Surat_Jalan_Order
Domain NoSuratJalanOrder : variable lenght character string, lenght 5 Domain KodePegawai : variable lenght character string, lenght 5 Domain KodeSupplier : variabel lenght character string, lenght 5 Domain Tanggal : datetime Header_Surat_Jalan_Order ( NoSrtJlnOrder NoSuratJalanOrder
NOTNULL
KdPegawai
KodePegawai
NOTNULL
KdSupplier
KodeSupplier
NOTNULL
Tanggal
Tanggal
NOTNULL
PRIMARY KEY (NoSrtJlnOrder) FOREIGN
KEY
(KdPegawai)
REFERENCES
(KdPegawai) ON UPDATE C AS CADE ON DELETE NO ACTION,
Pegawai
139 FOREIGN
KEY
(KdSupplier)
REFERENCES
Supplier
(KdSupplier) ON UPDATE C AS CADE ON DELETE NO ACTION
•
Detail_Surat_Jalan_Order
Domain NoSuratJalanOrder : variable length character string, lenght 5 Domain NoOrder : variable length character string, lenght 5
Detail_Surat_Jalan _Order( NoSrtJlnOrder NoSuratJalanOrder
NOTNULL
NoOrder
NOTNULL
NoOrder
PRIMARY KEY (NoSrtJlnOrder, NoOrder) FOREIGN
KEY
(NoSrtJlnOrder)
REFERENCES
Header_Surat_Jalan_Order (NoSrtJlnOrder) ON UPDATE C AS CADE ON DELETE NO ACTION, FOREIGN KEY (NoOrder) REFERENCES Header_Order (NoOrder) ON UPDATE C AS CADE ON DELETE NO ACTION
•
Header_Surat_Jalan_Customer
Domain NoSuratJalanCustomer : variable lenght character string, lenght 5 Domain KodeCustomer variabel lenght character string, lenght 5
140 Domain KodePegawai : variabel lenght character string, lenght 5 Domain Tanggal : datetime
Header_Surat_Jalan_Customer ( NoSrtJlnCust NoSuratJalanCustomer NOTNULL KdCustomer KodeCustomer
NOTNULL
KdPegawai
KodePegawai
NOTNULL
Tanggal
Tanggal
NOTNULL
PRIMARY KEY (NoSrtJlnCust) FOREIGN
KEY
(KdPegawai)
REFERENCES
Pegawai
(KdPegawai) ON UPDATE C AS CADE ON DELETE NO ACTION, FOREIGN KEY (KdCustomer) REFERENCES Customer (KdCustomer) ON UPDATE C AS CADE ON DELETE NO ACTION
•
Detail_Surat_Jalan_Customer
Domain NoSuratJalanCustomer : variable length character string, lenght 5 Domain NoNotaTagihan : variable length character string, lenght 5 Detail_Surat_Jalan _Customer( NoSrtJlnCust
NoSuratJalanCustomer
NoNotaTagihan NoNotaTagihan
NOTNULL
NOTNULL
141 PRIMARY KEY (NoSrtJlnCust, NoNotaTagihan) FOREIGN
KEY
(NoSrtJlnCust)
REFERENCES
Header_Surat_Jalan_Customer (NoSrtJlnCust) ON UPDATE C AS CADE ON DELETE NO ACTION, FOREIGN
KEY
(NoNotaTagihan)
REFERENCES
Header_Nota_Tagihan (NoNotaTagihan) ON UPDATE C AS CADE ON DELETE NO ACTION
4.1.3.2 Mendesain representasi dari derived data Di dalam model data ini, derived data sudah dibuat menjadi atribut dalam kamus data sebelumnya. 4.1.3.3 Perancangan EnterPrise Constraint •
Header_Barang CREATE UNIQUE INDEX KdBarang ON Header_Barang (KdBarang) CREATE INDEX KdM erkM erk_Barang ON M erk_Barang (KdM erkBarang) CREATE INDEX KdJenisJenis_BarangON Jenis_Barang (KdJenisBarang)
•
M erk_Barang CREATE UNIQUE INDEX KdM erkBarang ON M erk_Barang (KdM erkBarang)
•
Jenis_Barang
142 CREATE UNIQUE INDEX KdJenisBarang ON Jenis_Barang (KdJenisBarang) •
Pegawai CREATE UNIQUE INDEX KdPegawai ON Pegawai (KdPegawai) CREATE INDEX KdDivisiDivisi ON Divisi (KdDivisi)
•
Divisi CREATE UNIQUE INDEX KdDivisi ONsDivisi (KdDivisi)
•
Supplier CREATE UNIQUE INDEX KdSupplier ON Supplier (KdSupplier)
•
Customer CREATE UNIQUE INDEX KdCustomer ON Customer (KdCustomer)
•
Header_Order CREATE UNIQUE INDEX NoOrder ON HeaderOrder (No Order) CREATE INDEX KdSupplierSupplier ON Supplier (KdSupplier) CREATE INDEX KdPegawaiPegawai ON Pegawai (KdPegawai)
•
Detail_Order
143 CREATE UNIQUE INDEX NoOrder ON Detail_Order (NoOrder) CREATE UNIQUE INDEX KdBarang ON Detail_Order (KdBarang) •
Header_Daftar_Pemesanan CREATE UNIQUE INDEX NoDaftarPemesanan ON Header_Daftar_Pemesanan (NoDaftarPemesanan) CREATE INDEX KdPegawaiPegawai ON Pegawai (KdPegawai) CREATE INDEX KdCustomerCustomer ON Customer (KdCustomer)
•
Detail_Daftar_Pemesanan CREATE UNIQUE INDEX NoDaftarPemesanan ON Detail_Daftar_Pemesanan (NoDaftarPemesanan) CREATE UNIQUE INDEX KdBarang ON Detail_Order (KdBarang)
•
Header_Nota_Tagihan CREATE UNIQUE INDEX NoNotaTagihan ON Header_Nota_Tagihan (NoNotaTagihan) CREATE INDEX KdCustomerCustomer ON Customer (KdCustomer) CREATE INDEX KdPegawaiPegawai ON Pegawai (KdPegawai)
144 •
Detail_Nota_Tagihan CREATE UNIQUE INDEX NoNotaTagihan ON Detail_Nota_Tagihan (NoNotaTagihan) CREATE UNIQUE INDEX NoDaftarPemesanan ON Detail_Daftar_Pemesanan (NoDaftarPemesanan)
•
Header_Surat_Jalan_Order CREATE UNIQUE INDEX NoSuratJalanOrder ON Header_Surat_Jalan_Order (NoSuratJalanOrder) CREATE INDEX KdSupplierSupplier ON Supplier (KdSupplier) CREATE INDEX KdPegawaiPegawai ON Pegawai (KdPegawai)
•
Detail_Surat_Jalan_Order CREATE UNIQUE INDEX NoSuratJalanOrder ON MsDetailSuratJalanOrder(No_Surat_Jalan_Order) CREATE UNIQUE INDEX NoOrder ON Detail_Surat_Jalan_Order (NoOrder)
•
Header_Surat_Jalan_Customer CREATE UNIQUE INDEX NoSuratJalan Customer ON Header_Surat_Jalan_Customer (NoSuratJalanCustomer) CREATE INDEX KdCustomerCustomer ON Customer (KdCustomer)
145 CREATE INDEX KdPegawaiPegawai ON Pegawai (KdPegawai)
•
Detail_Surat_Jalan_Customer CREATE UNIQUE INDEX NoSuratJalanCustomer ON Detail_Surat_Jalan_Customer(NoSuratJalanCustomer) CREATE UNIQUE INDEX NoNotaTagihan ON Detail_Surat_Jalan_Customer (NoNotaTagihan)
4.1.3.4 Menganalisa Transaksi Tujuan dari langkah ini adalah untuk memahami fungsionalitas dari transaksi yang akan berjalan pada basis data dan untuk menganalisa transaksi yang penting. Transaksi-transaksi yang terjadi adalah sebagai berikut: A.
M emasukkan dan mengubah data barang
B.
M emasukkan dan mengubah merk.
C.
M emasukkan dan mengubah data jenis barang
D.
M emasukkan dan mengubah data customer.
E.
M emasukkan dan mengubah data supplier.
F.
M emasukkan dan mengubah data pegawai.
G.
M emasukkan dan mengubah data divisi.
H.
M embuat dan melihat penerimaan barang.
I.
M endapatkan data customer untuk membuat faktur penjualan.
146 J.
M embuat dan mengubah faktur penjualan.
K.
M endapatkan data customer untuk membuat daftar pemesanan barang.
L.
M embuat dan mengubah daftar pemesanan barang
M.
M endapatkan data supplier untuk membuat order
N.
M embuat dan mengubah order
O.
M endapatkan data customer untuk membuat nota tagihan.
P.
M embuat dan mengubah nota tagihan
Q.
M encatat no order untuk membuat surat jalan order
R.
M embuat dan melihat surat jalan order
S.
M encatat no nota tagihan untuk membuat surat jalan customer
T.
M embuat dan melihat surat jalan customer
147 Tabel 4.23 Tabel Analisa Transaksi / Relasi (A)
(B)
(C)
(D)
(E)
(F)
(G)
Transaksi/Relasi Barang M erk
I
R U D
X
X
I
R U D
X
X
Jenis Customer Supplier Pegawai Divisi Penerimaan_Barang Penjualan Daftar_Pemesanan_Barang Order Nota_Tagihan Surat_Jalan_Order Surat_Jalan_Customer Keterangan I=Insert, R=Read, U=Update, D=Delete
I
R U D
X
X
I
R U D
X
X
I
R U D
X
X
I
R U D
X
X
I
R U D
X
X
148
(H)
(I)
(J)
(K)
(L)
(M)
(N)
Transaksi/Relasi I
R U D I R U D
I
R U D I R U D
I
R U D I R U D
I
R U D
X
X
Barang M erk Jenis Customer
X
X
Supplier
X
Pegawai Divisi Penerimaan_Barang
X X
Penjualan Daftar_Pemesanan_Barang Order Nota_Tagihan Surat_Jalan_Order Surat_Jalan_Customer Keterangan I=Insert, R=Read, U=Update, D=Delete
X
X X
X
149
(O)
(P)
(Q)
(R)
(S )
(T)
Transaksi/Relasi I R U D
I
R U D
I
R U D
I
R U D
I
R U D
I
R U D
Barang M erk Jenis Customer
X
Supplier Pegawai Divisi Penerimaan_Barang Penjualan Daftar_Pemesanan_Barang Order Nota_Tagihan
X X
Surat_Jalan_Order Surat_Jalan_Customer Keterangan I=Insert, R=Read, U=Update, D=Delete
X
X X X
X X
150 4.1.3.5
Penerapan View dalam database • View Faktur Penerimaan Barang CREATE VIEW View_Faktur_Penerimaan_Barang AS (SELECT a.NoFakPenerimaanBrg, a.KdSupplier, NamaSupplier,hargabeli, a.Tanggal, d.NoOrder, e.KdBarang, Ukuran, Qty, (Qty*HargaBeli) A S SubTotal FROM Header_Penerimaan_Barang a JOIN Detail_Penerimaan_Barang b ON b.NoFakPenerimaanBrg = a.NoFakPenerimaanBrg JOIN Supplier c ON c.KdSupplier = a.KdSupplier JOIN Header_Order d ON d.KdSupplier = c.KdSupplier JOIN Header_Barang e ON e.KdSupplier = c.KdSupplier JOIN Detail_Barang f ON f.KdBarang = e.KdBarang ) •
View Faktur Penjualan CREATE VIEW View_Faktur_Penjualan AS (SELECT a.NoFakpenjualan, a.KdCustomer, NamaCustomer, a.Tanggal, a.KdPegawai, NamaPegawai, b.KdBarang, Ukuran, Qty, HargaJual ,(qty*hargajual) AS SubTotal FROM Header_Penjualan a JOIN Detail_Penjualan b ON b.nofakpenjualan = a.nofakpenjualan JOIN Customer c ON c.kdcustomer = a.kdcustomer JOIN Pegawai d ON d.kdpegawai = a.kdpegawai JOIN Header_Barang e On e.kdbarang =b.kdBarang )
151 •
View Order CREATE VIEW View_Order AS (SELECT a.NoOrder, a.KdSupplier, NamaSupplier, a.Tanggal, d.KdBarang, Ukuran ,hargabeli, Qty, (qty*hargabeli) AS SubTotal FROM Header_Order a JOIN Detail_Order b on b.noorder =a.noorder JOIN Supplier c ON c.kdsupplier = a.kdsupplier JOIN Header_barang d ON d.kdsupplier = c.kdsupplier )
•
View Daftar Pemesanan CREATE VIEW View_Daftar_Pemesanan AS (SELECT a.NoDaftPemesanan, a.KdCustomer, NamaCustomer, StatusPemesanan, a.Tanggal, d.KdPegawai, NamaPegawai, f.KdBarang, NamaBarang, b.Ukuran, b.Qty, b.HargaJual, (b.qty*b.hargajual) AS SubTotal FROM Header_Daftar_Pemesanan a JOIN Detail_Daftar_Pemesanan b ON b.nodaftpemesanan = a.nodaftpemesanan JOIN customer c ON c.kdcustomer=a.kdcustomer JOIN Header_Penjualan d ON d.kdcustomer=c.kdcustomer JOIN pegawai e ON e.kdpegawai = d.kdpegawai JOIN Detail_Penjualan f ON f.nofakpenjualan=d.nofakpenjualan JOIN Header_Barang g ON g.kdbarang=f.kdbarang )
•
View Nota Tagihan
152 CREATE VIEW View_Nota_Tagihan AS(SELECT a.NoNotaTagihan, a.KdCustomer, NamaCustomer, a.Tanggal, d.NoDaftPemesanan, f.KdBarang, NamaBarang, Ukuran, Qty, b.HargaJual, (Qty*b.hargajual) A S SubTotal From Header_Nota_Tagihan a JOIN Detail_Nota_Tagihan b ON b.nonotatagihan=a.nonotatagihan JOIN customer c ON c.kdcustomer=a.kdcustomer JOIN Header_Daftar_Pemesanan d ON d.kdcustomer =c.kdcustomer JOIN Header_Penjualan e ON e.kdcustomer=c.kdcustomer JOIN Detail_Penjualan f ON f.nofakpenjualan=e.nofakpenjualan JOIN Header_Barang g ON g.kdbarang=f.kdbarang ) •
View Surat Jalan Order CREATE VIEW View_Header_Surat_Jalan_Order AS (SELECT a.NoSrtJlnOrder, a.KdSupplier, NamaSupplier,a.KdPegawai, NamaPegawai,b.NoOrder, a.Tanggal, e.KdBarang, Ukuran, Qty From Header_Surat_Jalan_Order a JOIN Detail_Surat_Jalan_Order b ON b.nosrtjlnorder=a.nosrtjlnorder JOIN Supplier c ON c.kdsupplier=a.kdsupplier JOIN Header_Order d ON d.kdsupplier=c.kdsupplier JOIN Detail_Order e ON e.noorder=b.noorder JOIN Pegawai f ON f.kdpegawai = a.kdpegawai )
•
View Surat Jalan Customer CREATE VIEW View_Header_Surat_Jalan_Customer AS (SELECT a.NoSrtJlnCust, a.KdCustomer,
153 NamaCustomer,a.KdPegawai, NamaPegawai,b.NoNotaTagihan, a.Tanggal, KdBarang, Ukuran, Qty From Header_Surat_Jalan_Customer a JOIN Detail_Surat_Jalan_Customer b ON b.nosrtjlncust=a.nosrtjlncust JOIN Customer c ON c.kdcustomer=a.kdcustomer JOIN Header_Nota_Tagihan d ON d.kdcustomer=c.kdcustomer JOIN Detail_Nota_Tagihan e ON e.nonotatagihan=b.nonotatagihan JOIN Pegawai f ON f.kdpegawai = a.kdpegawai JOIN Detail_Daftar_Pemesanan g ON g.NoDaftPemesanan =e.NoDaftPemesanan)
4.1.3.6
Memilih Index SQL server menyediakan index untuk dua alasan utama yaitu sebagai metode untuk menjalankan keunikan data di dalam tabel basis data dan untuk menyediakan akses yang lebih cepat ke data yang berada di dalam tabel. M embuat index untuk basis data merupakan aspek yang sangat penting untuk merancang basis data fisikal. Index yang digunakan adalah sebagai berikut: Tabel 4.24 Tabel Index yang digunakan
Entitas
Nama Field
Nama Index
Jenis (C/NC)
Customer
KdCustomer
IdxCustomer
NC
Supplier
KdSupplier
IdxSupplier
NC
Pegawai
KdPegawai
IdxPegawai
NC
154 Divisi
KdDivisi
IdxDivisi
NC
Barang
KdBarang
IdxBarang
NC
M erk_Barang
KdM erk
IdxM erk
NC
Jenis_Barang
KdJenis
IdxJenis
NC
Daftar_Pemesanan
NoDaftPemesanan
IdxDaftarPemesananBarang
NC
Order
NoOrder
IdxOrder
NC
Penerimaan_Barang
IdxFakturPenerimaan
NC
Penjualan
NoFakPenerimaan Barang NoFakPenjualan
IdxFakturPenjualan
NC
Nota_Tagihan
NoNotaTagihan
IdxNotaTagihan
NC
Surat_Jalan_Order
NoSrtJlnOrder
IdxSuratJalanOrder
NC
IdxSuratJalanCustomer
NC
Surat_Jalan_Customer NoSrtJlnCust
1. Customer CREATE UNIQUE NONCLUSTERED INDEX IdxCustomer ON Customer (KdCustomer) 2. Supplier CREATE UNIQUE NONCLUSTERED INDEX IdxSupplier ON Supplier (KdSupplier) 3. Pegawai CREATE UNIQUE NONCLUSTERED INDEX IdxPegawai ON Pegawai (KdPegawai) 4. Divisi
155 CREATE UNIQUE NONCLUSTERED INDEX IdxDivisi ON Divisi (KdDivisi) 5. Barang CREATE UNIQUE NONCLUSTERED INDEX IdxBarang ON Barang (Kdbarang) 6. Merk CREATE UNIQUE NONCLUSTERED INDEX IdxM erk ON M erk_Barang (KdM erk) 7. Jenis CREATE UNIQUE NONCLUSTERED INDEX IdxJenis ON Jenis_Barang (KdJenis) 8. Daftar_Pemesanan CREATE
UNIQUE
IdxDaftarPemesananBarang
NONCLUSTERED ON
INDEX
Daftar_Pemesanan
(NoDaftPemesanan) 9. Order CREATE UNIQUE NONCLUSTERED INDEX IdxOrder ON Order (NoOrder) 10. Penerimaan_Barang CREATE
UNIQUE
IdxFakturPenerimaanBarang (NoFakPenerimaanBarang) 11. Penjualan
NONCLUSTERED ON
INDEX
Penerimaan_Barang
156 CREATE
UNIQUE
NONCLUSTERED
INDEX
IdxFakturPenjualan ON Penjualan (NoFakPenjualan) 12.Nota_Tagihan CREATE UNIQUE NONCLUSTERED INDEX IdxNotaTagihan ON NotaTagihan (NoNotaTagihan) 13.Surat_Jalan_Order CREATE
UNIQUE
NONCLUSTERED
INDEX
IdxSuratJalanOrder ON Surat_Jalan_Order (NoSrtJlnOrder) 14.Surat_Jalan_Customer CREATE
UNIQUE
IdxSuratJalanCustomer
NONCLUSTERED ON
INDEX
Surat_Jalan_Customer
(NoSrtJlnCust)
4.1.3.7 Memperkirakan Kebutuhan Media Penyimpanan Tujuan dari langkah ini adalah untuk menghitung jumlah kapasitas penyimpanan yang dibutuhkan oleh basis data. Perkiraan kapasitas dari tabel-tabel yang ada adalah sebagai berikut:
Tabel 4.25 Tabel Barang Field
Type
Ukuran
KdBarang
Char (5)
5
NamaBarang
Varchar (30)
30
157 KdM erk
Char (5)
5
KdJenis
Char (5)
5
Harga
M oney
20
Ukuran
Varchar (5)
5
Qty
Integer
5
Kapasitas dari Barang adalah 75 byte Diperkirakan dalam satu bulan terdapat 1 barang baru Dalam satu tahun pertumbuhan tabel adalah 1*12*75 = 900 byte
Tabel 4.26 Tabel Merk Barang Field
Type
Ukuran
KdM erk
Char (5)
5
M erkBrg
Varchar (15)
15
Kapasitas dari M erk adalah 20 byte Diperkirakan dalam satu bulan terdapat 1 M erk baru Dalam satu tahun pertumbuhan tabel adalah 1*12*20 = 240 byte
Tabel 4.27 Tabel Jenis Barang Field
Type
Ukuran
KdJenis
Char (5)
5
158 JnsBrg
Varchar (15)
15
Kapasitas dari Barang adalah 20 byte Diperkirakan dalam satu bulan terdapat 1 Jenis baru Dalam satu tahun pertumbuhan tabel adalah 1*12*20 = 240 byte
Tabel 4.28 Tabel Customer Field
Type
Ukuran
KdCustomer
Char (5)
5
NamaCustomer
Varchar (30)
30
AlamatCustomer
Varchar (100)
100
TelpCustomer
Varchar (30)
30
Kapasitas dari Customer adalah 165 byte Diperkirakan dalan satu hari ada penambahan 2 customer baru Dalam satu tahun pertumbuhan tabel adalah 2*30*12*165 = 145800 byte atau 118,8 kb
Tabel 4.29 Tabel Supplier Field
Type
Ukuran
KdSupplier
Char (5)
5
NamaSupplier
Varchar (30)
30
AlamatSupplier
Varchar (100)
100
TelpSupplier
Varchar (30)
30
Kapasitas dari Barang adalah 165 byte
159 Diperkirakan dalam satu bulan terdapat 1 supplier baru Dalam satu tahun pertumbuhan tabel adalah 1*12*165 = 1980 byte
Tabel 4.30 Tabel Pegawai Field
Type
Ukuran
KdPegawai
Char (5)
5
NamaPegawai
Varchar (30)
30
AlamatPegawai
Varchar (100)
100
TelpPegawai
VarChar (30)
30
KdDivisi
Char (5)
5
Kapasitas dari Barang adalah 170 byte Diperkirakan dalam satu bulan terdapat 2 pegawai baru Dalam satu tahun pertumbuhan tabel adalah 2*12*170 = 4080 byte
Tabel 4.31 Tabel Daftar Pemesanan Field
Type
Ukuran
NoDaftPemesanan
Char (5)
5
KdCustomer
Char (5)
5
160 KdPegawai
Char (5)
5
StatusPemesanan
Char (5)
5
KdBarang
Char (5)
5
Tanggal
Datetime
15
Ukuran
Varchar (5)
5
HargaJual
M oney
20
Qty
Integer
5
Kapasitas dari Barang adalah 70 byte Diperkirakan dalam satu hari terdapat 3 daftar pemesanan baru Dalam satu tahun pertumbuhan tabel adalah 3*30*12*70 = 75600 byte
Tabel 4.32 Tabel Order Field
Type
Ukuran
NoOrder
Char (5)
5
KdSupplier
Char (5)
5
KdPegawai
Char (5)
5
KdBarang
Char (5)
5
Tanggal
Datetime
10
Qty
Integer
5
Ukuran
Char (5)
5
HargaBeli
M oney
20
Kapasitas dari Barang adalah 60 byte Diperkirakan dalam satu hari terdapat 3 daftar pemesanan baru
161 Dalam satu tahun pertumbuhan tabel adalah 3*30*12*60 = 64800 byte
Tabel 4.33 Tabel Faktur Penerimaan Barang Field
Type
Ukuran
NoFakturPenerimaan
Char (5)
5
KdSupplier
Char (5)
5
KdPegawai
Char (5)
5
KdBarang
Char (5)
5
NoOrder
Char (5)
5
Tanggal
Datetime
10
HargaBeli
M oney
20
Kapasitas dari Barang adalah 55 byte Diperkirakan dalam satu hari terdapat 3 Faktur Penerimaan baru Dalam satu tahun pertumbuhan tabel adalah 3*30*12*55 = 59400 byte
Tabel 4.34 Tabel Faktur Penjualan Field
Type
Ukuran
NoFakturPenjualan
Char (5)
5
KdCustomer
Char (5)
5
KdPegawai
Char (5)
5
KdBarang
Char (5)
5
Tanggal
Datetime
10
162 Qty
Integer
5
Ukuran
Char (5)
5
HargaJual
M oney
20
Kapasitas dari Barang adalah 60 byte Diperkirakan dalam satu hari terdapat 3 Faktur Penjualan baru Dalam satu tahun pertumbuhan tabel adalah 3*30*12*60 = 64800 byte
Tabel 4.35 Tabel NotaTagihan Field
Type
Ukuran
NoNotaTagihan
Char(5)
5
KdCustomer
Char (5)
5
KdPegawai
Char (5)
5
NoDaftPemesanan
Char (5)
5
Tanggal
Datetime
10
HargaJual
M oney
20
Kapasitas dari Barang adalah 50 byte Diperkirakan dalam satu hari terdapat 1 NotaTagihan baru Dalam satu tahun pertumbuhan tabel adalah 1*30*12*50 = 18000 byte
Tabel 4.36 Tabel Surat Jalan Order Field
Type
Ukuran
NoSrtJalanOrder
Char (5)
5
163 NoOrder
Char (5)
5
KdSupplier
Char (5)
5
KdPegawai
Char (5)
5
Tanggal
DateTime
10
Kapasitas dari Barang adalah 30 byte Diperkirakan dalam satu hari terdapat 3 SuratJalan baru Dalam satu tahun pertumbuhan tabel adalah 3*30*12*30 = 32400 byte
Tabel 4.37 Tabel Surat Jalan Customer Field
Type
Ukuran
NoSrtJalanCust
Char (5)
5
NoNotaTagihan
Char (5)
5
KdCustomer
Char (5)
5
KdPegawai
Char (5)
5
Tanggal
DateTime
10
Kapasitas dari Barang adalah 30 byte Diperkirakan dalam satu hari terdapat 3 SuratJalan baru Dalam satu tahun pertumbuhan tabel adalah 3*30*12*30 = 32400 byte
Tabel 4.38 Tabel Divisi Field
Type
Ukuran
KdDivisi
Char (5)
5
164 NamaDivisi
Char (30)
30
Kapasitas dari Barang adalah 35 byte Diperkirakan dalam tiga bulan terdapat 1 Divisi Dalam satu tahun pertumbuhan tabel adalah 3*4*35 = 420 byte
Tabel 4.39 Perkiraan Kapasitas Penyimpanan Nama Tabel
Kapasitas yang dibutuhkan
Barang
900
M erk
240
Jenis
240
Customer
118800
Supplier
1980
Pegawai
4080
Penerimaan_Barang
59400
Penjualan
64800
Pemesanan_Barang
75600
Order
64800
Nota_Tagihan
18000
Surat_Jalan_Order
32400
Surat_Jalan_Customer
32400
Divisi
420
Total space yang dibutuhkan dalam satu tahun adalah 474060 byte = 474,1 KB Total space yang dibutuhkan dalam 5 tahun adalah 5*474,1 KB = 2370,5 kb = 2,37M B
165 4.1.3.8 Merancang Mekanisme Keamanan Tujuan dari langkah ini yaitu untuk merancang mekanisme keamanan pada sistem basis data seperti yang telah dispesifikasi oleh user.
Tabel 4.40 Tabel Mekanisme Keamanan Pengguna Objek Admin Gudang Keuangan Entitas
M arketing Umum
Header_Barang
√
√
√
√
Detail_Barang
√
√
√
√
M erk_Barang
√
√
√
√
√
Jenis_Barang
√
√
√
√
√
Pegawai
√
√
Divisi
√
√
Supplier
√
√
Customer
√
√
Header_Daftar_Pemesanan
√
√
√
Detail_Daftar_Pemesanan
√
√
√
Header_Order
√
√
√
Detail_Order
√
√
√
Header_Penerimaan_Barang
√
√
√
√
Detail_Penerimaan_Barang
√
√
√
√
Header_Penjualan
√
√
√
√
√
√
166
View
•
Detail_Penjualan
√
√
Header_Nota_Tagihan
√
√
Detail_Nota_Tagihan
√
√
Header_Surat_Jalan_Order
√
√
√
Detail_Surat_Jalan_Order
√
√
√
Header_Surat_Jalan_Customer
√
√
√
Detail_Surat_Jalan_Customer
√
√
√
Penerimaan_Barang
√
√
√
√
Order
√
√
√
Daftar_Pemesanan
√
√
√
Penjualan
√
√
√
Bagian Admin GRANT ALL ON Header_Barang TO Admin GRANT ALL ON Detail_Barang TO Admin GRANT ALL ON Jenis_Barang TO Admin GRANT ALL ON M erk_Barang TO Admin GRANT ALL ON Supplier TO Admin GRANT ALL ON Divisi TO Admin GRANT ALL ON Pegawai TO Admin GRANT ALL ON Customer TO Admin GRANT ALL ON Header_Daftar_Pemesanan TO Admin GRANT ALL ON Detail_Pemesanan TO Admin
√
√
√
167 GRANT ALL ON Header_Order TO Admin GRANT ALL ON Detail_Order TO Admin GRANT ALL ON Header_Penerimaan_Barang TO Admin GRANT ALL ON Detail_ Penerimaan_Barang TO Admin GRANT ALL ON Header_Penjualan TO Admin GRANT ALL ON Detail_Penjualan TO Admin GRANT ALL ON Header_Nota_Tagihan TO Admin GRANT ALL ON Detail_Nota_Tagihan TO Admin GRANT ALL ON Header_Surat_Jalan_Order TO Admin GRANT ALL ON Detail_Surat_Jalan_Order TO Admin GRANT ALL ON Header_Surat_Jalan_Customer TO Admin GRANT ALL ON Detail_Surat_Jalan_Customer TO Admin GRANT ALL ON View_Penerimaan_Barang TO Admin GRANT ALL ON View_Order TO Admin GRANT ALL ON View_Daftar_Pemesanan TO Admin GRANT ALL ON View_Penjualan TO Admin •
Bagian Gudang GRANT ALL ON Header_Barang TO Gudang GRANT ALL ON Detail_Barang TO Gudang GRANT ALL ON Jenis_Barang TO Gudang GRANT ALL ON M erk_Barang TO Gudang GRANT ALL ON Header_Daftar_Pemesanan TO Gudang GRANT ALL ON Detail_Pemesanan TO Gudang GRANT ALL ON Header_Order TO Gudang
168 GRANT ALL ON Detail_Order TO Gudang GRANT ALL ON Header_Penerimaan_Barang TO Gudang GRANT ALL ON Detail_ Penerimaan_Barang TO Gudang GRANT ALL ON Header_Penjualan TO Gudang GRANT ALL ON Detail_Penjualan TO Gudang GRANT ALL ON Header_Surat_Jalan_Order TO Gudang GRANT ALL ON Detail_Surat_Jalan_Order TO Gudang GRANT ALL ON View_Penerimaan_Barang TO Gudang GRANT ALL ON View_Order TO Gudang GRANT ALL ON View_Daftar_Pemesanan TO Gudang GRANT ALL ON View_Penjualan TO Gudang • Bagian Keuangan GRANT ALL ON Header_Barang TO Keuangan GRANT ALL ON Detail_Barang TO Keuangan GRANT ALL ON Jenis_Barang TO Keuangan GRANT ALL ON M erk_Barang TO Keuangan GRANT ALL ON Supplier TO Keuangan GRANT ALL ON Divisi TO Keuangan GRANT ALL ON Pegawai TO Keuangan GRANT ALL ON Customer TO Keuangan GRANT ALL ON Header_Daftar_Pemesanan TO Keuangan GRANT ALL ON Detail_Pemesanan TO Keuangan GRANT ALL ON Header_Order TO Keuangan GRANT ALL ON Detail_Order TO Keuangan
169 GRANT ALL ON Header_Penerimaan_Barang TO Keuangan GRANT ALL ON Detail_ Penerimaan_Barang TO Keuangan GRANT ALL ON Header_Penjualan TO Keuangan GRANT ALL ON Detail_Penjualan TO Keuangan GRANT ALL ON Header_Nota_Tagihan TO Keuangan GRANT ALL ON Detail_Nota_Tagihan TO Keuangan GRANT ALL ON Header_Surat_Jalan_Order TO Keuangan GRANT ALL ON Detail_Surat_Jalan_Order TO Keuangan GRANT ALL ON Header_Surat_Jalan_Customer TO Keuangan GRANT ALL ON Detail_Surat_Jalan_Customer TO Keuangan GRANT ALL ON View_Penerimaan_Barang TO Keuangan GRANT ALL ON View_Order TO Keuangan GRANT ALL ON View_Daftar_Pemesanan TO Keuangan GRANT ALL ON View_Penjualan TO Keuangan •
Bagian Marketing GRANT ALL ON Header_Barang TO M arketing GRANT ALL ON Detail_Barang TO M arketing GRANT ALL ON Jenis_Barang TO M arketing GRANT ALL ON M erk_Barang TO M arketing GRANT ALL ON Customer TO M arketing GRANT ALL ON Header_Penerimaan_Barang TO M arketing GRANT ALL ON Detail_ Penerimaan_Barang TO M arketing GRANT ALL ON Header_Penjualan TO M arketing GRANT ALL ON Detail_Penjualan TO M arketing
170 GRANT ALL ON Header_Surat_Jalan_Customer TO M arketing GRANT ALL ON Detail_Surat_Jalan_Customer TO M arketing GRANT ALL ON View_Penerimaan_Barang TO M arketing GRANT ALL ON View_Penjualan TO M arketing • Bagian Umum GRANT ALL ON Header_Barang TO M arketing GRANT ALL ON Detail_Barang TO M arketing GRANT ALL ON Jenis_Barang TO M arketing GRANT ALL ON M erk_Barang TO M arketing
171 4.2 Perancangan Aplikasi 4.2.1 S truktur Menu
Layar Login M enu
Barang
M erk
pegawai
Divisi
Customer
Supplier
Add
Add
Add
Add
Add
Add
View
View
View
View
View
View
Update/ delete
Update /delete
Update /delete
Update /delete
Update /delete
Update /delete
Penjualan
Nota Tagihan
Surat Jalan
Daftar Pemesanan
Order
Penerimaan Barang
Add
Add
Add
Add
Add
Add
View
View
View
View
View
View
Update/ delete
Update/ delete
Update/ delete
Update/ delete
Update/ delete
Update/ delete
Gambar 4.21 S truktur Menu
172
Layar Login M enu
Barang
Daftar Pemesanan
M erk
Daftar Pemesanan
pegawai
Divisi
Daftar Pemesanan
Customer
Daftar Pemesanan
Daftar Pemesanan
Gambar 4.22 S TD Menu Utama
4.2.2 S TD
M enu Pilih/klik Barang Pilih/klik Add Barang Pilih/klik Form Add Barang
Gambar 4.23 S TD Barang
Supplier
Daftar Pemesanan
173
M enu Pilih/klik M erk Pilih/klik Add M erk Pilih/klik Form Add M erk
Gambar 4.24 S TD Merk
M enu Pilih/klik pegawai Pilih/klik Add Pegawai Pilih/klik Form Add Pegawai
Gambar 4.25 S TD Pegawai
174
M enu Pilih/klik Divisi Pilih/klik Add Divisi Pilih/klik Form Add Divisi
Gambar 4.26 S TD Divisi
M enu Pilih/klik Customer Pilih/klik Add Customer Pilih/klik Form Add Customer
Gambar 4.27 S TD Customer
175
M enu Pilih/klik Supplier Pilih/klik Add Supplier Pilih/klik Form Add Supplier
Gambar 4.28 S TD S upplier
M enu Pilih/klik Daftar Pemesanan Pilih/klik Add Daftar Pemesanan Pilih/klik Form Add Daftar pemesanan
Gambar 4.29 S TD Daftar Pemesanan
176
M enu Pilih/klik Daftar Order Pilih/klik Add Order Pilih/klik Form Add Order
Gambar 4.30 S TD Order
M enu Pilih/klik Penjualan Pilih/klik Add Penjualan Pilih/klik Form Add Penjualan
Gambar 4.31 S TD Penjualan
177
4.2.3 Perancangan Layar Login :: M utiara Fibrindo
Username :
Password :
OK
Gambar 4.32 Rancangan Layar Login
178
M enu :: M utiara Fibrindo File Insert Transaction View Windows Penjualan f1 Order f2 Search Set Period Closing
Gambar 4.33 Rancangan Layar Menu
Add Customer :: M utiara Fibrindo Kode Customer Nama Customer Alamat
Telp
Add
Gambar 4.34 Rancangan Add Customer
Cancel
179
Add Divisi :: M utiara Fibrindo Kode Divisi : Nama Divisi : Add
Cancel
Gambar 4.35 Rancangan Add Divisi
Add Jenis Barang :: M utiara Fibrindo Kode Jenis : Jenis
: Add
Cancel
Gambar 4.36 Rancangan Add Jenis Barang
180 Add M erk :: M utiara Fibrindo Kode M erk : M erk
: Add
Cancel
Gambar 4.37 Rancangan Add Merk
Add Pegawai :: M utiara Fibrindo Kode Pegawai
:
Kode Divisi
:
Nama Pegawai
:
Alamat Pegawai
:
Telpon Pegawai
:
Add New Divisi
Add
Cancel
Gambar 4.38 Rancangan Add Pegawai
181
Add Supplier :: M utiara Fibrindo Kode Supplier
:
Nama Supplier
:
Alamat
:
Telp
:
Add
Cancel
Gambar 4.39 Rancangan Add S upplier
182
Closing This year last stock KdBarang
KdSupplier
KdJenisBarang
KdMerk
NamaBarang
HargaBarang
Ukuran
Qty
1 2 3 4 Stock Report This year Profit KdBarang
Qty
HargaJualBarang HargaBeliBarang Profit
Profit Report
Total Profit :
Cancel
Gambar 4.40 Rancangan Closing
183 Penjualan Tanggal
:
No Faktur
:
Pegawai Kode Pegawai
Barang Kode Barang
Nama Pegawai
NamaBarang Harga Quantity
Customer Kode Customer
Sub Total
Nama Customer
Profit
Add item This year Profit No KdBarang 1 2 3 4
Nama Barang
Harga Jual
Qty
Sub total
Total:
Delete Submit
Gambar 4.41 Rancangan Penjualan
Report
Cancel
184
Persediaan Tanggal
:
No Faktur
:
Pegawai Kode Pegawai
Order Kode Barang
Nama Pegawai
NamaBarang Harga Quantity
Supplier Kode Supplier
Sub Total
Nama Supplier
Profit
Add Item This year Profit No KdBarang 1 2 3 4
Nama Barang
Harga Jual
Delete
Qty
Sub total
Total: Submit
Gambar 4.42 Rancangan Persediaan
Report
Cancel
185 4.2.4 Rancangan Output
Laporan Order
MUTIARA FIBRINDO
Tanggal: To : NoFaktur:
Pegawai :
Report Penjualan Qty
Description
HargaJual
Sub Total
Total :
Gambar 4.43 Laporan Penjualan
MUTIARA FIBRINDO
Tanggal: To : NoFaktur:
Pegawai :
Purchasing Order Qty
Description
HargaJual
Gambar 4.44 Laporan Order
Sub Total
186
MUTIARA FIBRINDO Stock Report KdBarang KdSupplier KdJnsBarang KdM erkBarang Xxx xxxxx xx xxxxx Xxx xxxxx xx xxxxx Xxx xxxxx xx xxxxx Xxx xxxxx xx xxxxx Xxx xxxxx xx xxxxx
NamaBarang xxxxxxx xxxxxxx xxxxxxx xxxxxxx xxxxxxx
Ukuran xx xx xx xx xx
Gambar 4.45 Laporan S tock Barang
4.2.5 S pesifikasi Proses
Form S etWarning
Private Sub Combo1_Click() openCon openRs "select * from Header_Barang where KdBarang = '" & Left(Combo1.Text, 5) & "'" Text1.Text = rs(6) End Sub
Private Sub Command1_Click() openCon
Qty xx xx xx xx xx
187 openRs "update header_Barang set Warning = '" & Val(Text1.Text) & "' where KdBarang = '" & Left(Combo1.Text, 5) & "'" openRs "select * from Header_Barang where KdBarang = '" & Left(Combo1.Text, 5) & "'" MsgBox "Warning Qty for item " & rs(0) & " - " & rs(4) & "," & Chr(13) & "Has been updated to " & rs(6), vbInformation End Sub
Private Sub Form_Load() openCon openRs "select * from Header_Barang" For i = 1 To rs.RecordCount Combo1.AddItem rs(0) & " - " & rs(4) rs.M oveNext Next
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer) Select Case KeyAscii Case Is < 32 Case Asc("0") To Asc("9") Case Else KeyAscii = 0
188 Beep End Select End Sub Module1 Option Explicit
Public cn As New ADODB.Connection Public cm As New ADODB.Command Public rs As New ADODB.Recordset
Public Sub openCon() If cn.State Then cn.Close cn.Open "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=skripsi6jun08;Data Source=FATAL1TY" End Sub
Public Sub openRs(Query As String) If rs.State Then rs.Close rs.Open Query, cn, 1, 3 End Sub
Private Sub HighlightGridRow(grd As M SFlexGrid, iRow As Long) With grd
189 If .Rows > 1 Then .Row = iRow .Col = 1 .ColSel = .Cols - 1 .RowSel = iRow End If End With End Sub Public Sub LoadRecordsetIntoGrid(rs As Recordset, grd As M SFlexGrid, Optional AutosizeColumns As Boolean = True, Optional HighlightFirstRow As Boolean = True)
Dim x As Long Dim Count As Long
grd.Redraw = False grd.Clear
grd.Rows = 2 grd.FixedRows = 1 grd.Row = 0 grd.Cols = rs.Fields.Count + 1 For x = 0 To rs.Fields.Count - 1 grd.Col = x + 1
190 grd.Text = rs.Fields(x).Name grd.ColData(x + 1) = rs.Fields(x).Type Next
If rs.CursorLocation = adUseClient Then grd.Rows = rs.RecordCount + 1 For Count = 1 To rs.RecordCount
grd.TextM atrix(Count, 0) = Count For x = 0 To rs.Fields.Count - 1 grd.TextM atrix(Count, x + 1) = "" & CVar(rs.Fields(x).Value) Next rs.M oveNext Next ElseIf rs.CursorLocation = adUseServer Then Do While Not rs.EOF Count = Count + 1
If Count >= grd.Rows Then grd.Rows = grd.Rows + 100 End If
grd.TextM atrix(Count, 0) = Count For x = 0 To rs.Fields.Count - 1
191 grd.TextM atrix(Count, x + 1) = "" & CVar(rs.Fields(x).Value) Next
rs.M oveNext Loop grd.Rows = Count + 1 End If
If AutosizeColumns Then SetGridColumnWidth grd
If HighlightFirstRow Then If grd.Rows > 1 Then HighlightGridRow grd, 1 End If
grd.Redraw = True End Sub Public Sub LoadRecordsetIntoGridNoCr(rs As Recordset, grd As M SFlexGrid, Optional AutosizeColumns As Boolean = True, Optional HighlightFirstRow As Boolean = True)
Dim x As Long Dim Count As Long
grd.Redraw = False
192 grd.Clear
grd.Rows = 2 grd.FixedRows = 1 grd.Row = 0 grd.Cols = rs.Fields.Count + 1 For x = 0 To rs.Fields.Count - 1 grd.Col = x + 1 grd.Text = rs.Fields(x).Name grd.ColData(x + 1) = rs.Fields(x).Type Next
If rs.CursorLocation = adUseClient Then If rs.RecordCount > 0 Then grd.Rows = rs.RecordCount + 1 grd.Row = 1 grd.Col = 1
grd.ColSel = rs.Fields.Count grd.RowSel = rs.RecordCount
grd.Clip = rs.GetString(, , Chr$(9), Chr$(13))
grd.RowSel = 0
193 grd.ColSel = 0 grd.Row = 1 grd.Col = 1
For x = 1 To grd.Rows - 1 grd.TextM atrix(x, 0) = x Next
End If ElseIf rs.CursorLocation = adUseServer Then Do While Not rs.EOF Count = Count + 1
If Count >= grd.Rows Then grd.Rows = grd.Rows + 300 End If
grd.TextM atrix(Count, 0) = Count For x = 0 To rs.Fields.Count - 1 grd.TextM atrix(Count, x + 1) = "" & CVar(rs.Fields(x).Value) Next
rs.M oveNext Loop
194 grd.Rows = Count + 1 End If
If AutosizeColumns Then SetGridColumnWidth grd
If HighlightFirstRow Then If grd.Rows > 1 Then HighlightGridRow grd, 1 End If
grd.Redraw = True End Sub Private Sub SetGridColumnWidth(grd As M SFlexGrid)
Dim InnerLoopCount As Long Dim OuterLoopCount As Long Dim lngLongestLen As Long Dim sLongestString As String Dim lngColWidth As Long Dim szCellText As String
For OuterLoopCount = 0 To grd.Cols - 1 sLongestString = "" lngLongestLen = 0
195 For InnerLoopCount = 0 To grd.Rows - 1 szCellText = grd.TextM atrix(InnerLoopCount, OuterLoopCount)
If Len(szCellText) > lngLongestLen Then lngLongestLen = Len(szCellText) sLongestString = szCellText End If Next lngColWidth = grd.Parent.TextWidth(sLongestString) grd.ColWidth(OuterLoopCount) = lngColWidth + 200 Next End Sub
'untuk window menu
Sub ResetWindowList(f As Form, Operation As String) Dim Counter As Integer
Counter = FormM enu.mnuWindowList.lBound + 1
Do Until Counter > FormM enu.mnuWindowList.UBound If FormM enu.mnuWindowList(Counter).Caption = f.Caption Then Select Case Operation
196 Case "add" FormM enu.mnuWindowList(Counter).Checked = True Case "remove" FormM enu.mnuWindowList(Counter).Checked = False End Select Exit Do End If Counter = Counter + 1 Loop End Sub
Sub WindowListAddItem(f As Form) Dim NextWindow Slot As Integer
NextWindowSlot = FormM enu.mnuWindowList.UBound + 1
With FormM enu Load .mnuWindowList(NextWindowSlot) .mnuWindowList(NextWindow Slot).Visible = True .mnuWindowList(NextWindow Slot).Caption = f.Caption .mnuWindowSeparator.Visible = True End With
If FormM enu.mnuWindowList.Count >= 3 Then
197 FormM enu.mnuWindowArrange.Enabled = True FormM enu.mnuWindowCascade.Enabled = True FormM enu.mnuWindowTile.Enabled = True End If End Sub
Sub WindowListRemoveItem(f As Form) Dim Counter As Integer Dim LastWindowSlot As Integer
Counter = FormM enu.mnuWindowList.lBound + 1 LastWindowSlot = FormM enu.mnuWindowList.UBound
Do Until Counter > LastWindowSlot With FormM enu If .mnuWindowList(Counter).Caption = f.Caption Then Unload .mnuWindowList(Counter) Exit Do End If End With Counter = Counter + 1 Loop
If FormM enu.mnuWindowList.Count < 3 Then
198 FormM enu.mnuWindowArrange.Enabled = False FormM enu.mnuWindowCascade.Enabled = False FormM enu.mnuWindowTile.Enabled = False End If End Sub Form S plash Option Explicit
Private Const GWL_EXSTYLE = (-20) Private Const WS_EX_LAYERED = &H80000 Private Const LWA_ALPHA = &H2
Private Declare Function GetWindowLong Lib "user32" _ Alias "GetWindowLongA" (ByVal hWnd As Long, _ ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" _ Alias "SetWindowLongA" (ByVal hWnd As Long, _ ByVal nIndex As Long, ByVal dwNewLong As Long) _ As Long
Private Declare Function SetLayeredWindowAttributes Lib _ "user32" (ByVal hWnd As Long, ByVal crKey As Long, _ ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
199
Public Function TranslucentForm(frm As Form, TranslucenceLevel As Byte) As Boolean
SetWindowLong frm.hWnd, GWL_EX STYLE, WS_EX_LAYERED
SetLayeredWindowAttributes frm.hWnd, 0, TranslucenceLevel, LWA_ALPHA
TranslucentForm = Err.LastDllError = 0
End Function
Private Sub Form_Load() Timer2.Enabled = True TranslucentForm M e, 0 End Sub
Private Sub ImageBg_Click()
End Sub
200 Private Sub Timer1_Timer() Label2.Caption = Val(Label2.Caption) + 1 If Label2.Caption = 100 Then Timer1.Enabled = False FormLogin.Show Unload FormSplash End If End Sub
Private Sub Timer2_Timer() Dim a a=0 Do Until a = 255
TranslucentForm M e, Val(a) a = a + 0.5 Loop Timer2.Enabled = False Timer1.Enabled = True End Sub FormLogin Option Explicit
Private Const GWL_EXSTYLE = (-20)
201 Private Const WS_EX_LAYERED = &H80000 Private Const LWA_ALPHA = &H2
Private Declare Function GetWindowLong Lib "user32" _ Alias "GetWindowLongA" (ByVal hWnd As Long, _ ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" _ Alias "SetWindowLongA" (ByVal hWnd As Long, _ ByVal nIndex As Long, ByVal dwNewLong As Long) _ As Long
Private Declare Function SetLayeredWindowAttributes Lib _ "user32" (ByVal hWnd As Long, ByVal crKey As Long, _ ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
Public Function TranslucentForm(frm As Form, TranslucenceLevel As Byte) As Boolean
SetWindowLong frm.hWnd, GWL_EX STYLE, WS_EX_LAYERED
202 SetLayeredWindowAttributes frm.hWnd, 0, TranslucenceLevel, LWA_ALPHA
TranslucentForm = Err.LastDllError = 0
End Function
Private Sub Command1_Click() If Text1.Text = "admin" And Text2.Text = "12345" Then FormM enu.Show Unload FormLogin ElseIf Text1.Text = "" Then MsgBox "Please enter your Username", vbCritical, "Info" Text1.SetFocus ElseIf Text2.Text = "" Then MsgBox "Please enter your Password", vbCritical, "Info" Text2.SetFocus Else MsgBox "Your ID Is not exist or Your Password is wrong", vbCritical, "Info" Text1.Text = "" Text2.Text = "" Text1.SetFocus End If
203 End Sub
Private Sub Form_Load() Timer1.Enabled = True TranslucentForm M e, 0 End Sub
Private Sub Timer1_Timer() Dim a a=0 Do Until a = 255
TranslucentForm M e, Val(a) a = a + 0.5 Loop Timer1.Enabled = False End Sub FormMenu Sub SetM enuDefaults() Dim Counter As Integer
Counter = 0
204 mnuWindowCascade.Enabled = False mnuWindowTile.Enabled = False mnuWindowArrange.Enabled = False mnuWindowSeparator.Visible = False Do Until Counter = mnuWindowList.Count mnuWindowList(Counter).Visible = False Counter = Counter + 1 Loop End Sub
Private Sub M DIForm_Load() Call SetM enuDefaults End Sub
Private Sub mnuaddbarang_Click() FormAddBarang.Show End Sub
Private Sub mnubarang_Click() FormViewBarang.Show End Sub
Private Sub mnuclosing_Click()
205 Dim per As String per = GetSetting(App.EXEName, "Period", "M onth")
If per <> "December" Then MsgBox "Closing can only be done at the end of the year.", vbExclamation Else FormClosing.Show End If End Sub Private Sub mnucustomer_Click() FormAddCustomer.Show End Sub
Private Sub mnudaftar_Click() FormViewDaftarPemesanan.Show End Sub
Private Sub mnudivisi_Click() FormAddDivisi.Show End Sub
Private Sub mnuexit_Click() End
206 End Sub
Private Sub mnujenisbarang_Click() FormAddJenisBarang.Show End Sub
Private Sub mnumerkbarang_Click() FormAddM erk.Show End Sub
Private Sub mnunota_Click() FormViewNotaTagihan.Show End Sub
Private Sub mnuorder_Click() FormViewOrder.Show End Sub
Private Sub mnupegawai_Click() FormAddPegawai.Show End Sub
Private Sub mnupenjualan_Click() FormPenjualan.Show
207 End Sub
Private Sub mnuperiod_Click() FormPeriod.Show End Sub
Private Sub mnupersediaan_Click() FormPersediaan.Show End Sub
Private Sub mnusearchtrx_Click() FormSearchTRX.Show End Sub
Private Sub mnusjc_Click() FormView SJC.Show End Sub
Private Sub mnusjo_Click() FormView SJO.Show End Sub
Private Sub mnusupplier_Click() FormAddSupplier.Show
208 End Sub
Private Sub mnuWindowArrange_Click() FormM enu.Arrange vbArrangeIcons End Sub
Private Sub mnuWindowCascade_Click() FormM enu.Arrange vbCascade End Sub
Private Sub mnuWindowList_Click(index As Integer) Dim f As Form For Each f In Forms If mnuWindowList(index).Caption = f.Caption Then f.SetFocus End If Next f
End Sub
Private Sub mnuWindowTile_Click() FormM enu.Arrange vbTileHorizontal End Sub FormAddCustomer
209 Private Sub Command1_Click() Dim msg If Text1.Text = "" Then MsgBox "Please input Kode Customer", vbExclamation, "Information" Text1.SetFocus ElseIf Text2.Text = "" Then MsgBox "Please input Nama Customer", vbExclamation, "Information" Text2.SetFocus ElseIf Text3.Text = "" Then MsgBox "Please input Alamat Customer", vbExclamation, "Information" Text3.SetFocus ElseIf Text4.Text = "" Then MsgBox "Please input Telp Customer", vbExclamation, "Information" Text4.SetFocus ElseIf Text5.Text = "" Then MsgBox "Please input No Surat Jalan Customer", vbExclamation, "Information" Text5.SetFocus Else openCon openRs "select * from Surat_Jalan_Customer where No_Surat_Jalan_Customer = '" & Text5.Text & "'" If Not rs.EOF Then
210 openRs "INSERT INTO Customer VALUES ('" & Text1.Text & "','" & Text2.Text & "','" & Text3.Text & "','" & Text4.Text & "','" & Text5.Text & "')" MsgBox "New customer has been added.", vbInformation
openRs "SELECT * FROM BARANG" rs.M oveLast lent = "1" & Right(rs(0), 4) Text1.Text = "C" & Right((Val(lent) + 1), 4) FormM enu.StatusBar1.SimpleText = "Add Customer"
Text2.Text = "" Text3.Text = "" Text4.Text = "" Text5.Text = "" Text2.SetFocus
Else MsgBox "No Surat Jalan Customer can not be found, would you like to add new?", vbExclamation + vbYesNo If msg = vbYes Then FormAddSuratJalanCustomer.Show ElseIf ms g = vbNo Then Text5.SetFocus
211 End If End If End If End Sub
Private Sub Command2_Click() Unload M e End Sub
Private Sub Command3_Click() FormAddSuratJalanCustomer.Show End Sub
Private Sub Form_GotFocus() FormM enu.StatusBar1.SimpleText = "Add Customer" End Sub
Private Sub Form_Load() Dim lent
openCon openRs "SELECT * FROM Customer" rs.M oveLast lent = "1" & Right(rs(0), 4)
212 Text1.Text = "J" & Right((Val(lent) + 1), 4) FormM enu.StatusBar1.SimpleText = "Add Customer"
End Sub
Private Sub Form_LostFocus() FormM enu.StatusBar1.SimpleText = "" End Sub
Private Sub Text3_GotFocus() Command1.Default = False End Sub
Private Sub Text3_LostFocus() Command1.Default = True End Sub
Private Sub Text4_KeyPress(KeyAscii As Integer)
Select Case KeyAscii Case Is < 32 Case Asc("0") To Asc("9") Case Else KeyAscii = 0
213 Beep End Select
End Sub
Private Sub Text5_Change() If Text1.Text = "" Then Select Case KeyAscii Case Is < 32 Case Asc("s") Case Asc("S") Case Else KeyAscii = 0 Beep End Select ElseIf Text1.Text = "s" Or Text1.Text = "S" Then Select Case KeyAscii Case Is < 32 Case Asc("c") Case Asc("C") Case Else KeyAscii = 0 Beep End Select
214 Else Select Case KeyAscii Case Is < 32 Case Asc("0") To Asc("9") Case Else KeyAscii = 0 Beep End Select End If End Sub
FormAddDivisi Private Sub Command1_Click() If Text1.Text = "" Then MsgBox "Please input Kode Divisi", vbExclamation, "Information" Text1.SetFocus ElseIf Text2.Text = "" Then MsgBox "Please input Nama Divisi", vbExclamation, "Information" Text2.SetFocus Else openCon openRs "INSERT INTO DIVISI VALUES ('" & Text1.Text & "','" & Text2.Text & "')" MsgBox "Divisi Added", vbInformation, "Divisi"
215
If Flag = 1 Then openRs "select * from Divisi" FormAddPegawai.Combo1.Clear For i = 1 To rs.RecordCount FormAddPegawai.Combo1.AddItem rs(0) & " - " & rs(1) rs.M oveNext Next FormAddPegawai.Combo1.ListIndex = 0 End If
openRs "SELECT * FROM Divisi" rs.M oveLast lent = "1" & Right(rs(0), 4) Text1.Text = "D" & Right((Val(lent) + 1), 4)
Text2.Text = "" Text2.SetFocus End If End Sub
Private Sub Command2_Click() Unload M e End Sub
216
Private Sub Form_Load() Dim lent
openCon openRs "SELECT * FROM Divisi" rs.M oveLast lent = "1" & Right(rs(0), 4) Text1.Text = "D" & Right((Val(lent) + 1), 4)
End Sub
FormAddJenisBarang Private Sub Command1_Click() If Text1.Text = "" Then MsgBox "Please input Kode Jenis Barang", vbExclamation, "Information" Text1.SetFocus ElseIf Text2.Text = "" Then MsgBox "Please input Jenis Barang ", vbExclamation, "Information" Text2.SetFocus Else openCon
217 openRs "INSERT INTO JENIS_BARANG VALUES ('" & Text1.Text & "','" & Text2.Text & "')" MsgBox "Jenis Barang Added", vbInformation, "Jenis Barang"
openRs "SELECT * FROM Jenis_Barang" rs.M oveLast lent = "1" & Right(rs(0), 4) Text1.Text = "J" & Right((Val(lent) + 1), 4)
Text2.Text = "" Text2.SetFocus End If End Sub
Private Sub Command2_Click() Unload M e End Sub
Private Sub Form_Load() Dim lent
openCon openRs "SELECT * FROM Jenis_Barang" rs.M oveLast
218 lent = "1" & Right(rs(0), 4) Text1.Text = "J" & Right((Val(lent) + 1), 4)
End Sub
FormAddMerk Private Sub Command1_Click() If Text1.Text = "" Then MsgBox "Please input Kode M erk", vbExclamation, "Information" Text1.SetFocus ElseIf Text2.Text = "" Then MsgBox "Please input M erk", vbExclamation, "Information" Text2.SetFocus Else openCon openRs "INSERT INTO M ERK_BARANG VALUES ('" & Text1.Text & "','" & Text2.Text & "')" MsgBox "M erk Added", vbInformation, "M erk"
openRs "SELECT * FROM M ERK_BARANG" rs.M oveLast lent = "1" & Right(rs(0), 4) Text1.Text = "M " & Right((Val(lent) + 1), 4)
219 Text2.Text = "" Text2.SetFocus End If End Sub
Private Sub Command2_Click() Unload M e End Sub
Private Sub Form_Load() Dim lent
openCon openRs "SELECT * FROM M ERK_BARANG" rs.M oveLast lent = "1" & Right(rs(0), 4) Text1.Text = "M " & Right((Val(lent) + 1), 4)
End Sub FormAddPegawai Private Sub Command1_Click() If Text1.Text = "" Then MsgBox "Please input Kode Pegawai", vbExclamation, "Information" Text1.SetFocus
220 ElseIf Combo1.Text = "" Then MsgBox "Please input Kode Divisi", vbExclamation, "Information" Text2.SetFocus ElseIf Text3.Text = "" Then MsgBox "Please input Nama Pegawai", vbExclamation, "Information" Text3.SetFocus ElseIf Text4.Text = "" Then MsgBox "Please input Alamat Pegawai", vbExclamation, "Information" Text4.SetFocus ElseIf Text5.Text = "" Then MsgBox "Please input Telp Pegawai", vbExclamation, "Information" Text5.SetFocus Else openCon openRs "INSERT INTO PEGAWAI VALUES ('" & Text1.Text & "','" & Left(Combo1.Text, 5) & "','" & Text3.Text & "','" & Text4.Text & "','" & Text5.Text & "')" MsgBox "Pegawai Added", vbInformation, "Pegawai"
openRs "SELECT * FROM Pegawai" rs.M oveLast lent = "1" & Right(rs(0), 4) Text1.Text = "P" & Right((Val(lent) + 1), 4)
221 Text3.Text = "" Text4.Text = "" Text5.Text = "" Combo1.SetFocus
End If End Sub
Private Sub Command2_Click() Unload M e End Sub
Private Sub Command3_Click() FormAddDivisi.Show FormAddDivisi.Flag = 1 End Sub
Private Sub Form_Load() Dim lent
openCon openRs "select * from Divisi" For i = 1 To rs.RecordCount
222 Combo1.AddItem rs(0) & " - " & rs(1) rs.M oveNext Next Combo1.ListIndex = 0
openRs "SELECT * FROM Pegawai" rs.M oveLast lent = "1" & Right(rs(0), 4) Text1.Text = "P" & Right((Val(lent) + 1), 4)
End Sub
Private Sub Form_Unload(Cancel As Integer) FormAddDivisi.Flag = 0 End Sub
Private Sub Text5_KeyPress(KeyAscii As Integer) Select Case KeyAscii Case Is < 32 Case Asc("0") To Asc("9") Case Else KeyAscii = 0 Beep
223 End Select End Sub
FormAddS upplier Private Sub Command1_Click() If Text1.Text = "" Then MsgBox "Please input Kode Supplier", vbExclamation, "Information" Text1.SetFocus ElseIf Text2.Text = "" Then MsgBox "Please input Nama Supplier", vbExclamation, "Information" Text2.SetFocus ElseIf Text3.Text = "" Then MsgBox "Please input Alamat Supplier", vbExclamation, "Information" Text3.SetFocus ElseIf Text4.Text = "" Then MsgBox "Please input Telp Supplier", vbExclamation, "Information" Text4.SetFocus Else openCon openRs "INSERT INTO SUPPLIER VALUES ('" & Text1.Text & "','" & Text2.Text & "','" & Text3.Text & "','" & Text4.Text & "',)" MsgBox "Supplier Added", vbInformation, "Supplier"
openRs "SELECT * FROM Supplier"
224 rs.M oveLast lent = "1" & Right(rs(0), 4) Text1.Text = "S" & Right((Val(lent) + 1), 4)
Text2.Text = "" Text3.Text = "" Text4.Text = "" Text2.SetFocus End If End Sub
Private Sub Command2_Click() Unload M e End Sub
Private Sub Form_Load() Dim lent openCon openRs "SELECT * FROM Supplier" rs.M oveLast lent = "1" & Right(rs(0), 4) Text1.Text = "S" & Right((Val(lent) + 1), 4) End Sub
225 Private Sub Text4_KeyPress(KeyAscii As Integer) Select Case KeyAscii Case Is < 32 Case Asc("0") To Asc("9") Case Else KeyAscii = 0 Beep End Select End Sub FormCek Private Sub Command1_Click() FormPersediaan.Show Unload M e End Sub
Private Sub Command2_Click() Unload M e End Sub FormClosing Private Sub Command1_Click() Unload M e End Sub
Private Sub Command2_Click()
226 CrystalReport1.ReportFileName = App.Path & "\ReportStok.rpt" CrystalReport1.Action = 1 End Sub
Private Sub Command3_Click() CrystalReport1.ReportFileName = App.Path & "\ReportProfit.rpt" CrystalReport1.Action = 1 End Sub
Private Sub Form_Load() Dim j As Integer Dim arr(1000) Dim i As Integer Dim k As Integer Dim hargabeli, hargajual, profit, totalprofit As Double Dim kode As String
openCon openRs "SELECT * FROM Header_Barang INNER JOIN Detail_Barang ON Header_Barang.KdBarang = Detail_Barang.KdBarang" LoadRecordsetIntoGrid rs, M SSubData, 1, 1
openRs "SELECT * FROM Detail_Penjualan" For i = 0 To rs.RecordCount - 1
227 arr(i) = rs(1) rs.M oveNext Next
M SSubData2.Cols = 5 M SSubData2.Rows = 1 M SSubData2.TextM atrix(0, 0) = "Kode Barang" M SSubData2.TextM atrix(0, 1) = "Qty" M SSubData2.TextM atrix(0, 2) = "Harga Jual Barang" M SSubData2.TextM atrix(0, 3) = "Harga Beli Barang" M SSubData2.TextM atrix(0, 4) = "Profit"
openCon openRs "SELECT * FROM Detail_Penjualan" For j = 1 To rs.RecordCount - 1 openCon openRs "SELECT * FROM Detail_Penjualan" rs.M oveFirst rs.M ove j M SSubData2.Rows = M SSubData2.Rows + 1
M SSubData2.TextM atrix(M SSubData2.Rows - 1, 0) = rs(1) kode = rs(1) M SSubData2.TextM atrix(M SSubData2.Rows - 1, 1) = rs(3)
228 M SSubData2.TextM atrix(M SSubData2.Rows - 1, 2) = rs(4) hargajual = rs(4) openCon openRs "SELECT * FROM Header_Barang WHERE KdBarang = '" & kode & "'" hargabeli = rs(5) profit = Val(hargajual) - Val(hargabeli) M SSubData2.TextM atrix(M SSubData2.Rows - 1, 3) = hargabeli M SSubData2.TextM atrix(M SSubData2.Rows - 1, 4) = profit totalprofit = totalprofit + profit cn.Close
Next j SetGridColumnWidth M SSubData2 textotal.Text = Format$(totalprofit, "Rp ###,###")
End Sub
Private Sub SetGridColumnWidth(grd As M SFlexGrid)
Dim InnerLoopCount As Long Dim OuterLoopCount As Long
229 Dim lngLongestLen As Long Dim sLongestString As String Dim lngColWidth As Long Dim szCellText As String
For OuterLoopCount = 0 To grd.Cols - 1 sLongestString = "" lngLongestLen = 0
For InnerLoopCount = 0 To grd.Rows - 1 szCellText = grd.TextM atrix(InnerLoopCount, OuterLoopCount)
If Len(szCellText) > lngLongestLen Then lngLongestLen = Len(szCellText) sLongestString = szCellText End If Next lngColWidth = grd.Parent.TextWidth(sLongestString) grd.ColWidth(OuterLoopCount) = lngColWidth + 300 Next End Sub FormAddBarang Private Sub Command1_Click() Dim harga As Currency
230 If TextKodeBarang.Text = "" Then MsgBox "Please input Kode Barang", vbExclamation TextKodeBarang.SetFocus ElseIf ComboKodeSupplier.Text = "" Then MsgBox "Please input Supplier", vbExclamation ComboKodeSupplier.SetFocus ElseIf ComboKodeJenis.Text = "" Then MsgBox "Please input Supplier", vbExclamation ComboKodeJenis.SetFocus ElseIf ComboKodeM erk.Text = "" Then MsgBox "Please input M erk", vbExclamation ComboKodeM erk.SetFocus ElseIf TextNamaBarang.Text = "" Then MsgBox "Please input Nama Barang", vbExclamation TextNamaBarang.SetFocus ElseIf TextHarga.Text = "" Then MsgBox "Please input Harga", vbExclamation TextHarga.SetFocus ElseIf ComboUkuran.Text = "" Then MsgBox "Please input Ukuran", vbExclamation ComboUkuran.SetFocus ElseIf TextQty.Text = "" Then MsgBox "Please input Qty", vbExclamation TextQty.SetFocus
231 Else openCon harga = CCur(TextHarga.Text) openRs "INSERT INTO Header_Barang VALUES ('" & TextKodeBarang.Text & "','" & Left(ComboKodeSupplier, 5) & "','" & Left(ComboKodeJenis.Text, 5) & "','" & Left(ComboKodeM erk.Text, 5) & "','" & TextNamaBarang.Text & "'," & harga & ")" openRs "INSERT INTO Detail_Barang VALUES ('" & TextKodeBarang.Text & "','" & ComboUkuran.Text & "', '" & TextQty.Text & "')" MsgBox "Barang Added", vbInformation
openRs "SELECT * FROM Header_Barang" rs.M oveLast lent = "1" & Right(rs(0), 4) TextKodeBarang.Text = "B" & Right((Val(lent) + 1), 4)
TextNamaBarang.Text = "" TextHarga.Text = "" TextQty.Text = "" TextNamaBarang.SetFocus ComboKodeSupplier.ListIndex = 0 ComboKodeJenis.ListIndex = 0 ComboKodeM erk.ListIndex = 0
232 ComboUkuran.ListIndex = 0 End If End Sub
Private Sub Command2_Click() Unload M e End Sub
Private Sub Command3_Click() FormAddM erk.Show End Sub
Private Sub Command4_Click() FormAddJenisBarang.Show End Sub
Private Sub Command5_Click() FormAddSupplier.Show End Sub
Private Sub Form_Load() Dim lent
openCon
233 openRs "SELECT * FROM Header_Barang" rs.M oveLast lent = "1" & Right(rs(0), 4) TextKodeBarang.Text = "B" & Right((Val(lent) + 1), 4)
openRs "select * from M ERK_BARANG" For i = 1 To rs.RecordCount ComboKodeM erk.AddItem rs(0) & " - " & rs(1) rs.M oveNext Next ComboKodeM erk.ListIndex = 0
openRs "select * from JENIS_BARANG" For i = 1 To rs.RecordCount ComboKodeJenis.AddItem rs(0) & " - " & rs(1) rs.M oveNext Next ComboKodeJenis.ListIndex = 0
openRs "select * from Supplier" For i = 1 To rs.RecordCount ComboKodeSupplier.AddItem rs(0) & " - " & rs(1) rs.M oveNext Next
234 ComboKodeSupplier.ListIndex = 0
ComboUkuran.ListIndex = 0 End Sub
Private Sub TextHarga_KeyPress(KeyAscii As Integer) Select Case KeyAscii Case Is < 32 Case Asc("0") To Asc("9") Case Else KeyAscii = 0 Beep End Select End Sub
Private Sub TextQty_KeyPress(KeyAscii As Integer) Select Case KeyAscii Case Is < 32 Case Asc("0") To Asc("9") Case Else KeyAscii = 0 Beep End Select End Sub
235 FormPenjualan Option Explicit
Dim total As Variant Dim harga Dim subtotal
Private Sub ComboKodeBarang_Click() openCon openRs "SELECT * FROM Header_Barang WHERE KdBarang = '" & Left(ComboKodeBarang.Text, 5) & "'" If ComboKodeBarang.Text = "" Then TextNamaBarang.Text = "" TextHarga.Text = 0 ElseIf rs.EOF Then TextNamaBarang.Text = "Tidak Ditemukan" TextHarga.Text = 0 Else TextNamaBarang.Text = rs(4) harga = rs(5) TextHarga.Text = Format$(rs(5), "Rp ###,###") End If End Sub
236
Private Sub ComboKodeBarang_KeyPress(KeyAscii As Integer) If ComboKodeBarang.Text = "" Then Select Case KeyAscii Case Is < 32 Case Asc("b") Case Asc("B") Case Else KeyAscii = 0 Beep End Select Else Select Case KeyAscii Case Is < 32 Case Asc("0") To Asc("9") Case Else KeyAscii = 0 Beep End Select End If
If KeyAscii = 13 Then openCon
237 openRs "SELECT * FROM Header_Barang WHERE KdBarang = '" & Left(ComboKodeBarang.Text, 5) & "'" If Not rs.EOF Then TextNamaBarang.Text = rs(4) harga = rs(5) TextHarga.Text = Format$(harga, "Rp ###,###") Else TextNamaBarang.Text = "Tidak Ditemukan" End If End If End Sub
Private Sub ComboKodeCustomer_Click() openCon openRs "SELECT * FROM Customer WHERE KdCustomer = '" & Left(ComboKodeCustomer.Text, 5) & "'" If ComboKodeCustomer.Text = "" Then TextNamaCustomer.Text = "" ElseIf rs.EOF Then TextNamaCustomer.Text = "Tidak Ditemukan" Else TextNamaCustomer.Text = rs(1) End If End Sub
238
Private Sub ComboKodeCustomer_KeyPress(KeyAscii As Integer) If ComboKodeCustomer.Text = "" Then Select Case KeyAscii Case Is < 32 Case Asc("c") Case Asc("C") Case Else KeyAscii = 0 Beep End Select Else Select Case KeyAscii Case Is < 32 Case Asc("0") To Asc("9") Case Else KeyAscii = 0 Beep End Select End If
If KeyAscii = 13 Then openCon
239 openRs "SELECT * FROM Customer WHERE KdCustomer = '" & Left(ComboKodeCustomer.Text, 5) & "'" If Not rs.EOF Then TextNamaCustomer.Text = rs(1) Else TextNamaCustomer.Text = "Tidak Ditemukan" End If End If End Sub
Private Sub ComboKodePegawai_Click() openCon openRs "SELECT * FROM PEGAWAI WHERE KdPegawai = '" & Left(ComboKodePegawai.Text, 5) & "'" If ComboKodePegawai.Text = "" Then TextNamaPegawai.Text = "" ElseIf rs.EOF Then TextNamaPegawai.Text = "Tidak Ditemukan" Else TextNamaPegawai.Text = rs(2) End If End Sub
Private Sub Command1_Click()
240 Dim msg, jumlahawal, jumlahakhir, i, ukuran Dim harga As Double Dim qty As Integer Dim sub_total As Double Dim kd_barang As String Dim nama_barang As String Dim per As String
per = GetSetting(App.EXEName, "Period", "M onth")
If M onthName(M onth(Format(TextTanggal.Text, "mm/dd/yyyy"))) <> per Then MsgBox "You can't do any Transaction at this date." & Chr(13) & _ "Because the period is not started or over" & Chr(13) & _ "Current period is : " & per, vbExclamation ElseIf ComboKodePegawai.Text = "" Then MsgBox "Please insert Kode Pegawai", vbExclamation ElseIf ComboKodeCustomer.Text = "" Then MsgBox "Please insert Kode Customer", vbExclamation Else msg = M sgBox("Are you sure want to sell this item(s)?", vbQuestion + vbYesNo) If msg = vbYes Then If M SSubData.Rows = 1 Then
241 MsgBox "Please insert item", vbExclamation ElseIf M SSubData.Rows = 2 And M SSubData.TextM atrix(1, 1) = "" Then MsgBox "Please insert item", vbExclamation Else openCon openRs "INSERT INTO Header_Penjualan VALUES ('" & TextNoFaktur.Text & "', '" & Left(ComboKodePegawai.Text, 5) & "', '" & Left(ComboKodeCustomer.Text, 5) & "', '" & Format$(TextTanggal.Text, "dd-mmm-yyyy") & "')" For i = 1 To (M SSubData.Rows - 1) kd_barang = M SSubData.TextM atrix(i, 1) harga = CCur(M SSubData.TextM atrix(i, 3)) qty = Val(M SSubData.TextM atrix(i, 4)) sub_total = M SSubData.TextM atrix(i, 5)
openRs "SELECT * FROM Detail_Barang WHERE KdBarang = '" & kd_barang & "'" ukuran = rs(1) jumlahawal = rs(2) If Val(M SSubData.TextM atrix(i, 4)) > rs(2) Then MsgBox "There is not enough stock for item " & M SSubData.TextM atrix(i, 1) & Chr(13) & " in item list #" & M SSubData.TextM atrix(i, 0), vbCritical
242 Exit Sub ElseIf Val(rs(2)) = 0 Then MsgBox "There is no stock at all for item " & M SSubData.TextM atrix(i, 1) & Chr(13) & " in item list #" & M SSubData.TextM atrix(i, 0), vbCritical Exit Sub Else openRs "INSERT INTO Detail_Penjualan values ('" & TextNoFaktur.Text & "','" & kd_barang & "','" & ukuran & "' , " & qty & "," & harga & ")" openRs "SELECT * FROM Detail_Barang WHERE KdBarang = '" & kd_barang & "'" jumlahawal = rs(2) jumlahakhir = Val(rs(2)) - qty LabelAkhir.Caption = jumlahakhir openRs "Update Detail_Barang Set Qty = '" & LabelAkhir.Caption & "' WHERE KdBarang = '" & kd_barang & "'"
Command2.Enabled = True End If Next i MsgBox "Storage has been reduced", vbInformation FormCek.Show FormCek.Hide
243 FormCek.M SSubData.Clear openCon openRs "SELECT * FROM Detail_Barang"
FormCek.M SSubData.Cols = 4 For i = 1 To rs.RecordCount If rs(2) < 10 Then FormCek.M SSubData.TextM atrix(0, 0) = "KdBarang" FormCek.M SSubData.TextM atrix(0, 1) = "Ukuran" FormCek.M SSubData.TextM atrix(0, 2) = "Qty" FormCek.M SSubData.TextM atrix(0, 3) = "Status"
FormCek.M SSubData.Rows = FormCek.M SSubData.Rows + 1
FormCek.M SSubData.TextM atrix(FormCek.M SSubData.Rows - 1, 0) = rs(0)
FormCek.M SSubData.TextM atrix(FormCek.M SSubData.Rows - 1, 1) = rs(1)
FormCek.M SSubData.TextM atrix(FormCek.M SSubData.Rows - 1, 2) = rs(2)
244 If rs(2) = 0 Then
FormCek.M SSubData.TextM atrix(FormCek.M SSubData.Rows - 1, 3) = "EM PTY" Else
FormCek.M SSubData.TextM atrix(FormCek.M SSubData.Rows - 1, 3) = "Please Order" End If SetGridColumnWidth FormCek.M SSubData Label5.Visible = True End If rs.M oveNext Next
End If End If End If End Sub
Private Sub Command2_Click() CrystalReport1.ReportFileName = App.Path & "\ReportPenjualan.rpt"
245 CrystalReport1.SelectionFormula = "{Detail_Penjualan.NoFakPenjualan} = '" & Left(TextNoFaktur.Text, 5) & "'" CrystalReport1.Action = 1 End Sub
Private Sub Command3_Click() Dim i As Integer
harga = harga * ((100 + Val(TextProf.Text)) / 100) If ComboKodeBarang.Text = "" Then MsgBox "Please insert Kode Barang", vbExclamation ElseIf TextQty.Text = "" Or (Val(TextQty.Text) * 1 = 0) Then MsgBox "Please insert quantity", vbExclamation Else Dim totalformatted
For i = 1 To (M SSubData.Rows - 1) If Left(ComboKodeBarang.Text, 5) = M SSubData.TextM atrix(i, 1) Then MsgBox "You had ordered this item(s) a moment ago." & Chr(13) & Chr(13) & _ "Please order another item.", vbExclamation TextQty.Text = 0 TextSubTotal.Text = 0
246 TextHarga.Text = 0 ComboKodeBarang.Text = "" TextNamaBarang.Text = "" ComboKodeBarang.SetFocus Exit Sub End If Next i
M SSubData.Cols = 6 M SSubData.Rows = M SSubData.Rows + 1
M SSubData.TextM atrix(M SSubData.Rows - 1, 0) = M SSubData.Rows - 1 M SSubData.TextM atrix(M SSubData.Rows - 1, 1) = Left(ComboKodeBarang.Text, 5) M SSubData.TextM atrix(M SSubData.Rows - 1, 2) = TextNamaBarang.Text M SSubData.TextM atrix(M SSubData.Rows - 1, 3) = harga M SSubData.TextM atrix(M SSubData.Rows - 1, 4) = TextQty.Text M SSubData.TextM atrix(M SSubData.Rows - 1, 5) = subtotal
total = total + subtotal totalformatted = Format$(total, "Rp ###,###") TextTotal.Text = totalformatted
247
SetGridColumnWidth M SSubData
TextQty.Text = 0 TextSubTotal.Text = 0 TextHarga.Text = 0 ComboKodeBarang.Text = "" TextNamaBarang.Text = "" ComboKodeBarang.SetFocus
End If
'warna flexgrid WarnaFS M SSubData, RGB(244, 244, 244), RGB(255, 255, 255) End Sub
Private Sub SetGridColumnWidth(grd As M SFlexGrid)
Dim InnerLoopCount As Long Dim OuterLoopCount As Long Dim lngLongestLen As Long Dim sLongestString As String Dim lngColWidth As Long Dim szCellText As String
248
For OuterLoopCount = 0 To grd.Cols - 1 sLongestString = "" lngLongestLen = 0
For InnerLoopCount = 0 To grd.Rows - 1 szCellText = grd.TextM atrix(InnerLoopCount, OuterLoopCount)
If Len(szCellText) > lngLongestLen Then lngLongestLen = Len(szCellText) sLongestString = szCellText End If Next lngColWidth = grd.Parent.TextWidth(sLongestString) grd.ColWidth(OuterLoopCount) = lngColWidth + 300 Next End Sub
Private Sub Command4_Click() If M SSubData.Rows > 2 Then M SSubData.RemoveItem (M SSubData.Row) Else M SSubData.Clear M SSubData.Rows = 1
249 M SSubData.TextM atrix(0, 0) = "No" M SSubData.TextM atrix(0, 1) = "Kode Barang" M SSubData.TextM atrix(0, 2) = "Nama Barang" M SSubData.TextM atrix(0, 3) = "Harga Jual" M SSubData.TextM atrix(0, 4) = "Quantity" M SSubData.TextM atrix(0, 5) = "Sub Total" End If End Sub
Private Sub Command5_Click() Unload M e End Sub
Private Sub Form_Load() Dim lent As String Dim i As Integer total = 0
TextTanggal.Text = Format(Date, "dd-mmm-yyyy") TextQty.Text = 0 TextSubTotal.Text = 0 TextHarga.Text = 0 TextNamaPegawai.Text = "" TextNamaCustomer.Text = ""
250 TextNamaBarang.Text = "" TextProf.Text = 0
'isi no faktur openCon openRs "SELECT * FROM Header_Penjualan" If Not rs.EOF Then rs.M oveLast lent = "1" & Right(rs(0), 4) TextNoFaktur.Text = "F" & Right((Val(lent) + 1), 4) ElseIf rs.EOF Then TextNoFaktur.Text = "F0001" End If
'isi flexgrid M SSubData.Cols = 6 M SSubData.Rows = 1 M SSubData.TextM atrix(0, 0) = "No" M SSubData.TextM atrix(0, 1) = "Kode Barang" M SSubData.TextM atrix(0, 2) = "Nama Barang" M SSubData.TextM atrix(0, 3) = "Harga Jual" M SSubData.TextM atrix(0, 4) = "Quantity" M SSubData.TextM atrix(0, 5) = "Sub Total"
251 SetGridColumnWidth M SSubData
'combokodepegawai openRs "SELECT * FROM pegawai WHERE KdDivisi = 'D0003'" For i = 1 To rs.RecordCount ComboKodePegawai.AddItem rs(0) & " - " & rs(2) rs.M oveNext Next i
'combokodecustomer openRs "SELECT * FROM Customer" For i = 1 To rs.RecordCount ComboKodeCustomer.AddItem rs(0) & " - " & rs(1) rs.M oveNext Next i
'combokodebarang openRs "SELECT * FROM Header_Barang" For i = 1 To rs.RecordCount ComboKodeBarang.AddItem rs(0) & " - " & rs(4) rs.M oveNext Next i
'cek persediaan
252 FormCek.Show FormCek.Hide FormCek.M SSubData.Clear
openCon openRs "SELECT * FROM Detail_Barang" FormCek.M SSubData.Cols = 4
For i = 1 To rs.RecordCount If rs(2) < 10 Then FormCek.M SSubData.TextM atrix(0, 0) = "KdBarang" FormCek.M SSubData.TextM atrix(0, 1) = "Ukuran" FormCek.M SSubData.TextM atrix(0, 2) = "Qty" FormCek.M SSubData.TextM atrix(0, 3) = "Status"
FormCek.M SSubData.Rows = FormCek.M SSubData.Rows + 1 FormCek.M SSubData.TextM atrix(FormCek.M SSubData.Rows 1, 0) = rs(0) FormCek.M SSubData.TextM atrix(FormCek.M SSubData.Rows 1, 1) = rs(1) FormCek.M SSubData.TextM atrix(FormCek.M SSubData.Rows 1, 2) = rs(2) If rs(2) = 0 Then
253
FormCek.M SSubData.TextM atrix(FormCek.M SSubData.Rows - 1, 3) = "EM PTY" Else
FormCek.M SSubData.TextM atrix(FormCek.M SSubData.Rows - 1, 3) = "Please Order" End If SetGridColumnWidth FormCek.M SSubData Label5.Visible = True End If rs.M oveNext Next End Sub
Public Sub WarnaF S(FS As M SFlexGrid, lColor1 As Long, lcolor2 As Long) Dim lRow As Long, lCol As Long Dim lOrgRow As Long, lOrgCol As Long Dim lColor As Long
With FS .Redraw = False
254 lOrgRow = .Row lOrgCol = .Col
For lRow = .FixedRows To .Rows - 1 .Row = lRow
If lRow / 2 = lRow \ 2 Then lColor = lColor1 Else lColor = lcolor2 End If
For lCol = .FixedCols To .Cols - 1 .Col = lCol .CellBackColor = lColor Next lCol Next lRow
.Row = lOrgRow .Col = lOrgCol .Redraw = True End With End Sub
255
Private Sub Label5_Click() FormCek.Show FormCek.Left = (Screen.Width / 2) - (FormCek.Width / 2) FormCek.Top = (Screen.Height / 2) - (FormCek.Height / 2) End Sub
Private Sub M SSubData_KeyUp(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyDelete And M SSubData.Rows > 2 Then M SSubData.RemoveItem (M SSubData.Row) Else M SSubData.Clear M SSubData.Rows = 1 M SSubData.TextM atrix(0, 0) = "No" M SSubData.TextM atrix(0, 1) = "Kode Barang" M SSubData.TextM atrix(0, 2) = "Nama Barang" M SSubData.TextM atrix(0, 3) = "Harga" M SSubData.TextM atrix(0, 4) = "Quantity" M SSubData.TextM atrix(0, 5) = "Sub Total" End If End Sub
Private Sub TextAdv_Change()
256 End Sub
Private Sub TextAdv_KeyPress(KeyAscii As Integer) Select Case KeyAscii Case Is < 32 Case Asc("0") To Asc("9") Case Else KeyAscii = 0 Beep End Select End Sub
Private Sub textharga_Change() If TextHarga.Text = "Barang tidak ditemukan" Then TextQty.Enabled = False TextSubTotal.Text = 0 Else TextQty.Enabled = True End If End Sub
Private Sub ComboKodePegawai_KeyPress(KeyAscii As Integer) If ComboKodePegawai.Text = "" Then Select Case KeyAscii
257 Case Is < 32 Case Asc("p") Case Asc("P") Case Else KeyAscii = 0 Beep End Select Else Select Case KeyAscii Case Is < 32 Case Asc("0") To Asc("9") Case Else KeyAscii = 0 Beep End Select End If
If KeyAscii = 13 Then openCon openRs "SELECT * FROM Pegawai WHERE KdDivisi = 'D0003' AND KdPegawai = '" & Left(ComboKodePegawai.Text, 5) & "'" If Not rs.EOF Then TextNamaPegawai.Text = rs(2) Else
258 TextNamaPegawai.Text = "Tidak Ditemukan" End If End If
End Sub
Private Sub TextQty_Change() subtotal = Val(TextQty.Text) * harga TextSubTotal.Text = Format$(subtotal, "Rp ###,###")
End Sub
Private Sub TextQty_KeyPress(KeyAscii As Integer) Select Case KeyAscii Case Is < 32 Case Asc("0") To Asc("9") Case Else KeyAscii = 0 Beep End Select End Sub
Private Sub M SSubData_M ouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
259 Call SelectGridCell(M SSubData.Row) End Sub
Private Sub SelectGridCell(GridRow As Integer) Dim i As Integer Dim j As Integer Dim NumRows As Integer Dim NumCols As Integer NumRows = M SSubData.Rows - 1 NumCols = M SSubData.Cols - 1 M SSubData.HighLight = flexHighlightNever
For i = 1 To NumRows If i <> GridRow Then M SSubData.Row = i
For j = 0 To NumCols M SSubData.Col = j If M SSubData.CellBackColor = vbHighlight Then M SSubData.CellBackColor = vbWindowBackground M SSubData.CellForeColor = vbWindowText Else Exit For End If
260 Next j End If Next i M SSubData.Row = GridRow
For i = 0 To NumCols M SSubData.Col = i M SSubData.CellBackColor = vbHighlight M SSubData.CellForeColor = vbHighlightText Next i End Sub FormPeriod Private Sub Command1_Click() Dim msg, per msg = M sgBox("Are you sure want to save this setting?", vbYesNo + vbQuestion) If msg = vbYes Then Call SaveSetting(App.EXEName, "Period", "M onth", FormPeriod.Combo1.Text) MsgBox "Setting saved", vbInformation per = GetSetting(App.EXEName, "Period", "M onth") Label1.Caption = "Current Period : " & per End If
261 End Sub
Private Sub Command2_Click() Unload M e End Sub
Private Sub Form_Load() Dim per As String
per = GetSetting(App.EXEName, "Period", "M onth") Label1.Caption = "Current Period : " & per
For i = 1 To 12 Combo1.AddItem M onthName(i) Next Combo1.ListIndex = 0 Combo1.Text = per End Sub
FormPersediaan Option Explicit
Dim total As Variant Dim harga
262 Dim subtotal
Private Sub Combo1_Click() openCon openRs "SELECT * FROM Supplier WHERE KdSupplier = '" & Left(ComboKodeSupplier.Text, 5) & "'" If ComboKodeSupplier.Text = "" Then TextNamaSupplier.Text = "" ElseIf rs.EOF Then TextNamaSupplier.Text = "Tidak Ditemukan" Else TextNamaSupplier.Text = rs(1) End If End Sub
Private Sub Combo1_KeyPress(KeyAscii As Integer) If ComboKodeSupplier.Text = "" Then Select Case KeyAscii Case Is < 32 Case Asc("p") Case Asc("P") Case Else KeyAscii = 0
263 Beep End Select Else Select Case KeyAscii Case Is < 32 Case Asc("0") To Asc("9") Case Else KeyAscii = 0 Beep End Select End If
If KeyAscii = 13 Then openCon openRs "SELECT * FROM Pegawai WHERE KdDivisi = 'D0003' AND KdPegawai = '" & Left(ComboKodePegawai.Text, 5) & "'" If Not rs.EOF Then TextNamaPegawai.Text = rs(2) Else TextNamaPegawai.Text = "Tidak Ditemukan" End If End If End Sub
264
Private Sub ComboKodeBarang_Click() openCon openRs "SELECT * FROM Header_Barang WHERE KdBarang = '" & Left(ComboKodeBarang.Text, 5) & "'" If ComboKodeBarang.Text = "" Then TextNamaBarang.Text = "" TextHarga.Text = 0 ElseIf rs.EOF Then TextNamaBarang.Text = "Tidak Ditemukan" TextHarga.Text = 0 Else TextNamaBarang.Text = rs(4) harga = rs(5) TextHarga.Text = Format$(harga, "Rp ###,###") End If End Sub
Private Sub ComboKodeBarang_KeyPress(KeyAscii As Integer) If ComboKodeBarang.Text = "" Then Select Case KeyAscii Case Is < 32 Case Asc("b") Case Asc("B")
265 Case Else KeyAscii = 0 Beep End Select Else Select Case KeyAscii Case Is < 32 Case Asc("0") To Asc("9") Case Else KeyAscii = 0 Beep End Select End If
If KeyAscii = 13 Then openCon openRs "SELECT * FROM Header_Barang WHERE KdBarang = '" & Left(ComboKodeBarang.Text, 5) & "'" If Not rs.EOF Then TextNamaBarang.Text = rs(4) harga = rs(5) TextHarga.Text = Format$(harga, "Rp ###,###") Else TextNamaBarang.Text = "Tidak Ditemukan"
266 End If End If End Sub
Private Sub ComboKodePegawai_Click() openCon openRs "SELECT * FROM PEGAWAI WHERE KdPegawai = '" & Left(ComboKodePegawai.Text, 5) & "'" If ComboKodePegawai.Text = "" Then TextNamaPegawai.Text = "" ElseIf rs.EOF Then TextNamaPegawai.Text = "Tidak Ditemukan" Else TextNamaPegawai.Text = rs(2) End If End Sub
Private Sub ComboKodePegawai_KeyPress(KeyAscii As Integer) If ComboKodePegawai.Text = "" Then Select Case KeyAscii Case Is < 32 Case Asc("p") Case Asc("P") Case Else
267 KeyAscii = 0 Beep End Select Else Select Case KeyAscii Case Is < 32 Case Asc("0") To Asc("9") Case Else KeyAscii = 0 Beep End Select End If
If KeyAscii = 13 Then openCon openRs "SELECT * FROM Pegawai WHERE KdDivisi = 'D0003' AND KdPegawai = '" & Left(ComboKodePegawai.Text, 5) & "'" If Not rs.EOF Then TextNamaPegawai.Text = rs(2) ComboKodePegawai.Text = rs(0) Else TextNamaPegawai.Text = "Tidak Ditemukan" End If End If
268 End Sub
Private Sub ComboKodeSupplier_Click() Dim i As Integer openCon openRs "SELECT * FROM Supplier WHERE KdSupplier = '" & Left(ComboKodeSupplier.Text, 5) & "'" If ComboKodeSupplier.Text = "" Then TextNamaSupplier.Text = "" ElseIf rs.EOF Then TextNamaSupplier.Text = "Tidak Ditemukan" Else TextNamaSupplier.Text = rs(1) ComboKodeBarang.Enabled = True
'combokodebarang openRs "SELECT * FROM Header_Barang WHERE KdSupplier = '" & Left(ComboKodeSupplier.Text, 5) & "'" For i = 1 To rs.RecordCount ComboKodeBarang.AddItem rs(0) & " - " & rs(4) rs.M oveNext Next i
End If
269 End Sub
Private Sub ComboKodeSupplier_KeyPress(KeyAscii As Integer) If ComboKodeSupplier.Text = "" Then Select Case KeyAscii Case Is < 32 Case Asc("p") Case Asc("P") Case Else KeyAscii = 0 Beep End Select Else Select Case KeyAscii Case Is < 32 Case Asc("0") To Asc("9") Case Else KeyAscii = 0 Beep End Select End If
If KeyAscii = 13 Then openCon
270 openRs "SELECT * FROM Supplier WHERE KdSupplier = '" & Left(ComboKodeSupplier.Text, 5) & "'" If Not rs.EOF Then TextNamaSupplier.Text = rs(1) Else TextNamaSupplier.Text = "Tidak Ditemukan" End If End If End Sub
Private Sub Command1_Click() CrystalReport1.ReportFileName = App.Path & "\reportpersediaan.rpt" CrystalReport1.SelectionFormula = "{Detail_Penerimaan_Barang.NoFakPenerimaanBrg} = '" & TextNoFaktur.Text & "'" CrystalReport1.Action = 1 End Sub
Private Sub Command2_Click() Dim msg, jumlahawal, jumlahakhir, i, ukuran, lent Dim harga As Double Dim qty As Integer Dim sub_total As Double Dim kd_barang As String
271 Dim nama_barang As String Dim kodeorder As String Dim per As String
openCon openRs "SELECT * FROM Header_Order" If Not rs.EOF Then rs.M oveLast lent = "1" & Right(rs(0), 4) kodeorder = "O" & Right((Val(lent) + 1), 4) ElseIf rs.EOF Then kodeorder = "O0001" End If
per = GetSetting(App.EXEName, "Period", "M onth")
If M onthName(M onth(Format(TextTanggal.Text, "mm/dd/yyyy"))) <> per Then MsgBox "You can't do any Transaction at this date." & Chr(13) & _ "Because the period is not started or over" & Chr(13) & _ "Current period is : " & per, vbExclamation
272 ElseIf ComboKodePegawai.Text = "" Then MsgBox "Please insert Kode Pegawai", vbExclamation ElseIf ComboKodeSupplier.Text = "" Then MsgBox "Please insert Kode Supplier", vbExclamation Else msg = M sgBox("Are you sure want to store this item(s)?", vbQuestion + vbYesNo) If msg = vbYes Then If M SSubData.Rows = 1 Then MsgBox "Please insert item", vbExclamation ElseIf M SSubData.Rows = 2 And M SSubData.TextM atrix(1, 1) = "" Then MsgBox "Please insert item", vbExclamation Else openRs "INSERT INTO Header_Order VALUES ('" & kodeorder & "', '" & Left(ComboKodeSupplier.Text, 5) & "', '" & Left(ComboKodePegawai.Text, 5) & "', '" & Format$(TextTanggal.Text, "dd-mmm-yyyy") & "')" openRs "INSERT INTO Header_Penerimaan_Barang VALUES ('" & TextNoFaktur.Text & "', '" & Left(ComboKodeSupplier.Text, 5) & "', '" & Left(ComboKodePegawai.Text, 5) & "', '" & Format$(TextTanggal.Text, "dd-mmm-yyyy") & "')" openRs "INSERT INTO Detail_Penerimaan_Barang VALUES ('" & TextNoFaktur.Text & "','" & kodeorder & "'," & total & ")"
273 For i = 1 To (M SSubData.Rows - 1) kd_barang = M SSubData.TextM atrix(i, 1) harga = CCur(M SSubData.TextM atrix(i, 3)) qty = Val(M SSubData.TextM atrix(i, 4)) sub_total = M SSubData.TextM atrix(i, 5)
openRs "INSERT INTO Detail_Order values ('" & kodeorder & "','" & kd_barang & "','" & ukuran & "' , " & qty & "," & harga & ")" openRs "SELECT * FROM Detail_Barang WHERE KdBarang = '" & kd_barang & "'" jumlahawal = rs(2) jumlahakhir = Val(rs(2)) + qty LabelAkhir.Caption = jumlahakhir openRs "Update Detail_Barang Set Qty = '" & LabelAkhir.Caption & "' WHERE KdBarang = '" & kd_barang & "'"
Command1.Enabled = True Next i MsgBox "Storage has been added", vbInformation End If End If End If End Sub
274 Private Sub Command3_Click() Dim i As Integer If ComboKodeBarang.Text = "" Then MsgBox "Please insert Kode Barang", vbExclamation ElseIf TextQty.Text = "" Or (Val(TextQty.Text) * 1 = 0) Then MsgBox "Please insert quantity", vbExclamation Else Dim totalformatted
For i = 1 To (M SSubData.Rows - 1) If Left(ComboKodeBarang.Text, 5) = M SSubData.TextM atrix(i, 1) Then MsgBox "You had ordered this item(s) a moment ago." & Chr(13) & Chr(13) & _ "Please order another item.", vbExclamation TextQty.Text = 0 TextSubTotal.Text = 0 TextHarga.Text = 0 ComboKodeBarang.Text = "" TextNamaBarang.Text = "" ComboKodeBarang.SetFocus Exit Sub End If Next i
275
M SSubData.Cols = 6 M SSubData.Rows = M SSubData.Rows + 1
M SSubData.TextM atrix(M SSubData.Rows - 1, 0) = M SSubData.Rows - 1 M SSubData.TextM atrix(M SSubData.Rows - 1, 1) = Left(ComboKodeBarang.Text, 5) M SSubData.TextM atrix(M SSubData.Rows - 1, 2) = TextNamaBarang.Text M SSubData.TextM atrix(M SSubData.Rows - 1, 3) = harga M SSubData.TextM atrix(M SSubData.Rows - 1, 4) = TextQty.Text M SSubData.TextM atrix(M SSubData.Rows - 1, 5) = subtotal
total = total + subtotal totalformatted = Format$(total, "Rp ###,###") TextTotal.Text = totalformatted
SetGridColumnWidth M SSubData
TextQty.Text = 0 TextSubTotal.Text = 0 TextHarga.Text = 0 ComboKodeBarang.Text = ""
276 TextNamaBarang.Text = "" ComboKodeBarang.SetFocus
End If
'warna flexgrid WarnaFS M SSubData, RGB(244, 244, 244), RGB(255, 255, 255) End Sub
Private Sub Command4_Click() Unload M e End Sub
Private Sub Command5_Click() If M SSubData.Rows > 2 Then M SSubData.RemoveItem (M SSubData.Row) Else M SSubData.Clear M SSubData.Rows = 1 M SSubData.TextM atrix(0, 0) = "No" M SSubData.TextM atrix(0, 1) = "Kode Barang" M SSubData.TextM atrix(0, 2) = "Nama Barang" M SSubData.TextM atrix(0, 3) = "Harga" M SSubData.TextM atrix(0, 4) = "Quantity"
277 M SSubData.TextM atrix(0, 5) = "Sub Total" End If End Sub
Private Sub Form_Load() Dim lent Dim i As Integer
total = 0
TextQty.Text = 0 TextSubTotal.Text = 0 TextNamaPegawai.Text = "" TextNamaSupplier.Text = "" TextNamaBarang.Text = "" TextHarga.Text = 0 TextTanggal.Text = Format(Date, "dd-mmm-yyyy")
openCon openRs "SELECT * FROM Header_Penerimaan_Barang" If Not rs.EOF Then rs.M oveLast lent = "1" & Right(rs(0), 3) TextNoFaktur.Text = "FP" & Right((Val(lent) + 1), 3)
278 ElseIf rs.EOF Then TextNoFaktur.Text = "FP001" End If
'isi flexgrid M SSubData.Cols = 6 M SSubData.Rows = 1 M SSubData.TextM atrix(0, 0) = "No" M SSubData.TextM atrix(0, 1) = "Kode Barang" M SSubData.TextM atrix(0, 2) = "Nama Barang" M SSubData.TextM atrix(0, 3) = "Harga" M SSubData.TextM atrix(0, 4) = "Quantity" M SSubData.TextM atrix(0, 5) = "Sub Total"
SetGridColumnWidth M SSubData
'combokodepegawai openRs "SELECT * FROM pegawai WHERE KdDivisi = 'D0003'" For i = 1 To rs.RecordCount ComboKodePegawai.AddItem rs(0) & " - " & rs(2) rs.M oveNext Next i
'combokodesupplier
279 openRs "SELECT * FROM Supplier" For i = 1 To rs.RecordCount ComboKodeSupplier.AddItem rs(0) & " - " & rs(1) rs.M oveNext Next i
'cek persediaan FormCek.Show FormCek.Hide FormCek.M SSubData.Clear
openCon openRs "SELECT * FROM Detail_Barang" FormCek.M SSubData.Cols = 4
For i = 1 To rs.RecordCount If rs(2) < 10 Then FormCek.M SSubData.TextM atrix(0, 0) = "KdBarang" FormCek.M SSubData.TextM atrix(0, 1) = "Ukuran" FormCek.M SSubData.TextM atrix(0, 2) = "Qty" FormCek.M SSubData.TextM atrix(0, 3) = "Status"
FormCek.M SSubData.Rows = FormCek.M SSubData.Rows + 1
280 FormCek.M SSubData.TextM atrix(FormCek.M SSubData.Rows 1, 0) = rs(0) FormCek.M SSubData.TextM atrix(FormCek.M SSubData.Rows 1, 1) = rs(1) FormCek.M SSubData.TextM atrix(FormCek.M SSubData.Rows 1, 2) = rs(2) If rs(2) = 0 Then
FormCek.M SSubData.TextM atrix(FormCek.M SSubData.Rows - 1, 3) = "EM PTY" Else
FormCek.M SSubData.TextM atrix(FormCek.M SSubData.Rows - 1, 3) = "Please Order" End If SetGridColumnWidth FormCek.M SSubData Label5.Visible = True End If rs.M oveNext Next
End Sub
Private Sub Label5_Click()
281 FormCek.Show FormCek.Left = (Screen.Width / 2) - (FormCek.Width / 2) FormCek.Top = (Screen.Height / 2) - (FormCek.Height / 2) End Sub
Private Sub M SSubData_KeyUp(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyDelete And M SSubData.Rows > 2 Then M SSubData.RemoveItem (M SSubData.Row) Else M SSubData.Clear M SSubData.Rows = 1 M SSubData.TextM atrix(0, 0) = "No" M SSubData.TextM atrix(0, 1) = "Kode Barang" M SSubData.TextM atrix(0, 2) = "Nama Barang" M SSubData.TextM atrix(0, 3) = "Harga" M SSubData.TextM atrix(0, 4) = "Quantity" M SSubData.TextM atrix(0, 5) = "Sub Total" End If End Sub
Private Sub M SSubData_M ouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) Call SelectGridCell(M SSubData.Row) End Sub
282
Private Sub TextQty_Change() subtotal = Val(TextQty.Text) * harga TextSubTotal.Text = Format$(subtotal, "Rp ###,###") End Sub
Private Sub TextQty_KeyPress(KeyAscii As Integer) Select Case KeyAscii Case Is < 32 Case Asc("0") To Asc("9") Case Else KeyAscii = 0 Beep End Select End Sub
Public Sub WarnaF S(FS As M SFlexGrid, lColor1 As Long, lcolor2 As Long) Dim lRow As Long, lCol As Long Dim lOrgRow As Long, lOrgCol As Long Dim lColor As Long
With FS .Redraw = False
283
lOrgRow = .Row lOrgCol = .Col
For lRow = .FixedRows To .Rows - 1 .Row = lRow
If lRow / 2 = lRow \ 2 Then lColor = lColor1 Else lColor = lcolor2 End If
For lCol = .FixedCols To .Cols - 1 .Col = lCol .CellBackColor = lColor Next lCol Next lRow
.Row = lOrgRow .Col = lOrgCol .Redraw = True End With End Sub
284
Private Sub SetGridColumnWidth(grd As M SFlexGrid)
Dim InnerLoopCount As Long Dim OuterLoopCount As Long Dim lngLongestLen As Long Dim sLongestString As String Dim lngColWidth As Long Dim szCellText As String
For OuterLoopCount = 0 To grd.Cols - 1 sLongestString = "" lngLongestLen = 0
For InnerLoopCount = 0 To grd.Rows - 1 szCellText = grd.TextM atrix(InnerLoopCount, OuterLoopCount)
If Len(szCellText) > lngLongestLen Then lngLongestLen = Len(szCellText) sLongestString = szCellText End If Next lngColWidth = grd.Parent.TextWidth(sLongestString) grd.ColWidth(OuterLoopCount) = lngColWidth + 300
285 Next End Sub
Private Sub SelectGridCell(GridRow As Integer) Dim i As Integer Dim j As Integer Dim NumRows As Integer Dim NumCols As Integer NumRows = M SSubData.Rows - 1 NumCols = M SSubData.Cols - 1 M SSubData.HighLight = flexHighlightNever
For i = 1 To NumRows If i <> GridRow Then M SSubData.Row = i
For j = 0 To NumCols M SSubData.Col = j If M SSubData.CellBackColor = vbHighlight Then M SSubData.CellBackColor = vbWindowBackground M SSubData.CellForeColor = vbWindowText Else Exit For
286 End If Next j End If Next i M SSubData.Row = GridRow
For i = 0 To NumCols M SSubData.Col = i M SSubData.CellBackColor = vbHighlight M SSubData.CellForeColor = vbHighlightText Next i End Sub FormS earchTRX
Private Sub Combo1_Click() If Combo1.Text = "Penjualan" Then openCon openRs "select * from Header_Penjualan" Combo8.Clear For m = 1 To rs.RecordCount
287 Combo8.AddItem rs(0) rs.M oveNext Next m Combo8.ListIndex = 0 Else openCon openRs "select * from Header_Penerimaan_Barang" Combo8.Clear For m = 1 To rs.RecordCount Combo8.AddItem rs(0) rs.M oveNext Next m Combo8.ListIndex = 0 End If End Sub
Private Sub Command1_Click() Dim tgl, formattedtgl As Date Dim i, j As Integer Dim harga, total Dim arr(1000)
j=0 harga = 0
288
openCon If Combo1.Text = "Penjualan" Then If Option3.Value = True Then openRs "SELECT * FROM Detail_Penjualan WHERE NoFakPenjualan = '" & Combo8.Text & "'" LoadRecordsetIntoGrid rs, M SSubData, 1, 1
openRs "SELECT SUM (HargaJual) as TotalHarga FROM Detail_Penjualan WHERE NoFakPenjualan = '" & Combo8.Text & "'" TextTotal.Text = Format$(rs(0), "Rp ###,###")
SetGridColumnWidth M SSubData ElseIf Option2.Value = True Then total = 0 tgl = Combo11.Text & "-" & Left(Combo6.Text, 3) & "-" & Combo7.Text formattedtgl = Format(tgl, "m/d/yyyy")
openRs "SELECT * FROM Header_Penjualan WHERE Tanggal = '" & formattedtgl & "'"
For i = 0 To rs.RecordCount - 1 arr(i) = rs(0)
289 rs.M oveNext Next i M SSubData.Rows = 1 M SSubData.TextM atrix(0, 0) = "No Faktur Penjualan" M SSubData.TextM atrix(0, 1) = "Kode Barang" M SSubData.TextM atrix(0, 2) = "Ukuran" M SSubData.TextM atrix(0, 3) = "Qty" M SSubData.TextM atrix(0, 4) = "Harga"
openRs "SELECT * FROM Header_Penjualan WHERE Tanggal = '" & formattedtgl & "'" For j = 0 To rs.RecordCount openRs "SELECT * FROM Detail_Penjualan WHERE NoFakPenjualan = '" & arr(j) & "'" For k = 1 To rs.RecordCount M SSubData.Cols = 5 M SSubData.Rows = M SSubData.Rows + 1 M SSubData.TextM atrix(M SSubData.Rows - 1, 0) = rs(0) M SSubData.TextM atrix(M SSubData.Rows - 1, 1) = rs(1) M SSubData.TextM atrix(M SSubData.Rows - 1, 2) = rs(2) M SSubData.TextM atrix(M SSubData.Rows - 1, 3) = rs(3) M SSubData.TextM atrix(M SSubData.Rows - 1, 4) = rs(4) total = total + Val(rs(4)) rs.M oveNext
290
Next k Next j SetGridColumnWidth M SSubData TextTotal.Text = Format$(total, "Rp ###,###") End If Else
If Option3.Value = True Then openRs "SELECT * FROM Detail_Penerimaan_Barang WHERE NoFakPenerimaanBrg = '" & Combo8.Text & "'" LoadRecordsetIntoGrid rs, M SSubData, 1, 1
openRs "SELECT SUM (HargaBeli) as TotalHarga FROM Detail_Penerimaan_Barang WHERE NoFakPenerimaanBrg = '" & Combo8.Text & "'" TextTotal.Text = Format$(rs(0), "Rp ###,###")
SetGridColumnWidth M SSubData ElseIf Option2.Value = True Then tgl = Combo11.Text & "-" & Left(Combo6.Text, 3) & "-" & Combo7.Text formattedtgl = Format(tgl, "m/d/yyyy") total = 0
291
openRs "SELECT * FROM Header_Penerimaan_Barang WHERE Tanggal = '" & formattedtgl & "'"
For i = 0 To rs.RecordCount - 1 arr(i) = rs(0) rs.M oveNext Next i M SSubData.Cols = 3 M SSubData.Rows = 1 M SSubData.TextM atrix(0, 0) = "No Faktur Penerimaan Brg" M SSubData.TextM atrix(0, 1) = "No Order" M SSubData.TextM atrix(0, 2) = "Harga Beli Barang"
openRs "SELECT * FROM Header_Penerimaan_Barang WHERE Tanggal = '" & formattedtgl & "'" For j = 0 To rs.RecordCount openRs "SELECT * FROM Detail_Penerimaan_Barang WHERE NoFakPenerimaanBrg = '" & arr(j) & "'" For k = 1 To rs.RecordCount M SSubData.Cols = 3 M SSubData.Rows = M SSubData.Rows + 1 M SSubData.TextM atrix(M SSubData.Rows - 1, 0) = rs(0) M SSubData.TextM atrix(M SSubData.Rows - 1, 1) = rs(1)
292 M SSubData.TextM atrix(M SSubData.Rows - 1, 2) = rs(2) total = total + Val(rs(2)) rs.M oveNext Next k Next j SetGridColumnWidth M SSubData TextTotal.Text = Format$(total, "Rp ###,###")
End If End If
End Sub
Private Sub Form_Load() Dim i, j, jk, jkl As Integer
Combo1.ListIndex = 0 For i = 1 To 12 Combo6.AddItem M onthName(i) Next Combo6.Text = M onthName(M onth(Date))
For i = 0 To 59 Combo7.AddItem 1990 + Val(i)
293 Next Combo7.Text = Year(Date)
If Combo6.Text = "January" Or Combo6.Text = "M arch" Or Combo6.Text = "M ay" Or Combo6.Text = "July" Or Combo6.Text = "August" Or Combo6.Text = "October" Or Combo6.Text = "December" Then jkl = 31 ElseIf Combo6.Text = "April" Or Combo6.Text = "June" Or Combo6.Text = "September" Or Combo6.Text = "November" Then jkl = 30 ElseIf Combo6.Text = "February" And (Val(Combo7.Text) M od 4 = 0) Then jkl = 29 ElseIf Combo6.Text = "February" And (Val(Combo7.Text) M od 4 <> 0) Then jkl = 28 End If
Combo11.Clear For i = 1 To jkl Combo11.AddItem i Next i Combo11.ListIndex = Day(Date) - 1
294 openCon openRs "select * from Header_Penjualan" Combo8.Clear For m = 1 To rs.RecordCount Combo8.AddItem rs(0) rs.M oveNext Next m Combo8.ListIndex = 0
Combo11.Enabled = False Combo6.Enabled = False Combo7.Enabled = False
Combo8.Enabled = False End Sub
Private Sub Option2_Click()
Combo11.Enabled = True Combo6.Enabled = True Combo7.Enabled = True
Combo8.Enabled = False End Sub
295
Private Sub Option3_Click()
Combo11.Enabled = False Combo6.Enabled = False Combo7.Enabled = False
Combo8.Enabled = True End Sub
Private Sub combo9_Change() Dim longm, shortm, vshortm, kabvshortm, kabisat As Integer longm = 0 shortm = 0 vshortm = 0 kabvshortm = 0
If Val(Combo3.Text) M od 4 = 0 Then kabvshortm = 1 Else kabvshotm = 0 End If
296 If Combo9.Text = "" Then Combo9.SetFocus ElseIf Combo9.Text > 31 Then If Combo2.Text = "January" Or Combo2.Text = "M arch" Or Combo2.Text = "M ay" Or Combo2.Text = "July" Or Combo2.Text = "August" Or Combo2.Text = "October" Or Combo2.Text = "December" Then Combo9.Text = 31 ElseIf Combo2.Text = "April" Or Combo2.Text = "June" Or Combo2.Text = "September" Or Combo2.Text = "November" Then Combo9.Text = 30 ElseIf Combo2.Text = "February" And kabvshortm = 1 Then Combo9.Text = 29 ElseIf Combo2.Text = "February" And kabvshortm = 0 Then Combo9.Text = 28 End If End If
End Sub
Private Sub SetGridColumnWidth(grd As M SFlexGrid)
Dim InnerLoopCount As Long
297 Dim OuterLoopCount As Long Dim lngLongestLen As Long Dim sLongestString As String Dim lngColWidth As Long Dim szCellText As String
For OuterLoopCount = 0 To grd.Cols - 1 sLongestString = "" lngLongestLen = 0
For InnerLoopCount = 0 To grd.Rows - 1 szCellText = grd.TextM atrix(InnerLoopCount, OuterLoopCount)
If Len(szCellText) > lngLongestLen Then lngLongestLen = Len(szCellText) sLongestString = szCellText End If Next lngColWidth = grd.Parent.TextWidth(sLongestString) grd.ColWidth(OuterLoopCount) = lngColWidth + 300 Next End Sub
298 Private Sub SelectGridCell(GridRow As Integer) Dim i As Integer Dim j As Integer Dim NumRows As Integer Dim NumCols As Integer NumRows = M SSubData.Rows - 1 NumCols = M SSubData.Cols - 1 M SSubData.HighLight = flexHighlightNever
For i = 1 To NumRows If i <> GridRow Then M SSubData.Row = i
For j = 0 To NumCols M SSubData.Col = j If M SSubData.CellBackColor = vbHighlight Then M SSubData.CellBackColor = vbWindowBackground M SSubData.CellForeColor = vbWindowText Else Exit For End If Next j End If Next i
299 M SSubData.Row = GridRow
For i = 0 To NumCols M SSubData.Col = i M SSubData.CellBackColor = vbHighlight M SSubData.CellForeColor = vbHighlightText Next i End Sub
FormViewBarang Private Sub Command1_Click() Unload M e End Sub
Private Sub Command2_Click() Dim msg, temp, nilai If KeyCode = vbKeyDelete And M SSubData.Rows > 2 Then msg = M sgBox("Are you sure want to delete this row?", vbexcalamation + vbYesNo) If msg = vbYes Then temp = M SSubData.Row rs.M oveFirst
300 rs.M ove temp - 1 nilai = rs(0) M SSubData.RemoveItem (M SSubData.Row) openRs "delete from Detail_Barang where Kd_Detail_Barang = '" & nilai & "'" End If End If End Sub
Private Sub Form_Load() openCon openRs "select * from Detail_Barang" LoadRecordsetIntoGrid rs, M SSubData, 1, 1
WarnaFS M SSubData, RGB(244, 244, 244), RGB(255, 255, 255) End Sub
Private Sub M SSubData_KeyUp(KeyCode As Integer, Shift As Integer) Dim msg, temp, nilai If KeyCode = vbKeyDelete And M SSubData.Rows > 2 Then msg = M sgBox("Are you sure want to delete this row?", vbexcalamation + vbYesNo) If msg = vbYes Then temp = M SSubData.Row
301 rs.M oveFirst rs.M ove temp - 1 nilai = rs(0) M SSubData.RemoveItem (M SSubData.Row) openRs "delete from Detail_Barang where Kd_Detail_Barang = '" & nilai & "'" End If End If End Sub
Private Sub M SSubData_M ouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) Call SelectGridCell(M SSubData.Row) End Sub
Private Sub SelectGridCell(GridRow As Integer) Dim i As Integer Dim j As Integer Dim NumRows As Integer Dim NumCols As Integer NumRows = M SSubData.Rows - 1 NumCols = M SSubData.Cols - 1 M SSubData.HighLight = flexHighlightNever
302 For i = 1 To NumRows If i <> GridRow Then M SSubData.Row = i
For j = 0 To NumCols M SSubData.Col = j If M SSubData.CellBackColor = vbHighlight Then M SSubData.CellBackColor = vbWindowBackground M SSubData.CellForeColor = vbWindowText Else Exit For End If Next j End If Next i M SSubData.Row = GridRow
For i = 0 To NumCols M SSubData.Col = i M SSubData.CellBackColor = vbHighlight M SSubData.CellForeColor = vbHighlightText Next i End Sub
303 Public Sub WarnaF S(FS As M SFlexGrid, lColor1 As Long, lcolor2 As Long) Dim lRow As Long, lCol As Long Dim lOrgRow As Long, lOrgCol As Long Dim lColor As Long
With FS .Redraw = False
lOrgRow = .Row lOrgCol = .Col
For lRow = .FixedRows To .Rows - 1 .Row = lRow
If lRow / 2 = lRow \ 2 Then lColor = lColor1 Else lColor = lcolor2 End If
For lCol = .FixedCols To .Cols - 1 .Col = lCol .CellBackColor = lColor
304 Next lCol Next lRow
.Row = lOrgRow .Col = lOrgCol .Redraw = True End With End Sub
FormViewDaftarPemesanan Private Sub Command1_Click() Unload M e End Sub
Private Sub Form_Load() openCon openRs "select * from header_daftar_pemesanan JOIN Detail_Daftar_Pemesanan ON header_daftar_pemesanan.NoDaftPemesanan = Detail_Daftar_Pemesanan.NoDaftPemesanan" LoadRecordsetIntoGrid rs, M SSubData, 1, 1 End Sub
FormViewNotaTagihan
305
Private Sub Command1_Click() Unload M e End Sub
Private Sub Form_Load() openCon openRs "select * from Header_nota_tagihan JOIN Detail_Nota_Tagihan On Header_nota_tagihan.NoNotaTagihan = Detail_Nota_Tagihan.NoNotaTagihan" LoadRecordsetIntoGrid rs, M SSubData, 1, 1 End Sub
FormViewOrder
Private Sub Command1_Click() Unload M e End Sub
Private Sub Form_Load() openCon openRs "select * from Header_Order JOIN Detail_Order ON Header_Order.NoOrder = Detail_Order.NoOrder" LoadRecordsetIntoGrid rs, M SSubData, 1, 1
306 End Sub FormViewS JC
Private Sub Command1_Click() Unload M e End Sub
Private Sub Form_Load() openCon openRs "select * from Header_Surat_Jalan_Customer JOIN Detail_Surat_Jalan_Customer ON Header_Surat_Jalan_Customer.NoSrtJlnCust = Detail_Surat_Jalan_Customer.NoSrtJlnCust" LoadRecordsetIntoGrid rs, M SSubData, 1, 1 End Sub
FormViewS JO
Private Sub Command1_Click() Unload M e End Sub
Private Sub Form_Load() openCon
307 openRs "select * from Header_Surat_Jalan_Order JOIN Detail_Surat_Jalan_Order ON Header_Surat_Jalan_Order.NoSrtJlnOrder = Detail_Surat_Jalan_Order.NoSrtJlnOrder" LoadRecordsetIntoGrid rs, M SSubData, 1, 1 End Sub
Query S QL create table Jenis_Barang ( KdJnsBrg char (5)primary key not null, JnsBrg varchar(15)not null, constraint a1 check (len(kdjnsbrg) = 5), constraint a2 check (kdjnsbrg like 'J[0-9][0-9][0-9][0-9]') ) create table M erk_Barang ( KdM erkBrg char (5) primary key not null, M erkBrg varchar (15)not null, constraint b1 check (len(kdmerkbrg) = 5), constraint b2 check (kdmerkbrg like 'M [0-9][0-9][0-9][0-9]') ) create table Divisi(
308 KdDivisi char (5) primary key not null, NamaDivisi varchar (30)not null, constraint c1 check (len(KdDivisi) = 5), constraint c2 check (KdDivisi like 'D[0-9][0-9][0-9][0-9]') ) create table Supplier( KdSupplier char (5) primary key not null, NamaSupplier varchar (30)not null, AlamatSupplier varchar (100)not null, TelpSupplier varchar (30)not null, constraint d1 check (len(KdSupplier) = 5), constraint d2 check (KdSupplier like 'S[0-9][0-9][0-9][0-9]') ) create table Customer ( KdCustomer char (5) primary key not null, NamaCustomer varchar (30) not null, AlamatCustomer varchar (100)not null, TelpCustomer varchar (30)not null, constraint e1 check (len(KdCustomer) = 5), constraint e2 check (KdCustomer like 'C[0-9][0-9][0-9][0-9]') )
create table Pegawai( KdPegawai char (5) primary key not null,
309 KdDivisi char(5)not null, NamaPegawai varchar (30)not null, AlamatPegawai varchar (100)not null, TelpPegawai varchar (30)not null, constraint f1 check (len(KdPegawai) = 5), constraint f2 check (KdPegawai like 'P[0-9][0-9][0-9][0-9]'), foreign key (KdDivisi)references Divisi on update cascade on delete no action )
create table Header_Barang ( KdBarang char (5)primary key not null, KdSupplier char (5), KdJnsBrg char (5)not null, KdM erkBrg char (5)not null, NamaBarang varchar (20)not null, HargaBarang money not null, foreign key (KdSupplier)references Supplier on update cascade on delete no action, foreign key (KdJnsBrg)references Jenis_Barang on update cascade on delete no action, foreign key (KdM erkBrg)references M erk_Barang on update cascade on delete no action,
310 constraint g1 check (len(KdBarang) = 5), constraint g2 check (KdBarang like 'B[0-9][0-9][0-9][0-9]') )
Create table Detail_Barang ( KdBarang char (5)not null, Ukuran varchar(5)not null, Qty integer not null, primary key (kdbarang), foreign key (KdBarang)references Header_Barang on update cascade on delete no action )
create table Header_Order( NoOrder char (5)Primary key not null, KdSupplier char (5) , KdPegawai char (5), Tanggal datetime, constraint h1 check (len(NoOrder) = 5), constraint h2 check (NoOrder like 'O[0-9][0-9][0-9][0-9]'), foreign key (KdSupplier)references Supplier on update cascade on delete no action, foreign key (KdPegawai)references Pegawai on update cascade on delete no action
311 ) create table Detail_Order ( NoOrder char (5), KdBarang char (5), Ukuran varchar (5), Qty integer, HargaBeli money, primary key (KdBarang,NoOrder), foreign key (KdBarang)references Header_Barang on update cascade on delete no action, foreign key (NoOrder)references Header_Order on update no action on delete no action, )
create table Header_Penerimaan_Barang( NoFakPenerimaanBrg char (5)primary key not null, KdSupplier char(5), KdPegawai char (5), Tanggal datetime, constraint i1 check (len(NoFakPenerimaanBrg) = 5), constraint i2 check (NoFakPenerimaanBrg like 'FP[0-9][0-9][0-9]'), foreign key (KdSupplier)references Supplier on update cascade on delete no action, foreign key (KdPegawai)references Pegawai
312 on update cascade on delete no action ) create table Detail_Penerimaan_Barang( NoFakPenerimaanBrg char(5), NoOrder char (5), HargaBeli money, primary key(NoFakPenerimaanBrg,NoOrder), foreign key (NoFakPenerimaanBrg)references Header_Penerimaan_Barang on update cascade on delete no action, foreign key (NoOrder)references Header_Order on update no action on delete no action ) create table Header_Penjualan( NoFakPenjualan char (5) primary key not null, KdPegawai char (5), KdCustomer char (5), Tanggal datetime, constraint j1 check (len(NoFakPenjualan) = 5), constraint j2 check (NoFakPenjualan like 'F[0-9][0-9][0-9][0-9]'), foreign key (KdCustomer)references Customer on update cascade on delete no action, foreign key (KdPegawai)references Pegawai on update cascade on delete no action
313 ) create table Detail_Penjualan ( NoFakPenjualan char (5), KdBarang char (5), Ukuran varchar (5), Qty integer, HargaJual money, primary key (NoFakPenjualan,KdBarang), foreign key (KdBarang)references Header_Barang on update cascade on delete no action, foreign key (NoFakPenjualan)references Header_Penjualan on update cascade on delete no action ) create table Header_Daftar_Pemesanan( NoDaftPemesanan char(5) primary key not null , KdCustomer char (5), KdPegawai char(5), StatusPemesanan char (10), tanggal datetime, constraint k1 check (len(NoDaftPemesanan) = 5), constraint k2 check (NoDaftPemesanan like 'DP[0-9][0-9][0-9]'), foreign key (KdCustomer)references Customer on update cascade on delete no action, foreign key (KdPegawai)references Pegawai
314 on update cascade on delete no action ) create table Detail_Daftar_Pemesanan ( NoDaftPemesanan char(5), KdBarang char(5), Ukuran varchar(5), Qty integer, HargaJual money, primary key(NoDaftPemesanan, KdBarang), foreign key (NoDaftPemesanan)references Header_Daftar_Pemesanan on update cascade on delete no action, foreign key (KdBarang)references Header_Barang on update cascade on delete no action ) create table Header_Nota_Tagihan ( NoNotaTagihan char (5)primary key not null, KdCustomer char (5), KdPegawai char (5), Tanggal datetime, constraint l1 check (len(NoNotaTagihan) = 5), constraint l2 check (NoNotaTagihan like 'NT[0-9][0-9][0-9]'), foreign key (KdCustomer)references Customer on update cascade on delete no action, foreign key (KdPegawai)references Pegawai
315 on update cascade on delete no action ) create table Detail_Nota_Tagihan ( NoNotaTagihan char (5), NoDaftPemesanan char (5), HargaJual money, primary key (NoNotaTagihan,NoDaftPemesanan), foreign key (NoNotaTagihan)references Header_Nota_Tagihan on update no action on delete no action, foreign key (NoDaftPemesanan)references Header_Daftar_Pemesanan on update cascade on delete no action ) create table Header_Surat_Jalan_Order ( NoSrtJlnOrder char(5)primary key not null, KdSupplier char(5), KdPegawai char(5), Tanggal datetime, constraint m1 check (len(NoSrtJlnOrder) = 5), constraint m2 check (NoSrtJlnOrder like 'SO[0-9][0-9][0-9]'), foreign key (KdSupplier)references Supplier on update cascade on delete no action, foreign key (KdPegawai)references Pegawai on update cascade on delete no action )
316
create table Detail_Surat_Jalan_Order ( NoSrtJlnOrder char(5), NoOrder char (5), primary key (NoSrtJlnOrdeR,NoOrder), foreign key (NoSrtJlnOrdeR)references Header_Surat_Jalan_Order on update cascade on delete no action, foreign key (NoOrder)references Header_Order on update no action on delete no action )
create table Header_Surat_Jalan_Customer ( NoSrtJlnCust char(5)primary key not null, KdCustomer char(5), KdPegawai char(5), Tanggal datetime, constraint n1 check (len(NoSrtJlnCust) = 5), constraint n2 check (NoSrtJlnCust like 'SC[0-9][0-9][0-9]'), foreign key (KdCustomer)references Customer on update cascade on delete no action, foreign key (KdPegawai)references Pegawai on update cascade on delete no action ) create table Detail_Surat_Jalan_Customer (
317 NoSrtJlnCust char(5), NoNotaTagihan char (5), primary key (NoSrtJlnCust,NoNotaTagihan), foreign key (NoSrtJlnCust)references Header_Surat_Jalan_Customer on update cascade on delete no action, foreign key (NoNotaTagihan)references Header_Nota_Tagihan on update no action on delete no action )
4.2.6 Rencana Implementasi Pada tahap ini dilakukan rencana implementasi yang terkait pada aplikasi basis data yang diusulkan, serta dilakukan evaluasi terhadap beberapa aspek terkait integrity dan security pada basis data. Untuk membantu pengguna dalam pemakaian basis data diberikan panduan pengoperasiannya. Jadwal dari rencana implementasi adalah sebagai berikut: Tabel 4.41 Jadwal Rencana Implementasi Aktivitas
Minggu 1
Instalasi Perangkat Keras
2
X
Instalasi Sistem Operasi dan DBM S
X
Instalasi Aplikasi Basis Data
X
3
4
5
6
7
8
9
10
318 X
Konversi Data
X
X
X
Panduan Pengoperasian Basis Data
X
Pelatihan
X
Pengujian Sistem dan Revisi
X
X
4.2.7 S pesifikasi Sistem 4.2.7.1 S pesifikasi Komputer •
S pesifikasi Perangkat Keras Untuk mendukung DBM S dan aplikasi Basis Data yang dibuat agar berjalan dengan baik, maka dibutuhkan spesifikasi perangkat keras sebagai berikut :
Tabel 4.42 S pesifikasi Perangkat Keras Perangkat Keras
Server
Client
Processor
Pentium IV 2.7 GHz
Pentium IV 2.0 GHz
M ain M emory
1 GB
512 M B
Hard Disk
120 GB
60 GB
Grafik Adapter
On Board
On Board
319 M onitor
SVGA 17”
SVGA 17”
CD-RW
16x
16x
Keyboard
QWERTY
QWERTY
Printer
Laser Jet
Ink Jet
4.2.7.2 S pesifikasi Peranti Lunak Kebutuhan peranti lunak untuk menjalankan aplikasi Data Base meliputi kebutuhan piranti lunak pada server dan client. Kebutuhan tersebut antara lain :
Tabel 4.43 S pesifikasi Peranti Lunak Peranti Lunak
Server
Client
Sistem Operasi
Windows Server 2003
Windows XP
Aplikasi
Visual Basic 6.0
Visual Basic 6.0
DBM S
SQL Server 2000
SQL Server 2000
Anti Virus
AVG
AVG
4.2.7.3 S pesifikasi Jaringan Spesifikasi kebutuhan jaringan yang diusulkan adalah sebagai berikut : ¾ Network
Interface
Card(NIC),
digunakan
menghubungkan komputer kedalam jaringan.
untuk
320 ¾ Switch, Digunakan untuk menghubungkan komputer yang satu dengan komputer yang lain. ¾ Topologi yang digunakan 4.2.7.4 S pesifikasi Personil Untuk
mempermudah
pengoperasian
sistem dibutuhkan
beberapa personil yang bekerja sama. Personil tersebut adalah sebagai berikut : ¾ Data Base Administrator(DBA) Bertugas
dan
bertanggung
jawab
dalam
hal
perkembangan data base dan aplikasi data base serta pemeliharaan data base. ¾ Personil Data Entry Bertugas
dan
bertanggung
jawab
dalam
hal
memanipulasi data, seperti insert, update dan delete. ¾
Tim Pendukung Bertugas
dan
bertanggung
jawab
dalam
hal
membangun, merawat, dan mengembangkan jaringan, serta
bisa
mengatasi
masalah-masalah
yang
berhubungan dengan jaringan dan perangkat keras. ¾
Electronic Data Processing (EDP) Bertugas dan bertanggung jawab dalam hal yang berhubungan dengan software maupun dengan hardware dan terhadap kelangsungan pemrosesan data.
321 4.2.7.5 S pesifikasi Keamanan Sistem Selain pembatasan hak akses terhadap data sebagaimana telah dirancang sebelumnya, untuk dapat lebih meningkatkan keamanan terhadap pengguna basis data juga diperlukan pambatasan hak akses pada level aplikasi. Untuk pembatasan hak akses melalui halaman login. Halaman login digunakan oleh masing-masing bagian yang ada dalam struktur organisasi,
yaitu manajer, direktur, staff gudang, staff
administrasi, dan keuangan, staff marketing, dan staff umum. 4.2.8
Instalisasi 4.2.8.1 Instalisasi Sistem Operasi dan DBMS Pada tahap ini dilakukan instalasi perangkat-perangkat lunak penunjang, sistem operasi, serta DBM S yang diperlukan yang telah didapat pada tahap spesifikasi kebutuhan perangkat lunak. Bertujuan untuk memudahkan pengguna. 4.2.8.2 Instalasi Program Aplikasi Basis Data Pada tahap ini dilakukan instalasi program aplikasi basis data yang diusulkan untuk memenuhi kebutuhan pengguna. Bertujuan memudahkan pengguna dengan adanya aplikasi Basis Data.
4.2.9 Evaluasi Evaluasi dilakukan melalui 4 kriteria, yaitu Domain Integrity, Entity Integrity, References Integrity dan Security. ¾
Domain Integrity
322 Hasil dari evaluasi Domain Integrity menunjukan bahwa semua tabel yang telah diuji coba, kesemuannya telah dapat dilakukan dengan tepat karena setiap atributnya harus diisi dengan batasan yang telah ditentukan sebelumnya. ¾
Entity Integrity Hasil dari evaluasi Entity Integrity menunjukan bahwa semua primary key pada setiap tabel tidak diperbolehkan untuk diisi dengan ”NULL”.
¾
References Integrity Hasil dari evaluasi Refernces Integrity menunjukkan bahwa jika foreign key mempunyai nilai, maka nilai dari foreign key tersebut harus mengacu kepada table parentnya.
¾
Security Hasil dari evaluasi Security menunjukkan bahwa semua tabel yang telah dilakukan uji coba, kesemuanya telah dapat berjalan sesuai dengan mekanisme yang ditentukan. Yaitu membagi hak akses program sesuai tingkatan user.
4.2.10 Backup dan Recovery Basis Data Agar tidak terjadi hilangnya data dikarenakan kerusakan sistem maka diperlukan backup dan recovery. Sehingga Integritas data bisa terus dijaga. Sehingga Basis data dapat terus digunakan. 4.1.10.1 Backup Basis Data
323 Backup adalah suatu proses yang secara periodic mengambil sistem salinan basis data atau berupa log untuk disimpan pada media penyimpanan. Backup dapat dilakukan kapan saja. Backup dapat dilakukan melalui media removeable media atau media lainnya. 4.1.10.2 Recovery Basis Data Recovery basis data adalah suatu proses untuk mengembalikan basis data yang terjadi kesalahan, recovery ini dapat dilakukan melalui bantuan peranti lunak pendukung, tergantung dari dimana letak kesalahannya.
4.2.11 Konversi Data Pada tahap ini dilakukan konversi data dari sistem manual ke sistem yang terkomputerisasi. Data pada perusahaan dikonversi menjadi basis data yang dapat digunakan dalam aktivitas perusahaan sehari-hari.
4.2.12 Pelatihan Pada tahap ini para pengguna yang akan menjalankan basis data tersebut dipresentasikan cara menggunakan rancangan basis data, serta alur dari rancangan yang telah dibuat. Hal ini dilakukan agar memudahkan pengguna dalam menggunakan sistem basis data yang baru
4.2.13 Pengujian Sistem
324 Pada tahap ini dilakukan terhadap kinerja piranti keras, sistem operasi, DBM S, dan rancangan basis data yang telah diimplementasikan secara keseluruhan dan melakukan perbaikan apabila perlu.
4.3 Implementasi •
Panduan Pengoperasian Program Aplikasi Basis Data
Layar Login
325 Gambar 4.46 Layar Login
Pada layar ini, user diminta untuk memasukkan user dan password. Fungsi dari layar login adalah untuk menentukan hak akses user ke database. Pada saat button ”ok” di klik program akan memvalidasi apakah username dan password sesuai dengan data hak akses yang terdapat di dalam database, jika belom program akan meminta user untuk mengisi kembali username dan password tersebut hingga benar. Jika benar program akan masuk kedalam layar menu.
326 Layar Menu
Gambar 4.47 Layar Menu
Pada layar menu ini terdapat pilihan menu berupa file, insert, transaction, view, window. Pilihan ”insert” berfungsi untuk memasukkan data baru sekaligus berfungsi untuk mengupdate data yang berada di database. Pilihan ”Transaction” berfungsi menampilkan transaksi – transaksi yang dilakuka oleh user. ”View” berfungsi untuk melihat kumpulan data yang ada didalam database sesuai dengan pengelompokannya.
327
Layar Penjualan
Gambar 4.48 Layar Penjualan
Pada layar ini user dapat mengetahui data – data yang diisi ketika transaksi penjualan yang dilakukan customer dengan perusahaan. Setelah data – data diisi tombol ”add item” berfungsi untuk menyimpan data pesanan kedalam tampilan sementara yang terletak dibagian bawahnya. Tombol ”delete” berfungsi untuk menghapus barang yang
328 telah dipesan apabila terjadi pembatalan pemesanan suatu barang. Tombol”submit” berfungsi untuk menyimpan hasil pesanan kedalam databse dan menciptakan laporan penjualan.
Layar Purchasing Order
Gambar 4.49 Layar Purchasing Order
329
Pada layar ini berfungsi sebagai hasil transaksi supplier dengan pihak perusahaan untuk dijadikan pemesanan barang perusahaan. Tombol ”add item” berfungsi sebagai penambahan data barang yang dipesan sementara yang diletakan dalam tampilan dibawahnya. Tombol ”delete” berfungsi membatalkan suatu barang yang tidak jadi dipesan. Tombol ”submit” berfungsi menyimpan kedalam database data hasil imputan untuk dijadikan laporan order.
Layar Add Customer
Gambar 4.50 Layar Customer
Layar yang berfungsi untuk menambah jumlah customer yang kemudian diseimpan kedalam database dan dapat dilihat melalui layar view customer.
330
Layar Add Divisi
Gambar 4.51 Layar Add Divisi
Layar yang berfungsi untuk menambah jumlah Divisi yang kemudian diseimpan kedalam database dan dapat dilihat melalui layar view pegawai.
331 Layar add Jenis Barang
Gambar 4.52 Layar Add jenisBarang
Layar ini berfungsi menambahkan jenis barang pada database yang dapat dilihat melalui view Barang. Layar Add Merk
Gambar 4.53 Layar Add Merk
Layar ini berfungsi menambahkan M erk barang pada database yang dapat dilihat melalui view Barang.
332 Layar Add Pegawai
Gambar 4.54 Layar Pegawai
Layar ini berfungsi untuk menambahkan jumlah pegawai kedalam database yang dapat dilihat melalui view pegawai. Layar Search
333
Gambar 4.55 Layar S earch
Layar search berfungsi sebagai pencarian data transaksi yang terjadi sesuai dengan keinginan pengguna.
334
Layer Warning
Gambar 4.56 Layar Warning
Layer warning berfungsi sebagai penunjuk apabila persediaan barang yang berada di gudang telah habis sehingga user dapat melakukan tindakan penambahan jumlah barang.
335
Layar Add Barang
Gambar 4.57 Layar Add Barang Layar ini berfungsi untuk menambahkan barang kedalam persediaan.
336
Layar View Barang
Gambar 4.58 layar View Barang Layar ini berfungsi untuk melihat sisa stock barang yang terdapat pada persediaan.