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