• Tidak ada hasil yang ditemukan

4. IMPLEMENTASI. 60 Universitas Kristen Petra

N/A
N/A
Protected

Academic year: 2022

Membagikan "4. IMPLEMENTASI. 60 Universitas Kristen Petra"

Copied!
25
0
0

Teks penuh

(1)

Pada bab ini akan dijelaskan mengenai bagaimana mengimplementasikan sistem yang telah dirancang sehingga menghasilkan suatu aplikasi yang dapat digunakan. Program ini dibuat dengan menggunakan SQL Server 7.0 dan pembuatan interface dengan Borland Delphi 7.

4.1. Implementasi pada SQL Server 7

Membangun database adalah langkah awal dari pembuatan suatu aplikasi ini. Beberapa hal yang perlu dilakukan dalam permbuatan database adalah sebagai berikut:

a. Pembuatan Database

Pada Enterprise Manager, klik icon Microsoft SQL Server untuk membuka

Server. Folder Database diklik kanan kemudian pilih New Database.

(2)

Gambar 4.1. Enterprise Manager

Nama database diisi dengan ‘Tugas_Akhir1’ dan location pada

‘D:\Program1’. Location pada tab Transaction Log diubah dengan ‘D:\Program1’.

Database primer dan file-file log transaksi akan dibuat menggunakan nama yang

telah diketik sebagai awalannya.

(3)

Gambar 4.2. Database Properties

b. Pembuatan Tabel

Pada folder Databases, tanda + diklik dan dipilih Tables. Tombol mouse

kanan ditekan dan pilih New Table.

(4)

Gambar 4.3. Pembuatan Tabel Baru

4.2. Setting ODBC dan BDE

ODBC atau Open Database Connectivity adalah sebuah standar yang dikembangkan oleh Microsoft untuk mendukung driver database yang bersifat independent terhadap produk. Langkah-langkah untuk setting ODBC adalah sebagai berikut:

a. ODBC dibuka dari Control Panel | Administrative Tools | Data Souce (ODBC)

sehingga tampil window seperti pada Gambar 4.4.

(5)

Gambar 4.4. ODBC Data Sources Administrator

b. Dengan menekan tombol Add setelah memilih MQIS, maka akan tampil

window Create New Data Source.

(6)

c. Driver yang dipilih adalah SQL Server, lalu tombol Finish ditekan. Form untuk pembuatan data source akan muncul, nama datasource diisi dengan ‘SI’ dan DatabaseName diisi dengan ‘Tugas_Akhir1’.

4.3. Pembuatan Data Module

Delphi menyediakan fasilitas data module untuk mendefinisikan hubungan pada setiap aplikasi. Alasan pemakaian data module adalah untuk pemakaian bersama komponen-komponen data access di antara beberapa form dan memisahkan form data dari interface user. Data module dapat dibuat dengan memilih menu File | New | Data Module. Data module dapat diisi dengan komponen Session, Database, Data source, Table maupun Query.

Gambar 4.6. Data Module

4.4. Penggunaan Quick Report pada Delphi 7

Saat meng-install Delphi 7, komponen Quick Report tidak ada dalam component pallete sehingga untuk dapat menggunakan aplikasi ini Quick Report harus di-install terlebih dahulu. Langkah-langkah untuk meng-install Quick Report adalah sebagai berikut:

a. Bukalah Delphi 7 kemudian dipilih menu Component | Install Component.

(7)

Gambar 4.7. Install Package

b. Dengan menekan tombol Add, kemudian file ‘dclcrt70.bpl’ dalam folder Bin dibuka.

Untuk Delphi 6 langkah peng-install-an tidak perlu dilakukan. Untuk menggunakan Quick Report, pilih File | New | Report.

4.5. Form dan Procedure 4.5.1. Daftar Form

Berikut ini adalah daftar form yang dapat diakses dari Form Menu.

(8)

Tabel 4.1. Daftar Form

Menu Form Keterangan

Operator Untuk menambah, mengubah, mengaktifkan, menon-aktifkan, dan mencari data operator File

Ubah Password Untuk mengubah password user

Barang Untuk menambah, mengubah, mengaktifkan, menon-aktifkan, dan mencari data barang Kategori Untuk menambah, mengubah, dan mencari

data kategori Master

Supplier Untuk menambah, mengubah, mengaktifkan, menon-aktifkan, dan mencari data supplier Order Untuk menambah, mengubah, dan mencari

data order

Pembelian Untuk menambah, mengubah, dan mencari data penjualan

Retur Pembelian Untuk menambah, mengubah, dan mencari data retur pembelian

Hutang Untuk melakukan pelunasan hutang dan mencari data hutang

Input Penjualan Untuk melakukan transaksi dan menyimpan data transaksi penjualan

Retur Penjualan Untuk melakukan dan menyimpan retur penjualan

