BAB IV
RANCANGAN SISTEM DAN PROGRAM USULAN
4.1. Analisa Kebutuhan Software
A. Tahap Analis
Pada sistem penjualan dan pembelian barang ini, hak user hanya dapat
melakukan penambahan stok barang, pengeluaran barang dan pembuatan laporan stok
barang. Untuk admin mempunyai hak akses sepenuhnya pada sistem ini dari olah
data, melakukan transaksi, hingga pencetakan laporan. Berikut dijelaskan
spesifikasinya.
Halaman Operator Gudang :
A1. Operator gudang melakukan login
A2. Operator gudang mengelola barang masuk
A.3. Operator gudang mengelola barang keluar
A.4. Operator gudang mengelola pengiriman
A.5 Operator gudang mengelola retur barang
A.5. Operator gudang mengelola total produksi
A.6. Operator gudang mengelola stok opname
A.7. Operator gudang mengelola pencarian barang
A.8. Operator gudang mengelola data laporan stok.
43
44
Halaman Administrasi.
B.1. Admin melakukan login
B.2. Admin dapat mengelola data barang.
B.3. Admin dapat mengelola data vendor.
B.4. Admin dapat mengelola data pelanggan.
B.5. Admin dapat menelola data unit
B.6. Admin dapat mengelola data kategori
B.7. Admin dapat mengelola data penjualan barang.
B.8. Admin dapat mengelola data pembelian barang.
B.9. Admin dapat mengelola data barang masuk
B.10. Admin dapat mengelola data barang keluar
B.11. Admin dapat mengelola data pengiriman
B.12. Admin dapat mengelola data retur barang
B.13. Admin dapat mengelola data total produksi
B.14. Admin dapat mengelola data stok opname
B.15. Admin dapat mencetak semua laporan.
45
B. Use Case Diagram
1. Use Case Diagram Halaman Operator Gudang
Gambar IV. 1 Use Case Diagram Halaman Operator Gudang
46
Deskripsi Use Case Diagram Halaman Operator Gudang
Tabel IV. 1 Descripsi Use Case Diagram Halaman Operator Gudang
Use Case Name Halaman Operator GudangRequirements A1-A8Goal Mempermudah user dalam hal mengelola
persediaan barangPre-conditions Operator gudang melakukan loginPost-conditions Operator gudang melakukan input barang
masuk, barang keluar, stok opname, data pengiriman, total produksi, retur barang pencetakan laporan stok, dan Pencarian barang.
Failed end condition Operator gudang membatalkan pengeluaran barangOperator gudang membatalkan penambahan stok
Primary Actors Operator gudangMain Flow / Basic Path 1. Operator gudang melakukan login
2. Operator gudang mengelola barang masuk.
3. Operator gudang mengelola barang keluar.
4. Operator gudang mengelola pengiriman5. Operator gudang mengelola retur
barang.6. Operator gudang mengelola total
produksi.7. Operator gudang mengelola pencarian
barang.8. Operator barang mengelola stok
opname.
47
2. Use Case Diagram Halaman Administrasi
Gambar IV. 2 Use Case Diagram Halaman Administrasi
48
Deskripsi Use Case Diagram Halaman Admin Kelola Data Barang
Tabel IV. 2 Deskripsi Use Case Diagram Halaman Admin Kelola Data Barang
Use Case Name Halaman AdministrasiRequirements B-2Goal Admin dapat mengelola data barangPre-conditions Admin telah loginPost-conditions Data barang tersimpan, teredit, terhapusFailed end condition Gagal menyimpan, mengedit, dan
menghapusPrimary Actors AdministratorMain Flow / Basic Path 1. Admin dapat menambah data barang.
2. Admin dapat mengedit data barang.3. Admin dapat menghapus data barang.4. Admin dapat menvari data barang.5. Admin dapat melihat data barang.
Deskripsi Use Case Diagram Halaman Admin Kelola Data Vendor
Tabel IV. 3 Deskripsi Use Case Diagram Halaman Admin Kelola Data Vendor
Use Case Name Halaman AdministrasiRequirements B-3Goal Admin dapat mengelola data vendorPre-conditions Admin telah loginPost-conditions Data vendor tersimpan, teredit, terhapusFailed end condition Gagal menyimpan, mengedit, dan
menghapusPrimary Actors AdministratorMain Flow / Basic Path 1. Admin dapat menambah data vendor.
2. Admin dapat mengedit data vendor.3. Admin dapat menghapus data vendor.4. Admin dapat menvari data vendor.5. Admin dapat melihat data vendor.
49
Deskripsi Use Case Diagram Halaman Admin Kelola Data Pelanggan
Tabel IV. 4 Deskripsi Use Case Diagram Halaman Admin Kelola Data Pelanggan
Use Case Name Halaman AdministrasiRequirements B-4Goal Admin dapat mengelola data pelangganPre-conditions Admin telah loginPost-conditions Data pelanggan tersimpan, teredit, terhapusFailed end condition Gagal menyimpan, mengedit, dan
menghapusPrimary Actors AdministratorMain Flow / Basic Path 1. Admin dapat menambah data pelanggan.
2. Admin dapat mengedit data pelanggan.3. Admin dapat menghapus data pelanggan.4. Admin dapat menvari data pelanggan.5. Admin dapat melihat data pelanggan.
Deskripsi Use Case Diagram Halaman Admin Kelola Data Unit Pruduk
Tabel IV.5 Deskripsi Use Case Diagram Halaman Admin Kelola Data Unit
Use Case Name Halaman AdministrasiRequirements B-5Goal Admin dapat mengelola data unitPre-conditions Admin telah loginPost-conditions Data unit telah tersimpanFailed end condition Gagal menyimpanPrimary Actors AdministratorMain Flow / Basic Path 1. Admin dapat menambah data Unit.
50
Deskripsi Use Case Diagram Halaman Admin Kelola Data Kategori
Tabel IV.6 Deskripsi Use Case Diagram Halaman Admin Kelola Data Kategori
Use Case Name Halaman AdministrasiRequirements B-6Goal Admin dapat mengelola data kategoriPre-conditions Admin telah loginPost-conditions Data kategori tersimpanFailed end condition Gagal menyimpan
Primary Actors AdministratorMain Flow / Basic Path 1. Admin dapat menambah data kategori.
Deskripsi Use Case Diagram Halaman Admin Kelola Data Penjualan
Tabel IV. 7 Deskripsi Use Case Diagram Halaman Admin Kelola Data Penjualan
Use Case Name Halaman AdministrasiRequirements B-7Goal Admin dapat mengelola data ;penjualanPre-conditions Admin telah loginPost-conditions Data penjulan tersimpan, tercetakFailed end condition Gagal menyimpan dan mencetak
Primary Actors AdministratorMain Flow / Basic Path 1. Admin dapat menambah data penjualan.
2. Admin dapat mencetak data penjualan.3. Admin dapat mencari data penjualan.
51
Deskripsi Use Case Diagram Halaman Admin Kelola Data Pembelian
Tabel IV. 8 Deskripsi Use Case Diagram Halaman Admin Kelola Data Pembelian
Use Case Name Halaman AdministrasiRequirements B-8Goal Admin dapat mengelola data pembelianPre-conditions Admin telah loginPost-conditions Data pembelian tersimpan, tercetakFailed end condition Gagal menyimpan dan mencetak
Primary Actors AdministratorMain Flow / Basic Path 1. Admin dapat menambah data pembelian.
2. Admin dapat mencetak data pembelian.3. Admin dapat mencari data pembelian.
Deskripsi Use Case Diagram Halaman Admin Kelola Barang Masuk
Tabel IV. 9 Deskripsi Use Case Diagram Halaman Admin Barang Masuk
Use Case Name Halaman AdministrasiRequirements B-9Goal Admin dapat Mengelo Barang MasukPre-conditions Admin telah loginPost-conditions Data barang masuk tersimpan, tercetakFailed end condition Gagal menyimpan
Primary Actors AdministratorMain Flow / Basic Path 1. Admin datat menambah barang masuk.
2. Admin dapat mencetak barang masuk.3. Admin dapat mencari barang masuk.
52
Deskripsi Use Case Diagram Halaman Admin Kelola Barang Keluar
Tabel IV. 10 Deskripsi Use Case Diagram Halaman Admin Barang Keluar
Use Case Name Halaman AdministrasiRequirements B-10Goal Admin dapat Mengelola Barang KeluarPre-conditions Admin telah loginPost-conditions Data barang keluar tersimpan, tercetakFailed end condition Gagal menyimpan
Gagal mencetakPrimary Actors AdministratorMain Flow / Basic Path 1. Admin datat menambah barang keluar.
2. Admin dapat mencetak barang keluar.3. Admin dapat mencari barang keluar.
Deskripsi Use Case Diagram Halaman Admin Kelola Pengiriman
Tabel IV. 11 Deskripsi Use Case Diagram Halaman Admin Pengiriman
Use Case Name Halaman AdministrasiRequirements B-11Goal Admin dapat Mengelola PengirimanPre-conditions Admin telah loginPost-conditions Data pengiriman tersimpanFailed end condition Gagal menyimpan
Primary Actors AdministratorMain Flow / Basic Path 1. Admin datat menambah pengiriman.
2. Admin dapat merubah pengiriman.3. Admin dapat mencari barang masuk.
Deskripsi Use Case Diagram Halaman Admin Kelola Retur BarangTabel IV. 12 Deskripsi Use Case Diagram Halaman Admin Retur Barang
Use Case Name Halaman AdministrasiRequirements B-12Goal Admin dapat Mengelola Retur BarangPre-conditions Admin telah loginPost-conditions Data retur barang tersimpan, tercetakFailed end condition Gagal menyimpan
Primary Actors Administrator
53
Main Flow / Basic Path 1. Admin datat menambah retur barang.2. Admin dapat mencetak retur barang.3. Admin dapat mencari retur barang.
Deskripsi Use Case Diagram Halaman Admin Kelola Total Produksi
Tabel IV. 13 Deskripsi Use Case Diagram Halaman Admin Total Produksi
Use Case Name Halaman AdministrasiRequirements B-13Goal Admin dapat Mengelola Total ProduksiPre-conditions Admin telah loginPost-conditions Data total produksi tersimpan, tercetakFailed end condition Gagal menyimpan
Gagal MencetakPrimary Actors AdministratorMain Flow / Basic Path 1. Admin datat menambah total produksi.
2. Admin dapat mencetak total produksi.
Deskripsi Use Case Diagram Halaman Admin Kelola Stok Opname
Tabel IV. 14 Deskripsi Use Case Diagram Halaman Admin Stok Opname
Use Case Name Halaman AdministrasiRequirements B-14Goal Admin dapat Mengelola Stok OpnamePre-conditions Admin telah loginPost-conditions Data stok opname tersimpanFailed end condition Gagal menyimpan
Primary Actors AdministratorMain Flow / Basic Path 1. Admin datat menambah stok opname.
54
Deskripsi Use Case Diagram Halaman Admin Kelola Laporan
Tabel IV. 15 Deskripsi Use Case Diagram Halaman Admin Kelola Laporan
Use Case Name Halaman AdministrasiRequirements B-15Goal Admin dapat mencetak laporanPre-conditions Admin telah loginPost-conditions Data laporan tercetakFailed end condition Gagal mencetak
Primary Actors AdministratorMain Flow / Basic Path 1. Admin cetak laporan data barang.
2. Admin cetak laporan data vendor.3. Admin cetak laporan data pelanggan.4. Admin cetak laporan data karyawan.5. Admin cetak laporan data penjulan.6. Admin cetak laporan data pembelian
55
C. Activity Diagram
Berikut penggambaran activity diagram pada sistem aplikasi penjualan dan
pembelian barang.
1. Acitivity Diagram Login
Gambar IV. 3 Activity Diagram Login
2. Activity Diagram Master
56
Gambar IV. 4 Activity Diagram Master
3. Activity Diagram Transaksi
57
Gambar IV. 5 Activity Diagram Transaksi
4. Activity Diagram Persediaan
58
Gambar IV. 6 Activity Diagram Persediaan
5. Activity Diagram Laporan
59
Gambar IV. 7 Activity Diagram Laporan
4.2 Desain
60
Berikut dijelaskan tentang database pada sistem aplikasi penjualan dan
pembelian yang telah dibuat.
4.2.1 Database
1. Entity Relationship Diagram
Gambar IV. 8 Entity Relationship Diagram
61
2. Logical Record Structure
62
Gambar VI.9 Logical Record Structure
3. Spesifikasi File
Dalam sistem aplikasi penjualan dan pembelian barang ini terdapat satu
database yaitu “Inventori.bdb”, berikut penjelasan untuk spesifikasi filenya.
a. Tabel Barang
Tabel ini berfungsi untuk menyimpan data barang. Tabel ini terdiri dari field-
field sebagai berikut :
Nama Database : Inventory.mdbNama File : Tabel BarangAkronim : BarangPanjang Record : 139 ByteKunci Field : Kd_brg
Tabel IV.16.Spesifikasi File Tabel Barang
No Elemen Data Nama Field Type Size Keterangan1 Kode Barang Kd_brg Character 15 Primary Key2 Nama Barang Nm_brg Character 404 Kelompok Barang Kel_brg Character 155 Satuan Satuan Character 56 Kapasitas Kap Numeric 37 Berat Berat Numeric 38 Stok Stok Numeric 69 Tanggal Pembelian Tgl_beli Date time 810 Harga Barang Harga Numeric 1011 Keterangan Ket Character 20
b. Tabel Vendor
Tabel ini berfungsi untuk menyimpan data vendor. Tabel ini terdiri dari field-
field sebagai berikut :
Nama Database : Inventory.mdbNama File : Tabel Vendor
63
Akronim : VendorPanjang Record : 135 ByteKunci Field : Kd_vendor
Tabel IV.17.Spesifikasi File Tabel Vendor
No Elemen Data Nama Field Type Size Keterangan1 Kode Vendor Kd_Vendor Character 15 Primary Key2 Nama Vendor Nm_Vendor Character 253 Alamat Alamat Character 504 Atas Nama Attn Character 255 No Handphone No_hp Numeric 106 No Telepon Notelp Numeric 127 No Fax Nofax Numeric 107 Email Email Character 208 Website Website Character 20
c. Tabel Pelanggan
Tabel ini berfungsi untuk menyimpan data pelanggan. Tabel ini terdiri dari field-
field sebagai berikut :
Nama Database : Inventory.mdbNama File : Tabel PelangganAkronim : PelangganPanjang Record : 205 ByteKunci Field : Kd_Pelanggan
Tabel IV.18.Spesifikasi File Tabel Pelanggan
No Elemen Data Nama Field Type Size Keterangan1 Kode Pelanggan Kd_karyawan Character 15 Primary Key2 Nama Pelanggan Nm_karyawan Character 253 Alamat Jns_kelamin Character 504 Atas Nama Alamat Character 105 Jabatan Notelp Character 126 No Handphone No_HP Number 127 No Telepon No_tlp Number 128 No Fax No_fax Number 12
64
9 Email Email Character 2510 Webbsite Website Character 20d. Tabel Kategori
Tabel ini berfungsi untuk menyimpan data kategori. Tabel ini terdiri dari field-
field sebagai berikut :
Nama Database : Inventory.mdbNama File : Tabel KategoriAkronim : KategoriPanjang Record : 30 ByteKunci Field : Nm_Kategori
Tabel IV.19.Spesifikasi File Tabel Kategori
No Elemen Data Nama Field Type Size Keterangan1 Nama Kategori Nm_Kategori Character 15 Primary Key2 Keterangan Keterangan Character 15
e. Tabel Unit
Tabel ini berfungsi untuk menyimpan data unit barang. Tabel ini terdiri dari
field-field sebagai berikut :
Nama Database : Inventory.mdbNama File : Tabel UnitAkronim : UnitPanjang Record : 10 ByteKunci Field : Nm_Unit
Tabel IV.20.Spesifikasi File Tabel Unit
No Elemen Data Nama Field Type Size Keterangan1 Nama Unit Nm_Unit Character 5 Primary Key2 Keterangan Unit Keterangan Character 5
f. Tabel Pengguna
65
Tabel ini berfungsi untuk menyimpan data pengguna. Tabel ini terdiri dari field-
field sebagai berikut :
Nama Database : Inventory.mdbNama File : Tabel PenggunaAkronim : PenggunaPanjang Record : 139 ByteKunci Field : Kd_User
Tabel IV.21.Spesifikasi File Tabel Pengguna
No Elemen Data Nama Field Type Size Keterangan1 Kode User Kd_user Character 15 Primary Key2 Nama User Nm_user Character 204 Password Password Character 105 Level User Level Character 15
g. Tabel Penjualan
Tabel ini berfungsi untuk menyimpan data penjualan. Tabel ini terdiri dari field-
field sebagai berikut :
Nama Database : Inventory.mdbNama File : Tabel PenjualanAkronim : PenjualanPanjang Record : 55 ByteKunci Field : kd_penjualan
Tabel IV.22.Spesifikasi File Tabel Penjualan
No Elemen Data Nama Field Type Size Keterangan1 Kode Penjualan Kd_Penjualan Character 20 Primary Key2 Kode Pelanggan Kd_Pelanggan Character 153 Tanggal Penjualan Tggl_penjualan Date Time 84 Total Harga Total Numeric 95 PPN PPN Character 3
66
h. Tabel Detail Penjualan
Tabel ini berfungsi untuk menyimpan data detail penjualan. Tabel ini terdiri dari
field-field sebagai berikut :
Nama Database : Inventory.mdbNama File : Tabel Detail PenjualanAkronim : Detail_penjualanPanjang Record : 72 ByteKunci Field : kd_detail
Tabel IV.23.Spesifikasi File Tabel Detail Penjualan
No Elemen Data Nama Field Type Size Keterangan1 Kode Detail Penjualan Kd_detail Character 20 Primary Key2 Kode Penjualan Kd_penjualan Character 20 Foreign Key3 Kode Barang Kd_brg Character 20 Foreign Key4 Quantity Qty Numeric 35 Subtotal Subtotal Numeric 9
i. Tabel Pembelian
Tabel ini berfungsi untuk menyimpan data pembelian. Tabel ini terdiri dari field-
field sebagai berikut :
Nama Database : Inventory.mdbNama File : Tabel PembelianAkronim : PembelianPanjang Record : 55 ByteKunci Field : No_PO
Tabel IV.24.Spesifikasi File Tabel Pembelian
No Elemen Data Nama Field Type Size Keterangan1 No Purchase Order No_PO Character 20 Primary Key2 Kode Vendor Kd_vendor Character 15 Foreign Key3 Total Total Numeric 94 Tanggal Pembelian Tggl_pembelian Date time 85 PPN PPN Character 3
67
j. Tabel Detail Pembelian
Tabel ini berfungsi untuk menyimpan data detail pembelian. Tabel ini terdiri dari
field-field sebagai berikut :
Nama Database : Inventory.mdbNama File : Tabel Detail PembelianAkronim : Detail_pembelianPanjang Record : 67 ByteKunci Field : Detail_pembelian
Tabel IV.25.Spesifikasi File Tabel Detail Pembelian
No Elemen Data Nama Field Type Size Keterangan1 No Deatil Pembelian Detail_pembelian Character 20 Primary Key2 No Purchase Order No_po Character 20 Foreign Key3 Kode Barang Kd_brg Character 15 Foreign Key4 Subtotal Subtotal Numeric 95 Quantity Qty Numeric 3
k. Tabel Barang Masuk
Tabel ini berfungsi untuk menyimpan data barang masuk. Tabel ini terdiri dari
field-field sebagai berikut :
Nama Database : Inventory.mdbNama File : Tabel barang MasukAkronim : barang_masukPanjang Record : 78 ByteKunci Field : Kd_sjmasuk
Tabel IV.26.Spesifikasi File Tabel Barang Masuk
No Elemen Data Nama Field Type Size Keterangan1 Kode Surat Jalan Masuk Kd_Sjmasuk Character 20 Primary Key2 Tanggal Masuk Tggl_masuk Date time 83 Kode Vendor Kd_vendor Character 15 Foreign Key4 No Purchase Order No_PO Character 20 Foreign Key5 Kode Karyawan Kd_karyawan Character 15 Foreign Key
68
l. Tabel Detail Barang Masuk
Tabel ini berfungsi untuk menyimpan data detail barang masuk. Tabel ini terdiri
dari field-field sebagai berikut :
Nama Database : Inventory.mdbNama File : Tabel Detail Barang MasukAkronim : detail_brgmasuk.mdbPanjang Record : 58 ByteKunci Field : Kd_detailbm
Tabel IV.27.Spesifikasi File Tabel Detail Barang Masuk
No Elemen Data Nama Field Type Size Keterangan1 Kode detail barang masuk Kd_detailbm Character 20 Primary Key2 Kode surat jalan masuk Kd_sjmasuk Character 20 Foreign Key3 Kode barang Kd_brg Character 15 Foreign Key4 Quantity Qty Numeric 3
m. Tabel Barang Keluar
Tabel ini berfungsi untuk menyimpan data barang keluar. Tabel ini terdiri dari
field-field sebagai berikut :
Nama Database : Inventory.mdbNama File : Tabel Barang KeluarAkronim : barang_keluar.mdbPanjang Record : 78 ByteKunci Field : No_DO
Tabel IV.28.Spesifikasi File Tabel Barang Keluar
No Elemen Data Nama Field Type Size Keterangan1 No Delivery Order No_DO Character 20 Primary Key2 Tanggal Barang Keluar Tggl_keluar Date time 83 No PO Customer No_pocustomer Character 20 Foreign Key4 Kode Customer Kd_customer Character 15 Foreign Key5 Kode Karyawan Kd_karyawan Character 15 Foreign Key
69
n. Tabel Detail Barang Keluar
Tabel ini berfungsi untuk menyimpan data detail barang keluar. Tabel ini
terdiri dari field-field sebagai berikut :
Nama Database : Inventory.mdbNama File : Tabel Detail Barang KeluarAkronim : detail_barangkeluarPanjang Record : 48 ByteKunci Field : kd_detailbk
Tabel IV.29.Spesifikasi File Tabel Detail Barang Keluar
No Elemen Data Nama Field Type Size Keterangan1 Kode Detail Barang Keluar Kd_detailbk Character 15 Primary Key2 No Delivery Order No_DO Character 15 Foreign Key3 Quantity Qty Numeric 34 Kode Barang Kd_brg Character 15 Foreign Key
70
4.2.2 Software Architecture
A. Component Diagram
Gambar IV. 10 Component Diagram
<< Desktop Application >> 1. Master Barang 2. Master Unit 3. Master Kategori 4. Master Pelanggan 5. Master Vendor 6. Penjualan 7. Pembelian 8. Barang Masuk 9. Barang Keluar 10. Total Produksi 11. Laporan Barang 12. Laporan Karyawan 13. Laporan Pelanggan 14. Laporan Pembelian 15. Laporan Penjualan 16. Laporan Barang Masuk 17. Laporan Barang Keluar
<< Pembelian dan Penjualan >>
Inventory.Mdb
<< View Data >> 1. Tabel Barang 2. Tabel Unit 3. Tabel Kategori 4. Tabel Pelanggan 5. Tabel Vendor 6. Tabel Penjualan 7. Tabel Detail Penjualan 8. Tabel Pembelian 9. Tabel Detail Pembelian 10. Tabel Barang Masuk 11. Tabel Detail Barang Masuk 12. Tabel Barang Keluar 13. Tabel Detail Barang Keluar 14. Tabel Total Produksi
71
B. Deployment Diagram
Gambar IV. 11 Deployment Diagram
72
4.2.3 User Interface
1. User Interface Login User
Gambar IV. 12 Tampilan Login User
2. User Interface Menu Utama Penjualan dan Pembelian Barang
73
Gambar IV. 13 Tampilan Halaman Menu Utama
3. User Interface Form Data Barang
Gambar IV. 14 Tampilan Form Data Barang
4. User Interface Form Transaksi Penjualan
74
Gambar IV. 15 Tampilan Form Transaksi Penjualan
5. User Interface Form Barang Masuk
Gambar IV. 16 Tampilan Form Barang Masuk
6. User Interface Form Barang Keluar
75
Gambar IV. 17 Tampilan Form Barang Keluar
7. User Interface Form Retur Barang
Gambar IV. 18 Tampilan Form Barang Retur Barang
76
4.3. Code GenerationA. Login Pengguna
unit formlogin;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, jpeg, ExtCtrls, Buttons, DB, ADODB;
type TLogin = class(TForm) Image1: TImage; Label1: TLabel; Label2: TLabel; Label3: TLabel; username: TComboBox; password: TEdit; login: TBitBtn; batal: TBitBtn; ADOConnection1: TADOConnection; adoguna: TADOQuery; procedure batalClick(Sender: TObject); procedure loginClick(Sender: TObject); procedure usernameChange(Sender: TObject); procedure FormActivate(Sender: TObject); procedure passwordKeyPress(Sender: TObject; var Key: Char); private { Private declarations } public procedure ADMINISTRATOR; procedure OPERATOR; { Public declarations } end;
var Login: TLogin; y:integer; id:string;
implementation
uses formmenu;
77
{$R *.dfm}procedure tlogin.ADMINISTRATOR;begin;menu_utama.datamaster.Visible:=true;menu_utama.datatransaksi.Visible:=true;menu_utama.datapersediaan.Visible:=true;menu_utama.datalaporan.Visible:=true;end;
procedure tlogin.OPERATOR;beginmenu_utama.datamaster.Visible:=false;menu_utama.datatransaksi.Visible:=false;menu_utama.lapdatamaster.Enabled:=false;menu_utama.lapdatatransaksi.Enabled:=false;menu_utama.gantipass.Enabled:=false;end;
procedure TLogin.batalClick(Sender: TObject);beginapplication.Terminate;end;
procedure TLogin.loginClick(Sender: TObject);varcepat:Longint;str:string;beginif adoguna.Locate('nm_user',username.Text,[]) thenbeginif adoguna.Locate('password',password.Text,[]) thenbeginif adoguna.FieldValues['level']='ADMINISTRATOR' then beginADMINISTRATOR;menu_utama.Show;menu_utama.StatusBar1.Panels[0].Text:=adoguna['nm_user'];login.Hide;endelse if adoguna.FieldValues['level']='OPERATOR' then beginOPERATOR;menu_utama.Show;menu_utama.StatusBar1.Panels[0].Text:=adoguna['nm_user'];login.Hide;end
78
endelse if password.Text='' thenbeginMessageDlg('password belum di isi',mtInformation,[mbok],0 );password.SetFocus;endelsebeginif(Application.MessageBox('Password yang anda masukan salah','INFO',MB_OK+MB_ICONWARNING)=IDOK) theny:=y+1;beginif y=1 thenbeginMessageDlg('anda memiliki 2 kesempatan lagi',mtInformation,[mbok],0 );password.SetFocus;endelse if y=2 thenbeginMessageDlg('anda memiliki 1 kesempatan lagi',mtInformation,[mbok],0 );password.SetFocus;endelse if y=3 thenbeginMessageDlg('Maaf anda tidak berhak masuk',mtInformation,[mbok],0 );close;endendendendelse if (username.Text='')and(password.Text='')thenbeginMessageDlg('Nama User dan Password Masih Kosong',mtInformation,[mbok],0 );username.SetFocus;endelsebeginMessageDlg('Username yang anda masukan salah',mtWarning,[mbok],0 );username.SetFocus;endend;
procedure TLogin.usernameChange(Sender: TObject);beginif adoguna.Locate('nm_user',username.Text,[]) then
79
beginpassword.SetFocus;end;end;
procedure TLogin.FormActivate(Sender: TObject);beginusername.Text:='';password.Text:='';username.SetFocus;end;
procedure TLogin.passwordKeyPress(Sender: TObject; var Key: Char);beginif key=#13 thenlogin.SetFocus;end;
end.
B. Data Barang
unit formproduk;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, cxGraphics, cxControls, cxLookAndFeels, cxLookAndFeelPainters, cxContainer, cxEdit, dxSkinsCore, dxSkinBlack, dxSkinBlue, dxSkinCaramel, dxSkinCoffee, dxSkinDarkRoom, dxSkinDarkSide, dxSkinFoggy, dxSkinGlassOceans, dxSkiniMaginary, dxSkinLilian, dxSkinLiquidSky, dxSkinLondonLiquidSky, dxSkinMcSkin, dxSkinMoneyTwins, dxSkinOffice2007Black, dxSkinOffice2007Blue, dxSkinOffice2007Green, dxSkinOffice2007Pink, dxSkinOffice2007Silver, dxSkinOffice2010Black, dxSkinOffice2010Blue, dxSkinOffice2010Silver, dxSkinPumpkin, dxSkinSeven, dxSkinSharp, dxSkinSilver, dxSkinSpringTime, dxSkinStardust, dxSkinSummer2008, dxSkinsDefaultPainters, dxSkinValentine, dxSkinXmas2008Blue, cxImage, Grids, DBGrids, DB, XPMan, StdCtrls, Buttons, Mask, ADODB;
type
80
Tprodukk = class(TForm) panel2: TPanel; perbarui: TSpeedButton; cariproduk: TEdit; cjenis: TComboBox; panel1: TPanel; Tambah: TSpeedButton; keluar: TSpeedButton; panel3: TPanel; dbproduk: TDBGrid; XPManifest1: TXPManifest; databarang: TDataSource; ADOCbarang: TADOConnection; ADObarang: TADOQuery; adookk: TADOTable; procedure TambahClick(Sender: TObject); procedure dbprodukDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); procedure keluarClick(Sender: TObject); procedure perbaruiClick(Sender: TObject); procedure cariprodukChange(Sender: TObject); procedure cjenisChange(Sender: TObject); procedure FormShow(Sender: TObject); procedure cariprodukClick(Sender: TObject); procedure dbprodukDblClick(Sender: TObject); private { Private declarations } public { Public declarations } end;
var produkk: Tprodukk;
implementation
uses forminputproduk;
{$R *.dfm}
procedure Tprodukk.TambahClick(Sender: TObject);begininputproduk.ShowModal;inputproduk.bersih;end;
81
procedure Tprodukk.dbprodukDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);beginif dbproduk.DataSource.DataSet.RecNo mod 2 =0 thenDBproduk.Canvas.Brush.Color := clskyBlue;DBproduk.DefaultDrawColumnCell(rect, datacol, column, state);end;
procedure Tprodukk.keluarClick(Sender: TObject);beginclose;end;
procedure Tprodukk.perbaruiClick(Sender: TObject);beginadobarang.Close;ADObarang.SQL.Clear;ADObarang.SQL.Append('SELECT * FROM barang order by kd_brg desc');ADObarang.Open;end;
procedure Tprodukk.cariprodukChange(Sender: TObject);beginif cjenis.ItemIndex = 0 then
adobarang.SQL.Text:='Select * FROM barang WHERE kd_brg Like"%'+cariproduk.Text+'%"'else if cjenis.ItemIndex = 1 thenadobarang.SQL.Text:='Select * FROM barang WHERE nm_brg Like"%'+cariproduk.Text+'%"'else if cjenis.ItemIndex = 2 thenadobarang.SQL.Text:='Select * FROM barang WHERE kel_brg Like"%'+cariproduk.Text+'%"';adobarang.Active:=true;end;
procedure Tprodukk.cjenisChange(Sender: TObject);begincariprodukChange(sender);end;
procedure Tprodukk.FormShow(Sender: TObject);begin
82
adobarang.Active:=false;adobarang.Close;adobarang.SQL.Clear;adobarang.SQL.Text:='select * from barang';adobarang.Active:=true;end;
procedure Tprodukk.cariprodukClick(Sender: TObject);begincariproduk.Text:='';end;
procedure Tprodukk.dbprodukDblClick(Sender: TObject);begininputproduk.kdproduk.Text:=dbproduk.Fields[0].AsString;inputproduk.nmproduk.Text:=dbproduk.Fields[1].AsString;inputproduk.kelproduk.Text:=dbproduk.Fields[2].AsString;inputproduk.beraat.Text:=dbproduk.Fields[4].AsString;inputproduk.cap.Text:=dbproduk.Fields[6].AsString;inputproduk.hrg.Text:=dbproduk.Fields[7].AsString;inputproduk.stok.Text:=dbproduk.Fields[8].AsString;inputproduk.tgglbeli.DateTime:=dbproduk.Fields[9].AsDateTime;inputproduk.ket.Text:=dbproduk.Fields[10].AsString;inputproduk.csimpan.Visible:=false;inputproduk.cubah.Visible:=true;inputproduk.kdproduk.Enabled:=false;inputproduk.ShowModal;end;
end.unit forminputproduk;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DBCtrls, Buttons, cxGraphics, cxControls, cxLookAndFeels, cxLookAndFeelPainters, dxSkinsCore, dxSkinBlack, dxSkinBlue, dxSkinCaramel, dxSkinCoffee, dxSkinDarkRoom, dxSkinDarkSide, dxSkinFoggy, dxSkinGlassOceans, dxSkiniMaginary, dxSkinLilian, dxSkinLiquidSky, dxSkinLondonLiquidSky, dxSkinMcSkin, dxSkinMoneyTwins, dxSkinOffice2007Black, dxSkinOffice2007Blue, dxSkinOffice2007Green, dxSkinOffice2007Pink, dxSkinOffice2007Silver, dxSkinOffice2010Black, dxSkinOffice2010Blue, dxSkinOffice2010Silver, dxSkinPumpkin, dxSkinSeven, dxSkinSharp, dxSkinSilver, dxSkinSpringTime, dxSkinStardust,
83
dxSkinSummer2008, dxSkinsDefaultPainters, dxSkinValentine, dxSkinXmas2008Blue, dxSkinscxPCPainter, cxPC, DB, ADODB, ComCtrls;
type Tinputproduk = class(TForm) cxPageControl1: TcxPageControl; cxTabSheet1: TcxTabSheet; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label5: TLabel; ckel: TSpeedButton; Label6: TLabel; Label7: TLabel; Label8: TLabel; kdproduk: TEdit; nmproduk: TEdit; kelproduk: TEdit; beraat: TEdit; cap: TEdit; stok: TEdit; Label9: TLabel; hrg: TEdit; Label10: TLabel; tgglbeli: TDateTimePicker; Label11: TLabel; ket: TEdit; ADOConnection1: TADOConnection; adounit: TADOQuery; ADOQuery1: TADOQuery; csimpan: TBitBtn; cbatal: TBitBtn; cubah: TBitBtn; chapus: TBitBtn; dbunit: TDBLookupComboBox; procedure ckelClick(Sender: TObject); procedure kdprodukKeyPress(Sender: TObject; var Key: Char); procedure nmprodukKeyPress(Sender: TObject; var Key: Char); procedure stokKeyPress(Sender: TObject; var Key: Char); procedure beraatKeyPress(Sender: TObject; var Key: Char); procedure capKeyPress(Sender: TObject; var Key: Char); procedure hrgKeyPress(Sender: TObject; var Key: Char); procedure stokKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure beraatKeyDown(Sender: TObject; var Key: Word;
84
Shift: TShiftState); procedure capKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure csimpanClick(Sender: TObject); procedure cubahClick(Sender: TObject); procedure cbatalClick(Sender: TObject); procedure chapusClick(Sender: TObject); private { Private declarations } public procedure bersih; { Public declarations } end;
var inputproduk: Tinputproduk;
implementation
uses formcariunit, formcarikategori, formkategori, formproduk, formunit, formmcariunit, formmenu, ckelompokbarang;
{$R *.dfm}procedure Tinputproduk.ckelClick(Sender: TObject);beginckelproduk.ShowModal;end;
procedure tinputproduk.bersih;beginkdproduk.Text:='';nmproduk.Text:='';kelproduk.Text:='';stok.Text:='';beraat.Text:='';cap.Text:='';hrg.Text:='';ket.Text:='';end;
procedure Tinputproduk.kdprodukKeyPress(Sender: TObject; var Key: Char);beginwith adoquery1 dobeginif key=#13 then
85
beginActive := False;SQL.Clear;SQL.Text :=' SELECT * FROM barang WHERE kd_brg = ' + QuotedStr(kdproduk.Text);Active := True;if adoquery1.RecordCount > 0 thenbeginMessageDlg('Kode produk yang di input sudah ada !!!',mtError,[mbOK],0);kdproduk.Text:='';kdproduk.SetFocus;end;end;end;end;
procedure Tinputproduk.nmprodukKeyPress(Sender: TObject; var Key: Char);beginif key=#13 thenkelproduk.SetFocus;end;
procedure Tinputproduk.stokKeyPress(Sender: TObject; var Key: Char);beginif not (key in['0'..'9',#8,#13,#32]) then begin key:=#0; showmessage('Data Harus Berupa Angka'); end;end;
procedure Tinputproduk.beraatKeyPress(Sender: TObject; var Key: Char);beginif not (key in['0'..'9',#8,#13,#32]) then begin key:=#0; showmessage('Data Harus Berupa Angka'); end;
end;
procedure Tinputproduk.capKeyPress(Sender: TObject; var Key: Char);beginif not (key in['0'..'9',#8,#13,#32]) then begin
86
key:=#0; showmessage('Data Harus Berupa Angka'); end;
end;
procedure Tinputproduk.hrgKeyPress(Sender: TObject; var Key: Char);beginif not (key in['0'..'9',#8,#13,#32]) then begin key:=#0; showmessage('Data Harus Berupa Angka'); end;
end;
procedure Tinputproduk.stokKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);beginif key=VK_Return then beraat.SetFocus;end;
procedure Tinputproduk.beraatKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);beginif key=VK_Return then cap.SetFocus;end;
procedure Tinputproduk.capKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);beginif key=VK_return then hrg.SetFocus;end;
procedure Tinputproduk.csimpanClick(Sender: TObject);beginif(kdproduk.Text='')or(nmproduk.Text='')or(stok.Text='')then begin application.MessageBox('Data Tidak Boleh Ada Yang Kosong','Pemberitahuan',MB_OK + MB_ICONERROR); exit; end;
ADOQuery1.Close;ADOQuery1.SQL.Clear;
87
ADOQuery1.SQL.Append('insert into barang values("'+kdproduk.Text+'","'+nmproduk.Text+'","'+kelproduk.Text+'","'+dbunit.Text+'","'+beraat.Text+'","'+cap.Text+'","'+hrg.Text+'","'+stok.Text+'","'+DateToStr(tgglbeli.Date)+'","'+ket.Text+'")');ADOQuery1.ExecSQL;ADOQuery1.SQL.Clear;ADOQuery1.SQL.Add('select * from barang');ADOQuery1.Open;bersih;kdproduk.SetFocus;end;
procedure Tinputproduk.cubahClick(Sender: TObject);beginADOQuery1.Close;ADOQuery1.SQL.Clear;ADOQuery1.SQL.Add('update barang set nm_brg="'+nmproduk.Text+'",kel_brg="'+kelproduk.text+'",satuan="'+dbunit.text+'",berat="'+beraat.Text+'",kapasitas="'+cap.Text+'",hrg_brg="'+hrg.Text+'",Stok_brg="'+stok.Text+'",Tggl_beli="'+DateToStr(tgglbeli.Date)+'",keterangan="'+ket.Text+'" where kd_brg="'+kdproduk.Text+'"');ADOQuery1.ExecSQL;ADOQuery1.SQL.Clear;ADOQuery1.SQL.Add('select * from barang');produkk.ADObarang.Open;inputproduk.Close;end;
procedure Tinputproduk.cbatalClick(Sender: TObject);beginclose;end;
procedure Tinputproduk.chapusClick(Sender: TObject);varstr:string;beginadoquery1.Delete;adoquery1.First;adoquery1.Refresh;end;end.
C. Transaksi Penjualan
88
unit formpenjualan;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, DBGrids, ExtCtrls, StdCtrls, Buttons, ComCtrls, DB, ADODB, OleCtrls, Crystal_TLB;
type Tpenjualan = class(TForm) Panel1: TPanel; Panel2: TPanel; Panel3: TPanel; DBGrid1: TDBGrid; Label1: TLabel; Label2: TLabel; kdpenjualan: TEdit; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label8: TLabel; Label9: TLabel; kdproduk: TEdit; SpeedButton1: TSpeedButton; nmproduk: TEdit; kdpelanggan: TEdit; SpeedButton2: TSpeedButton; nmpelanggan: TEdit; jlm: TEdit; tgglpenjualan: TDateTimePicker; Panel4: TPanel; Label10: TLabel; Label11: TLabel; Label12: TLabel; Panel5: TPanel; tambah: TSpeedButton; simpan: TSpeedButton; batal: TSpeedButton; cetak: TSpeedButton; keluar: TSpeedButton; ADOConnection1: TADOConnection; ADOsementara: TADOQuery; DataSource1: TDataSource;
89
ADOdetailpenjualan: TADOQuery; adobarang: TADOQuery; satuan: TLabel; harga: TLabel; Edit1: TEdit; hrg: TEdit; ADOsementarakd_barang: TWideStringField; ADOsementaranama_barang: TWideStringField; ADOsementaraJumlah: TWideStringField; ADOsementaraSatuan: TWideStringField; ADOsementaraHarga: TBCDField; ADOsementaraTotal: TBCDField; Edit2: TEdit; Edit3: TEdit; subtotal: TEdit; total: TEdit; Edit4: TEdit; ppn: TEdit; adopenjualan: TADOQuery; adopen: TADOTable; adodet: TADOTable; adosem: TADOTable; ADOTable4: TADOTable; alamat: TEdit; mer: TEdit; Label13: TLabel; Label7: TLabel; cpembayaran: TComboBox; Edit5: TEdit; adosemkd_barang: TWideStringField; adosemnama_barang: TWideStringField; adosemmerk: TWideStringField; adosemJumlah: TWideStringField; adosemSatuan: TWideStringField; adosemHarga: TBCDField; adosemTotal: TBCDField; lbilang: TLabel; Label14: TLabel; nopo: TEdit; Edit6: TEdit; cppn: TComboBox; cr1: TCrystalReport; Timer1: TTimer; Edit7: TEdit; Edit8: TEdit;
90
procedure SpeedButton1Click(Sender: TObject); procedure SpeedButton2Click(Sender: TObject); procedure keluarClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure batalClick(Sender: TObject); procedure jlmKeyPress(Sender: TObject; var Key: Char); procedure tambahClick(Sender: TObject); procedure FormActivate(Sender: TObject); procedure subtotalChange(Sender: TObject); procedure totalChange(Sender: TObject); procedure ppnChange(Sender: TObject); procedure simpanClick(Sender: TObject); procedure kdpelangganKeyPress(Sender: TObject; var Key: Char); procedure cppnClick(Sender: TObject); procedure merKeyPress(Sender: TObject; var Key: Char); procedure hrgKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure hrgKeyPress(Sender: TObject; var Key: Char); procedure FormShow(Sender: TObject); procedure Edit3Change(Sender: TObject); procedure Edit6Change(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure kdprodukKeyPress(Sender: TObject; var Key: Char); private { Private declarations } public procedure bersih; procedure hitung; procedure gridbersih; procedure kodeotamatis; { Public declarations } end;
var penjualan: Tpenjualan; mtotal:real;implementation
uses formdatakaryawan, formdatapelanggan, formproduk, formmenu, cproduk, cmarketing, cpelanggan;
{$R *.dfm}// Fungsi Terbilangfunction terbilang(sValue: string):string;const
91
Angka : array [1..20] of string =('', 'Satu', 'Dua', 'Tiga', 'Empat','Lima', 'Enam', 'Tujuh', 'Delapan','Sembilan', 'Sepuluh', 'Sebelas','Duabelas', 'Tigabelas', 'Empatbelas','Limabelas', 'Enambelas', 'Tujuhbelas','Delapanbelas', 'Sembilanbelas');sPattern: string = '000000000000000';
varS,Rupiah : string;Satu, Dua, Tiga, Belas, Gabung: string;Sen, Sen1, Sen2: string;Hitung : integer;one, two, three: integer;
beginOne := 4;Two := 5;Three := 6;Hitung := 1;Rupiah := '';S := copy(sPattern, 1, length(sPattern) - length(trim(sValue))) + sValue;Sen1 := Copy(S, 14, 1);Sen2 := Copy(S, 15, 1);Sen := Sen1 + Sen2;while Hitung < 5 dobeginSatu := Copy(S, One, 1);Dua := Copy(S, Two, 1);Tiga := Copy(S, Three, 1);Gabung := Satu + Dua + Tiga;
if StrToInt(Satu) = 1 thenRupiah := Rupiah + 'Seratus 'elseif StrToInt(Satu) > 1 ThenRupiah := Rupiah + Angka[StrToInt(satu)+1] + ' Ratus ';
if StrToInt(Dua) = 1 thenbeginBelas := Dua + Tiga;Rupiah := Rupiah + Angka[StrToInt(Belas)+1];endelse
92
if StrToInt(Dua) > 1 ThenRupiah := Rupiah + Angka[StrToInt(Dua)+1] + ' Puluh ' +Angka[StrToInt(Tiga)+1]elseif (StrToInt(Dua) = 0) and (StrToInt(Tiga) > 0) Thenbeginif ((Hitung = 3) and (Gabung = '001')) or((Hitung = 3) and (Gabung = ' 1')) thenRupiah := Rupiah + 'Seribu 'elseRupiah := Rupiah + Angka[StrToInt(Tiga)+1];end;
if (hitung = 1) and (StrToInt(Gabung) > 0) thenRupiah := Rupiah + ' Milyar 'elseif (Hitung = 2) and (StrToInt(Gabung) > 0) thenRupiah := Rupiah + ' Juta 'elseif (Hitung = 3) and (StrToInt(Gabung) > 0) thenbeginif (Gabung = '001') or (Gabung = ' 1') thenRupiah := Rupiah + ''elseRupiah := Rupiah + ' Ribu ';end;Hitung := Hitung + 1;One := One + 3;Two := Two + 3;Three := Three + 3;end;if length(Rupiah) > 1 then Rupiah := Rupiah + ' Rupiah ';Result := Rupiah;end;// End Terbilang
Function Ribuan(Edit : TEdit):String;var NilaiRupiah: string; AngkaRupiah: Currency;
beginif Edit.Text='' then Exit; NilaiRupiah := Edit.text; NilaiRupiah := StringReplace(NilaiRupiah,',','',[rfReplaceAll,rfIgnoreCase]);
93
NilaiRupiah := StringReplace(NilaiRupiah,'.','',[rfReplaceAll,rfIgnoreCase]); AngkaRupiah := StrToCurrDef(NilaiRupiah,0); Edit.Text := FormatCurr('#,###',AngkaRupiah); Edit.SelStart := length(Edit.text);end;
procedure tpenjualan.bersih;beginkdpenjualan.Text:='';kdproduk.Text:='';nmproduk.Text:='';kdpelanggan.Text:='';nmpelanggan.Text:='';jlm.Text:='';subtotal.Text:='';ppn.Text:='';total.Text:='';satuan.Caption:='';hrg.Text:='';mer.Text:='';lbilang.Caption:='';nopo.Text:='';alamat.Text:='';end;
procedure tpenjualan.kodeotamatis;var Kode,Nourut : string; i : integer;begin Kode :='INV/EIG-'+edit7.Text+ '/'+edit8.Text+'/'; With ADOpenjualan do begin Close; SQL.Clear; SQL.Add('Select Max(right(No_penjualan, 3)) from penjualan ' + 'Where left(No_penjualan, 16) = ' + QuotedStr(Kode) + ';'); Open; end;
if ADOpenjualan.Fields[0].AsString = '' then Nourut := '001' else if ADOpenjualan.Fields[0].AsString = '999' then MessageDlg('Data Hari Ini Sudah over Besok aza lagi ya !!',mtError,[mbOK],0)
94
else Nourut := IntToStr(ADOpenjualan.Fields[0].AsInteger + 1);
if length(Nourut) < 3 then begin for i := length(Nourut) to 2 do Nourut := '0' + Nourut; end;
kdpenjualan.Text := Kode + Nourut;
end;
procedure tpenjualan.gridbersih;beginif adosem.RecordCount<>0 thenbeginadosem.First;while not adosem.Eof dobeginadosem.Delete;adosem.Next;adosem.Refresh;end;end;end;
procedure tpenjualan.hitung;beginmtotal:=0;if adosem.RecordCount<>0 thenbeginadosem.First;while not adosem.Eof dobeginmtotal:=mtotal+adosem['total'];adosem.Next;end;endelsebeginmtotal:=0;end;edit2.Text:=floattostr(mtotal);end;
95
procedure Tpenjualan.SpeedButton1Click(Sender: TObject);begincariproduk.ShowModal;end;
procedure Tpenjualan.SpeedButton2Click(Sender: TObject);begincaripelanggan.ShowModal;end;
procedure Tpenjualan.keluarClick(Sender: TObject);beginclose;end;
procedure Tpenjualan.FormCreate(Sender: TObject);beginbersih;cppn.Items.Add('No PPN');cppn.Items.Add('PPN');end;
procedure Tpenjualan.batalClick(Sender: TObject);beginbersih;gridbersih;end;
procedure Tpenjualan.jlmKeyPress(Sender: TObject; var Key: Char);beginif key=#13 thenbeginif (jlm.Text<>'')and(jlm.Text<>'0') thenbeginadosem.Append;adosem['kd_barang']:=kdproduk.Text;adosem['nama_barang']:=nmproduk.Text;adosem['merk']:=mer.Text;adosem['jumlah']:=jlm.Text;adosem['satuan']:=satuan.Caption;adosem['harga']:=hrg.Text;adosem['total']:=strtoint(hrg.Text)*strtoint(jlm.Text);adosem.Post;hitung;
96
subtotal.Text:=edit2.Text;kdproduk.Text:='';nmproduk.Text:='';edit1.Text:='';hrg.Text:='';jlm.Text:='';mer.Text:='';satuan.Caption:='';kdproduk.SetFocus;end elseshowmessage('Jumlah Belum Dimasukan');end;end;
procedure Tpenjualan.tambahClick(Sender: TObject);beginkodeotamatis;end;
procedure Tpenjualan.FormActivate(Sender: TObject);beginwith adopenjualan dobeginclose;sql.Clear;sql.Add('select * from penjualan');open;end;end;
procedure Tpenjualan.subtotalChange(Sender: TObject);beginribuan(subtotal);
end;
procedure Tpenjualan.totalChange(Sender: TObject);beginribuan(total);end;
procedure Tpenjualan.ppnChange(Sender: TObject);beginribuan(ppn);end;
97
procedure Tpenjualan.simpanClick(Sender: TObject);begin if kdpenjualan.Text = '' then Showmessage('No Penjualan Masih Kosong') else if kdpelanggan.Text ='' then showmessage('Silahkan Masukan Data Pelanggan Terlebih Dahulu') else if nopo.Text ='' then showmessage('Silahkan Isi No PO Terlebih Dahulu') else beginadosem.First;while not adosem.Eof dobeginadodet.Append;adodet['No_penjualan']:=kdpenjualan.Text;adodet['kd_brg']:=adosem['kd_barang'];adodet['qty']:=adosem['jumlah'];adodet['subtotal']:=adosem['harga'];adodet['merk']:=adosem['merk'];if adobarang.Locate('kd_brg',adodet['kd_brg'],[])thenbeginadobarang.Edit;adobarang['stok_brg']:=adobarang['stok_brg']-adodet['qty'];adobarang.Post;end;adodet.Post;adosem.Next;end;
adopen.Append;adopen['No_penjualan']:=kdpenjualan.Text;adopen['kd_pelanggan']:=kdpelanggan.Text;adopen['tggl_penjualan']:=formatdatetime('dd/mm/yyyy',tgglpenjualan.DateTime);adopen['Total_harga']:=edit3.Text;adopen['ppn']:=edit4.Text;adopen['pembayaran']:=cpembayaran.Text;adopen['No_popelanggan']:=nopo.Text;adopen['terbilang']:=lbilang.Caption;adopen.Post;cr1.ReportFileName:='E:\Skripsi\Persediaan\lap rev\INV.rpt';cr1.SelectionFormula:='{penjualan.No_penjualan}='+Quotedstr(kdpenjualan.Text);cr1.WindowShowPrintSetupBtn:=true;
98
cr1.WindowState:=crptMaximized;cr1.WindowShowPrintBtn:=true;cr1.WindowShowRefreshBtn:=true;cr1.Action:=1;gridbersih;kdpelanggan.Text:='';nmpelanggan.Text:='';alamat.Text:='';nopo.Text:='';end;end;
procedure Tpenjualan.kdpelangganKeyPress(Sender: TObject; var Key: Char);beginif key=#13 thencaripelanggan.ShowModal;end;
procedure Tpenjualan.cppnClick(Sender: TObject);begincase cppn.ItemIndex of 0:edit6.Text:='0'; 1:edit6.Text:='0.1';end;end;
procedure Tpenjualan.merKeyPress(Sender: TObject; var Key: Char);beginif key=#13 thenhrg.SetFocus;end;
procedure Tpenjualan.hrgKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);beginif key=VK_Return then jlm.SetFocus;end;
procedure Tpenjualan.hrgKeyPress(Sender: TObject; var Key: Char);beginif not (key in['0'..'9',#8,#13,#32]) then begin key:=#0; showmessage('Data Harus Berupa Angka'); end;
99
end;
procedure Tpenjualan.FormShow(Sender: TObject);beginSetWindowPos(Self.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE or SWP_SHOWWINDOW);end;
procedure Tpenjualan.Edit3Change(Sender: TObject);beginlbilang.Caption:=terbilang(edit3.Text);end;
procedure Tpenjualan.Edit6Change(Sender: TObject);var f,g,diskon,tot :real;begin f:=strtofloat(Edit2.Text); g:=strtofloat(edit6.Text); diskon:=f*g; tot:=f+diskon; ppn.Text:=floattostr(diskon); edit4.Text:=floattostr(diskon); total.Text:=floattostr(tot); edit3.Text:=floattostr(tot);
end;
procedure Tpenjualan.Timer1Timer(Sender: TObject);varhour, min, sec, msec: word;Beginedit7.Text := FormatDateTime('MM',Date);edit8.Text := FormatDateTime('YYYY',Date);DecodeTime(time, hour, min, sec, msec );end;
procedure Tpenjualan.kdprodukKeyPress(Sender: TObject; var Key: Char);beginif key=#13 thencariproduk.ShowModal;end;end.
D. Barang Masuk
100
unit formbarangmasuk;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, cxGraphics, cxControls, cxLookAndFeels, cxLookAndFeelPainters, dxSkinsCore, dxSkinBlack, dxSkinBlue, dxSkinCaramel, dxSkinCoffee, dxSkinDarkRoom, dxSkinDarkSide, dxSkinFoggy, dxSkinGlassOceans, dxSkiniMaginary, dxSkinLilian, dxSkinLiquidSky, dxSkinLondonLiquidSky, dxSkinMcSkin, dxSkinMoneyTwins, dxSkinOffice2007Black, dxSkinOffice2007Blue, dxSkinOffice2007Green, dxSkinOffice2007Pink, dxSkinOffice2007Silver, dxSkinOffice2010Black, dxSkinOffice2010Blue, dxSkinOffice2010Silver, dxSkinPumpkin, dxSkinSeven, dxSkinSharp, dxSkinSilver, dxSkinSpringTime, dxSkinStardust, dxSkinSummer2008, dxSkinsDefaultPainters, dxSkinValentine, dxSkinXmas2008Blue, dxSkinscxPCPainter, StdCtrls, Grids, DBGrids, ExtCtrls, cxPC, DBCtrls, ComCtrls, Mask, Buttons, DB, ADODB, dblookup, cxContainer, cxEdit, cxTextEdit, cxMaskEdit, cxDropDownEdit, cxCalendar, OleCtrls, Crystal_TLB;
type Tbarangmasuk = class(TForm) cxPageControl1: TcxPageControl; cxTabSheet1: TcxTabSheet; Panel1: TPanel; Panel2: TPanel; Panel3: TPanel; DBGrid1: TDBGrid; Label1: TLabel; Label2: TLabel; kdbarang: TEdit; nmbarang: TMaskEdit; Label4: TLabel; Label6: TLabel; Label9: TLabel; Label10: TLabel; NoSJ: TEdit; Label11: TLabel; Nopo: TEdit; Jml: TEdit; Label12: TLabel; Label13: TLabel; nobarangmasuk: TEdit; kdvendor: TEdit;
101
SpeedButton2: TSpeedButton; Label3: TLabel; nmvendor: TEdit; Label14: TLabel; tgglmasuk: TDateTimePicker; SpeedButton3: TSpeedButton; SpeedButton4: TSpeedButton; SpeedButton5: TSpeedButton; SpeedButton6: TSpeedButton; DataSource1: TDataSource; ADOConnection1: TADOConnection; adobarangmasuk: TADOQuery; adosementara: TADOQuery; adounit: TADOQuery; adokelompok: TADOQuery; adobarang: TADOQuery; adovendor: TADOQuery; DataSource2: TDataSource; dbkate: TDBLookupComboBox; DataSource3: TDataSource; dbunit: TDBLookupComboBox; adodetail: TADOQuery; adodet: TADOTable; adosem: TADOTable; adomas: TADOTable; adobar: TADOTable; Timer1: TTimer; Edit1: TEdit; Edit2: TEdit; Label5: TLabel; mer: TEdit; cr1: TCrystalReport; procedure SpeedButton6Click(Sender: TObject); procedure SpeedButton3Click(Sender: TObject); procedure NopoKeyPress(Sender: TObject; var Key: Char); procedure kdbarangKeyPress(Sender: TObject; var Key: Char); procedure JmlKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure JmlKeyPress(Sender: TObject; var Key: Char); procedure SpeedButton2Click(Sender: TObject); procedure NoSJKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure kdbarangKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure SpeedButton5Click(Sender: TObject);
102
procedure SpeedButton4Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure FormCreate(Sender: TObject); procedure kdvendorKeyPress(Sender: TObject; var Key: Char); private { Private declarations } public procedure bersih; procedure notis; procedure gridbersih; { Public declarations } end;
var barangmasuk: Tbarangmasuk;
implementation
uses cvendor;
{$R *.dfm}procedure tbarangmasuk.notis;var Kode,Nourut : string; i : integer;begin Kode :='BM/EIG-'+edit1.Text + '/'+edit2.Text+'/'; With ADObarangmasuk do begin Close; SQL.Clear; SQL.Add('Select Max(right(kd_sjmasuk, 3)) from Barang_masuk ' + 'Where left(kd_sjmasuk, 15) = ' + QuotedStr(Kode) + ';'); Open; end;
if ADObarangmasuk.Fields[0].AsString = '' then Nourut := '001' else if ADObarangmasuk.Fields[0].AsString = '999' then MessageDlg('Data Hari Ini Sudah over Besok aza lagi ya !!',mtError,[mbOK],0) else Nourut := IntToStr(ADObarangmasuk.Fields[0].AsInteger + 1);
if length(Nourut) < 3 then
103
begin for i := length(Nourut) to 2 do Nourut := '0' + Nourut; end;
nobarangmasuk.Text := Kode + Nourut;end;
procedure tbarangmasuk.bersih;beginnobarangmasuk.Text:='';kdvendor.Text:='';nmvendor.Text:='';kdbarang.Text:='';nmbarang.Text:='';nosj.Text:='';nopo.Text:='';jml.Text:='';mer.Text:='';end;
procedure tbarangmasuk.gridbersih;beginif adosem.RecordCount<>0 thenbeginadosem.First;while not adosem.Eof dobeginadosem.Delete;adosem.Next;adosem.Refresh;end;end;end;
procedure Tbarangmasuk.SpeedButton6Click(Sender: TObject);beginclose;end;
procedure Tbarangmasuk.SpeedButton3Click(Sender: TObject);beginbersih;notis;end;
104
procedure Tbarangmasuk.NopoKeyPress(Sender: TObject; var Key: Char);beginif key=#13 thenkdvendor.SetFocus;end;
procedure Tbarangmasuk.kdbarangKeyPress(Sender: TObject; var Key: Char);beginif key=#13 thenWith adobarang DoBeginSQL.Clear;sql.Add('select * from barang where kd_brg = "'+kdbarang.Text+'" ');open;if (adobarang.RecordCount > 0) thenBeginApplication.MessageBox('kode Barang Sudah Ada...','ELHIFA',MB_OK+MB_ICONERROR);kdbarang.SetFocus;end;end;end;
procedure Tbarangmasuk.JmlKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);beginif key=VK_Return thenbeginadosem.Append;adosem['kd_barang']:=kdbarang.Text;adosem['nm_barang']:=nmbarang.Text;adosem['qty']:=jml.Text;adosem['satuan']:=dbunit.Text;adosem['kategori']:=dbkate.Text;adosem['merk']:=mer.Text;adosem.Post;adobar.Append;adobar['kd_brg']:=kdbarang.Text;adobar['nm_brg']:=nmbarang.Text;adobar['Stok_brg']:=jml.Text;adobar['satuan']:=dbunit.Text;adobar['kel_brg']:=dbkate.Text;adobar['tggl_beli']:=formatdatetime('dd/mm/yyyy',tgglmasuk.DateTime);adobar.Post;
105
kdbarang.Text:='';nmbarang.Text:='';jml.Text:='';mer.Text:='';kdbarang.SetFocus;end;end;
procedure Tbarangmasuk.JmlKeyPress(Sender: TObject; var Key: Char);beginif not (key in['0'..'9',#8,#13,#32]) then begin key:=#0; showmessage('Data Harus Berupa Angka'); end;end;
procedure Tbarangmasuk.SpeedButton2Click(Sender: TObject);begincarivendor.ShowModal;end;
procedure Tbarangmasuk.NoSJKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);beginif key=VK_Return thennopo.SetFocus;end;
procedure Tbarangmasuk.kdbarangKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);beginif key=VK_Return thenjml.SetFocus;end;
procedure Tbarangmasuk.SpeedButton5Click(Sender: TObject);beginbersih;gridbersih;end;
procedure Tbarangmasuk.SpeedButton4Click(Sender: TObject);beginif nobarangmasuk.Text = '' then
106
Showmessage('No Masih Kosong') else if nosj.Text ='' then showmessage('Silahkan Isi No Surat Jalan Terlebih Dahulu') else if nopo.Text ='' then showmessage('Silahkan Isi No PO Terlebih Dahulu') else if kdvendor.Text ='' then showmessage('Masukan Data Vendor Terlebih Dahulu') else beginadosem.First;while not adosem.Eof dobeginadodet.Append;adodet['kd_sjmasuk']:=nobarangmasuk.Text;adodet['kd_barang']:=adosem['kd_barang'];adodet['jml']:=adosem['qty'];adodet['merk']:=adosem['merk'];if adobarang.Locate('kd_brg',adodet['kd_barang'],[])thenbeginend;adodet.Post;adosem.Next;end;adomas.Append;adomas['kd_sjmasuk']:=nobarangmasuk.Text;adomas['tggl_masuk']:=formatdatetime('dd/mm/yyyy',tgglmasuk.DateTime);adomas['kd_vendor']:=kdvendor.Text;adomas['No_Sj']:=nosj.Text;adomas['No_Pembelian']:=nopo.Text;adomas.Post;showmessage('Data Telah Disimpan');cr1.ReportFileName:='E:\Skripsi\Persediaan\lap rev\TTrev.rpt';cr1.SelectionFormula:='{barang_masuk.kd_sjmasuk}='+Quotedstr(nobarangmasuk.Text);cr1.WindowShowPrintSetupBtn:=true;cr1.WindowState:=crptMaximized;cr1.WindowShowPrintBtn:=true;cr1.WindowShowRefreshBtn:=true;cr1.Action:=1;bersih;gridbersih;notis;
107
end;end;
procedure Tbarangmasuk.Timer1Timer(Sender: TObject);varhour, min, sec, msec: word;Beginedit1.Text := FormatDateTime('MM',Date);edit2.Text := FormatDateTime('YYYY',Date);DecodeTime(time, hour, min, sec, msec );end;procedure Tbarangmasuk.FormCreate(Sender: TObject);beginbersih;gridbersih;end;
procedure Tbarangmasuk.kdvendorKeyPress(Sender: TObject; var Key: Char);beginif key=#13 thencarivendor.ShowModal;end;end.4.4. Testing
Pada tahapan ini, dilakukan pengujian dengan menggunakan black box testing
untuk memastikan sistem yang dibuat telah sesuai dengan desainnya dan semua
fungsi dapat dipergunakan dengan baik, berikut hasil pengujian dari bebrapa form
yang berhubungan dengan proses bisnis utama pada aplikasi penjualan dan
pembelian.
A. Form Login Admin
Tabel IV.30Hasil Pengujian Black Box Testing Form Login Admin
No Skenario Pengujian Test Case Hasil yang diharapkan Hasil Pengujian Kesimpulan1 Mengosongkan
semua isi login pada login user lalu langsung klik tombol login
Username : (Kosong)Password : (Kosong) Sistem akan menolak akses
login dan menampilkan “Username dan Password harus diisi”
Sesuai harapan Valid
108
2 Hanya mengisi data username dan mengosongkan data password, lalu langsung klik tombol login
Username : AMIRPassword : (kosong)
Sistem akan menolak akses login dan akan menampilkan “Username yang anda masukan salah” Sesuai harapan Valid
3 Hanya data password dan mengosongkan username, lalu langsung klik tombol login
Username : (kosong)Password : rahasia
Sistem akan menolak akses login dan akan menampilkan “Password yang anda masukan salah”
Sesuai harapan Valid
4 Menginputkan dengan kondisi salah satu data benar dan salah satu data salah, lalu langsung klik tombol login
Username :ADMINPassword : Amir(Salah)
Sistem akan menolak akses login dan akan menampilkan “Password yang anda masukan salah” Sesuai harapan Valid
5 Menginputkan data login yang benar, lalu langsung klik tombol login
Username :ADMINPassword : admin
Sistem akan menerima akses login dan kemudian langsung masuk Form menu utama bagian admin
Sesuai harapan valid
B. Form Data Barang
Tabel IV.31Hasil Pengujian Black Box Testing Form Data Barang
No Skenario Pengujian Test Case Hasil yang diharapkan Hasil Pengujian Kesimpulan1 Mengosongkan
semua data barang, kemudian langsung klik tombol simpan
Data barang di kosongkan semua System akan menolak dan
akan menampilkan pesan “Data tidak boleh kosong”
Sesuai harapan Valid
2 Menginput data stok barang dengan huruf
Stok Barang : Satu System akan menolak dan akan menampilkan pesan “Harus berupa angka”
Sesuai harapan Valid
3 Pilih salah satu data pada datagrid, kemudian klik tombol edit
Pilih salah satu data yang mau dieidt pada datagrid
System akan menampilkan semua data sesuai yang dipilih untuk di edit Sesuai harapan Valid
4
Menyimpan data barang yang telah ditambahkan dalam data barang, lalu klik tombol simpan
Semua data barang terisi dan ditambah
System akan menerima dan data yang telah di tambah kemudian tampil pada datagrid
Sesuai harapan Valid
5 Pilih salah satu data pada datagrid, kemudian langsung klik tombol hapus
Pilih salah satu data yang mau dihapus pada datagrid
System akan menrima dan akan menampilkan “Apakah data akan dihapus” jika klik “Yes” maka data akan
Sesuai harapan valid
109
terhapus, jika klik “Tidak” maka data tidak terhapus
C. Form Transaksi Barang Masuk
Tabel IV.32Hasil Pengujian Black Box Testing Form Transaksi Barang Masuk
No Skenario Pengujian Test Case Hasil yang diharapkan Hasil Pengujian Kesimpulan1 Mengosongkan
semua isi data barang masuk, kemudian langsung klik tombol simpan
Data barang masuk dikosongkan semua System akan mennolak dan
akan menampilkan pesan “Data tidak boleh kosong”
Sesuai harapan Valid
2 Masukan no barang masuk yang sama lalu tekan enter
Nomor barang sama System akan menolak dan akan menampilkan pesan “No yang anda masukan sudah ada”
Sesuai harapan Valid
3 Mengosongkan jumlah barang, kemudian tekan enter
Jumlah barang kosong System akan menolak dan akan menampilkan pesan “ Masukan jumlah barang”
Sesuai harapan Valid
4
Menyimpan data barang masuk yang telah ditambahkan lalu klik simpan
Semua data barang masuk terisi
System akan menerima dan akan menyimpan kemudian tampil data barang masuk untuk di cetak
Sesuai harapan Valid
4.5 Support
4.5.1 Spesifikasi Hardware dan Software
Tahapan Support diperlukan untuk mendukung sistem penjualan dan
pembelian terutama bagian gudang pada PT. Elhifa Intiguna. Agar sistem yang telah
dibangun dapat terus berjalan dengan baik melalui dukungan hardware dan software
yang sesuai kebutuhan sistem.
Hardware dan Software minimal yang diperlukan adalah sebagai berikut :
a. Operating System : Windows XP / 7b. Processor : Pentium IV 2.4 Ghzc. Memory Size (RAM) : 1.5 GB (DDR)d. Monitor : SVGA Clour 14”e. Hradisk : 50 GBf. Keyboard : 108 Key
110
g. Mouse : Standard Mouseh. Printer : HP Laserjet 1020, Epson LQ-1170
Selain Komponen sistem perangkat keras dan perangkat lunak yang telah
disebutkan, sebelumnya ada komponen tambahan yang dibutuhkan untuk mendukung
pembuatan aplikasi penjualan dan pembelian. Perangkat lunak lainnya tersebut antara
lain :
1. Borland Delphi 07, berfungsi sebagai media untuk menuliskan script delphi 7.
Dalam penulisan skripsi ini, digunakan Borland Delphi 07, karena sangat
membantu dalam penggunaan menuliskan perintah – perintah yang sulit.
2. Crystal report 8.5, berfugsi sebagai media pembuatan laporan data. Dalam
penulisan skripsi ini, digunakan Crystal report 8.5 sebagai media tambahan
pada delphi dalam pembuatan laporan, karena sangat membantu dalam
penggunaan menuliskan laporan – laporan yang dibutuhkan.
4.6. Spesifikasi Bentuk Sistem Usulan
a. Nama Dokumen : Form Barang MasukFungsi : Sebagai data barang masukSumber : SupplierTujuan : GudangMedia : Tampilan layarFrekuensi : Setiap barang masukBentuk : Lampiran B-1
b. Nama Dokumen : Form Barang keluarFungsi : Sebagai data barang keluarSumber : GudangTujuan : pelangganMedia : Tampilan layarFrekuensi : Setiap barang keluar
111
Bentuk : Lampiran B-2c. Nama Dokumen : Form Pengiriman
Fungsi : Sebagai data pengiriman barangSumber : GudangTujuan : OperationalMedia : Tampilan layarFrekuensi : Setiap barang dikirimBentuk : Lampiran B-3
d. Nama Dokumen : Form Retur BarangFungsi : Sebagai data penukaran barangSumber : GudangTujuan : PelangganMedia : Tampilan layarFrekuensi : Setiap terjadi kesalahan pengirimanBentuk : Lampiran B-4
e. Nama Dokumen : Form Total ProduksiFungsi : Sebagai data bukti pemotonganSumber : GudangTujuan : FinannceMedia : Tampilan layarFrekuensi : Setiap ada produksiBentuk : Lampiran B-5
f. Nama Dokumen : Form Stok OpnameFungsi : Sebagai data stok opnameSumber : GudangTujuan : FinannceMedia : Tampilan layarFrekuensi : Setiap ada stok opname barangBentuk : Lampiran B-6