• Tidak ada hasil yang ditemukan

Manajemen Stock Dengan Trigger Database

N/A
N/A
Protected

Academic year: 2021

Membagikan "Manajemen Stock Dengan Trigger Database"

Copied!
12
0
0

Teks penuh

(1)

Manajemen Stock Dengan Trigger Database

Tulisan ini mengulas tentang manajemen stock atau inventory dan tidak membahas bagaimana menghitung Total ataupun subtotal. Untuk manajemen stock dibuat menggunakan trigger database. Privilege yang dibutuhkan CREATE TRIGGER.

Ada lima tabel yang digunakan yaitu MASTER_BARANG, ORD, ORD_DETAIL, SALES dan SALES_DETAIL. Rancangan tabel seperti pada gambar.

Ketentuan

• Barang yang akan dibeli atau dijual harus ada di tabel MASTER_BARANG • Pembelian akan menambah stock barang

• Penjualan akan mengurangi stock barang

• Quantity (QTY) penjualan dan pembelian boleh diupdate dan otomatis akan mempengaruhi jumlah stock di MASTER_BARANG

1. MEMBUAT TABEL DAN CONSTRAINT

CREATE TABLE MASTER_BARANG (

KODE_BRG NUMBER(4) PRIMARY KEY, NAMA_BRG VARCHAR2(20) NOT NULL,

HARGA NUMBER(10),

STOCK NUMBER(4));

CREATE TABLE ORD(

NO_ORDER NUMBER(4) PRIMARY KEY, ID_SUPPLIER NUMBER(4) NOT NULL, TGL_ORDER DATE,

RP_TOTAL NUMBER(12));