Transaksi

Pengiriman Untuk menyimpan data pengiriman dan pelunasan yang telah dilakukan dari transaksi penjualan

Peramalan Peramalan Untuk meramalkan penjualan per kategori barang berdasarkan satuan

Laporan Barang Untuk menampilkan laporan stok dan minimum stok

Laporan Adjustment Stok

Untuk menampilkan laporan adjustment stok Order Untuk menampilkan laporan order

Pembelian Untuk menampilkan laporan pembelian per supplier dan laporan pembelian secara keseluruhan

Retur Pembelian Untuk menampilkan laporan retur pembelian Penjualan Untuk menampilkan laporan penjualan Laporan

Retur Penjualan Untuk menampilkan laporan retur penjualan

(9)

4.5.2. Daftar Procedure

Berikut ini adalah form-form yang terdapat pada aplikasi yang telah dibuat beserta daftar procedure-nya.

a. Form Login

Form login adalah form yang pertama kali muncul saat aplikasi ini dijalankan. Untuk dapat mengakses menu, user harus meng-input-kan nama user dan password. Jika user lupa password-nya, maka tekan tombol password untuk mendapatkan password. Procedure yang terdapat pada form ini dapat dilihat pada Tabel 4.2.

Tabel 4.2. Procedure Form Login

Procedure Keterangan

Tform1.BtOkClick Mengecek username dan password sesuai yang ada di database dan menentukan hak aksesnya Tform1.BtBatalClick Keluar dari aplikasi

b. Form Ubah Password

Form Ubah Password digunakan untuk mengubah password yang dimiliki user. Procedure yang terdapat pada form ini dapat dilihat pada Tabel 4.3.

Tabel 4.3. Procedure Form Ubah Password

Procedure Keterangan

Tform17.BtOkClick Menyimpan perubahan password

c. Form Operator

Form operator merupakan form utama dimana user dapat melakukan

beberapa fungsi, yaitu untuk menambah, mengubah, mencari, mengaktifkan, menon-

aktifkan data operator. Procedure yang berkaitan dengan form ini dapat dilihat pada

Tabel 4.4.

(10)

Tabel 4.4. Procedure yang Berhubungan dengan Form Operator

Tombol Form Procedure Keterangan

Baru Input Operator Tform9.BtOkClick Meng-input-kan data operator

Ubah Ubah Operator Tform10.BtOkClick Menyimpan hasil modifikasi data operator Non-Aktif Operator Tform9.BtNonAktifClick Menon-aktifkan data

operator

Aktif Pengaktifan Tform29.Aktif1Click Mengaktifkan kembali data operator

Cari Operator TForm8.BtCariClick Mencari data operator

d. Form Barang

Form barang merupakan form utama dimana user dapat melakukan beberapa fungsi, yaitu menambah, mengubah, mencari, mengaktifkan, dan menon- aktifkan data barang. Procedure yang yang berkaitan dengan form ini dapat dilihat pada Tabel 4.5.

Tabel 4.5. Procedure yang Berhubungan dengan Form Barang

Tombol Form Procedure Keterangan

Baru Input Barang Tform5.BtOkClick Menginputkan data barang

Ubah Ubah Barang Tform6.BtOkClick Menyimpan hasil modifikasi data barang Non-Aktif Barang Tform4.BtNonAktifClick Menon-aktifkan data

barang

Aktif Pengaktifan Tform29.Aktif1Click Mengaktifkan kembali data barang

Cari Barang Tform4.BtCariClick Mencari data barang

Barang TForm4.

DBBrgDrawColumnCell

Menandai grid barang yang sudah mencapai stok minimum

Segmen Program 4.1. Procedure Form Barang

procedure TForm4.DBBrgDrawColumnCell(Sender: TObject; const Rect:

TRect;

DataCol: Integer; Column: TColumn; State: TGridDrawState);

begin

with TCustomDbGridCracker(Sender)do

(11)

begin

if Datalink.ActiveRecord=row-1 then canvas.Brush.Color:=$00FFB871 else Canvas.Brush.Color:=clWindow;

end;

with datamodule2 do

if (Column.Field=QBrgJumlah) and

(QBrgJumlah.AsFloat<=QbrgStok_min.AsFloat) then begin

DbBrg.Canvas.Brush.Color:=$008CB1FF;

DbBrg.DefaultDrawDataCell(Rect,QbrgJumlah,State);

end;

end;

e. Form Kategori

Form kategori merupakan form utama dimana user dapat melakukan beberapa fungsi, yaitu menambah, mengubah, dan mencari data kategori. Procedure yang berkaitan dengan form ini dapat dilihat pada Tabel 4.6.

Tabel 4.6. Procedure yang Berhubungan dengan Form Kategori

Tombol Form Procedure Keterangan

Baru Input Kategori Tform12.BtOkClick Meng-input-kan data kategori

