Kali ini saya akan proses pembuatan aplikasi Penjualan Point Of Sales (POS) yang sederhana
dengan menggunakan delphi. Disini saya menggunakan DELPHI XE2 tapi prosesnya sama
bagi pengguna delphi versi lain. Sebelum praktek sedikit saya jelaskan apa itu POS. POS
adalah aplikasi penjualan yang digunakan untuk memanajemen penjualan atau toko-toko kecil,
biasanya POS berisi modul-modul yang terdapat pada aplikasi guna untuk memanajemen
datanya. Misal:
Data Barang
Data Pelangan
Data Pengguna
Data Supplier
Transaksi Pembelian
Transaksi Penjualan
Laporan Penjualan
Laporan Pembelian
Laporan Laba Rugi
Kalau untuk aplikasi POS yang berharga mahal mungkin modulnya lebih banyak dari itu ada
juga yang bisa terkoneksi internet dengan menggunakan web service.
Karena ini nanti akan membahas aplikasi POS yang sederhana, maka saya batasi masalah agar
pembahasan nanti tidak meluas. Modul-modul diatas yang nantinya saya gunakan untuk
membuat aplikasi POS.
Tahap-tahap yang perlu dilakukan pertama adalah membuat database POS nya. Database yang
nanti saya gunakan adalah MySQL. Untuk yang belum mengetahui bagaimana membuat
database menggunakan MySQL bisa merujuk ke halaman Membuat Database Dengan
MySQL. Kita akan membuat database dengan nama possederhana. Setelah membuat database
maka selanjutnya adalah mebuat tabel, bagi yang belum tahu pembuatan tabel dan operasi di
dalamnya silahkan berujuk ke halaman Operasi tabel mysql. Tabel-tabel yang kita buat nanti
adalah:
Tutorial Pembuatan Aplikasi Sederhana untuk part 1 Sampai sini dulu. dengan perancangan
databasenya.
Pada Part2 nanti akan desain interface di delphi . Aplikasi ini untuk pemula seperti saya. Kalau
sudah pada master harap kasih komen dan sarannya. Orang belajar, salah itu biasa jangan dicela
atau dihina. :D
Pertama kita akan membuat desain Menu Utama pada aplikasi. Desain seperti pada gambar
dibawah atau desain sesuai keinginan anda.
Tambahkan komponen TMainmenu kemudian klik 2X. Isi dari tiap menu tersebut adalah
dapat dilihat pada gambar dibawah.
1. Menu File
2. Menu Master
3. Menu Transaksi
4. Menu Laporan
5. Menu Bantuan
Tambahkan hint pada setiap menu dengan cara pilih menu kemudian atur properties hint.
Misal menu backup saya pilih kemudian properties hint saya isi dengan " Lakukan
Backup/restrore untuk menjaga keamanan data"
Menu utama sudah dibuat. kemudia tambahkan komponen TToolbar pada form yang nantinya
untuk meletakan tolmol tombol shortcut. Dan tambahkan juga TImageList untuk menampung
Icon yang nantinya diletakan ditoolbar. Lihat gambar dibawah ini.
Agar bisa tampilan seperti di atas properties yang harus diatur sebagai berikut:
1. Komponen TToolbar tambahkan button sebanyak 6 Button dengan cara klik kanan
pada komponen kemudian pilih New Button. Atur Propertis Caption dan Hint pada
setiap Button sesuai dengan nama-nama tombol diatas. Kemudian pada komponen
TToolBar propertis showcaption diubah menjadi True.
2. Pada komponen TImageList atur propertis height dan width diganti angka 36.
Kemudian tambahkan icon pada ImageList dengan klik 2x komponen kemudian
masukan icon dengan extensi .bmp. Lalu tekan OK.
3. Pada komponen TToolbar propertis Image diisi dengan ImageList1.
4. Kemudian pada atur ImageIndex pada setiap Button yang ada di ToolBar sesuai
keinginan.
5. Atur height Toolbar sesuai dengan tampilan.
6. Kemudian Simpan dengan nama Umainmenu.Pas
Pembuatan Menu Utama sudah selesai. Apabila nanti dijalankan maka hasil akan seperti
dibawah ini.
Proses ini masih tahap awal jadi masih ada beberapa proses. Untuk Peroses Selanjutnya nanti
Mendesain Form-Form yang dibutuhkan aplikasi. Jadi ikuti terus prosesnya sampai selesai ...
:D.
Artikel ini di peruntukan untuk pemula. Untuk para yang sudah master berikan masukan saja.
Karena mungkin artikel yang saya buat ini adalah sampah bagi para master. :D.
Langsung saja kita pertama adalah membuat koneksi database dengan delphi. Disini saya
menggunakan komponen Zeos untuk koneksi MySQL dengan Delphi. Untuk yang belum tau
bagaimana pengoneksian Zeos dengan MySQL silahkan berkunjung ke Koneksi MySQL
dengan Zeos.
Keterangan :
Untuk Datamodul1 properties Name diganti DM setiap komponen ZQuery properties SQL
di isi dengan table masing-masing sesuai dengan nama Query, Misal untuk Qdatabarang
atur properties Connection diisi dengan Koneksi, properties SQL diisi : " select * from
tbarang" kemudian propertis active diganti True. Lakukan Langkah seperti pada
tutorial Koneksi MySQL dengan Zeos. Kemudian simpan dengan Udm.Pas
Maka hasil apabila sudah terkoneksi dengan database, terlihat seperti pada gambar dibawah:
Setelah terkoneksi dengan database langkah selanjutnya adalah peng-kodean untuk form
databarang.
Karena kodebarang disini akan di generate secara otomatis maka kita akan membuat procedure
autoKode. Pembuatan kode barang secara otomatis.
procedure TFdatabarang.AutoKode;
var
kode:String;
urut:integer;
begin
with dm.Q1 do
begin
Close;
SQL.Clear;
SQL.Text:='select * from tbarang';
Open;
end;
if dm.Q1.RecordCount = 0 then urut :=1 else
if dm.Q1.RecordCount > 0 then
begin
with Dm.Q1 do
begin
Close;
SQL.Clear;
SQL.Text:='select max(rigth(kodebarang,5)) as kode from tbarang';
Open;
end;
urut:=dm.Q1.FieldByName('kode').AsInteger +1;
end;
kode:=inttostr(urut);
kode:=Copy('00000'+kode,length('00000'+kode)-4,5);
Ekodebarang.Text:='BR.'+kode;
end;
Procedure CheckEdit digunakan untuk validasi bahwa Tedit dan Combobox harus
terisi
Procedure Reset untuk mengosongkan semua kotak Edit ketika ingin mengisi data baru.
procedure TFdatabarang.Reset;
var
i:integer;
begin
for i := 0 to ComponentCount -1 do
begin
if Components[i] is TEdit then
Tedit(Components[i]).Text :=''
end;
cmbsatuan.Text:='';
cmbsupplier.Text:='';
bitbtn1.Caption:='Tambah';
dm.QdataBarang.Active:=False;
Dm.QdataBarang.Active:=True;
end;
Script untuk event OnkeyPress pada Ehargabeli, Ehargajual,Estok ( untuk mem- validasi
bahwa yang di inputkan hanya angka)
procedure TFdatabarang.EstokKeyPress(Sender: TObject; var Key: Char);
begin
if not (key in['0'..'9',#13,#8,#10]) then
key :=#0;
end;
Script untuk Tombol Tambah
procedure TFdatabarang.BitBtn1Click(Sender: TObject);
begin
if bitbtn1.Caption ='Tambah' then
begin
Reset;
AutoKode;
bitbtn1.Caption:='Batal';
end else
begin
Reset;
AutoKode;
end;
end;
FieldByName('kodesupplier').Text:=dm.QdataSupplier.FieldByName('kodesupplie
r').AsString;
Post;
end;
Reset;
AutoKode;
end;
end;
Script Untuk Tombol Ubah
procedure TFdatabarang.BitBtn2Click(Sender: TObject);
begin
if CheckEdit then
begin
with dm.QdataBarang do
begin
Edit;
FieldByName('kodebarang').AsString:=ekodebarang.Text;
FieldByName('namabarang').AsString:=Enamabarang.Text;
FieldByName('satuan').AsString:=cmbsatuan.Text;
FieldByName('hargabeli').AsInteger:=Strtoint(Ehargabeli.text);
FieldByName('hargajual').AsInteger :=Strtoint(Ehargajual.Text);
FieldByName('stok').AsInteger :=Strtoint(estok.Text);
if dm.QdataSupplier.Locate ('namasupplier',cmbsupplier.Text,[])=True
then
FieldByName('kodesupplier').Text:=dm.QdataSupplier.FieldByName('kodesupplie
r').AsString;
Post;
end;
Reset;
AutoKode;
end;
end;
cmbsupplier.Clear;
dm.QdataSupplier.First;
while dm.QdataSupplier.Eof =false do
begin
cmbsupplier.Items.Add(dm.QdataSupplier.FieldByName('namasupplier').AsString
);
dm.QdataSupplier.Next;
end;
end;
Semua script pada Form data barang sudah dimasukan. dan silahkan tekan F9 untuk
menjalankanya. Dan apabila langkah-langkah benar maka tidak akan terjadi error. dan lihat
hasil seperti pada gambar dibawah.
Sebelumnya untuk memanggil Form Databarang. Pada Menu utama tambahkan Uses
udatabarang agar bisa dishow.
Kemudian kembali ke Menu Utama Pada tombol Data Barang dan Menu Data Barang
tambahkan script seperti dibawah ini.
// Menu data barang
Selesai sudah Form Data Barang pada tutorial ini. Masih Ada 3 Master Data lagi... karena
sudah capek.
Nanti Saya akan Lanjutkan Ke tutorial berikutnya... Selamat mencoba. Semoga sukses.
Maaf kalo ada salah penulisan. dan Coding masih kurang sempurna, karena saya juga lagi
belajar.
Agar artikel cepat selesai maka kita lagsung saja mulai membuat from selanjutnya yaitu form
Data Supplier. Ikuti tiap langkah-langkahnya.
Keterangan
Tambahkan uses Udm terlebih dahulu. Dengan cara klik File lalu Use Unit pilih Udm. Agar
bisa terkoneksi dengan database.
2. Pengkodean
function checkEdit digunakan untuk validasi TEdit apabila masih kosong maka
akan muncul peringatan
Function TFsupplier.CheckEdit;
var
i:integer;
begin
for i := 0 to ComponentCount -1 do
begin
if ( Components[i] is TEdit ) then
if Tedit(Components[i]).Text ='' then
begin
Showmessage(TEdit(Components[i]).Name +' masih kosong');
Exit;
end;
end;
Result:=True;
end;
ekodeSupplier.Text:=dm.QdataSupplier.FieldByName('kodesupplier').AsSt
ring;
Enamasupplier.Text:=dm.QdataSupplier.FieldByName('namasupplier').AsSt
ring;
Ealamat.Text:=dm.QdataSupplier.FieldByName('alamat').AsString;
Enomertelepon.Text:=dm.QdataSupplier.FieldByName('nomertelepon').AsSt
ring;
end;
Setelah selesai semua kemudian jalankan program dengan menekan F9. Apabila tidak ada
yang error maka program akan berjalan dengan lancar. Sepert pada gambar dibawah ini.
Akhirnya ada waktu juga buat nerusin judul ini. Setelah kemarin lagi repot ngurusin kerjaan.
hehehe
Oke... kita langsung saja untuk melanjutkan membuat aplikasi penjualan dengan delphi.
Sekarang akan membuat Form untuk data pelanggan (customer) .
Setelah propertis semua sudah diseting maka pada grid akan muncul field-field pada tabel
yang terkoneksi.
2. Pengkodean
function checkEdit digunakan untuk validasi TEdit apabila masih kosong maka
akan muncul peringatan
Function TFpelanggan.CheckEdit;
var
i:integer;
begin
for i := 0 to ComponentCount -1 do
begin
if ( Components[i] is TEdit ) then
if Tedit(Components[i]).Text ='' then
begin
Showmessage(TEdit(Components[i]).Name +' masih kosong');
Exit;
end;
end;
Result:=True;
end;
eKodePelanggan.Text:=dm.Qdatapelanggan.FieldByName('KodePelanggan').A
sString;
Enamapelanggan.Text:=dm.Qdatapelanggan.FieldByName('namapelanggan').A
sString;
Ealamat.Text:=dm.Qdatapelanggan.FieldByName('alamat').AsString;
Enomertelepon.Text:=dm.Qdatapelanggan.FieldByName('nomertelepon').AsS
tring;
end;
Kini untuk form data pelanggan sudah selesai kemudian jalankan program dengan menekan
F9.
Membuat Aplikasi Penjualan (POS) dengan Delphi Part6
Langsung saja kita mulai dengan medesain form seperti pada gambar dibawah ini.
Keterangan
Tambahkan uses Udm terlebih dahulu. Dengan cara klik File lalu Use Unit pilih Udm. Agar
bisa terkoneksi dengan database.
Setelah propertis semua sudah diseting maka pada grid akan muncul field-field pada tabel
yang terkoneksi.
2. Pengkodean
function checkEdit digunakan untuk validasi TEdit apabila masih kosong maka
akan muncul peringatan
Function TFdataPengguna.CheckEdit;
var
i:integer;
begin
for i := 0 to ComponentCount -1 do
begin
if ( Components[i] is TEdit ) then
if Tedit(Components[i]).Text ='' then
begin
Showmessage(TEdit(Components[i]).Name +' masih kosong');
Exit;
end;
end;
Result:=True;
end;
EKodepengguna.Text:=dm.QdataPengguna.FieldByName('kodepengguna').AsSt
ring;
Enamapengguna.Text:=dm.QdataPengguna.FieldByName('namapengguna').AsSt
ring;
Enotelepon.Text:=dm.QdataPengguna.FieldByName('nomertelepon').AsStrin
g;
end;
Kini untuk form Data Pengguna sudah selesai kemudian jalankan program dengan menekan
F9.
Untuk menambahkan form data pengguna kedalam project yang sebelumnya sudah di
download. lakukan dengan cara . Project > Add to Project tambahkan file yang akan
ditambahkan ke keproject.
Untuk pertama kita akan membuat form transaksi pembelian. Transaksi pembelian adalah
mencatat proses pembelian barang yang akan digunakan untuk menambahkan stok barang
berdasarkan barang yang dibeli atau kulakan. karena stok barang tidak dapat diubah
menggunakan menu data barang, maka saat mencatat atau memproses pembelian barang harus
disertai data yang sesungguhnya dan teliti dalam mengetikkan jumlah pembelian karena akan
sangat berpengaruh dengan harga dan stok barang yang disimpan.
Langsung saja untuk membuat form pembelian seperti pada gambar dibawah ini.
Tedit1
TCombobox
TLabel
Tbevel
TStringgrid
TBitbtn
TButton
TDateTimePicker
TEdit
TLabel
DBgrid
- procedure reset
procedure TFpembelian.reset;
var
i:integer;
begin
for i := 0 to ComponentCount -1 do
begin
if (Components[i] is TEdit) and (TEdit(Components[i]).Tag = 0) then
Tedit(Components[i]).Text :=''
end;
bitbtn1.Caption:='Tambah';
Lrp.Caption:='Rp';
end;
-Procedure NoAuto
procedure TFpembelian.NoAuto;
var
kode:String;
urut:integer;
begin
with dm.Q1 do
begin
Close;
SQL.Clear;
SQL.Text:='select * from tb_pembelian';
Open;
end;
if dm.Q1.RecordCount = 0 then urut :=1 else
if dm.Q1.RecordCount > 0 then
begin
with Dm.Q1 do
begin
Close;
SQL.Clear;
SQL.Text:='select max(right(kodepembelian,5)) as kode from
tb_pembelian';
Open;
end;
urut:=dm.Q1.FieldByName('kode').AsInteger +1;
end;
kode:=inttostr(urut);
kode:=Copy('00000'+kode,length('00000'+kode)-4,5);
Ekodepembelian.Text:='PB.'+kode;
end;
- procedure createGrid
procedure TFpembelian.CreateGrid;
var
i,j:integer;
begin
with Sg do
begin
for i := 0 to colCount-1 do
for j := 0 to rowCount-1 do
Cells[i,j]:='';
ColCount:=6;
RowCount:=2;
Cells[0,0]:='Kode Barang';
Cells[1,0]:='Nama Barang';
Cells[2,0]:='Satuan';
Cells[3,0]:='Harga Beli';
Cells[4,0]:='Jumlah Beli';
Cells[5,0]:='Subtotal';
ColWidths[0]:=200;
ColWidths[1]:=300;
ColWidths[2]:=130;
ColWidths[3]:=100;
ColWidths[4]:=100;
ColWidths[5]:=150;
end;
end;
Close;
SQL.Clear;
SQL.Text:='insert into tb_detailpembelian
(kodepembelian,kodebarang,hargabeli,jumlah,subtotal)'+
'values
("'+ekodepembelian.Text+'","'+sg.Cells[0,i]+'","'+sg.Cells[3,i]+'","'+sg.Ce
lls[4,i]+'","'+sg.Cells[5,i]+'")';
ExecSQL;
Close;
SQL.Clear;
SQL.Text:='update tbarang set stok=stok+"'+sg.Cells[4,i]+'"
where kodebarang="'+sg.Cells[0,i]+'"';
ExecSQL;
end;
end;
end;
with Dm.Q1 do
begin
Close;
SQL.Clear;
SQL.Text:='insert into tb_pembelian
values("'+ekodepembelian.Text+'","'+FormatDatetime('yyyy-mm-
dd',now)+'","'+lin.Caption+'","'+kodesupplier+'","'+Fmenuutama.StatusBar1.P
anels[1].Text+'")';
ExecSQL;
end;
Reset;
NoAuto;
CreateGrid;
Cbsupplier.Text:='';
end;
end;
cbsupplier.Items.Add(dm.QdataSupplier.FieldByName('namasupplier').AsString
);
dm.QdataSupplier.Next;
end;
cbsupplier.Text:='';
end;
Lin.Caption:=inttostr(strtoint(Lin.Caption)+(strtoint(Ejumlah.Text)*strtoin
t(ehargabeli.Text)));
reset;
if MessageDlg('Apakah ingin menambah
barang?',mtConfirmation,[mbyes,mbno],0)=mrYes then
FcariBarangBeli.ShowModal;
end else
Showmessage('Jumlah Belum dimasukan');
end;
end;
Setelah proses pengkodean sudah selesai untuk kedua form kemudian jalankan aplikasi. Bila
proses di ikuti dengan benar aplikasi akan berjalan dengan lancar. Lihat seperti gambar
dibawah ini.
Tanpa basa-basi langsung saja saya lanjutkan Tutorial Membuat Aplikasi Penjualan Dengan Delphi.
Proses ini adalah membuat transaksi penjualan.
TEdit
TLabel
DBgrid
Procedure Noauto
procedure TFpenjualan.NoAuto;
var
kode:String;
urut:integer;
begin
with dm.Q1 do
begin
Close;
SQL.Clear;
SQL.Text:='select * from tb_penjualan';
Open;
end;
if dm.Q1.RecordCount = 0 then urut :=1 else
if dm.Q1.RecordCount > 0 then
begin
with Dm.Q1 do
begin
Close;
SQL.Clear;
SQL.Text:='select max(right(kodepenjualan,5)) as kode from
tb_penjualan';
Open;
end;
urut:=dm.Q1.FieldByName('kode').AsInteger +1;
end;
kode:=inttostr(urut);
kode:=Copy('00000'+kode,length('00000'+kode)-4,5);
Enotapenjualan.Text:='PJ.'+kode;
end;
Procedure CreateGrid
procedure TFpenjualan.CreateGrid;
var
i,j:integer;
begin
with Sg do
begin
for i := 0 to colCount-1 do
for j := 0 to rowCount-1 do
Cells[i,j]:='';
ColCount:=6;
RowCount:=2;
Cells[0,0]:='Kode Barang';
Cells[1,0]:='Nama Barang';
Cells[2,0]:='Satuan';
Cells[3,0]:='Harga';
Cells[4,0]:='Jumlah';
Cells[5,0]:='Subtotal';
ColWidths[0]:=200;
ColWidths[1]:=300;
ColWidths[2]:=130;
ColWidths[3]:=100;
ColWidths[4]:=100;
ColWidths[5]:=150;
end;
end;
- Kode untuk tombol tambah
Close;
SQL.Clear;
SQL.Text:='insert into tb_detailpenjualan
(kodepembelian,kodebarang,hargabeli,jumlah,subtotal)'+
'values
("'+Enotapenjualan.Text+'","'+sg.Cells[0,i]+'","'+sg.Cells[3,i]+'","'+sg.Ce
lls[4,i]+'","'+sg.Cells[5,i]+'")';
ExecSQL;
Close;
SQL.Clear;
SQL.Text:='update tbarang set stok=stok-"'+sg.Cells[4,i]+'"
where kodebarang="'+sg.Cells[0,i]+'"';
ExecSQL;
end;
end;
end;
with Dm.Q1 do
begin
Close;
SQL.Clear;
SQL.Text:='insert into tb_penjualan
values("'+Enotapenjualan.Text+'","'+FormatDatetime('yyyy-mm-
dd',now)+'","'+lin.Caption+'","'+kodesupplier+'","'+Fmenuutama.StatusBar1.P
anels[1].Text+'")';
ExecSQL;
end;
Reset;
NoAuto;
CreateGrid;
cbpelanggan.Text:='';
end;
end;
- Kode untuk tombol batal item
procedure TFpenjualan.BitBtn3Click(Sender: TObject);
begin
if messageDLg('Yakin item akan
dihapus?',mtConfirmation,[Mbyes,MBno],0)=Mryes then
begin
lin.Caption:=inttostr(strtoint(lin.Caption)-strtoint(sg.Cells
[5,sg.Row]));
sg.RowCount := sg.RowCount -1;
end;
end;
- Kode untuk Ehargabeli dan ejumlah
cbpelanggan.Items.Add(dm.QdataPelanggan.FieldByName('namapelanggan').AsStri
ng );
dm.QdataPelanggan.Next;
end;
cbpelanggan.Text:='';
end;
Lin.Caption:=inttostr(strtoint(Lin.Caption)+(strtoint(Ejumlah.Text)*strtoin
t(ehargabeli.Text)));
Etotalbayar.Text:=Lin.Caption;
reset;
if MessageDlg('Apakah ingin menambah
barang?',mtConfirmation,[mbyes,mbno],0)=mrYes then
FcariBarangJual.ShowModal;
end else
Showmessage('Jumlah Belum dimasukan');
end;
end;
end;
Setelah selesai pengkodean jalankan program dengan menekean tombol F9. Maka hasilnya akan
seperti dibawah ini.
Akhirnya ada waktu juga untuk meneruskan artikel ini. hampir sebulan artikel ini gak update, karena
ngerjain project gak selesai-selesai ... hehhe.
Artikel ini akan membahas pembuatan nota menggunakan fastereport, walaupun banyak cara untuk
pembuatan nota, tapi saya lebih senang dengan fastreport karena kemudahaan dalam ketika
mendesain nota.
procedure TFpenjualan.CetakNota;
begin
with dm.Qpenjualan do
begin
Close;
SQL.Clear;
SQL.Add('select * from tb_penjualan where
kodepenjualan="'+Enotapenjualan.Text+'"');
Open;
end;
DM.QdetailPenjualan.Active:=False;
DM.QdetailPenjualan.Active:=True;
dm.frxReport1.LoadFromFile(ExtractFilePath(Application.ExeName)+'Laporan\no
ta.fr3');
dm.frxReport1.ShowReport();
end;
- pada tombol simpan sisipkan kode dibawah ini.