CREATE TABLE ORDER_DETAIL(

NO_ORDER NUMBER(4) REFERENCES ORD(NO_ORDER), NO_URUT NUMBER(3),

KODE_BRG NUMBER(4) REFERENCES MASTER_BARANG(KODE_BRG),

HARGA NUMBER(10),

QTY NUMBER(4),

(2)

CREATE TABLE SALES(

NO_SALES NUMBER(4) PRIMARY KEY, ID_CUST NUMBER(4) NOT NULL, TGL_SALES DATE,

RP_TOTAL NUMBER(12));

CREATE TABLE SALES_DETAIL(

NO_SALES NUMBER(4) REFERENCES SALES(NO_SALES), NO_URUT NUMBER(3),

KODE_BRG NUMBER(4) REFERENCES MASTER_BARANG(KODE_BRG),

HARGA NUMBER(10),

QTY NUMBER(4),

SUBTOTAL NUMBER(10)); 2. MEMBUAT TRIGGER DATABASE Trigger UPDATE_STOCK_BRG_ORD

Buat trigger update_stock_brg_ord di tabel order_detail Yang berfungsi untuk mengupdate stock di tabel master_barang jika ada pembelian barang atau perubahan qty di tabel order_detail.

CREATE OR REPLACE TRIGGER update_STOCK_brg_ord BEFORE INSERT OR UPDATE OF QTY ON order_detail FOR EACH ROW

BEGIN

IF NVL(:OLD.QTY,0) < NVL(:NEW.QTY,0) THEN UPDATE MASTER_BARANG

SET STOCK = STOCK + (NVL(:NEW.QTY,0)-NVL(:OLD.QTY,0)) WHERE KODE_BRG = :NEW.KODE_BRG;

ELSE

UPDATE MASTER_BARANG

SET STOCK = STOCK - (NVL(:OLD.QTY,0)-NVL(:NEW.QTY,0)) WHERE KODE_BRG = :NEW.KODE_BRG;

END IF; END;

/

Trigger UPDATE_STOCK_BRG_SALES

Buat trigger update_stock_brg_sales di tabel sales_detail yang berfungsi untuk mengupdate stock di tabel master_barang jika ada penjualan barang atau perubahan qty di tabel sales_detail.

(3)

BEFORE INSERT OR UPDATE OF QTY ON sales_detail FOR EACH ROW

BEGIN

IF NVL(:OLD.QTY,0) < NVL(:NEW.QTY,0) THEN UPDATE MASTER_BARANG

SET STOCK = STOCK - (NVL(:NEW.QTY,0)-NVL(:OLD.QTY,0)) WHERE KODE_BRG = :NEW.KODE_BRG;

ELSE

UPDATE MASTER_BARANG

SET STOCK = STOCK + (NVL(:OLD.QTY,0)-NVL(:NEW.QTY,0)) WHERE KODE_BRG = :NEW.KODE_BRG;

END IF; END;

/

3. ISI DATA KE TABEL

Isi master_barang dengan beberapa barang dengan kolom stock di set 0 sebagai data awal.

INSERT INTO MASTER_BARANG VALUES(100,’PERMEN’,1000,0); INSERT INTO MASTER_BARANG VALUES(200,’BUKU’,2500,0); INSERT INTO MASTER_BARANG VALUES(300,’ROTI’,1500,0); -- Lihat isi data BARANG

select * from MASTER_BARANG;

KODE_BRG NAMA_BRG HARGA STOCK --- --- --- 100 PERMEN 1000 0 200 BUKU 2500 0 300 ROTI 1500 0 4. PEMBELIAN, PENJUALAN dan UPDATE

Lakukan pembelian untuk semua barang permen 200, buku 100, roti 100 Proses pembelian disini berarti Anda mengisi data ke tabel ORD dan ORDER_DETAIL

-- Isi dulu tabel ORD

INSERT INTO ORD VALUES(1,100,SYSDATE,600000);

--Isi tabel ORD_DETAIL

INSERT INTO ORDER_DETAIL VALUES(1,2,200,2500,100,250000); INSERT INTO ORDER_DETAIL VALUES(1,3,300,1500,100,150000); INSERT INTO ORDER_DETAIL VALUES(1,1,100,1000,200,200000);

(4)

--Lihat data di ORD_DETAIL SELECT * FROM ORDER_DETAIL;

NO_ORDER NO_URUT KODE_BRG HARGA QTY SUBTOTAL --- --- --- --- 1 2 200 2500 100 250000 1 3 300 1500 100 150000 1 1 100 1000 200 200000

--Periksa stock pada tabel master_barang select * from MASTER_BARANG;

KODE_BRG NAMA_BRG HARGA STOCK --- --- --- 100 PERMEN 1000 200 200 BUKU 2500 100 300 ROTI 1500 100

-- Semua stock barang sudah bertambah sesuai jumlah order.

Lakukan penjualan barang permen 20, buku 10, roti 50. Proses penjualan disini berarti Anda mengisi data ke tabel SALES dan SALES_DETAIL

--Isi tabel SALES

INSERT INTO SALES VALUES (1,222,SYSDATE,120000); 1 row created.

--Isi tabel SALES_DETAIL

INSERT INTO SALES_DETAIL VALUES(1,1,100,1000,20,20000); INSERT INTO SALES_DETAIL VALUES(1,2,200,2500,10,25000); INSERT INTO SALES_DETAIL VALUES(1,3,300,1500,50,75000);

--Lihat isi tabel SALES_DETAIL select * from SALES_DETAIL;

NO_SALES NO_URUT KODE_BRG HARGA QTY SUBTOTAL --- --- --- 1 1 100 1000 20 20000

(5)

1 2 200 2500 10 25000 1 3 300 1500 50 75000

--Lihat stock di tabel MASTER_BARANG select * from MASTER_BARANG;

KODE_BRG NAMA_BRG HARGA STOCK --- --- --- 100 PERMEN 1000 180 200 BUKU 2500 90 300 ROTI 1500 50

--Stock berkurang sesuai dengan jumlah penjualan.

Demikian pembahasan sederhana tentang manajemen stock (inventory) dengan menggunakan trigger database. Silahkan dikembangkan sesuai dengan keperluan Anda.

Salam

Bambang Sutejo

(6)

Kali ini saya akan memperkenalkan apa itu Trigger, kalo diartikan dala B.Indonesia trigger yaitu pemicu. Trigger (pemicu) ini merupakan jenis khusus yang melakukan prosedur yang tersimpan secara otomatis saat pengguna mencoba membuat pernyataan data-modifikasi yang ditentukan pada tabel.

Microsoft ® SQL Server ™ memungkinkan penciptaan beberapa trigger(pemicu) untuk setiap pernyataan yang diberikan INSERT, UPDATE, atau DELETE.

Misalnya saya punya 2 tabel, tabel barang dan tabel pembelian, untuk lebih jelasnya bisa

dilihat pada gambar dibawah ini. Dalam tabel barang tersebut ada nama barang dan jumlah stock ,

IDEnya adalah ketika tabel pembelian ditambahkan, jumlah stock barang akan terupdate secara

otomatis.misalnya ketika barang A dibeli sejumlah 3 buah maka nanti stock barang akan bertambah

3 secara otomatis. proses tersebut bisa dilakukan dgn trigger

=> ini contoh tablenya, nama table bisa diganti sesuai selera

Langsug saja saya contohkan Syntax programnya :

Tapi ini kita buat tabelnya dulu yaa....

create table BARANG (

BAR_ID int not null,

BAR_NAMA varchar(255) not null, BAR_STOCK int null

default 0,

constraint PK_BARANG primary key (BAR_ID) )

go

create table PEMBELIAN (

PEM_ID int not null, BAR_ID int null , PEM_JUMLAH int null ,

constraint PK_PEMBELIAN primary key (PEM_ID) )

go

create index RELATION_FK on PEMBELIAN (BAR_ID) go

alter table PEMBELIAN

add constraint FK_PEMBELIA_RELATION_BARANG foreign key (BAR_ID) references BARANG (BAR_ID)

(7)

INSERT INTO BARANG (BAR_ID,BAR_NAMA) VALUES (1,’AQUA’); INSERT INTO BARANG (BAR_ID,BAR_NAMA) VALUES (2,’TOTAL’); INSERT INTO BARANG (BAR_ID,BAR_NAMA) VALUES (3,’AQUADES’);

Setelah anda menjalankan syntax tersebut, maka anda akan mempunyai 2 tabel, yaitu tabel barang dengan isi 3 buah data, dan tabel pembelian dengan data masih kosong. 3 data di tabel barang tersebut secara defaut stocknya adalah 0.

Kemudian saatnya kita buat trigger sehingga ketika kita menambahkan data di tabel pembelian dengan jumlah pembelian barang tertentu, maka stock di tabel barang akan bertambah sesuai dengan barang yg dibeli, syntax trigger tersebut adalah sebagai berikut.

create trigger tambahStockbarang on pembelian for insert

as

update b set b.bar_stock = b.bar_stock + i.pem_jumlah from barang b join inserted i on b.bar_id = i.bar_id

arti dari kode tersebut adalah sebagai berikut

create trigger tambahStockbarang on pembelian

membuat trigger dengan nama tambahStockBarang dimana trigger tersebut akan terpicu jika ada perubahan di tabel pembelian

for insert as

perubahan tersebut adalah penambahan(insert) di tabel pembelian , selain penambahan bisa juga diisi dengan perubahan(update) atau penghapusan(delete)

for disini juga bisa rubah isinya jadi after atau instead of . perbedaanya adalah waktu trigger dikerjakan, biasaya yg sering digunakan adalah for

update b set b.bar_stock = b.bar_stock + i.pem_jumlah from barang b join inserted i on b.bar_id = i.bar_id

ini adalah kode yg dikerjakan ketika kejadian trigger terpicu, kode diatas bertujuan merubah nilai bar_stock pada tabel barang dengan menambahkan nilai bar_stock yg sekarang dengan jumlah barang yg dibeli (pem_jumlah). perhatikan disini ada tabel yang bernama inserted, tabel tersebut merupakan tabel logika yg digunakan untuk menyimpan data yang memicu terjadinya trigger, dalam hal ini nilai data yg dimasukkan(insert) kedalam tabel pembelian, selain inserted, tabel logika lainnya adalah deleted, tabel logika ini digunakan untuk trigger yg terpicu dengan kejadian delete

kita coba masukkan kode berikut

INSERT INTO PEMBELIAN (PEM_ID, BAR_ID, PEM_JUMLAH) VALUES (1,1,4); INSERT INTO PEMBELIAN (PEM_ID, BAR_ID, PEM_JUMLAH) VALUES (2,3,2); INSERT INTO PEMBELIAN (PEM_ID, BAR_ID, PEM_JUMLAH) VALUES (3,1,1); arti kode tersebut

pem_id haruslah beda karena merupakan primary key beli aqua(kode bar_id=1) sebanyak 4

beli aquades (kode bar_id=3) sebanyak 2 beli aqua lagi sebanyak 1

sehingga secara keseluruhan yg dibeli aqua sebanyak 5 dan aquades sebanyak 2

karena default nilai stock barang adalah 0, maka seharusnya nilai aqua 5 dan aquades 2 adalah jumlah stock barang sekarang ini sama seperti gambar di bawah….

(8)

Yah memang agag susah, tapi kalo syntax nya sucses...?! bbeee……seneng banget…..

oh ya hati-hati dengan penulisan nama table nya loh, biasanya berpengaruh, kalo gag ati-ati bisa eror lagi nanti.

(9)

Trigger adalah salah satu Transact-SQL code yang intinya secara otomatis mengeksekusi suatu task (insert, update dan delete) pada suatu object apabila ada DML(Data Manipulation language) yang dieksekusi pada object tertentu...

supaya lebih mudah kita asumsikan ada 2 tabel yaitu table stock dan table transaksi penjualan. pada tabel stok terdapat nama barang dan stoknya. kemudian terjadi penjualan barang pada table transaksi penjualan , maka secara otomatis jumlah stock barang pada table barang akan berkurang.

untuk lebih mudah , mari kita coba untuk membahas bagaimana cara membuat trigger.

sebelumnya kita create dulu Database dan beberapa tabel untuk uji coba trigger

(!)

note : Pembuatan database yang akan kita gunakan disini semata-mata untuk mempermudah dalam memahami cinta satu sama lain trigger, sehingga akan dibuat se-ngawurse-simpel mungkin dan tanpa memperhatikan normalisasi. sedangkan untuk normalisasi sendiri akan sama-sama kita bahas di thread lain... hehe

Querynya :

Databasenya

CREATE DATABASE TOKO_PINTAR

Tabelnya

CREATE DATABASE TOKO_PINTAR USE TOKO_PINTAR

GO

CREATE TABLE Product (

kode_product INT Identity (20110,1), nama_barang Varchar(100),

stok int )

CREATE TABLE Pembelian (

kode_pembelian INT Identity (11020,1), nama_barang VARCHAR (100),

kode_product INT, jumlah INT

)

CREATE TABLE Penjualan (

kode_penjualan INT Identity (11020400,1), nama_barang VARCHAR (100),

kode_product INT, jumlah INT

)

(10)

GO

INSERT INTO Product VALUES ('Flashdisk 16 GB','20'), ('Processor Quad Core','30') , ('Mouse','15')

hasilnya

nah sekarang mari kita coba untuk membuat Trigger pada table Pembelian

USE TOKO_PINTAR GO

Create trigger tr_pembelian on pembelian for insert,update

as

IF EXISTS (Select PD1.nama_barang FROM Product PD1 JOIN inserted i1 on PD1.nama_barang = i1.nama_barang)

update PD set PD.stok = PD.stok + i.jumlah

from Product PD join inserted i on PD.nama_barang= i.nama_barang

ELSE

INSERT Product (nama_barang ,stok)SELECT i3.nama_barang,i3.jumlah

FROM inserted i3

UPDATE pembelian SET kode_product = P.kode_product

FROM Product P JOIN pembelian ON pembelian.nama_barang = P.nama_barang

kita coba untuk Insert Row baru namun dengan nama barang yang sudah ada di tabel Product

(11)

mari kita lihat hasilnya

sekarang kita coba untuk insert barang baru lewat tabel pembelian

INSERT INTO PEMBELIAN(nama_barang,jumlah) VALUES('Hardisk Eksternal 1 TB','35')

berikut adalah trigger untuk penjualan

USE TOKO_PINTAR GO

CREATE trigger tr_penjualan on penjualan for insert,update

as

IF EXISTS (Select PD1.nama_barang FROM Product PD1 JOIN inserted i1 on PD1.nama_barang = i1.nama_barang)

update PD set PD.stok = PD.stok - i.jumlah

from Product PD join inserted i on PD.nama_barang= i.nama_barang

ELSE

SELECT 'barang dengan nama '+i2.nama_barang + ' tidak dapat ditemukan dalam database'

FROM inserted i2

UPDATE penjualan SET kode_product = P.kode_product

FROM Product P JOIN penjualan ON penjualan.nama_barang = P.nama_barang

Sekarang mari kita insert penjualan

(12)

nah..berikut mari kita lihat hasilnya

Referensi

Dokumen terkait

Pengolahan data penjualan kredit dan persediaan (Stock) barang pada Toko Master masih dilaksanakan secara manual sehingga kemungkinan terjadinya kesalahan dalam

Supervisor melakukan penerimaan barang dari Supplier, memeriksa kondisi barang dan mencocokkannya dengan faktur pembelian yang diterima dari Supplier. Data pembelian

Pada form penerimaan barang user dapat melakukan dan menambahkan berapa jumlah barang yang telah diterima dan juga akan dilakukan pencatatan data penerimaan pada

SISTEM INFORMASI MANAJEMEN STOCK 0 MENGELOLA DATA PENGGANTIAN HARDWARE 1 4 MENGELOLA DATA MASTER HARDWARE MENGELOLA DATA MASTER RUANG 1.2 PERSETUJUAN STOCK HARDWARE INPUT DATA

➢ Klik Tambah untuk menambahkan data barang baru kedalam data list retur pembelian yang akan dikembalikan. ➢ Klik Simpan untuk menyimpan data

Sedangkan untuk m em buat data saling terintegrasi, m aka satu tabel dengan tabel yang lainnya harus

Untuk Nota Retur Pembelian karena barang kadaluarsa akan secara otomatis terisi dengan mengambil data jumlah barang kadaluarsa yang ada pada Kertas Kerja Stock Opname,

42 Kasus Test Form Ubah Jumlah Barang Pemesanan Pembelian...265.