Ubah Ubah Kategori Tform13.BtOkClick Menyimpan hasil modifikasi data kategori Cari Kategori Tform11.BtCariClick Mencari data kategori

f. Form Supplier

Form supplier merupakan form utama dimana user dapat melakukan

beberapa fungsi, yaitu menambah, mengubah, mencari, mengaktifkan, dan

menonaktifkan data supplier. Procedure yang yang berkaitan dengan form ini dapat

dilihat pada Tabel 4.7.

(12)

Tabel 4.7. Procedure yang Berhubungan dengan Form Supplier

Tombol Form Procedure Keterangan

Baru Input Supplier Tform15.BtOkClick Meng-input-kan data supplier

Ubah Ubah Supplier Tform16.BtOkClick Menyimpan hasil modifikasi data supplier

Non-Aktif Supplier Tform14.

BtNonAktifClick Menon-aktifkan data supplier

Aktif Pengaktifan Tform29.Aktif1Click Mengaktifkan kembali data supplier

Cari Supplier Tform14.BtCariClick Mencari data supplier

g. Form Order

Form order merupakan form utama dimana user dapat melakukan beberapa fungsi, yaitu menambah, mengubah, mencari, mengaktifkan, dan menonaktifkan data order. Procedure yang yang berkaitan dengan form ini dapat dilihat pada Tabel 4.8.

Tabel 4.8. Procedure yang Berhubungan dengan Form Order

Tombol Form Procedure Keterangan

Baru Input Order Tform18.BtOkClick Meng-input-kan data order

Ubah Ubah Order Tform19.BtOkClick Menyimpan hasil modifikasi data order Cari Order Tform18.BtCariClick Mencari data order

h. Form Pembelian

Form pembelian merupakan form utama dimana user dapat melakukan beberapa fungsi, yaitu menambah, mengubah, dan mencari data pembelian.

Procedure yang berkaitan dengan form ini dapat dilihat pada Tabel 4.9.

(13)

Tabel 4.9. Procedure yang Berhubungan dengan Form Pembelian

Tombol Form Procedure Keterangan

Baru Input Pembelian

Tform22.BtOkClick, Tform22.BtOk2Click, Tform22.BtOk3Click

Meng-input-kan data pembelian order, langsung, dan konsiyasi

Ubah Ubah Pembelian

Tform16.BtOkClick Menyimpan hasil modifikasi data pembelian

Cari Pembelian Tform21.BtCariClick Mencari data pembelian

Segmen Program 4.2. Procedure Form Input Pembelian

//untuk pembelian order

procedure TForm22.BtOKClick(Sender: TObject);

var i,k,hitung,tot2:integer;

tot1,bayar:real;

begin

//pengecekan hasil:=false;

cekmaster;

if hasil=true then begin

with datamodule2 do begin

if j>=2 then begin

dbta.StartTransaction;

try

//simpan ke Mpembelian MPembelian.Last;

MPembelian.Append;

MPembelian['Kode_Pembelian']:=EKodeBeli.Text;

MPembelian['Kode_Supplier']:=CbSupp.Text;

MPembelian['Tgl_Beli']:=Tgl_beli.Date;

MPembelian['No_Faktur']:=EFaktur.Text;

MPembelian['Total']:=strtofloat(MTotal.Text);

MPembelian['Status']:=CbStatus.Text;

MPembelian['Keterangan']:=MKeterangan.Text;

if CbStatus.Text='KREDIT' then begin

MPembelian['Tgl_Jatuh_Tempo']:=strtodate(ETempo.Text);

MPembelian['Lunas']:='N' end

else MPembelian['Lunas']:='Y';

MPembelian.Post;

//Simpan Tabel Dpembelian DPembelian.Last;

for i:=1 to j-1 do begin

(14)

DPembelian['Kode_Barang']:=SgBeli.Cells[1,i];

DPembelian['Jumlah']:=strtofloat(SgBeli.Cells[4,i]);

DPembelian['Harga_Beli']:=strtofloat(SgBeli.Cells[5,i]);

DPembelian['Diskon_Beli']:=strtofloat(SgBeli.Cells[6,i]);

DPembelian.Post;

//jika barang dikirim sesuai jumlah order if Sgbeli.Cells[8,i]='0' then

begin

//update tabel DOrder Dorder.First;

for k:=1 to Dorder.RecordCount do begin

if

(DOrder['Kode_Order']=SgBeli.Cells[0,i]) and (DOrder['Kode_Barang']=SgBeli.Cells[1,i]) then

begin

DOrder.Edit;

DOrder['Terpenuhi']:='Y';

DOrder['Lengkap']:='Y';

DOrder['Sisa_Order']:=0;

DOrder.Post;

break;

end

else Dorder.Next;

end;

//Update Tabel Barang if

