Kelanjutan dari artikel sebelumnya yang sempat tertunda beberapa hari karena situasi yang lumayan repot.hehehe. Saya lanjutkan lagi artikel cara membuat aplikasi penjualan sederhana dengan delphi ini. Setelah sebelumnya selesai membuat menu master maka selanjutnya adalah mebuat menu transaksi yaitu pembelian dan penjualan.
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.
1. Form Transaksi Pembelian
Langsung saja untuk membuat form pembelian seperti
pada gambar dibawah ini.
1. Form Transaksi Pembelian
Komponen yang digunakan
- Tedit1
- TCombobox
- TLabel
- Tbevel
- TStringgrid
- TBitbtn
- TButton
- TDateTimePicker
2. Form Cari Barang Beli
Komponen yang digunakan
- TEdit
- TLabel
- DBgrid
Langsung saja untuk pengkodean pada form transaksi pembelian.
A. Mebuat procedure reset, procedure creategrid, dan procedure noauto
- 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;
- Kode untuk tombol tambah
procedure TFpembelian.BitBtn1Click(Sender: TObject); begin reset; CreateGrid; NoAuto; end;- Kode untuk tombol simpan
procedure TFpembelian.BitBtn2Click(Sender: TObject);
var
i:integer;
begin
if Ekodepembelian.Text = '' then
Showmessage('Kode pembelian masih kosong')
else
if Sg.Cells[0,1]='' then
Showmessage('belum melakukan transaksi')
else
if Cbsupplier.Text ='' then
showmessage('supplier belum dimasukan')
else
begin
for i := 1 to sg.RowCount -1 do
begin
if sg.Cells[0,i]<>'' then
begin
with dm.Q1 do
begin
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.Cells[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.Panels[1].Text+'")';
ExecSQL;
end;
Reset;
NoAuto;
CreateGrid;
Cbsupplier.Text:='';
end;
end;
- Kode untuk tombol batal item
procedure TFpembelian.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
procedure TFpembelian.EhargabeliKeyPress(Sender: TObject; var Key: Char); begin if not (key in['0'..'9',#8,#10,#13]) then Key:=#0; end;- Kode untuk form onShow
procedure TFpembelian.FormShow(Sender: TObject);
begin
Reset;
NoAuto;
cbsupplier.Clear;
dm.QdataSupplier.First;
while dm.QdataSupplier.Eof = False do
begin
cbsupplier.Items.Add(dm.QdataSupplier.FieldByName('namasupplier').AsString );
dm.QdataSupplier.Next;
end;
cbsupplier.Text:='';
end;
- Kode untuk ejumlah event onKeyDown
procedure TFpembelian.EjumlahKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = 13 then
begin
if (Ejumlah.Text <> '') and (ejumlah.Text <>'0') then
begin
Sg.Cells[0,sg.RowCount -1]:=Ekodebarang.Text;
Sg.Cells[1,sg.RowCount -1]:=Enamabarang.Text;
Sg.Cells[2,sg.RowCount -1]:=Esatuan.Text;
Sg.Cells[3,sg.RowCount -1]:=Ehargabeli.Text;
Sg.Cells[4,sg.RowCount -1]:=Ejumlah.Text;
Sg.Cells[5,sg.RowCount -1]:=inttostr(strtoint(Ejumlah.Text)* strtoint(Ehargabeli.Text));
sg.RowCount := sg.RowCount +1;
Lin.Caption:=inttostr(strtoint(Lin.Caption)+(strtoint(Ejumlah.Text)*strtoint(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;
- Kode untuk tombol cari
procedure TFpembelian.Button1Click(Sender: TObject); begin FcariBarangBeli.Showmodal; end;
B.Kemudian kode pada form cari barang beli
- Pada event Dbgrid klik 2x
procedure TFcariBarangBeli.DBGrid1DblClick(Sender: TObject);
begin
with Fpembelian do
begin
Ekodebarang.Text:=dm.QdataBarang.FieldValues['kodebarang'];
Enamabarang.Text:=dm.QdataBarang.FieldValues['namabarang'];
Esatuan.Text:=dm.QdataBarang.FieldValues['satuan'];
Ehargabeli.Text:=dm.QdataBarang.FieldValues['hargabeli'];
FcaribarangBeli.Close;
Ejumlah.SetFocus;
end;
end;
- Pada event Ecari onKeyUp
procedure TFcariBarangBeli.EcariKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
with Dm.QdataBarang do
begin
Close;
SQL.Clear;
SQL.Text:='select * from tbbarang where namabarang like"%'+ecari.Text+'%"';
Open;
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.
![]() |
Baca Juga :- Membuat Aplikasi Penjualan (POS) dengan Delphi Part6
- Membuat Aplikasi Penjualan (POS) dengan Delphi Part8
Sedot Source Code




25 comments:
SQL.Text:='insert into tbpembelian values("'+ekodepembelian.Text+'","'+FormatDatetime('yyyy-mm-dd',now)+'","'+lin.Caption+'","'+kodesupplier+'","'+MenuUtama.StatusBar1.Panels[1].Text+'")';
yg paling bnyak errornya gan :D
StatusBar d letakan d mana? yg Sg.cells jg error semua ane punya gan :D
mau nanya jg, bevel d gunakan untuk apa?
fungsix sama kyk panel?
Statusbarnya ... form paling bawah mas. biasanya langsung otomatis letaknya dibawah form. lalu tambahkan panels. dengan cara klik kanan add panels.
Mas,klo syntax lin.caption itu lin di ambil dari mana ya soalnya pas di F9 error di situ terus...
Terima kasih
permisi gan mo nanyak.
prosedur Simpan(upembelian).
","'+kodesupplier+'","'+Fmenuutama.StatusBar1.Panels[1].Text+'")';.
Fmenuutama itu kan merujuk pada form menuutama, trus klo .StatusBar1.Panel[1].Text , itu merujuk kemana ?
mohon bantuannya gan terimakasih :D
mas kalo ini kenapa, keluar debugger
Project Project1.exe raised exception class EConventError with message''''' is not a valid integer value'.
Itu ambil dari label om.
Itu merujuk. Ke pengguna aplikasi. Atau operator, kasir.
Itu karena . . Empty string (' ') dijumlahkan dengan nilai integer. Jadi nya error. Dilengkapi dulu semua edittext nya. Itu pesen erornya. Corvert. Eror (' ') bukan interger.
maaf gan ane kurang paham, klo itu merujuk ke pengguna/operator. berarti elemen .StatusBar1.Panels[1].Text+'")'; itu letaknya di form mainmenu atau di form datapengguna?
karena pesan error yg saya dapat itu sperti ini "Fmenuutama doesn't contain member named 'StatusBar1' trus undeclared identifier'Panels' dan undeclared identifier'Text' at line 115" , mohon penjelasannya gan, terimakasih
Di form main menu gan...
kan ketika login itu. biasa ada statusnya yang login siapa.
lha itu pake komponen TstatusBar gan diletakan di Form main menu. lalu klik kanan. tambahkan panell..
,"'+lin.Caption+'","'+kodesupplier+'","'+MenuUtama.StatusBar1.Panels[1].Text+'")';
untuk lin label itu apakah label setelh label lrp?
dan untuk kodesupplier itu ambil dr mana yah sy error disitu terus?mohon pencerahannya
maap mas mau nanya .
lin.caption itu label apa mas ? trus kalau bisa mbok di kasih penjelasan componnennya di dalam tabel nya mas, jadi biar lebih mudah di pahami .
maap mas baru newbie dan tahap belajar
Mas Saya Mau tanya, pada desain Database tb_detailpenjualan, disertakan coloum id namun pada kueri insert tak disertakan id di dalamnya, kok bisa ya. ????
SQL.Text:='insert into tb_detailpembelian (kodepembelian,kodebarang,hargabeli,jumlah,subtotal)'+
'values ("'+ekodepembelian.Text+'","'+sg.Cells[0,i]+'","'+sg.Cells[3,i]+'","'+sg.Cells[4,i]+'","'+sg.Cells[5,i]+'")';
Terima kasih , mohon Pencerahanya
mas saya jg kebingungan di tulisan lin itu, maksudnya ambil di label yang mana?
trimakasih..
lin itu pada label. samping Rupiah itu mas. buat nanti total pembeliannya.
label yang angka 0
mas mau tanya kalau udah data ke simpen -> cetak laporan -> dbgrid langsung kosong (kosong dalam artian data yang tersimpen gak hilang/kedelete)
Kang mau tanya nie ... kok saya error nya di var sg ya, knp ya kang, padahal saya udah ikutin cara nya di atas. thx
sg itu TStringGrid. yang name nya saya ganti sg mas.
tanya bang, kalau muncul pesan erorr "Argument out of range" ?
Siang gan, mau tanya "dm" itu variable untuk apa dan di deklarasikan di mna, ? trims gan
("'+edit1.Text+'","'+FormatDatetime('yyyy-mm-dd',now)+'","'+label9.Caption+'","'+kodesupplier+'","'+Form1.StatusBar1.Panels[1]+'")';
tolong dibantu kodesupplier itu yang mana gan soalnya di tb_pembelian gag ada? itu merujuk kemana ?
tanya dong kak. errorku sama pas di insert into tb_pembelian values, tapi yang error tinggal yang kodesupplier. undeclared identifier, karena kayanya emang gk ada identifikasi dulu langsung jebret, yang ada kan namasupplier. tinggal itu kak, kalo ini bisa problem solved. minta bantuannya dong kak. thx
Gan mohon maaf sepertinya pada tutorial ini ada yang terlewat untuk bagian login dan logout. Soalnya berkaitan dengan bagian ini jadi agak membingungkan khususnya bagi saya. Terutama bagian statusbar di form utama. Mohon bantuannya. Sebelumnya terimakasih banyak ilmu yang dibagikannya.
Kak yang yf prosedure reset,noauto,dan creategrid itu nulisnya di mana ya?
Post a Comment