Home » , , , , , , » Membuat Aplikasi Penjualan (POS) dengan Delphi Part7

Membuat Aplikasi Penjualan (POS) dengan Delphi Part7

Unknown | 7:36 PM | 25comments
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.


Langsung saja untuk membuat form pembelian seperti pada gambar dibawah ini.

1. Form Transaksi Pembelian

Transaki 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
- 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.

Proses transaksi pembelian

Pembuatan transaksi pembelian sudah selesai. Maaf bahasa acak - acakan. semoga para delphier dapat memahaminya... :D

Baca Juga :- Membuat Aplikasi Penjualan (POS) dengan Delphi Part6
                 - Membuat Aplikasi Penjualan (POS) dengan Delphi Part8
Sedot Source Code
Share this article :

25 comments:

rendy septiyadi kalaena said...

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?

Unknown said...

Statusbarnya ... form paling bawah mas. biasanya langsung otomatis letaknya dibawah form. lalu tambahkan panels. dengan cara klik kanan add panels.

Unknown said...

Mas,klo syntax lin.caption itu lin di ambil dari mana ya soalnya pas di F9 error di situ terus...

Terima kasih

derys said...

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

Muh Lubabuddin said...

mas kalo ini kenapa, keluar debugger
Project Project1.exe raised exception class EConventError with message''''' is not a valid integer value'.

Unknown said...

Itu ambil dari label om.

Unknown said...

Itu merujuk. Ke pengguna aplikasi. Atau operator, kasir.

Unknown said...

Itu karena . . Empty string (' ') dijumlahkan dengan nilai integer. Jadi nya error. Dilengkapi dulu semua edittext nya. Itu pesen erornya. Corvert. Eror (' ') bukan interger.

derys said...

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

Unknown said...

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..

SobangKita said...

,"'+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

Unknown said...

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

Panjoel Cool said...
This comment has been removed by the author.
Panjoel Cool said...

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

Unknown said...

mas saya jg kebingungan di tulisan lin itu, maksudnya ambil di label yang mana?

trimakasih..

Unknown said...

lin itu pada label. samping Rupiah itu mas. buat nanti total pembeliannya.
label yang angka 0

rico said...

mas mau tanya kalau udah data ke simpen -> cetak laporan -> dbgrid langsung kosong (kosong dalam artian data yang tersimpen gak hilang/kedelete)

Unknown said...

Kang mau tanya nie ... kok saya error nya di var sg ya, knp ya kang, padahal saya udah ikutin cara nya di atas. thx

Unknown said...

sg itu TStringGrid. yang name nya saya ganti sg mas.

SIA said...

tanya bang, kalau muncul pesan erorr "Argument out of range" ?

Unknown said...

Siang gan, mau tanya "dm" itu variable untuk apa dan di deklarasikan di mna, ? trims gan

Unknown said...

("'+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 ?

Unknown said...

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

nawamrad06 said...

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.

Unknown said...

Kak yang yf prosedure reset,noauto,dan creategrid itu nulisnya di mana ya?

 
Copyright © 2011. TUTORIAL DELPHI DAN DATABASE - All Rights Reserved