Barang.Locate('Kode_Barang',SgBeli.Cells[1,i],[]) then begin

Barang.Edit;

Barang['Jumlah']:=Barang['Jumlah']+strtofloat(SgBeli.Cells[4,i]);

Barang.Post;

end;

end else begin

//Update Tabel DOrder Dorder.First;

for k:=1 to DOrder.RecordCount do if

(DOrder['Kode_Order']=SgBeli.Cells[0,i])and

(DOrder['Kode_Barang']=SgBeli.Cells[1,i]) then

begin

DOrder.Edit;

DOrder['Terpenuhi']:='Y';

DOrder['Sisa_order']:=strtofloat(Sgbeli.Cells[8,i]);

DOrder.Post;

break;

(15)

end

else Dorder.Next;

//Update Tabel Barang if

Barang.Locate('Kode_Barang',SgBeli.Cells[1,i],[]) then begin

Barang.Edit;

Barang['Jumlah']:=Barang['Jumlah']+strtofloat(SgBeli.Cells[4,i]);

Barang.Post;

end;

end;

//cek DOrder& Update MOrder

//var hitung untuk menghitung Kode_Order pada detail yg lengkap=y

QCekMOrder.Close;

QCekMOrder.SQL.Clear;

QCekMOrder.SQL.Add('select count(d.lengkap) as jum');

QCekMOrder.SQL.Add('from Morder m, Dorder d');

QCekMOrder.SQL.Add('where d.Kode_Order=:kode and m.Kode_Order=d.Kode_Order');

QCekMOrder.SQL.Add('and d.lengkap=''Y''');

QCekMOrder.Prepare;

QCekMOrder.Params[0].AsString:=SgBeli.Cells[0,i];

QCekMOrder.Open;

hitung:=QCekMOrder.Fields[0].Value;

if

MOrder.Locate('Kode_Order',SgBeli.Cells[0,i],[]) then begin

if MOrder['jum_item']=hitung then begin

MOrder.Edit;

Morder['M_Terpenuhi']:='Y';

Morder.Post;

end;

end;

end;

//simpan tabel hutang

if CbStatus.Text='KREDIT' then begin

KodeHutang;

//pembulatan hutang ke kelipatan 50 tot1:=Strtofloat(Mtotal.Text)/50;

tot2:=ceil(tot1);

bayar:=tot2*50;

Hutang.Last;

Hutang.Append;

(16)

Hutang['Keterangan']:='BARANG TETAP';

Hutang.Post;

end;

dbta.Commit;

Hutang.Active:=false;

Hutang.Active:=true;

Barang.Active:=false;

Barang.Active:=true;

MPembelian.Active:=false;

MPembelian.Active:=true;

DPembelian.Active:=false;

Dpembelian.Active:=true;

kosongbeliorder;

//kode pembelian Kode;

EKodeBeli.Text:=kodebeli;

j:=1;

except

dbta.Rollback;

messagedlg('Data tidak dapat disimpan',mtWarning,[mbOK],0);

end;

end;

end;

end;

end;

i. Form Retur Pembelian

Form retur pembelian merupakan form utama dimana user dapat melakukan beberapa fungsi, yaitu menambah, mengubah dan mencari data retur pembelian.

Procedure yang berkaitan dengan form ini dapat dilihat pada Tabel 4.10.

Tabel 4.10. Procedure yang Berhubungan dengan Form Retur Pembelian

Tombol Form Procedure Keterangan

Baru Input Retur Pembelian

Tform24.BtOkClick Meng-input-kan data retur pembelian

Ubah Ubah Retur

Pembelian

Tform26.BtOkClick Menyimpan hasil modifikasi data retur pembelian

Cari Retur Pembelian

Tform25.BtCariClick Mencari data retur

pembelian

(17)

j. Form Hutang

Form hutang merupakan form utama dimana user dapat melakukan beberapa fungsi, yaitu melunasi dan mencari data hutang. Procedure yang berkaitan dengan form ini dapat dilihat pada Tabel 4.11.

Tabel 4.11. Procedure yang Berhubungan dengan Form Hutang

Tombol Form Procedure Keterangan

Bayar Pelunasan

Hutang Tform28.BtOkClick Menyimpan data retur dan perubahan status lunas Cari Hutang Tform27.BtCariClick Mencari data hutang

k. Menu Penjualan

Dari menu penjualan user dapat memilih beberapa submenu, yaitu baru, retur dan pelunasan (hanya bisa diakses oleh pemilik). Procedure yang terdapat pada menu ini dapat dilihat pada Tabel 4.12.

Tabel 4.12. Procedure Menu Penjualan

SubMenu Form Procedure Keterangan

Baru Input

Penjualan Tform30.BtOkClick Meng-input-kan data retur pembelian

Retur Retur Penjualan

Tform34.BtOkClick Meng-input-kan data retur penjualan dan menonaktifkan nota lama jika terjadi retur tukar-tambah

Pengiriman Pengiriman Tform51.BtOKClick Mengubah status lunas dan pengiriman pada Mpenjualan menjadi “Y”

l. Form Adjustment Stok

Form digunakan untuk mencatat koreksi stok. Procedure yang terdapat pada

form ini dapat dilihat pada Tabel 4.13.

(18)

Tabel 4.13. Procedure Form Adjustment Stok

Procedure Keterangan

Tform32.BtOkClick Menyimpan data adjustment

Tform32.Cek Mengecek kelengkapan peng-input-an

m. Form Peramalan

Form Peramalan digunakan untuk melakukan perhitungan peramalan berdasarkan data-data penjualan yang ada di database. Procedure yang terdapat pada form ini dapat dilihat pada Tabel 4.14.

Tabel 4.14. Procedure Form Peramalan

Procedure Keterangan

Tform61.BtOkClick Melakukan proses peramalan Tform61.Pengambilan_Data Mengambil data dari tabel Mpenjualan dan

Dpenjualan Tform61.Winter(alpha, beta,

gamma:real; L:integer);

Melakukan perhitungan dengan metode Winter Tform61.Forecast_per_Item Melakukan perhitungan untuk forecasting per item

Segmen Program 4.3. Perhitungan Peramalan Secara Keseluruhan

procedure TForm61.BtOKClick(Sender: TObject);

var alpha, beta, gamma, increment:real;

L, L_max:integer;

temp,tgl_awal,tgl_akhir:TDateTime;

tgl, bulan, tahun:word;

begin

if (Cbbrg.Text<>'') then begin

with datamodule2 do begin

nol:=false;

Kosong;

Pengambilan_data;

increment:=0.1;

L_max:=7;

alpha:=0;

while alpha<=1 do begin

beta:=0;

while beta<=1 do begin

gamma:=0;

(19)

while gamma<=1 do begin

L:=3;

while L<=L_max do begin

if nol=false then begin

//kosong_SgRamal;

kosong_SgRamal;

//perhitungan winter

Winter(alpha, beta, gamma, L);

inc(L);

end else exit;

end;

gamma:=gamma+increment;

end;

beta:=beta+increment;

end;

alpha:=alpha+increment;

end;

//pengaturan form Form61.Height:=489;

BtGrafik.Enabled:=true;

end;

end else begin

messagedlg('Anda harus mengisi kode barang', mtInformation, [mbOK],0);

CbBrg.SetFocus;

BtOk.Enabled:=false;

end;

end;

Pada segmen program 4.3. dapat dilihat bahwa untuk melakukan peramalan ada beberapa hal yang harus dilakukan, antara lain: membaca data penjualan yang ada pada database, melakukan perhitungan dengan metode Winter, dan yang terakhir adalah melakukan perhitungan untuk peramalan per item.

Pada segmen program 4.4. dapat dilihat bahwa yang pertama kali dilakukan

adalah menentukan periode awal dan periode akhir dari data yang akan digunakan

untuk peramalan. Setelah data selesai dibaca, dilakukan pengecekan data penjualan

per bulan sesuai dengan kategori dan satuan yang telah dipilih. Pengecekan dilakukan

untuk memastikan bahwa tidak ada nilai 0 dalam data penjualan per bulan. Apabila

(20)

mengantisipasi divine by zero error pada error absolut yang berimbas pada MAPE (Mean Average Percentage Error) dan variabel-variabel yang berhubungan dengan I

n

(faktor penyesuaian seasonal).

Segmen Program 4.4. Procedure untuk Pengambilan Data Penjualan

procedure Tform61.Pengambilan_data;

var {variabel untuk menghitung jangka waktu pengambilan data}

tahun_akhir, bulan_akhir, tgl_akhir:word;

tgl, bulan, tahun :word;

awal_bulan, periode_awal, periode_akhir, temp_periode:Tdatetime;

{variabel untuk menginputkan data ke tabel data_fore}

tgl_i, bulan_i, tahun_i:word;

awal_i,akhir_i, temp_i:Tdatetime;

{variabel untuk mengenali bulan &tahun untuk SgHasil}

tgl_j:string;

i:integer;

begin

decodedate(now, tahun, bulan, tgl);

tgl:=1;

//untuk hitung periode awal

awal_bulan:=encodedate(tahun,bulan, tgl);

periode_awal:=IncMonth(awal_bulan,-18);

//untuk menghitung periode akhir

temp_periode:=IncMonth(awal_bulan,-1);

decodedate(temp_periode, tahun_akhir, bulan_akhir, tgl_akhir);

periode_akhir:=EndOfAMonth(tahun_akhir, bulan_akhir);

with datamodule2 do begin

//pengambilan data tempdata.Active:=false;

tempdata.EmptyTable;

tempdata.Active:=true;

//untuk nota yang aktif QDatajual.Close;

Qdatajual.SQL.Clear;

Qdatajual.SQL.Add('select m.Tgl_jual, d.jumlah');

Qdatajual.SQL.Add('from mpenjualan m, dpenjualan d, barang b');

Qdatajual.SQL.Add('where m.no_nota=d.no_nota');

Qdatajual.SQL.Add('and m.aktif=''Y''');

QDatajual.SQL.Add('and d.kode_barang= :kode');

Qdatajual.SQL.Add('and m.Tgl_jual BETWEEN :awal and :akhir');

Qdatajual.SQL.Add('and b.kode_barang=d.kode_barang');

Qdatajual.SQL.Add('Order by m.tgl_jual');

Qdatajual.Prepare;

Qdatajual.Params[0].AsString:=CbBrg.Text;

Qdatajual.Params[1].AsDateTime:=periode_awal-1;

Qdatajual.Params[2].AsDateTime:=periode_akhir;

QDatajual.Open;

(21)

while not Qdatajual.Eof do begin

tempdata.Append;

tempdata['Tgl_jual']:=Qdatajual.Fields[0].Value;

tempdata['jumlah']:=Qdatajual.Fields[1].Value;

tempdata.Post;

Qdatajual.Next;

end;

//untuk nota yang tidak aktif Qdataretur.Close;

Qdataretur.SQL.Clear;

Qdataretur.SQL.Add('select DISTINCT (mj.tgl_jual), dj.jumlah');

Qdataretur.SQL.Add('from mpenjualan mj,dpenjualan dj, mreturcustomer mr, dreturcustomer dr, barang b');

Qdataretur.SQL.Add('where mj.no_nota=mr.no_nota_lama');

Qdataretur.SQL.Add('and mj.no_nota=dj.no_nota');

Qdataretur.SQL.Add('and dj.kode_barang=b.kode_barang');

Qdataretur.SQL.Add('and mj.aktif=''N''');

Qdataretur.SQL.Add('and dj.kode_barang=:kode');

Qdataretur.SQL.Add('and mj.Tgl_jual BETWEEN :awal1 and :akhir1');

Qdataretur.SQL.Add('and mr.tgl_retur BETWEEN :akhir2 and :akhir3');

Qdataretur.Prepare;

qdataretur.Params[0].AsString:=Cbbrg.Text;

qdataretur.Params[1].AsDateTime:=periode_akhir-1;

qdataretur.Params[2].AsDateTime:=periode_akhir;

qdataretur.Params[3].AsDateTime:=periode_akhir;

qdataretur.Params[4].AsDateTime:=periode_akhir+1;

Qdataretur.Open;

while not Qdataretur.Eof do begin

tempdata.Append;

tempdata['Tgl_jual']:=Qdataretur.Fields[0].Value;

tempdata['jumlah']:=Qdataretur.Fields[1].Value;

tempdata.Post;

Qdataretur.Next;

end;

tempdata.Active:=false;

tempdata.Active:=true;

//input data ke SgRamal & SgHasil for i:=1 to 18 do

begin

//hitung periode bulan ke-i if i=1 then

begin

awal_i:=periode_awal;

decodedate(awal_i, tahun_i, bulan_i, tgl_i);

akhir_i:=EndOfAMonth(tahun_i, bulan_i);

end

(22)

decodedate(temp_i, tahun_i, bulan_i, tgl_i);

awal_i:=StartOfAMonth(tahun_i, bulan_i);

akhir_i:=EndOfAMonth(tahun_i, bulan_i);

end;

Qbulan.Close;

Qbulan.SQL.Clear;

Qbulan.SQL.Add('select sum(jumlah) as jum');

Qbulan.SQL.Add('from tempdata');

Qbulan.SQL.Add('where Tgl_jual BETWEEN :awal and :akhir');

Qbulan.Prepare;

Qbulan.Params[0].AsDateTime:=awal_i;

Qbulan.Params[1].AsDateTime:=akhir_i-1;

Qbulan.Open;

while not Qbulan.Eof do begin

//untuk SgHasil

SgHasil.Cells[0,i]:=inttostr(i);

DateTimeToString(tgl_j,'dd/mmm/yy', akhir_i);

SgHasil.Cells[1,i]:=copy(tgl_j, 4,length(Tgl_j)-3);

//untuk SgRamal

SgRamal.Cells[0,i]:=inttostr(i);

if Qbulan.Fields[0].Value<>null then SgRamal.Cells[1,i]:=floattostr(Qbulan.Fields[0].Value)

else begin

messagedlg('Forecasting tidak dapat dilakukan karena ada data bulanan yang bernilai 0',mtInformation,[mbOK],0);

nol:=true;

exit;

end;

Qbulan.Next;

end;

end;

for i:=19 to 20 do begin

//untuk SgHasil

temp_i:=IncMonth(periode_awal,i-1);

decodedate(temp_i, tahun_i, bulan_i, tgl_i);

akhir_i:=EndOfAMonth(tahun_i, bulan_i);

DateTimeToString(tgl_j,'dd/mmm/yy', akhir_i);

SgHasil.Cells[0,i]:=inttostr(i);

SgHasil.Cells[1,i]:=copy(tgl_j, 4,length(Tgl_j)-3);

//untuk SgRamal

SgRamal.Cells[0,i]:=inttostr(i);

end;

end;

end;

Peramalan dengan metode Winter dilakukan dengan berbagai macam

kombinasi dari nilai Alpha, Beta, Gamma, dan panjang musiman (L). Hasil peramalan

(23)

ini dibandingkan nilai MSE-nya, dan dipilih nilai MSE yang terkecil (lihat segmen program 4.5.). Perhitungan peramalan ini menggunakan rumus-rumus yang ada pada bab 2.

Segmen Program 4.5. Peramalan dengan Metode Winter

procedure Tform61.Winter(alpha, beta, gamma:real; L:integer);

var XL, X2L, juml1, juml2 :real;

b, S, I, F, error,err_kuadrat, err_abs, MSE, MAPE, temp:real;

loopL, loop2L, h, g, periode, jum_periode, m :integer;

begin

//lakukan inisialisasi juml1:=0;

juml2:=0;

err_kuadrat:=0;

err_abs:=0;

jum_periode:=18;

//menghitung nilai XL dan X2L for loopL:=1 to L do

begin

juml1:=juml1+strtofloat(SgRamal.Cells[1,loopL]);

end;

XL:=juml1/L;

for Loop2L:=(L+1) to (2*L) do begin

juml2:=juml2+strtoFloat(SgRamal.Cells[1,loop2L]);

end;

X2L:=juml2/L;

//menghitung nilai B ke-L b:=(X2L-XL)/L;

SgRamal.Cells[4,L]:=floattostr(RoundTo(b,-2));

//menghitung nilai S ke-L

S:=XL+(strtofloat(SgRamal.Cells[4,L])*(L-1)/2);

SgRamal.Cells[2,L]:=floattostr(RoundTo(S,-2));

//menghitung nilai I yg pertama s/d I ke-L for h:=1 to L do

begin

I:=strtofloat(SgRamal.Cells[1,h])/XL;

SgRamal.Cells[3,h]:=floattostr(RoundTo(I,-2));

end;

//menghitung nilai F ke-g+m m:=1;

g:=L;

F:=((strtofloat(SgRamal.Cells[2,g]))+(strtofloat(SgRamal.Cells[4,g])

*m))*

(strtofloat(SgRamal.Cells[3,g-L+m]));

SgRamal.Cells[5,g+m]:=floattostr(RoundTo(F,-2));

//perhitungan dengan persamaan dasar Winter

(24)

S:=(alpha*strtofloat(SgRamal.Cells[1,periode])/

strtofloat(SgRamal.Cells[3,periode-L]))+(1-alpha)*

(strtofloat(SgRamal.Cells[2,periode-1])+

strtofloat(SgRamal.Cells[4,periode-1]));

SgRamal.Cells[2,periode]:=floattostr(RoundTo(S,-2));

//menghitung nilai b ke-periode

if Strtofloat(SgRamal.Cells[2,periode])<>0 then begin

b:=(gamma*(strtofloat(SgRamal.Cells[2,periode])- strtofloat(SgRamal.Cells[2,periode-1])))+

((1-gamma)*strtofloat(SgRamal.Cells[4,periode-1]));

SgRamal.Cells[4,periode]:=floattostr(RoundTo(b,-2));

end else exit;

//menghitung nilai I ke-periode

if strtofloat(SgRamal.Cells[4,periode])<>0 then begin

I:=(beta*(strtofloat(SgRamal.Cells[1,periode])/

strtofloat(SgRamal.Cells[2,periode])))+

((1-beta)*strtofloat(SgRamal.Cells[3,periode-L]));

SgRamal.Cells[3,periode]:=floattostr(RoundTo(I,-2));

end else exit;

//menghitung nilai F ke-periode+1

if strtofloat(SgRamal.Cells[4,periode])<>0 then begin

F:=(strtofloat(SgRamal.Cells[2,periode])+

(strtofloat(SgRamal.Cells[4,periode])*m)) *strtofloat(SgRamal.Cells[3,periode-L+m]);

SgRamal.Cells[5,periode+1]:=floattostr(RoundTo(F,-2));

end else exit;

if strtofloat(SgRamal.Cells[5,periode+1])<>0 then begin

//menghitung error kuadrat dan error absolut error:=strtofloat(SgRamal.Cells[1,periode])-

strtofloat(SgRamal.Cells[5,periode]);

SgRamal.Cells[6,periode]:=floattostr(RoundTo(sqr(error),-2));

err_kuadrat:=err_kuadrat+RoundTo(sqr(error),-2);

temp:=abs(error/strtofloat(SgRamal.Cells[1,periode])*100);

err_abs:=err_abs+temp;

SgRamal.Cells[7,periode]:=floattostr(RoundTo(temp,-2));

end else exit;

end;

//menghitung nilai F ke-periode+2 m:=2;

F:=(strtofloat(SgRamal.Cells[2,jum_periode])+

(strtofloat(SgRamal.Cells[4,jum_periode])*m)) *strtofloat(SgRamal.Cells[3,jum_periode-L+m]);

SgRamal.Cells[5,jum_periode+2]:=floattostr(RoundTo(F,-2));

//mengecek MSE_terkecil

MSE:=RoundTo(err_kuadrat/(jum_periode-L),-2);

(25)

MAPE:=RoundTo(err_abs/(jum_periode-L),-2);

if (alpha=0) and (beta=0) and (gamma=0) and (L=3) then begin

alpha_terkecil.Text:=floattostr(alpha);

beta_terkecil.Text:=floattostr(beta);

gamma_terkecil.Text:=floattostr(gamma);

L_terkecil.Text:=floattostr(L);

MSE_terkecil.Text:=floattostr(MSE);

MAPE_terkecil.Text:=floattostr(MAPE);

Hasil_F.Text:=SgRamal.Cells[5,jum_periode+2];

Salin_Hasil;

end else begin

if alpha_terkecil.Text='' then begin

alpha_terkecil.Text:=floattostr(alpha);

beta_terkecil.Text:=floattostr(beta);

gamma_terkecil.Text:=floattostr(gamma);

L_terkecil.Text:=floattostr(L);

MSE_terkecil.Text:=floattostr(MSE);

MAPE_terkecil.Text:=floattostr(MAPE);

Hasil_F.Text:=SgRamal.Cells[5,jum_periode+2];

Salin_Hasil;

end else

if MSE<strtofloat(MSE_Terkecil.Text) then begin

alpha_terkecil.Text:=floattostr(alpha);

beta_terkecil.Text:=floattostr(beta);

gamma_terkecil.Text:=floattostr(gamma);

L_terkecil.Text:=floattostr(L);

MSE_terkecil.Text:=floattostr(MSE);

MAPE_terkecil.Text:=floattostr(MAPE);

Hasil_F.Text:=SgRamal.Cells[5,jum_periode+2];

Salin_Hasil;

end else

if MSE=strtofloat(MSE_Terkecil.Text) then begin

if MAPE<strtofloat(MAPE_Terkecil.Text) then begin

alpha_terkecil.Text:=floattostr(alpha);

beta_terkecil.Text:=floattostr(beta);

gamma_terkecil.Text:=floattostr(gamma);

L_terkecil.Text:=floattostr(L);

MSE_terkecil.Text:=floattostr(MSE);

MAPE_terkecil.Text:=floattostr(MAPE);

Hasil_F.Text:=SgRamal.Cells[5,jum_periode+2];

Salin_Hasil;

end;

Referensi

Dokumen terkait

Pengamatan dilakukan secara destruktif dengan mengambil 2 tanaman contoh untuk setiap perlakuan yang meliputi komponen pertumbuhan jumlah daun, luas daun, jumlah cabang, bobot

Pada penelitian ini peneliti ingin mengetahui lebih lanjut mengenai subjective well being yang dimiliki wanita dewasa akhir, apakah hal-hal positif yang dialami oleh wanita

Jika digunakan lebih dari satu palu pantul , lakukan pengujian pada sejumlah permukaan beton tipikal sehingga dapat digunakan untuk menentukan besarnya perbedaan angka pantul.. 5.5

ABSTRAK Tujuan penelitian tindakan kelas ini adalah untuk meningkatkan motorik halus anak melalui kegiatan meronce anak melalui penerapan model

pematangan buah alpukat, kecuali pada uji tekstur hari ke- 9 tidak terjadi interaksi antara lama perendaman dengan konsentrasi larutan

Konsep Manajemen Kehumasan dalam perspektif Islam yaitu mengambil contoh Nabi Muhamma SAW, bagaimana tigkah laku beliau, ahlakh, kejujuran dalam perkataan, dan

Pemberian kurkumin 25 dan 50µM pada sel granulosa ekspresi ERβ sel granulosa yang dirangsang PGF2α dan yang dirangsang LH menurunkan sekresi estrogen secara diberi

Gerakan politik yang lain yang dilakukan ICMI ialah mendesak pemerintah MPR DPR dan pemerintah untuk segera melaksanakan Tap MPR yang mengamanatkan penghentian kerja sama dengan