pemanfaatan database server open source

65
Pemanfaatan Database Server Open Source Oleh : Hendra, ST. Indoprog 1 Mengenal Firebird Firebird adalah suatu database relational yang menawarkan kemampuan kemampuan ANSI SQL-99 yang dapat dijalankan pada Linux, Windows, dan varitas dari platform Unix. Firebird adalah database server yang sifatnya Open Source, dan dapat digunakan secara bebas untuk tujuan komersil ataupun tidak. Website : http://firebird.sourceforge.net/ FAQ : http://firebird.sourceforge.net/index.php?op=faq Catatan : Berdasarkan pengalaman penulis Firebird SQL server merupakan database server yang ringan dan berunjuk kerja tinggi dapat dijalankan pada lingkungan Windows 98/2000 maupun XP. Penulisan telah memanfaatkannya untuk pengembangan program database yang serius diperusahaan 1 tahun terakhir dan tidak ada masalah serius yang pernah ditimbulkannya. Kemudian firebird mendukung fasilitas Primarykey, Foreignkey, View, Storeprocedure, Trigger. Juga tersedia ODBC provider untuk ADO maupun ADO.Net Dokumentasi tentang perbandingan dan Migrasi dari MSDE/SQL Server ke Firebird http://firebird.sourceforge.net/manual/migration-mssql.html#migration-mssql-intro

Upload: materi-kuliah-online

Post on 07-Nov-2014

953 views

Category:

Education


1 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 1

Mengenal Firebird

Firebird adalah suatu database relational yang menawarkan kemampuan kemampuan

ANSI SQL-99 yang dapat dijalankan pada Linux, Windows, dan varitas dari platform

Unix.

Firebird adalah database server yang sifatnya Open Source, dan dapat digunakan secara

bebas untuk tujuan komersil ataupun tidak.

Website : http://firebird.sourceforge.net/

FAQ : http://firebird.sourceforge.net/index.php?op=faq

Catatan :

Berdasarkan pengalaman penulis Firebird SQL server merupakan database server yang

ringan dan berunjuk kerja tinggi dapat dijalankan pada lingkungan Windows 98/2000

maupun XP.

Penulisan telah memanfaatkannya untuk pengembangan program database yang serius

diperusahaan 1 tahun terakhir dan tidak ada masalah serius yang pernah ditimbulkannya.

Kemudian firebird mendukung fasilitas Primarykey, Foreignkey, View, Storeprocedure,

Trigger.

Juga tersedia ODBC provider untuk ADO maupun ADO.Net

Dokumentasi tentang perbandingan dan Migrasi dari MSDE/SQL Server ke Firebird

http://firebird.sourceforge.net/manual/migration-mssql.html#migration-mssql-intro

Page 2: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 2

Perkembangan Firebird

Pada tahun 2000, Borland memutuskan untuk melepaskan InterBase 6.0 sebagai Open

Source. Firebird adalah suatu pengembangan terpisah yang dimulai dari source code

tersebut, yang dikendalikan oleh suatu Open Source Community.

Dimana kita dapat mendownload Firebird

Untuk mendownload Firebird Server, kunjungi

http://firebird.sourceforge.net/index.php?op=files&id=engine

Proses Instalasi Firebird SQL 1.5

Klik pada next,

Klik pada next

Page 3: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 3

Klik pada I accept the agreement, dan klik

next

Klik pada next

Klik pada next

Klik pada next

Klik pada Finish

Page 4: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 4

Mengaktifkan dan Mematikan Service pada Firebird

Pada Start, Klik Setting, Klik Control Panel, dan klik pada

Lakukan setting firebird sebagai berikut :

Klik pada stop, dan start kembali.

Page 5: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 5

Mengenal IBExpert

IB Expert merupakan salah satu tools untuk pembuatan dan manipulasi database pada

Firebird SQL Server (seperti SQL Enterprised Manager pada SQL Server)

Mendownload IBExpert Free Personal Edition

Untuk mendownload IBExpert anda dapat mengunjungi http://www.ibexpert.com

Instalasi IBExpert

Klik Next

Klik Next

Klik yes

Klik Next

Page 6: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 6

Klik pada next

Klik Finish

dan secara otomatis akan mengaktifkan IBExpert.

Page 7: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 7

Proses Pembuatan Database

Buatlah sebuah folder baru c:\firebirddb

Kemudian klik pada Ok

Perbedaan dialect pada Database Firebird.

Page 8: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 8

Klik pada Test Connect

Page 9: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 9

Dan Akhirnya klik pada register

Double klik pada C:\FirebirdDB\fbindoprog.fdb

Sejauh ini berarti anda telah berhasil membuat database dan membuat koneksi.

Page 10: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 10

Proses pembuatan Table :

1. Secara interaktif melalui designer pada IBExpert

Kemudian akan muncul jendela tabel designer

Isikan nama Tabel dan struktur database anda

Page 11: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 11

Klik pada (ctrl+f9) mengkompilasi tabel anda.

2. Melalui SQL Editor

Ketik SQL Script anda

Page 12: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 12

Rincian script diatas :

CREATE TABLE DATAPART (

PARTNO CHAR(25) NOT NULL,

PARTNAME VARCHAR(50),

TIPE VARCHAR(3),

KATEGORI CHAR(1),

QTYONHAND NUMERIC(10,2) DEFAULT 0,

SATUAN CHAR(10),

HET NUMERIC(15,2),

PDISCHET NUMERIC(6,2),

HMODAL NUMERIC(15,2),

PDISCMODAL NUMERIC(6,2),

QTYONSO NUMERIC(10,2) DEFAULT 0,

QTYONPO NUMERIC(10,2) DEFAULT 0,

BBALANCEHPP NUMERIC(15,2) DEFAULT 0,

BBALANCE NUMERIC(10,2) DEFAULT 0,

MUTASIMASUK NUMERIC(10,2) DEFAULT 0,

MUTASIKELUAR NUMERIC(10,2) DEFAULT 0,

ADJUSTED NUMERIC(15,2) DEFAULT 0,

BBALANCEHPP0 NUMERIC(15,2) DEFAULT 0,

BBALANCE0 NUMERIC(10,2) DEFAULT 0,

MUTASIMASUK0 NUMERIC(10,2) DEFAULT 0,

MUTASIKELUAR0 NUMERIC(10,2) DEFAULT 0,

ADJUSTED0 NUMERIC(15,2) DEFAULT 0,

NMAX NUMERIC(10,2) DEFAULT 0,

NMIN NUMERIC(10,2) DEFAULT 0,

NORAK CHAR(11),

EBY VARCHAR(20),

ETIME DATE

);

Klik pada (f9) untuk menjalankan script anda.

Page 13: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 13

Pembuatan View

Klik kanan pada View, dan pilih New View

Selanjutnya akan tampil jendela New View

Rincian Script diatas CREATE VIEW REKAPPENJUALANPART(

JENIS,

TGLKELUAR,

NOHARI,

PARTNAME,

QTYSUPPLY)

AS

select

datakeluar.JENIS,

datakeluar.tGLKELUAR,

extract(day from datakeluar.tGLKELUAR) as NoHari,

datakeluarDetail.PARTNO || ' ' || datakeluarDetail.PARTNAME,

datakeluarDetail.QTYSUPPLY

from datakeluar inner join datakeluardetail on datakeluar.nokeluar =

datakeluardetail.nokeluar

where datakeluar.status <> "C"

;

Ketikan script anda :

Page 14: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 14

dan klik pada (ctrl+f9) untuk mengkompilasi script anda.

Page 15: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 15

Pembuatan Procedure

Klik kanan pada Procedure dan pilih New

Selanjutnya akan tampil jendela New Procedure

Dan ketikan script untuk procedure anda :

Rincian Script diatas : CRETE PROCEDURE POSTINGKARTUPART (

TANGGAL DATE)

Page 16: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 16

RETURNS (

RESULT INTEGER)

AS

DECLARE VARIABLE VJENIS INTEGER;

DECLARE VARIABLE VNOMOR CHAR(10);

DECLARE VARIABLE VTANGGAL DATE;

DECLARE VARIABLE VPARTNO CHAR(25);

DECLARE VARIABLE VKODELOKASI CHAR(10);

DECLARE VARIABLE VPARTNAME VARCHAR(50);

DECLARE VARIABLE VQTY NUMERIC(10,2);

DECLARE VARIABLE VHARGA NUMERIC(10,2);

DECLARE VARIABLE VDETAILID INTEGER;

DECLARE VARIABLE VTOTALBARIS INTEGER;

DECLARE VARIABLE VID INTEGER;

DECLARE VARIABLE VIDHPP INTEGER;

DECLARE VARIABLE VQTYKELUAR NUMERIC(15,2);

DECLARE VARIABLE VQTYALLREMAIN NUMERIC(15,2);

DECLARE VARIABLE VQTYREMAIN NUMERIC(15,2);

DECLARE VARIABLE VHPP NUMERIC(15,2);

DECLARE VARIABLE VTOTALHPP NUMERIC(15,2);

DECLARE VARIABLE VBARIS INTEGER;

begin

vtotalbaris = 0;

/* untuk data terima, 1 = Pembelian, 2 = Ret. Pembelian, mutasi tidak ikut */

for select dataterima.jenis,

dataterima.noterima,

dataterima.tglterima,

dataterimadetail.partno,

dataterimadetail.kodelokasi0,

dataterimadetail.partname,

dataterimadetail.qtysupply,

(dataterimadetail.harga-dataterimadetail.disc),

dataterimadetail.terimadetailid

from dataterima inner join dataterimadetail on

dataterima.noterima=dataterimadetail.noterima

where (dataterima.jenis ="1" or dataterima.jenis = "2") and

dataterima.tglterima = :tanggal and dataterima.posting is null

into :VJENIS,:VNOMOR, :VTANGGAL,:VPARTNO, :VKODELOKASI, :VPARTNAME ,:VQTY

,:VHARGA,:VDETAILID

do

begin

vtotalbaris = vtotalbaris + 1;

/*jenis 1 = pembelian, 2= ret. pembelian*/

if (vjenis="1" ) then

begin

/*sisip data ke table datakartupart */

insert into datakartupart

(jenis,nomor,tanggal,partno,kodelokasi,partname,qty,qtyout,harga,hpp,carihpp, sourceid)

values

(:vjenis,:VNOMOR, :VTANGGAL,:VPARTNO, :VKODELOKASI, :VPARTNAME ,:VQTY

,0,:VHARGA,0,0,:VDETAILID);

/*update ke mutasi masuk ditabel datapart */

update datapart set mutasimasuk = mutasimasuk + :VQTY where partno = :VPARTNO;

end

else

begin

/*sisip data ke table datakartupart */

insert into datakartupart

(jenis,nomor,tanggal,partno,kodelokasi,partname,qty,qtyout,harga,hpp,carihpp, sourceid)

values

(:vjenis,:VNOmor, :Vtanggal,:VPARTNO, :VKODELOKASI, :VPARTNAME ,-:VQTY

,0,:vharga,0,0, :vdetailid);

/*update ke mutasi masuk ditabel datapart */

update datapart set mutasimasuk = mutasimasuk -:VQTY where partno = :VPARTNO;

end

/*update flag posting */

update dataterimadetail set posting = "P" where dataterimadetail.terimadetailid =

:vdetailid;

Page 17: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 17

update dataterima set status = "P", posting = "P" where dataterima.noterima =

:vnomor;

end

/* untuk data keluar, 4 = Penjualan, 5 = Ret. Penjualan, mutasi tidak ikut */

for select datakeluar.jenis,

datakeluar.nokeluar,

datakeluar.tglkeluar,

datakeluardetail.partno,

datakeluardetail.kodelokasi0,

datakeluardetail.partname,

datakeluardetail.qtysupply,

(datakeluardetail.harga-datakeluardetail.disc),

datakeluardetail.keluardetailid

from datakeluar inner join datakeluardetail on

datakeluar.nokeluar=datakeluardetail.nokeluar

where (datakeluar.jenis ="4" or datakeluar.jenis = "5") and

datakeluar.tglkeluar = :tanggal and datakeluar.posting is null

into :VJENIS,:VNOMOR, :VTANGGAL,:VPARTNO, :VKODELOKASI, :VPARTNAME ,:VQTY

,:VHARGA,:VDETAILID

do

begin

vtotalbaris = vtotalbaris + 1;

/*jenis 4 = penjualan, 5= ret. penjualan, 6 = mutasi keluar */

if (vjenis="4") then

begin

/*sisip data ke table datakartupart */

insert into datakartupart

(jenis,nomor,tanggal,partno,kodelokasi,partname,qty,qtyout,harga,hpp,carihpp, sourceid)

values

(:vjenis,:VNOmor, :Vtanggal,:VPARTNO, :VKODELOKASI, :VPARTNAME ,-:VQTY

,0,:vharga,0,0, :vdetailid);

/*update ke mutasi masuk ditabel datapart */

update datapart set mutasikeluar = mutasikeluar + :VQTY where partno =

:VPARTNO;

end

else

begin

/*sisip data ke table datakartupart */

insert into datakartupart

(jenis,nomor,tanggal,partno,kodelokasi,partname,qty,qtyout,harga,hpp,carihpp, sourceid)

values

(:vjenis,:VNOmor, :Vtanggal,:VPARTNO, :VKODELOKASI,:VPARTNAME,:VQTY

,0,:vharga,0,0, :vdetailid);

/*update ke mutasi masuk ditabel datapart */

update datapart set mutasikeluar = mutasikeluar + :VQTY where partno =

:VPARTNO;

end

/*update flag posting */

update datakeluardetail set posting = "P" where datakeluardetail.keluardetailid =

:vdetailid;

update datakeluar set status = "P", posting = "P" where datakeluar.nokeluar =

:vnomor;

end

/* untuk data adjust */

for select dataadjust.jenis,

dataadjust.noadjust,

dataadjust.tgladjust,

dataadjust.partno,

dataadjust.kodelokasi,

dataadjust.partname,

dataadjust.qtyadjust,

dataadjust.harga,

dataadjust.adjustid

from dataadjust where dataadjust.tgladjust = :tanggal and dataadjust.posting

is null

Page 18: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 18

into :VJENIS,:VNOMOR, :VTANGGAL,:VPARTNO, :VKODELOKASI, :VPARTNAME ,:VQTY

,:VHARGA,:VDETAILID

do

begin

vtotalbaris = vtotalbaris + 1;

/*sisip data ke table datakartupart */

insert into datakartupart (jenis,nomor,tanggal,partno,kodelokasi,

partname,qty,qtyout,harga,hpp,carihpp) values

(:VJENIS,:VNOMOR, :VTANGGAL,:VPARTNO, :VKODELOKASI, :VPARTNAME ,:VQTY

,0,:VHARGA,0,0);

/*update ke adjusted ditabel datapart */

update datapart set adjusted = adjusted + :VQTY where partno = :VPARTNO;

/*update flag posting */

update dataADJUST set status = "P", posting = "P" where dataADJUST.noadjust =

:vnomor;

end

/* untuk HPP */

for select datakartupart.partno,datakartupart.qty, datakartupart.id from datakartupart

where datakartupart.carihpp = 0 and qty < 0 order by id

into :vpartno, :VQTY, :VID

do

begin

vqtykeluar = -vqty; /*qty keluar negatif, jadi dibuat positif */

select sum(qty-qtyout) from datakartupart

where datakartupart.partno = :vpartno and (datakartupart.qty-

datakartupart.qtyout) > 0

into :vqtyallremain;

if (vqtyallremain >= vqtykeluar) then

begin

vbaris = 0;

vtotalhpp = 0;

while (vqtykeluar > 0) do

begin

vbaris = vbaris + 1;

select first 1 skip 0 (datakartupart.qty-datakartupart.qtyout),

datakartupart.id, datakartupart.harga

from datakartupart

where datakartupart.partno = :vpartno and (qty-qtyout) > 0 order by id

asc

into :VQTYREMAIN, :vidhpp, :vhpp;

if (vqtykeluar > vqtyremain) then

begin

insert into datahpp (id,idhpp,qty,hpp) values

(:vid,:vidhpp, :vqtyremain, :vhpp);

update datakartupart set qtyout=qtyout + :VQTYREMAIN where id =

:vidhpp;

vqtykeluar = vqtykeluar-vqtyremain;

vtotalhpp = vtotalhpp + (vqtyremain*vhpp);

end

else

begin

insert into datahpp (id,idhpp,qty,hpp) values

(:vid,:vidhpp, :vqtykeluar, :vhpp);

update datakartupart set qtyout=qtyout + :VQTYkeluar

where id = :vidhpp;

vtotalhpp = vtotalhpp + (vqtykeluar*vhpp);

vqtykeluar = 0;

end

end /*end of while*/

update datakartupart set hpp = :vtotalhpp,

carihpp = :VBARIS where id = :vid;

end /* end of if (vqtyallremain >= vqtykeluar) */

end

result = vtotalbaris;

end

Klik pada untuk mengkompilasi script anda.

Page 19: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 19

Pembuatan Trigger

Pada Trigger klik kanan, dan pilih New

dan akan tampil jendela new trigger

Ketikan script trigger anda :

Page 20: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 20

Rincian Script diatas : CREATE TRIGGER DATATERIMADETAIL_INSERT

ACTIVE AFTER INSERT POSITION 0

AS

begin

/*jenis 1 = pembelian, 2= ret. pembelian, 3 = mutasi masuk */

if (new.jenis = '1' or new.jenis='3') then

begin

Update datapart Set QtyOnHand = QtyOnHand + New.qtysupply where

partno = New.partno;

Update datapodetail Set QtySupply = QtySupply + New.qtysupply

Where PoDetailID = New.PoDetailID;

end

else

begin

Update datapart Set QtyOnHand = QtyOnHand - New.qtysupply where

partno = New.partno;

Update datapodetail Set QtySupply = QtySupply - New.qtysupply

Where PoDetailID = New.PoDetailID;

end

end

Page 21: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 21

Pembuatan Generator

Generator merupakan auto increment variable yang digunakan untuk pembuatan field

identity (dikombinasikan dengan pemakaian trigger)

Selanjutnya akan ditampilkan jendela New Generator

Ketikan nama Generator dan nilai Awalnya

Mengkombinasikan Generator dengan Trigger untuk membuat field identity

Page 22: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 22

CREATE TRIGGER DATATERIMADETAIL_BI0

ACTIVE BEFORE INSERT POSITION 0

AS

begin

New.terimadetailid = Gen_Id(GenTerimaDetailID,1);

end

Page 23: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 23

Konektivitas Visual Basic dengan Firebird

Dengan ODBC

Firebird ODBC dapat di download di

http://firebird.sourceforge.net/index.php?op=files&id=odbc

Klik Next

Klik Next

Klik Next

Klik Next

Page 24: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 24

Klik Next

Klik Next

Klik Next

Klik Finish

Klik Install

Connection String pada ADO

Setelah anda menginstalasi Firebird ODBC, maka koneksi ADO dapat dilakukan dengan

connection string sebagai berikut :

Page 25: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 25

Dim MyConn As New Connection

MyConn.ConnectionString = "DRIVER=Firebird/InterBase(r) driver;

UID=SYSDBA;PWD=MASTERKEY;DBNAME=c:\firebirddb\fbindoprog.fdb;"

MyConn.Open

Jika database berada pada komputer lain, misalnya DATASERVER dengan IP

192.168.0.1, maka connection string menjadi sebagai berikut :

Dim MyConn As New Connection

MyConn.ConnectionString = "DRIVER=Firebird/InterBase(r)

driver;UID=SYSDBA;PWD=MASTERKEY;DBNAME=DATASERVER:c:\firebirddb\fbindop

rog.fdb;"

MyConn.Open

atau

Dim MyConn As New Connection

MyConn.ConnectionString = "DRIVER=Firebird/InterBase(r)

driver;UID=SYSDBA;PWD=MASTERKEY;DBNAME=192.168.0.1:c:\firebirddb\fbindo

prog.fdb;"

MyConn.Open

Membuka Recordset

Pembukaan recordset dapat dilakukan seperti biasanya :

Set RsMaster = New Recordset

RsMaster.Open "DataPart", MyConn, adOpenDynamic, adLockOptimistic,

adCmdTable

Menjalankan StoreProcedure

Yang mengembalikan parameter

Dim MyComm As New Command

MyComm.ActiveConnection = MyConn

MyComm.CommandText = "execute procedure postingkartupart('01-31-

2005');"

MyComm.Prepared = True

MyComm.Parameters.Refresh

MyComm.Execute

Result = MyComm.Parameters("Result")

Yang mengembalikan recordset

Dim MyComm As New Command

Dim MyRs As New Recordset

MyComm.ActiveConnection = MyConn

MyComm.CommandText = "execute procedure kartupart('01-01-2005', '01-31-

2005'); "

MyComm.Prepared = True

MyComm.Parameters.Refresh

Set MyRs = MyComm.Execute

Page 26: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 26

Konektivitas Crystal Report dengan Firebird

Pilih More Data Sources, dan DblKlik pada Make New Connection

Page 27: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 27

Pilih Microsoft OLE DB Provider for ODBC Drivers

Page 28: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 28

Klik pada Use connection string, dan ketikan pada Connection string : DRIVER=Firebird/InterBase(r)

driver;UID=SYSDBA;PWD=MASTERKEY;DBNAME=c:\firebirddb\fbindoprog.fdb

Page 29: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 29

Page 30: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 30

Menampilkan report dari Project Visual Basic

Untuk menampilkan Crystal Report ke project anda dapat dilakukan dengan

menggunakan komponen “Crystal Report Viewer Control” melalui menu Project,

Components, dan Reference ke “Crystal Report 8 Activex Designer runtime library”

Dim xApp As New CRAXDRT.Application

Dim xRpt As New CRAXDRT.Report

Private Sub Form_Load()

Set xRpt = xApp.OpenReport("C:\fbindoprog.rpt")

xRpt.DiscardSavedData

xRpt.Database.LogOnServerEx "pdsoledb.dll", "OLE DB", "", "", "", "",

"DRIVER=Firebird/InterBase(r)

driver;UID=SYSDBA;PWD=MASTERKEY;DBNAME=c:\firebirddb\fbindoprog.fdb"

xRpt.Database.Tables(1).SetLogOnInfo "OLE DB",

"c:\firebirddb\fbindoprog.fdb", "SYSDBA", "MASTERKEY"

CRViewer.ReportSource = xRpt

CRViewer.ViewReport

End Sub

Page 31: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 31

Lampiran Script Database untuk program Stock untuk dipelajari : /******************************************************************************/

/**** Generated by IBExpert 2004.04.01 31/8/2004 11:53:57 PM ****/

/******************************************************************************/

SET NAMES NONE;

/******************************************************************************/

/**** Domains ****/

/******************************************************************************/

CREATE DOMAIN MONEY AS

NUMERIC(15,2)

DEFAULT 0;

CREATE DOMAIN SALDOPART AS

NUMERIC(10,2)

DEFAULT 0;

/******************************************************************************/

/**** Generators ****/

/******************************************************************************/

CREATE GENERATOR GENADJUSTID;

SET GENERATOR GENADJUSTID TO 21;

CREATE GENERATOR GENAKSESID;

SET GENERATOR GENAKSESID TO 55;

CREATE GENERATOR GENKARTUPARTID;

SET GENERATOR GENKARTUPARTID TO 99;

CREATE GENERATOR GENKARTUPARTLOKASIID;

SET GENERATOR GENKARTUPARTLOKASIID TO 0;

CREATE GENERATOR GENKELUARDETAILID;

SET GENERATOR GENKELUARDETAILID TO 18;

CREATE GENERATOR GENPARTID;

SET GENERATOR GENPARTID TO 0;

CREATE GENERATOR GENPODETAILID;

SET GENERATOR GENPODETAILID TO 50;

CREATE GENERATOR GENSODETAILID;

SET GENERATOR GENSODETAILID TO 9;

CREATE GENERATOR GENTERIMADETAILID;

SET GENERATOR GENTERIMADETAILID TO 61;

SET TERM ^ ;

/******************************************************************************/

/**** Stored Procedures ****/

/******************************************************************************/

CREATE PROCEDURE CANCELDATAADJUST (

NOADJUST CHAR(10))

RETURNS (

RESULT INTEGER)

AS

BEGIN

EXIT;

END^

Page 32: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 32

CREATE PROCEDURE CANCELDATAKELUAR (

NOKELUAR CHAR(10))

RETURNS (

RESULT INTEGER)

AS

BEGIN

EXIT;

END^

CREATE PROCEDURE CANCELDATATERIMA (

NOTERIMA CHAR(10))

RETURNS (

RESULT INTEGER)

AS

BEGIN

EXIT;

END^

CREATE PROCEDURE CLOSEPO (

TANGGAL INTEGER)

RETURNS (

RESULT INTEGER)

AS

BEGIN

EXIT;

END^

CREATE PROCEDURE CLOSESO (

TANGGAL INTEGER)

RETURNS (

RESULT INTEGER)

AS

BEGIN

EXIT;

END^

CREATE PROCEDURE POSTINGKARTUPART (

TANGGAL DATE)

RETURNS (

RESULT INTEGER)

AS

BEGIN

EXIT;

END^

CREATE PROCEDURE POSTINGKARTUPARTLOKASI (

TANGGAL DATE)

RETURNS (

RESULT INTEGER)

AS

BEGIN

EXIT;

END^

CREATE PROCEDURE PRINTDATAKELUAR (

VNOKELUAR CHAR(10))

AS

BEGIN

EXIT;

END^

CREATE PROCEDURE TUTUPHARIAN (

Page 33: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 33

TANGGAL DATE)

RETURNS (

RESULT INTEGER)

AS

BEGIN

EXIT;

END^

CREATE PROCEDURE TUTUPPERIODE (

BULAN INTEGER,

TAHUN INTEGER,

BULAN1 INTEGER,

TAHUN1 INTEGER)

RETURNS (

RESULT INTEGER)

AS

BEGIN

EXIT;

END^

CREATE PROCEDURE UPDATEPO (

TANGGAL INTEGER)

RETURNS (

RESULT INTEGER)

AS

BEGIN

EXIT;

END^

CREATE PROCEDURE UPDATESO (

TANGGAL INTEGER)

RETURNS (

RESULT INTEGER)

AS

BEGIN

EXIT;

END^

SET TERM ; ^

/******************************************************************************/

/**** Tables ****/

/******************************************************************************/

CREATE TABLE AKSES (

OPERATOR VARCHAR(50),

NOMOR INTEGER,

KETERANGAN VARCHAR(50),

AKSES INTEGER,

ID INTEGER NOT NULL

);

CREATE TABLE DATAADJUST (

JENIS CHAR(1),

NOADJUST CHAR(10) NOT NULL,

TGLADJUST DATE,

PARTNO CHAR(25),

KODELOKASI CHAR(10),

PARTNAME VARCHAR(30),

QTYADJUST NUMERIC(15,2),

HARGA NUMERIC(15,2),

KETERANGAN1 VARCHAR(50),

KETERANGAN2 VARCHAR(50),

STATUS CHAR(1) DEFAULT 'N',

ADJUSTID INTEGER,

Page 34: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 34

EBY VARCHAR(20),

ETIME DATE,

POSTING CHAR(1)

);

CREATE TABLE DATACOMPANY (

KODEPT CHAR(5) NOT NULL,

NAMA VARCHAR(30) NOT NULL,

ALAMAT VARCHAR(30),

KOTA VARCHAR(20),

KDKOTA VARCHAR(3),

STATUS VARCHAR(2),

TELEPON VARCHAR(10),

PIMPINAN VARCHAR(20),

PARTHOLDER VARCHAR(20),

KASIR VARCHAR(20),

FRONTDESK VARCHAR(20),

DATAHDWS1 VARCHAR(20),

DATAHDWS2 VARCHAR(20),

DATAHDWS3 VARCHAR(20),

BULAN INTEGER DEFAULT 0,

TAHUN INTEGER DEFAULT 0,

TERAKHIR DATE,

EBY VARCHAR(20),

ETIME DATE

);

CREATE TABLE DATACUSTOMER (

KODECUST VARCHAR(20) NOT NULL,

NAMACUST VARCHAR(50),

ALAMAT1 VARCHAR(50),

ALAMAT2 VARCHAR(50),

ALAMAT3 VARCHAR(50),

TELP VARCHAR(20),

HUB VARCHAR(50),

NPWP VARCHAR(20),

DISC NUMERIC(6,2) DEFAULT 0,

JENIS CHAR(1),

EBY VARCHAR(20),

ETIME DATE

);

CREATE TABLE DATAHPP (

ID INTEGER,

IDHPP INTEGER,

QTY NUMERIC(15,2),

HPP NUMERIC(15,2)

);

CREATE TABLE DATAHPPLOKASI (

ID INTEGER,

IDHPP INTEGER,

QTY NUMERIC(15,2),

HPP NUMERIC(15,2)

);

CREATE TABLE DATAKARTUPART (

JENIS CHAR(1),

NOMOR VARCHAR(10),

TANGGAL DATE,

PARTNO VARCHAR(20),

PARTNAME VARCHAR(50),

QTY NUMERIC(15,2),

QTYOUT NUMERIC(15,2) DEFAULT 0,

HARGA NUMERIC(15,2) DEFAULT 0,

HPP NUMERIC(15,2) DEFAULT 0,

CARIHPP SMALLINT DEFAULT 0,

KODELOKASI CHAR(10),

SOURCEID INTEGER,

ID INTEGER NOT NULL

);

Page 35: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 35

CREATE TABLE DATAKARTUPARTLOKASI (

JENIS CHAR(1),

NOMOR VARCHAR(10),

TANGGAL DATE,

PARTNO VARCHAR(20),

PARTNAME VARCHAR(50),

QTY NUMERIC(15,2),

QTYOUT NUMERIC(15,2) DEFAULT 0,

HARGA NUMERIC(15,2) DEFAULT 0,

HPP NUMERIC(15,2) DEFAULT 0,

CARIHPP SMALLINT DEFAULT 0,

KODELOKASI0 CHAR(10),

KODELOKASI1 CHAR(10),

SOURCEID INTEGER,

ID INTEGER NOT NULL

);

CREATE TABLE DATAKELUAR (

JENIS CHAR(1),

NOREGISTER CHAR(10) NOT NULL,

NOKELUAR CHAR(10) NOT NULL,

TGLKELUAR DATE,

TGLJTEMPO DATE,

KODELOKASI0 CHAR(10),

KODELOKASI1 CHAR(10),

KODECUST VARCHAR(20),

NAMACUST VARCHAR(50),

ALAMAT1 VARCHAR(50),

ALAMAT2 VARCHAR(50),

NOWO CHAR(10),

DISC NUMERIC(6,2),

NOSO CHAR(10),

KETERANGAN1 VARCHAR(50),

KETERANGAN2 VARCHAR(50),

STATUS CHAR(1) DEFAULT 'N',

EBY VARCHAR(20),

ETIME DATE,

POSTING CHAR(1)

);

CREATE TABLE DATAKELUARDETAIL (

D SMALLINT,

PARTNO CHAR(25),

PARTNAME CHAR(50),

QTYSUPPLY NUMERIC(15,2),

HARGA NUMERIC(15,2),

PDISC NUMERIC(6,2),

DISC NUMERIC(15,2),

JUMLAH NUMERIC(15,2),

JENIS CHAR(1),

NOKELUAR CHAR(10),

ITEMSO INTEGER,

SODETAILID INTEGER,

KELUARDETAILID INTEGER NOT NULL,

POSTING CHAR(1),

KODELOKASI0 CHAR(10),

KODELOKASI1 CHAR(10)

);

CREATE TABLE DATALOKASI (

KODELOKASI CHAR(10) NOT NULL,

KETERANGAN VARCHAR(50),

ALAMAT1 VARCHAR(50),

ALAMAT2 VARCHAR(50),

ALAMAT3 VARCHAR(50),

TELEPON VARCHAR(20),

HUBUNGI VARCHAR(30)

);

CREATE TABLE DATAPART (

Page 36: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 36

PARTNO CHAR(25) NOT NULL,

PARTNAME VARCHAR(50),

TIPE VARCHAR(3),

KATEGORI CHAR(1),

QTYONHAND NUMERIC(10,2) DEFAULT 0,

SATUAN CHAR(10),

HET NUMERIC(15,2),

PDISCHET NUMERIC(6,2),

HMODAL NUMERIC(15,2),

PDISCMODAL NUMERIC(6,2),

QTYONSO NUMERIC(10,2) DEFAULT 0,

QTYONPO NUMERIC(10,2) DEFAULT 0,

BBALANCEHPP NUMERIC(15,2) DEFAULT 0,

BBALANCE NUMERIC(10,2) DEFAULT 0,

MUTASIMASUK NUMERIC(10,2) DEFAULT 0,

MUTASIKELUAR NUMERIC(10,2) DEFAULT 0,

ADJUSTED NUMERIC(15,2) DEFAULT 0,

BBALANCEHPP0 NUMERIC(15,2) DEFAULT 0,

BBALANCE0 NUMERIC(10,2) DEFAULT 0,

MUTASIMASUK0 NUMERIC(10,2) DEFAULT 0,

MUTASIKELUAR0 NUMERIC(10,2) DEFAULT 0,

ADJUSTED0 NUMERIC(15,2) DEFAULT 0,

NMAX NUMERIC(10,2) DEFAULT 0,

NMIN NUMERIC(10,2) DEFAULT 0,

NORAK CHAR(11),

EBY VARCHAR(20),

ETIME DATE

);

CREATE TABLE DATAPARTLOKASI (

PARTNO CHAR(25),

KODELOKASI CHAR(10),

BBALANCEHPP MONEY,

MUTASIMASUK SALDOPART,

MUTASIKELUAR SALDOPART,

ADJUSTED SALDOPART,

BBALANCEHPP0 SALDOPART,

MUTASIMASUK0 SALDOPART,

MUTASIKELUAR0 SALDOPART,

ADJUSTED0 SALDOPART,

PARTID INTEGER NOT NULL

);

CREATE TABLE DATAPESAN (

PESAN1 VARCHAR(50) NOT NULL,

PESAN2 VARCHAR(50),

PESAN3 VARCHAR(50),

PESAN4 VARCHAR(50)

);

CREATE TABLE DATAPO (

NOPO CHAR(10) NOT NULL,

TANGGALPO DATE,

DELVDATE DATE,

KODESUPP CHAR(10),

STATUS CHAR(1) DEFAULT 'N',

EBY VARCHAR(20),

ETIME DATE

);

CREATE TABLE DATAPODETAIL (

D SMALLINT,

C SMALLINT,

PARTNO CHAR(25),

PARTNAME VARCHAR(50),

DELVDATE DATE,

QTYORDER NUMERIC(15,2),

QTYSUPPLY NUMERIC(15,2),

ITEMPO INTEGER,

STATUS CHAR(1),

NOPO CHAR(10),

Page 37: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 37

PODETAILID INTEGER NOT NULL

);

CREATE TABLE DATARAK (

NORAK CHAR(11) NOT NULL,

KETERANGAN VARCHAR(50)

);

CREATE TABLE DATASO (

NOSO CHAR(10) NOT NULL,

TANGGALSO DATE,

DELVDATE DATE,

KODECUST CHAR(10),

NOWO CHAR(10),

STATUS CHAR(1) DEFAULT 'N',

EBY VARCHAR(20),

ETIME DATE

);

CREATE TABLE DATASODETAIL (

D SMALLINT,

C SMALLINT,

PARTNO CHAR(25),

PARTNAME VARCHAR(50),

DELVDATE DATE,

QTYORDER NUMERIC(15,2),

QTYSUPPLY NUMERIC(15,2),

ITEMSO INTEGER,

STATUS CHAR(1),

NOSO CHAR(10),

SODETAILID INTEGER NOT NULL

);

CREATE TABLE DATASUPPLIER (

KODESUPP VARCHAR(20) NOT NULL,

NAMASUPP VARCHAR(50),

ALAMAT1 VARCHAR(50),

ALAMAT2 VARCHAR(50),

ALAMAT3 VARCHAR(50),

TELP VARCHAR(20),

HUB VARCHAR(50),

NPWP VARCHAR(20),

DISC NUMERIC(6,2) DEFAULT 0,

EBY VARCHAR(20),

ETIME DATE

);

CREATE TABLE DATATERIMA (

JENIS CHAR(1),

NOTERIMA CHAR(10) NOT NULL,

TGLTERIMA DATE,

TGLJTEMPO DATE,

KODELOKASI0 CHAR(10),

KODELOKASI1 CHAR(10),

KODESUPP VARCHAR(20),

DISC NUMERIC(6,2),

NOPO CHAR(10),

KETERANGAN VARCHAR(50),

STATUS CHAR(1) DEFAULT 'N',

EBY VARCHAR(20),

ETIME DATE,

POSTING CHAR(1)

);

CREATE TABLE DATATERIMADETAIL (

D SMALLINT,

PARTNO CHAR(25),

PARTNAME CHAR(50),

QTYSUPPLY NUMERIC(15,2),

HARGA NUMERIC(15,2),

PDISC NUMERIC(6,2),

Page 38: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 38

DISC NUMERIC(15,2),

JUMLAH NUMERIC(15,2),

JENIS CHAR(1),

NOTERIMA CHAR(10),

ITEMPO INTEGER,

PODETAILID INTEGER,

TERIMADETAILID INTEGER NOT NULL,

POSTING CHAR(1),

KODELOKASI0 CHAR(10),

KODELOKASI1 CHAR(10)

);

CREATE TABLE DATATIPE (

TIPE CHAR(3) NOT NULL,

KETERANGAN VARCHAR(30)

);

CREATE TABLE FUNGSI (

AKSES INTEGER NOT NULL,

KETERANGAN VARCHAR(50)

);

CREATE TABLE MENUITEM (

NOMOR INTEGER NOT NULL,

KETERANGAN VARCHAR(50),

AKSES INTEGER

);

CREATE TABLE OPERATOR (

OPERATOR VARCHAR(50) NOT NULL,

NAMA VARCHAR(50),

PASSWORDI VARCHAR(50),

LEVELI VARCHAR(50),

EBY VARCHAR(50),

ETIME DATE,

LTIME DATE

);

/******************************************************************************/

/**** Views ****/

/******************************************************************************/

/* View: CETAKFAKTURKELUAR */

CREATE VIEW CETAKFAKTURKELUAR(

NOREGISTER,

NOKELUAR,

NOWO,

KODECUST,

NAMACUST,

ALAMAT1,

ALAMAT2,

TGLKELUAR,

ITEMSO,

PARTNO,

PARTNAME,

QTYSUPPLY,

DISC,

JUMLAH)

AS

select DataKeluar.noregister,

DataKeluar.nokeluar,

DataKeluar.nowo,

DataKeluar.kodecust,

DataKeluar.namacust,

DataKeluar.alamat1,

DataKeluar.alamat2,

Page 39: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 39

DataKeluar.tglkeluar,

DataKeluarDetail.itemso,

DataKeluarDetail.partno,

DataKeluarDetail.partname,

DataKeluarDetail.qtysupply,

DataKeluarDetail.disc,

DataKeluarDetail.jumlah

from DataKeluar Inner Join DataKeluarDetail On DataKeluar.nokeluar =

DataKeluarDetail.nokeluar

;

/* View: LAPORANDATAPART */

CREATE VIEW LAPORANDATAPART(

PARTNO,

PARTNAME,

TIPE,

QTYONSO,

QTYONPO,

BBALANCE,

MUTASIMASUK,

MUTASIKELUAR,

ADJUSTED,

EBALANCE,

NMAX,

NMIN)

AS

select

datapart.partno,

datapart.partname,

datapart.tipe,

datapart.qtyonso,

datapart.qtyonpo,

datapart.bbalance,

datapart.mutasimasuk,

datapart.mutasikeluar,

datapart.adjusted,

datapart.bbalance + datapart.mutasimasuk - datapart.mutasikeluar + datapart.adjusted

as EBalance,

datapart.nmax,

datapart.nmin

from datapart

where datapart.bbalance + datapart.mutasimasuk + datapart.mutasikeluar <> 0

;

/* View: LAPORANKARTUSTOCK */

CREATE VIEW LAPORANKARTUSTOCK(

PARTNO,

PARTNAME,

KATEGORI,

BBALANCE,

BBALANCEHPP,

JENIS,

NOMOR,

TANGGAL,

QTYHPPMASUK,

HPPMASUK,

QTYHPPKELUAR,

HPPKELUAR)

AS

select

datapart.partno,

datapart.partname,

datapart.kategori,

datapart.bbalance,

datapart.bbalancehpp,

datakartupart.jenis,

datakartupart.nomor,

Page 40: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 40

datakartupart.tanggal,

datakartupart.qty as qtyhppmasuk,

datakartupart.harga as hppmasuk,

datahpp.qty as qtyhppkeluar,

datahpp.hpp as hppkeluar

from datapart left join datakartupart on datapart.partno = datakartupart.partno

left join datahpp on datakartupart.id = datahpp.id

;

/* View: LAPORANPEMBELIAN */

CREATE VIEW LAPORANPEMBELIAN(

JENIS,

NOTERIMA,

TGLTERIMA,

TGLJTEMPO,

KODESUPP,

NAMASUPP,

NPWP,

DISC,

NOPO,

PARTNO,

PARTNAME,

QTYSUPPLY,

HARGA,

DISCOUNT,

DPP,

PPN,

JUMLAH)

AS

select

dataterima.jenis,

dataterima.noterima,

dataterima.tglterima,

dataterima.tgljtempo,

dataterima.kodesupp,

datasupplier.namasupp,

datasupplier.npwp,

dataterima.disc,

dataterima.nopo,

dataterimadetail.partno,

dataterimadetail.partname,

dataterimadetail.qtysupply,

dataterimadetail.harga,

dataterimadetail.qtysupply * dataterimadetail.disc as discount,

case

when datasupplier.npwp = "" then

case

when dataterima.jenis = 2 then

-dataterimadetail.jumlah

else

dataterimadetail.jumlah

end

else

case

when dataterima.jenis = 2 then

-dataterimadetail.jumlah*10/11

else

dataterimadetail.jumlah*10/11

end

end

as DPP,

case

when datasupplier.npwp = "" then

0

else

case

when dataterima.jenis = 2 then

-dataterimadetail.jumlah*1/11

else

Page 41: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 41

dataterimadetail.jumlah*1/11

end

end

as PPN,

case

when dataterima.jenis = 2 then

-dataterimadetail.jumlah

else

dataterimadetail.jumlah

end

as Jumlah

from dataterima inner join dataterimadetail on dataterima.noterima =

dataterimadetail.noterima

inner join datasupplier on dataterima.kodesupp = datasupplier.kodesupp

where not dataterimadetail.posting is null and

dataterima.status <> "C"

;

/* View: LAPORANPEMBELIANPREPOSTING */

CREATE VIEW LAPORANPEMBELIANPREPOSTING(

JENIS,

NOTERIMA,

TGLTERIMA,

TGLJTEMPO,

KODESUPP,

NAMASUPP,

NPWP,

DISC,

NOPO,

PARTNO,

PARTNAME,

QTYSUPPLY,

HARGA,

DISCOUNT,

DPP,

PPN,

JUMLAH)

AS

select

dataterima.jenis,

dataterima.noterima,

dataterima.tglterima,

dataterima.tgljtempo,

dataterima.kodesupp,

datasupplier.namasupp,

datasupplier.npwp,

dataterima.disc,

dataterima.nopo,

dataterimadetail.partno,

dataterimadetail.partname,

dataterimadetail.qtysupply,

dataterimadetail.harga,

dataterimadetail.qtysupply * dataterimadetail.disc as discount,

case

when datasupplier.npwp = "" then

case

when dataterima.jenis = 2 then

-dataterimadetail.jumlah

else

dataterimadetail.jumlah

end

else

case

when dataterima.jenis = 2 then

-dataterimadetail.jumlah*10/11

else

dataterimadetail.jumlah*10/11

end

end

Page 42: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 42

as DPP,

case

when datasupplier.npwp = "" then

0

else

case

when dataterima.jenis = 2 then

-dataterimadetail.jumlah*1/11

else

dataterimadetail.jumlah*1/11

end

end

as PPN,

dataterimadetail.jumlah

from dataterima inner join dataterimadetail on dataterima.noterima =

dataterimadetail.noterima

inner join datasupplier on dataterima.kodesupp = datasupplier.kodesupp

where dataterimadetail.posting is null and

dataterima.status <> "C"

;

/* View: LAPORANPENDAPATANPENJUALANPART */

CREATE VIEW LAPORANPENDAPATANPENJUALANPART(

JENIS,

NOWO,

STATUS,

NOKELUAR,

TGLKELUAR,

JUMLAH,

CASH,

REGULAR,

OLI,

PPN)

AS

select

datakeluar.jenis,

datakeluar.nowo,

datakeluar.status,

datakeluar.nokeluar,

datakeluar.tglkeluar,

sum(

case

when datakeluar.jenis = 5 then

-datakeluardetail.jumlah

else

datakeluardetail.jumlah

end

) As jumlah,

sum(

case

when datacustomer.jenis = "C" then

case

when datakeluar.jenis = 5 then

-datakeluardetail.jumlah

else

datakeluardetail.jumlah

end

else

0

end)

as Cash,

sum(

case

when datacustomer.jenis = "C" then

0

else

case

when datakeluar.jenis = 5 then

-datakeluardetail.jumlah

Page 43: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 43

else

datakeluardetail.jumlah

end

end)

as Regular,

sum(

case

when datapart.tipe = 'OLI' then

case

when datakeluar.jenis = 5 then

-datakeluardetail.jumlah

else

datakeluardetail.jumlah

end

else

0

end) as Oli,

sum(

case

when datapart.tipe = 'OLI' then

0

else

case

when datakeluar.jenis = 5 then

-datakeluardetail.jumlah

else

datakeluardetail.jumlah

end

end) as ppn

from datakeluar inner join datakeluardetail on datakeluar.nokeluar =

datakeluardetail.nokeluar

inner join datacustomer on datakeluar.kodecust = datacustomer.kodecust

inner join datapart on datakeluardetail.partno = datapart.partno

where datakeluar.jenis=4 or datakeluar.jenis=5

Group By datakeluar.jenis,

datakeluar.nowo,

datakeluar.status,

datakeluar.nokeluar,

datakeluar.tglkeluar

;

/* View: LAPORANPENJUALAN */

CREATE VIEW LAPORANPENJUALAN(

JENIS,

NOKELUAR,

TGLKELUAR,

TGLJTEMPO,

KODECUST,

NAMACUST,

NPWP,

DISC,

NOSO,

PARTNO,

PARTNAME,

QTYSUPPLY,

HARGA,

DISCOUNT,

JUMLAH)

AS

select

datakeluar.jenis,

datakeluar.nokeluar,

datakeluar.tglkeluar,

datakeluar.tgljtempo,

datakeluar.kodecust,

datacustomer.namacust ,

datacustomer.npwp,

datakeluar.disc,

datakeluar.noso,

Page 44: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 44

datakeluardetail.partno,

datakeluardetail.partname,

datakeluardetail.qtysupply,

case

when datakeluar.jenis = 5 then

-datakeluardetail.harga

else

datakeluardetail.harga

end

as harga,

datakeluardetail.qtysupply * datakeluardetail.disc as discount,

case

when datakeluar.jenis = 5 then

-datakeluardetail.jumlah

else

datakeluardetail.jumlah

end

as jumlah

from datakeluar inner join datakeluardetail on datakeluar.nokeluar =

datakeluardetail.nokeluar

inner join datacustomer on datakeluar.kodecust = datacustomer.kodecust

where not datakeluardetail.posting is null and

datakeluar.status <> "C"

;

/* View: LAPORANPENJUALANPREPOSTING */

CREATE VIEW LAPORANPENJUALANPREPOSTING(

JENIS,

NOKELUAR,

TGLKELUAR,

TGLJTEMPO,

KODECUST,

NAMACUST,

NPWP,

DISC,

NOSO,

PARTNO,

PARTNAME,

QTYSUPPLY,

HARGA,

DISCOUNT,

JUMLAH)

AS

select

datakeluar.jenis,

datakeluar.nokeluar,

datakeluar.tglkeluar,

datakeluar.tgljtempo,

datakeluar.kodecust,

datacustomer.namacust ,

datacustomer.npwp,

datakeluar.disc,

datakeluar.noso,

datakeluardetail.partno,

datakeluardetail.partname,

datakeluardetail.qtysupply,

case

when datakeluar.jenis = 5 then

-datakeluardetail.harga

else

datakeluardetail.harga

end

as harga,

datakeluardetail.qtysupply * datakeluardetail.disc as discount,

case

when datakeluar.jenis = 5 then

-datakeluardetail.jumlah

else

datakeluardetail.jumlah

Page 45: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 45

end

as jumlah

from datakeluar inner join datakeluardetail on datakeluar.nokeluar =

datakeluardetail.nokeluar

inner join datacustomer on datakeluar.kodecust = datacustomer.kodecust

where datakeluardetail.posting is null and

datakeluar.status <> "C"

;

/* View: LAPORANSUMMARYPENJUALAN */

CREATE VIEW LAPORANSUMMARYPENJUALAN(

JENIS,

NOKELUAR,

TGLKELUAR,

KODECUST,

NAMACUST,

SBLMPPN,

PPNOLI,

PPNPART,

TOTAL)

AS

select

datakeluar.jenis,

datakeluar.nokeluar,

datakeluar.tglkeluar,

datakeluar.kodecust,

datacustomer.namacust ,

sum(

case

when datakeluar.jenis = 5 then

-datakeluardetail.jumlah * 10/11

else

datakeluardetail.jumlah * 10/11

end

)as sblmppn,

sum(

case

when datapart.tipe = 'OLI' then

case

when datakeluar.jenis = 5 then

-datakeluardetail.jumlah * 1/11

else

datakeluardetail.jumlah * 1/11

end

else

0

end) as ppnoli,

sum(

case

when datapart.tipe = 'OLI' then

0

else

case

when datakeluar.jenis = 5 then

-datakeluardetail.jumlah * 1/11

else

datakeluardetail.jumlah * 1/11

end

end) as ppnpart,

sum(

case

when datakeluar.jenis = 5 then

-datakeluardetail.jumlah

else

datakeluardetail.jumlah

end

) as total

from datakeluar inner join datakeluardetail on datakeluar.nokeluar =

datakeluardetail.nokeluar

Page 46: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 46

inner join datacustomer on datakeluar.kodecust = datacustomer.kodecust

inner join datapart on datakeluardetail.partno = datapart.partno

where not datakeluardetail.posting is null and

datakeluar.status <> "C"

group by

datakeluar.jenis,

datakeluar.nokeluar,

datakeluar.tglkeluar,

datakeluar.kodecust,

datacustomer.namacust

;

/* View: REKAPMUTASIPERSEDIAAN */

CREATE VIEW REKAPMUTASIPERSEDIAAN(

PARTNO,

PARTNAME,

KATEGORI,

BBALANCE,

BBALANCEHPP,

QTYMASUK,

QTYKELUAR,

HPPMASUK,

HPPKELUAR)

AS

select

datapart.partno,

datapart.partname,

datapart.kategori,

datapart.bbalance,

datapart.bbalancehpp,

sum(

case

when datakartupart.qty > 0 then

datakartupart.qty

else

0

end)

as qtymasuk,

sum(

case

when datakartupart.qty > 0 then

0

else

-datakartupart.qty

end)

as qtykeluar,

sum(

case

when datakartupart.qty > 0 then

datakartupart.hpp

else

0

end)

as hppmasuk,

sum(

case

when datakartupart.qty > 0 then

0

else

datakartupart.hpp

end)

as hppkeluar

from datapart left join datakartupart on datapart.partno = datakartupart.partno

group by datapart.partno,

datapart.partname,

datapart.kategori,

datapart.bbalance,

datapart.bbalancehpp

;

Page 47: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 47

/* View: REKAPPENJUALANPART */

CREATE VIEW REKAPPENJUALANPART(

JENIS,

TGLKELUAR,

NOHARI,

PARTNAME,

QTYSUPPLY)

AS

select

datakeluar.JENIS,

datakeluar.tGLKELUAR,

extract(day from datakeluar.tGLKELUAR) as NoHari,

datakeluarDetail.PARTNO || ' ' || datakeluarDetail.PARTNAME,

datakeluarDetail.QTYSUPPLY

from datakeluar inner join datakeluardetail on datakeluar.nokeluar =

datakeluardetail.nokeluar

where datakeluar.status <> "C"

;

/******************************************************************************/

/**** Unique Constraints ****/

/******************************************************************************/

ALTER TABLE DATAPARTLOKASI ADD CONSTRAINT UNQ_DATAPARTLOKASI UNIQUE (PARTNO, KODELOKASI);

/******************************************************************************/

/**** Primary Keys ****/

/******************************************************************************/

ALTER TABLE AKSES ADD CONSTRAINT PK_AKSES PRIMARY KEY (ID);

ALTER TABLE DATAADJUST ADD PRIMARY KEY (NOADJUST);

ALTER TABLE DATACOMPANY ADD PRIMARY KEY (KODEPT);

ALTER TABLE DATACUSTOMER ADD CONSTRAINT PK_DATACUSTOMER PRIMARY KEY (KODECUST);

ALTER TABLE DATAKARTUPART ADD CONSTRAINT PK_DATAKARTUPART PRIMARY KEY (ID);

ALTER TABLE DATAKARTUPARTLOKASI ADD CONSTRAINT PK_DATAKARTUPARTLOKASI PRIMARY KEY (ID);

ALTER TABLE DATAKELUAR ADD CONSTRAINT PK_DATAKELUAR PRIMARY KEY (NOKELUAR);

ALTER TABLE DATAKELUARDETAIL ADD CONSTRAINT PK_DATAKELUARDETAIL PRIMARY KEY

(KELUARDETAILID);

ALTER TABLE DATALOKASI ADD CONSTRAINT PK_DATALOKASI PRIMARY KEY (KODELOKASI);

ALTER TABLE DATAPART ADD PRIMARY KEY (PARTNO);

ALTER TABLE DATAPARTLOKASI ADD CONSTRAINT PK_DATAPARTLOKASI PRIMARY KEY (PARTID);

ALTER TABLE DATAPESAN ADD CONSTRAINT PK_DATAPESAN PRIMARY KEY (PESAN1);

ALTER TABLE DATAPO ADD CONSTRAINT PK_DATAPO PRIMARY KEY (NOPO);

ALTER TABLE DATAPODETAIL ADD CONSTRAINT PK_DATAPODETAIL PRIMARY KEY (PODETAILID);

ALTER TABLE DATARAK ADD CONSTRAINT PK_DATARAK PRIMARY KEY (NORAK);

ALTER TABLE DATASO ADD CONSTRAINT PK_DATASO PRIMARY KEY (NOSO);

ALTER TABLE DATASODETAIL ADD CONSTRAINT PK_DATASODETAIL PRIMARY KEY (SODETAILID);

ALTER TABLE DATASUPPLIER ADD CONSTRAINT PK_DATASUPPLIER PRIMARY KEY (KODESUPP);

ALTER TABLE DATATERIMA ADD CONSTRAINT PK_DATATERIMA PRIMARY KEY (NOTERIMA);

ALTER TABLE DATATERIMADETAIL ADD CONSTRAINT PK_DATATERIMADETAIL PRIMARY KEY

(TERIMADETAILID);

ALTER TABLE DATATIPE ADD CONSTRAINT PK_DATATIPE PRIMARY KEY (TIPE);

ALTER TABLE FUNGSI ADD CONSTRAINT PK_FUNGSI PRIMARY KEY (AKSES);

ALTER TABLE MENUITEM ADD CONSTRAINT PK_MENUITEM PRIMARY KEY (NOMOR);

ALTER TABLE OPERATOR ADD CONSTRAINT PK_OPERATOR PRIMARY KEY (OPERATOR);

/******************************************************************************/

/**** Foreign Keys ****/

/******************************************************************************/

ALTER TABLE DATAADJUST ADD CONSTRAINT FK_DATAADJUSTPARTNO FOREIGN KEY (PARTNO) REFERENCES

DATAPART (PARTNO);

ALTER TABLE DATAKARTUPART ADD CONSTRAINT FK_DATAKARTUPARTPARTNO FOREIGN KEY (PARTNO)

Page 48: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 48

REFERENCES DATAPART (PARTNO);

ALTER TABLE DATAKARTUPARTLOKASI ADD CONSTRAINT FK_DATAKARTUPARTLOKASI FOREIGN KEY

(PARTNO) REFERENCES DATAPART (PARTNO);

ALTER TABLE DATAKELUAR ADD CONSTRAINT FK_DATAKELUARKODECUST FOREIGN KEY (KODECUST)

REFERENCES DATACUSTOMER (KODECUST);

ALTER TABLE DATAKELUARDETAIL ADD CONSTRAINT FK_DATAKELUARDETAILNOKELUAR FOREIGN KEY

(NOKELUAR) REFERENCES DATAKELUAR (NOKELUAR);

ALTER TABLE DATAKELUARDETAIL ADD CONSTRAINT FK_DATAKELUARDETAILPARTNO FOREIGN KEY

(PARTNO) REFERENCES DATAPART (PARTNO);

ALTER TABLE DATAKELUARDETAIL ADD CONSTRAINT FK_DATAKELUARDETAILSODETAIL FOREIGN KEY

(SODETAILID) REFERENCES DATASODETAIL (SODETAILID);

ALTER TABLE DATAPART ADD CONSTRAINT FK_DATAPARTNORAK FOREIGN KEY (NORAK) REFERENCES

DATARAK (NORAK) ON UPDATE CASCADE

USING INDEX FK_DATAPART;

ALTER TABLE DATAPART ADD CONSTRAINT FK_DATAPARTTIPE FOREIGN KEY (TIPE) REFERENCES

DATATIPE (TIPE) ON UPDATE CASCADE;

ALTER TABLE DATAPARTLOKASI ADD CONSTRAINT FK_DATAPARTLOKASIKODELOKASI FOREIGN KEY

(KODELOKASI) REFERENCES DATALOKASI (KODELOKASI);

ALTER TABLE DATAPARTLOKASI ADD CONSTRAINT FK_DATAPARTLOKASIPARTNO FOREIGN KEY (PARTNO)

REFERENCES DATAPART (PARTNO)

USING INDEX FK_DATAPARTLOKASI;

ALTER TABLE DATAPO ADD CONSTRAINT FK_DATAPO FOREIGN KEY (KODESUPP) REFERENCES

DATASUPPLIER (KODESUPP) ON UPDATE CASCADE;

ALTER TABLE DATAPODETAIL ADD CONSTRAINT FK_DATAPODETAILNOPO FOREIGN KEY (NOPO) REFERENCES

DATAPO (NOPO);

ALTER TABLE DATAPODETAIL ADD CONSTRAINT FK_DATAPODETAILPARTNO FOREIGN KEY (PARTNO)

REFERENCES DATAPART (PARTNO);

ALTER TABLE DATASO ADD CONSTRAINT FK_DATASOKODECUST FOREIGN KEY (KODECUST) REFERENCES

DATACUSTOMER (KODECUST);

ALTER TABLE DATASODETAIL ADD CONSTRAINT FK_DATASODETAILNOSO FOREIGN KEY (NOSO) REFERENCES

DATASO (NOSO);

ALTER TABLE DATASODETAIL ADD CONSTRAINT FK_DATASODETAILPARTNO FOREIGN KEY (PARTNO)

REFERENCES DATAPART (PARTNO);

ALTER TABLE DATATERIMA ADD CONSTRAINT FK_DATATERIMAKODESUPP FOREIGN KEY (KODESUPP)

REFERENCES DATASUPPLIER (KODESUPP);

ALTER TABLE DATATERIMADETAIL ADD CONSTRAINT FK_DATATERIMADETAILNOTERIMA FOREIGN KEY

(NOTERIMA) REFERENCES DATATERIMA (NOTERIMA);

ALTER TABLE DATATERIMADETAIL ADD CONSTRAINT FK_DATATERIMADETAILPARTNO FOREIGN KEY

(PARTNO) REFERENCES DATAPART (PARTNO);

ALTER TABLE DATATERIMADETAIL ADD CONSTRAINT FK_DATATERIMADETAILPODETAIL FOREIGN KEY

(PODETAILID) REFERENCES DATAPODETAIL (PODETAILID);

/******************************************************************************/

/**** Triggers ****/

/******************************************************************************/

SET TERM ^ ;

/* Trigger: AKSES_BI0 */

CREATE TRIGGER AKSES_BI0 FOR AKSES

ACTIVE BEFORE INSERT POSITION 0

AS

begin

New.id = Gen_Id(GenAksesID,1);

end

^

/* Trigger: DATAADJUST_DELETE */

CREATE TRIGGER DATAADJUST_DELETE FOR DATAADJUST

ACTIVE AFTER DELETE POSITION 0

AS

begin

Update datapart Set QtyOnHand = QtyOnHand - Old.qtyadjust Where partno = Old.partno;

end

^

Page 49: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 49

/* Trigger: DATAADJUST_INSERT */

CREATE TRIGGER DATAADJUST_INSERT FOR DATAADJUST

ACTIVE AFTER INSERT POSITION 0

AS

begin

Update datapart Set QtyOnHand = QtyOnHand + New.qtyadjust Where partno = New.partno;

end

^

/* Trigger: DATAADJUST_UPDATE */

CREATE TRIGGER DATAADJUST_UPDATE FOR DATAADJUST

ACTIVE AFTER UPDATE POSITION 0

AS

begin

Update datapart Set QtyOnHand = QtyOnHand - Old.qtyadjust Where partno = Old.partno;

Update datapart Set QtyOnHand = QtyOnHand + New.qtyadjust Where partno = New.partno;

end

^

/* Trigger: DATAKARTUPARTLOKASI_BI0 */

CREATE TRIGGER DATAKARTUPARTLOKASI_BI0 FOR DATAKARTUPARTLOKASI

ACTIVE BEFORE INSERT POSITION 0

AS

begin

New.id = Gen_Id(GenKartuPartLokasiID,1);

end

^

/* Trigger: DATAKARTUPART_BI0 */

CREATE TRIGGER DATAKARTUPART_BI0 FOR DATAKARTUPART

ACTIVE BEFORE INSERT POSITION 0

AS

begin

New.id = Gen_Id(GenKartuPartID,1);

end

^

/* Trigger: DATAKELUARDETAIL_BI0 */

CREATE TRIGGER DATAKELUARDETAIL_BI0 FOR DATAKELUARDETAIL

ACTIVE BEFORE INSERT POSITION 0

AS

begin

New.keluardetailid = Gen_Id(GenKeluarDetailID,1);

end

^

/* Trigger: DATAKELUARDETAIL_DELETE */

CREATE TRIGGER DATAKELUARDETAIL_DELETE FOR DATAKELUARDETAIL

ACTIVE AFTER DELETE POSITION 0

AS

begin

/*jenis 4 = penjualan, 5= ret. penjualan, 6 = mutasi keluar */

if (old.jenis = '4' or old.jenis='6') then

begin

Update datapart Set QtyOnHand = QtyOnHand + old.qtysupply where partno = old.partno;

Update datasodetail Set QtySupply = QtySupply - Old.qtysupply Where SoDetailID =

Old.SoDetailID;

end

else

begin

Update datapart Set QtyOnHand = QtyOnHand - old.qtysupply where partno = old.partno;

Update datasodetail Set QtySupply = QtySupply + Old.qtysupply Where SoDetailID =

Old.SoDetailID;

end

end

^

/* Trigger: DATAKELUARDETAIL_INSERT */

CREATE TRIGGER DATAKELUARDETAIL_INSERT FOR DATAKELUARDETAIL

ACTIVE AFTER INSERT POSITION 0

AS

Page 50: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 50

begin

/*jenis 4 = penjualan, 5= ret. penjualan, 6 = mutasi keluar */

if (new.jenis = '4' or new.jenis='6') then

begin

Update datapart Set QtyOnHand = QtyOnHand - New.qtysupply where partno = New.partno;

Update datasodetail Set QtySupply = QtySupply + New.qtysupply Where SoDetailID =

New.SoDetailID;

end

else

begin

Update datapart Set QtyOnHand = QtyOnHand + New.qtysupply where partno = New.partno;

Update datasodetail Set QtySupply = QtySupply - New.qtysupply Where SoDetailID =

New.SoDetailID;

end

end

^

/* Trigger: DATAKELUARDETAIL_UPDATE */

CREATE TRIGGER DATAKELUARDETAIL_UPDATE FOR DATAKELUARDETAIL

ACTIVE AFTER UPDATE POSITION 0

AS

begin

/*jenis 4 = penjualan, 5= ret. penjualan, 6 = mutasi keluar */

if (old.jenis = '4' or old.jenis='6') then

begin

Update datapart Set QtyOnHand = QtyOnHand + old.qtysupply where partno = old.partno;

Update datasodetail Set QtySupply = QtySupply - old.qtysupply Where SoDetailID =

old.SoDetailID;

end

else

begin

Update datapart Set QtyOnHand = QtyOnHand - old.qtysupply where partno = old.partno;

Update datasodetail Set QtySupply = QtySupply + old.qtysupply Where SoDetailID =

old.SoDetailID;

end

/*jenis 4 = penjualan, 5= ret. penjualan, 6 = mutasi keluar */

if (new.jenis = '4' or new.jenis='6') then

begin

Update datapart Set QtyOnHand = QtyOnHand - New.qtysupply where partno = New.partno;

Update datasodetail Set QtySupply = QtySupply + new.qtysupply Where SoDetailID =

new.SoDetailID;

end

else

begin

Update datapart Set QtyOnHand = QtyOnHand + New.qtysupply where partno = New.partno;

Update datasodetail Set QtySupply = QtySupply - new.qtysupply Where SoDetailID =

new.SoDetailID;

end

end

^

/* Trigger: DATAPARTLOKASI_BI0 */

CREATE TRIGGER DATAPARTLOKASI_BI0 FOR DATAPARTLOKASI

ACTIVE BEFORE INSERT POSITION 0

AS

begin

new.partid = gen_id(genpartid,1);

end

^

/* Trigger: DATAPODETAIL_BI0 */

CREATE TRIGGER DATAPODETAIL_BI0 FOR DATAPODETAIL

ACTIVE BEFORE INSERT POSITION 0

AS

begin

New.podetailid = gen_id(genpodetailid,1);

end

^

/* Trigger: DATAPODETAIL_DELETE */

CREATE TRIGGER DATAPODETAIL_DELETE FOR DATAPODETAIL

Page 51: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 51

ACTIVE AFTER DELETE POSITION 0

AS

begin

Update DataPart Set QtyOnPO = QtyOnPO - (Old.qtyorder-Old.qtysupply) Where PartNo =

Old.PartNo;

end

^

/* Trigger: DATAPODETAIL_INSERT */

CREATE TRIGGER DATAPODETAIL_INSERT FOR DATAPODETAIL

ACTIVE AFTER INSERT POSITION 0

AS

begin

Update datapart set QtyOnPO = QtyOnPO + (New.qtyorder-New.qtySupply) Where PartNo =

New.PartNo;

end

^

/* Trigger: DATAPODETAIL_UPDATE */

CREATE TRIGGER DATAPODETAIL_UPDATE FOR DATAPODETAIL

ACTIVE AFTER UPDATE POSITION 0

AS

begin

Update DataPart Set QtyOnPO = QtyOnPO - (Old.qtyorder-Old.qtySupply) Where PartNo =

Old.PartNo;

Update DataPart Set QtyOnPO = QtyOnPO + (new.qtyorder-New.qtySupply) Where PartNo =

New.PartNo;

end

^

/* Trigger: DATASODETAIL_BI0 */

CREATE TRIGGER DATASODETAIL_BI0 FOR DATASODETAIL

ACTIVE BEFORE INSERT POSITION 0

AS

begin

New.sodetailid = gen_id(gensodetailid,1);

end

^

/* Trigger: DATASODETAIL_DELETE */

CREATE TRIGGER DATASODETAIL_DELETE FOR DATASODETAIL

ACTIVE AFTER DELETE POSITION 0

AS

begin

Update DataPart Set QtyOnSO = QtyOnSO - (Old.qtyorder-old.qtysupply) Where PartNo =

Old.PartNo;

end

^

/* Trigger: DATASODETAIL_INSERT */

CREATE TRIGGER DATASODETAIL_INSERT FOR DATASODETAIL

ACTIVE AFTER INSERT POSITION 0

AS

begin

Update datapart set QtyOnSO = QtyOnSO + (New.qtyorder-new.qtysupply) Where PartNo =

New.PartNo;

end

^

/* Trigger: DATASODETAIL_UPDATE */

CREATE TRIGGER DATASODETAIL_UPDATE FOR DATASODETAIL

ACTIVE AFTER UPDATE POSITION 0

AS

begin

Update DataPart Set QtyOnSO = QtyOnSO - (Old.qtyorder-old.qtysupply) Where PartNo =

Old.PartNo;

Update DataPart Set QtyOnSO = QtyOnSO + (New.qtyorder-new.qtysupply) Where PartNo =

New.PartNo;

end

^

Page 52: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 52

/* Trigger: DATATERIMADETAIL_BI0 */

CREATE TRIGGER DATATERIMADETAIL_BI0 FOR DATATERIMADETAIL

ACTIVE BEFORE INSERT POSITION 0

AS

begin

New.terimadetailid = Gen_Id(GenTerimaDetailID,1);

end

^

/* Trigger: DATATERIMADETAIL_DELETE */

CREATE TRIGGER DATATERIMADETAIL_DELETE FOR DATATERIMADETAIL

ACTIVE AFTER DELETE POSITION 0

AS

begin

/*jenis 1 = pembelian, 2= ret. pembelian, 3 = mutasi masuk */

if (old.jenis = '1' or old.jenis='3') then

begin

Update datapart Set QtyOnHand = QtyOnHand - old.qtysupply where partno = old.partno;

Update datapodetail Set QtySupply = QtySupply - Old.qtysupply Where PoDetailID =

Old.PoDetailID;

end

else

begin

Update datapart Set QtyOnHand = QtyOnHand + old.qtysupply where partno = old.partno;

Update datapodetail Set QtySupply = QtySupply + Old.qtysupply Where PoDetailID =

Old.PoDetailID;

end

end

^

/* Trigger: DATATERIMADETAIL_INSERT */

CREATE TRIGGER DATATERIMADETAIL_INSERT FOR DATATERIMADETAIL

ACTIVE AFTER INSERT POSITION 0

AS

begin

/*jenis 1 = pembelian, 2= ret. pembelian, 3 = mutasi masuk */

if (new.jenis = '1' or new.jenis='3') then

begin

Update datapart Set QtyOnHand = QtyOnHand + New.qtysupply where partno = New.partno;

Update datapodetail Set QtySupply = QtySupply + New.qtysupply Where PoDetailID =

New.PoDetailID;

end

else

begin

Update datapart Set QtyOnHand = QtyOnHand - New.qtysupply where partno = New.partno;

Update datapodetail Set QtySupply = QtySupply - New.qtysupply Where PoDetailID =

New.PoDetailID;

end

end

^

/* Trigger: DATATERIMADETAIL_UPDATE */

CREATE TRIGGER DATATERIMADETAIL_UPDATE FOR DATATERIMADETAIL

ACTIVE AFTER UPDATE POSITION 0

AS

begin

/*jenis 1 = pembelian, 2= ret. pembelian, 3 = mutasi masuk */

if (old.jenis = '1' or old.jenis='3') then

begin

Update datapart Set QtyOnHand = QtyOnHand - old.qtysupply where partno = old.partno;

Update datapodetail Set QtySupply = QtySupply - old.qtysupply Where PoDetailID =

old.PoDetailID;

end

else

begin

Update datapart Set QtyOnHand = QtyOnHand + old.qtysupply where partno = old.partno;

Update datapodetail Set QtySupply = QtySupply + old.qtysupply Where PoDetailID =

old.PoDetailID;

end

/*jenis 1 = pembelian, 2= ret. pembelian, 3 = mutasi masuk */

if (new.jenis = '1' or new.jenis='3') then

Page 53: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 53

begin

Update datapart Set QtyOnHand = QtyOnHand + New.qtysupply where partno = New.partno;

Update datapodetail Set QtySupply = QtySupply + new.qtysupply Where PoDetailID =

new.PoDetailID;

end

else

begin

Update datapart Set QtyOnHand = QtyOnHand - New.qtysupply where partno = New.partno;

Update datapodetail Set QtySupply = QtySupply - new.qtysupply Where PoDetailID =

new.PoDetailID;

end

end

^

SET TERM ; ^

/******************************************************************************/

/**** Stored Procedures ****/

/******************************************************************************/

SET TERM ^ ;

ALTER PROCEDURE CANCELDATAADJUST (

NOADJUST CHAR(10))

RETURNS (

RESULT INTEGER)

AS

DECLARE VARIABLE VPARTNO CHAR(25);

DECLARE VARIABLE VQTYADJUST NUMERIC(15,2);

DECLARE VARIABLE VTOTALBARIS Integer;

begin

VTOTALBARIS = 0;

For Select partno, qtyadjust From dataadjust where noadjust = :noadjust and posting is

null

Into :vpartno, :vqtyadjust

do

Begin

VTOTALBARIS = VTOTALBARIS+1;

Update datapart Set QtyOnHand = QtyOnHand - :VQTYADJUST Where PartNo = :vPartno;

Update dataadjust Set Status = "C", Posting = "C" Where noadjust = :noadjust;

End

Result = VTOTALBARIS;

end

^

ALTER PROCEDURE CANCELDATAKELUAR (

NOKELUAR CHAR(10))

RETURNS (

RESULT INTEGER)

AS

DECLARE VARIABLE VJENIS CHAR(1);

DECLARE VARIABLE VPARTNO CHAR(25);

DECLARE VARIABLE VQTYSUPPLY NUMERIC(15,2);

DECLARE VARIABLE VSODETAILID INTEGER;

DECLARE VARIABLE VKELUARDETAILID INTEGER;

DECLARE VARIABLE VTOTALBARIS INTEGER;

begin

VTOTALBARIS = 0;

For Select jenis, partno, qtysupply, sodetailid, keluardetailid From datakeluardetail

where Nokeluar = :nokeluar and posting is null

Into :vjenis, :vpartno, :vqtysupply, :vsodetailid, :vkeluardetailid

do

Begin

VTOTALBARIS = VTOTALBARIS+1;

/*jenis 4 = penjualan, 5= ret. penjualan, 6 = mutasi keluar */

if (vjenis="4" or vjenis="6") then

begin

Update datapart Set QtyOnHand = QtyOnHand + :VQTYSUPPLY Where PartNo = :vPartno;

Page 54: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 54

Update datasodetail Set QtySupply = QtySupply + :VQTYSUPPLY Where sodetailid =

:vsodetailid;

end

else

begin

Update datapart Set QtyOnHand = QtyOnHand - :VQTYSUPPLY Where PartNo = :vPartno;

Update datasodetail Set QtySupply = QtySupply - :VQTYSUPPLY Where sodetailid =

:vsodetailid;

end

Update datakeluardetail Set Posting = "C" Where keluardetailid = :VkeluarDETAILID;

End

Update datakeluar Set Status = "C", Posting = "C" Where Nokeluar = :Nokeluar And

Posting is null;

Result = VTOTALBARIS;

end

^

ALTER PROCEDURE CANCELDATATERIMA (

NOTERIMA CHAR(10))

RETURNS (

RESULT INTEGER)

AS

DECLARE VARIABLE VJENIS CHAR(1);

DECLARE VARIABLE VPARTNO CHAR(25);

DECLARE VARIABLE VQTYSUPPLY NUMERIC(15,2);

DECLARE VARIABLE VPODETAILID INTEGER;

DECLARE VARIABLE VTERIMADETAILID INTEGER;

DECLARE VARIABLE VTOTALBARIS INTEGER;

begin

VTOTALBARIS = 0;

For Select jenis, partno, qtysupply, podetailid, terimadetailid From dataterimadetail

where NoTerima = :noterima and posting is null

Into :vjenis, :vpartno, :vqtysupply, :vpodetailid, :vterimadetailid

do

Begin

VTOTALBARIS = VTOTALBARIS+1;

/*jenis 1 = pembelian, 2= ret. pembelian, 3 = mutasi masuk */

if (vjenis="1" or vjenis="3") then

begin

Update datapart Set QtyOnHand = QtyOnHand - :VQTYSUPPLY Where PartNo = :vPartno;

Update datapodetail Set QtySupply = QtySupply - :VQTYSUPPLY Where PoDetailId =

:vPODetailId;

end

else

begin

Update datapart Set QtyOnHand = QtyOnHand + :VQTYSUPPLY Where PartNo = :vPartno;

Update datapodetail Set QtySupply = QtySupply +:VQTYSUPPLY Where PoDetailId =

:vPODetailId;

end

Update dataterimadetail Set Posting = "C" Where terimadetailid = :VTERIMADETAILID;

End

Update dataterima Set Status = "C", Posting = "C" Where NoTerima = :NoTerima And

Posting is null;

Result = VTOTALBARIS;

end

^

ALTER PROCEDURE CLOSEPO (

TANGGAL INTEGER)

RETURNS (

RESULT INTEGER)

AS

DECLARE VARIABLE VQTYORDER NUMERIC(15,2);

DECLARE VARIABLE VQTYSUPPLY NUMERIC(15,2);

DECLARE VARIABLE VNOPO CHAR(10);

DECLARE VARIABLE VPODETAILID INTEGER;

DECLARE VARIABLE VCLOSEBARIS INTEGER;

DECLARE VARIABLE VPARTNO CHAR(25);

DECLARE VARIABLE VBARIS INTEGER;

begin

VBaris = 0;

Page 55: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 55

for select nopo from datapo where status='N' or status='P' and TanggalPO <= :tanggal

into :VNOPO do

begin

VCloseBaris = 0;

for select podetailid, partno, qtyorder, qtysupply from datapodetail where nopo =

:VNOPO

into :VPODETAILID, :VPARTNO, :VQTYORDER , :VQTYSUPPLY do

begin

if (VQTYORDER > VQTYSUPPLY) then

begin

update datapart set qtyonpo = qtyonpo - (:VQTYORDER-:VQTYSUPPLY) where

partno = :vpartno;

update datapodetail set status = 'O' where podetailid = :VPODETAILID;

VCloseBaris = VCloseBaris + 1;

VBaris = VBaris + 1;

end

end

if (VCloseBaris > 0) then

begin

update datapo set status = 'O' where nopo = :VNOPO;

end

end

Result = VBaris;

end

^

ALTER PROCEDURE CLOSESO (

TANGGAL INTEGER)

RETURNS (

RESULT INTEGER)

AS

DECLARE VARIABLE VQTYORDER NUMERIC(15,2);

DECLARE VARIABLE VQTYSUPPLY NUMERIC(15,2);

DECLARE VARIABLE VNOSO CHAR(10);

DECLARE VARIABLE VSODETAILID INTEGER;

DECLARE VARIABLE VCLOSEBARIS INTEGER;

DECLARE VARIABLE VPARTNO CHAR(25);

DECLARE VARIABLE VBARIS INTEGER;

begin

VBaris = 0;

for select noSO from dataSO where status='N' or status='P' and TanggalSO <= :tanggal

into :VNOSO do

begin

VCloseBaris = 0;

for select SOdetailid, partno, qtyorder, qtysupply from dataSOdetail where noSO =

:VNOSO

into :VSODETAILID, :VPARTNO, :VQTYORDER , :VQTYSUPPLY do

begin

if (VQTYORDER > VQTYSUPPLY) then

begin

update datapart set qtyonSO = qtyonSO - (:VQTYORDER-:VQTYSUPPLY) where

partno = :vpartno;

update dataSOdetail set status = 'O' where SOdetailid = :VSODETAILID;

VCloseBaris = VCloseBaris + 1;

VBaris = VBaris + 1;

end

end

if (VCloseBaris > 0) then

begin

update dataSO set status = 'O' where noSO = :VNOSO;

end

end

Result = VBaris;

end

^

ALTER PROCEDURE POSTINGKARTUPART (

TANGGAL DATE)

RETURNS (

RESULT INTEGER)

AS

Page 56: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 56

DECLARE VARIABLE VJENIS INTEGER;

DECLARE VARIABLE VNOMOR CHAR(10);

DECLARE VARIABLE VTANGGAL DATE;

DECLARE VARIABLE VPARTNO CHAR(25);

DECLARE VARIABLE VKODELOKASI CHAR(10);

DECLARE VARIABLE VPARTNAME VARCHAR(50);

DECLARE VARIABLE VQTY NUMERIC(10,2);

DECLARE VARIABLE VHARGA NUMERIC(10,2);

DECLARE VARIABLE VDETAILID INTEGER;

DECLARE VARIABLE VTOTALBARIS INTEGER;

DECLARE VARIABLE VID INTEGER;

DECLARE VARIABLE VIDHPP INTEGER;

DECLARE VARIABLE VQTYKELUAR NUMERIC(15,2);

DECLARE VARIABLE VQTYALLREMAIN NUMERIC(15,2);

DECLARE VARIABLE VQTYREMAIN NUMERIC(15,2);

DECLARE VARIABLE VHPP NUMERIC(15,2);

DECLARE VARIABLE VTOTALHPP NUMERIC(15,2);

DECLARE VARIABLE VBARIS INTEGER;

begin

vtotalbaris = 0;

/* untuk data terima, 1 = Pembelian, 2 = Ret. Pembelian, mutasi tidak ikut */

for select dataterima.jenis,

dataterima.noterima,

dataterima.tglterima,

dataterimadetail.partno,

dataterimadetail.kodelokasi0,

dataterimadetail.partname,

dataterimadetail.qtysupply,

(dataterimadetail.harga-dataterimadetail.disc),

dataterimadetail.terimadetailid

from dataterima inner join dataterimadetail on

dataterima.noterima=dataterimadetail.noterima

where (dataterima.jenis ="1" or dataterima.jenis = "2") and

dataterima.tglterima = :tanggal and dataterima.posting is null

into :VJENIS,:VNOMOR, :VTANGGAL,:VPARTNO, :VKODELOKASI, :VPARTNAME ,:VQTY

,:VHARGA,:VDETAILID

do

begin

vtotalbaris = vtotalbaris + 1;

/*jenis 1 = pembelian, 2= ret. pembelian*/

if (vjenis="1" ) then

begin

/*sisip data ke table datakartupart */

insert into datakartupart

(jenis,nomor,tanggal,partno,kodelokasi,partname,qty,qtyout,harga,hpp,carihpp, sourceid)

values

(:vjenis,:VNOMOR, :VTANGGAL,:VPARTNO, :VKODELOKASI, :VPARTNAME ,:VQTY

,0,:VHARGA,0,0,:VDETAILID);

/*update ke mutasi masuk ditabel datapart */

update datapart set mutasimasuk = mutasimasuk + :VQTY where partno = :VPARTNO;

end

else

begin

/*sisip data ke table datakartupart */

insert into datakartupart

(jenis,nomor,tanggal,partno,kodelokasi,partname,qty,qtyout,harga,hpp,carihpp, sourceid)

values

(:vjenis,:VNOmor, :Vtanggal,:VPARTNO, :VKODELOKASI, :VPARTNAME ,-:VQTY

,0,:vharga,0,0, :vdetailid);

/*update ke mutasi masuk ditabel datapart */

update datapart set mutasimasuk = mutasimasuk -:VQTY where partno = :VPARTNO;

end

/*update flag posting */

update dataterimadetail set posting = "P" where dataterimadetail.terimadetailid =

:vdetailid;

update dataterima set status = "P", posting = "P" where dataterima.noterima =

:vnomor;

end

Page 57: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 57

/* untuk data keluar, 4 = Penjualan, 5 = Ret. Penjualan, mutasi tidak ikut */

for select datakeluar.jenis,

datakeluar.nokeluar,

datakeluar.tglkeluar,

datakeluardetail.partno,

datakeluardetail.kodelokasi0,

datakeluardetail.partname,

datakeluardetail.qtysupply,

(datakeluardetail.harga-datakeluardetail.disc),

datakeluardetail.keluardetailid

from datakeluar inner join datakeluardetail on

datakeluar.nokeluar=datakeluardetail.nokeluar

where (datakeluar.jenis ="4" or datakeluar.jenis = "5") and

datakeluar.tglkeluar = :tanggal and datakeluar.posting is null

into :VJENIS,:VNOMOR, :VTANGGAL,:VPARTNO, :VKODELOKASI, :VPARTNAME ,:VQTY

,:VHARGA,:VDETAILID

do

begin

vtotalbaris = vtotalbaris + 1;

/*jenis 4 = penjualan, 5= ret. penjualan, 6 = mutasi keluar */

if (vjenis="4") then

begin

/*sisip data ke table datakartupart */

insert into datakartupart

(jenis,nomor,tanggal,partno,kodelokasi,partname,qty,qtyout,harga,hpp,carihpp, sourceid)

values

(:vjenis,:VNOmor, :Vtanggal,:VPARTNO, :VKODELOKASI, :VPARTNAME ,-:VQTY

,0,:vharga,0,0, :vdetailid);

/*update ke mutasi masuk ditabel datapart */

update datapart set mutasikeluar = mutasikeluar + :VQTY where partno =

:VPARTNO;

end

else

begin

/*sisip data ke table datakartupart */

insert into datakartupart

(jenis,nomor,tanggal,partno,kodelokasi,partname,qty,qtyout,harga,hpp,carihpp, sourceid)

values

(:vjenis,:VNOmor, :Vtanggal,:VPARTNO, :VKODELOKASI,:VPARTNAME,:VQTY

,0,:vharga,0,0, :vdetailid);

/*update ke mutasi masuk ditabel datapart */

update datapart set mutasikeluar = mutasikeluar + :VQTY where partno =

:VPARTNO;

end

/*update flag posting */

update datakeluardetail set posting = "P" where datakeluardetail.keluardetailid =

:vdetailid;

update datakeluar set status = "P", posting = "P" where datakeluar.nokeluar =

:vnomor;

end

/* untuk data adjust */

for select dataadjust.jenis,

dataadjust.noadjust,

dataadjust.tgladjust,

dataadjust.partno,

dataadjust.kodelokasi,

dataadjust.partname,

dataadjust.qtyadjust,

dataadjust.harga,

dataadjust.adjustid

from dataadjust where dataadjust.tgladjust = :tanggal and dataadjust.posting

is null

into :VJENIS,:VNOMOR, :VTANGGAL,:VPARTNO, :VKODELOKASI, :VPARTNAME ,:VQTY

,:VHARGA,:VDETAILID

do

Page 58: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 58

begin

vtotalbaris = vtotalbaris + 1;

/*sisip data ke table datakartupart */

insert into datakartupart (jenis,nomor,tanggal,partno,kodelokasi,

partname,qty,qtyout,harga,hpp,carihpp) values

(:VJENIS,:VNOMOR, :VTANGGAL,:VPARTNO, :VKODELOKASI, :VPARTNAME ,:VQTY

,0,:VHARGA,0,0);

/*update ke adjusted ditabel datapart */

update datapart set adjusted = adjusted + :VQTY where partno = :VPARTNO;

/*update flag posting */

update dataADJUST set status = "P", posting = "P" where dataADJUST.noadjust =

:vnomor;

end

/* untuk HPP */

for select datakartupart.partno,datakartupart.qty, datakartupart.id from datakartupart

where datakartupart.carihpp = 0 and qty < 0 order by id

into :vpartno, :VQTY, :VID

do

begin

vqtykeluar = -vqty; /*qty keluar negatif, jadi dibuat positif */

select sum(qty-qtyout) from datakartupart

where datakartupart.partno = :vpartno and (datakartupart.qty-

datakartupart.qtyout) > 0

into :vqtyallremain;

if (vqtyallremain >= vqtykeluar) then

begin

vbaris = 0;

vtotalhpp = 0;

while (vqtykeluar > 0) do

begin

vbaris = vbaris + 1;

select first 1 skip 0 (datakartupart.qty-datakartupart.qtyout),

datakartupart.id, datakartupart.harga

from datakartupart

where datakartupart.partno = :vpartno and (qty-qtyout) > 0 order by id

asc

into :VQTYREMAIN, :vidhpp, :vhpp;

if (vqtykeluar > vqtyremain) then

begin

insert into datahpp (id,idhpp,qty,hpp) values

(:vid,:vidhpp, :vqtyremain, :vhpp);

update datakartupart set qtyout=qtyout + :VQTYREMAIN where id =

:vidhpp;

vqtykeluar = vqtykeluar-vqtyremain;

vtotalhpp = vtotalhpp + (vqtyremain*vhpp);

end

else

begin

insert into datahpp (id,idhpp,qty,hpp) values

(:vid,:vidhpp, :vqtykeluar, :vhpp);

update datakartupart set qtyout=qtyout + :VQTYkeluar

where id = :vidhpp;

vtotalhpp = vtotalhpp + (vqtykeluar*vhpp);

vqtykeluar = 0;

end

end /*end of while*/

update datakartupart set hpp = :vtotalhpp,

carihpp = :VBARIS where id = :vid;

end /* end of if (vqtyallremain >= vqtykeluar) */

end

result = vtotalbaris;

end

^

ALTER PROCEDURE POSTINGKARTUPARTLOKASI (

TANGGAL DATE)

RETURNS (

Page 59: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 59

RESULT INTEGER)

AS

DECLARE VARIABLE VJENIS INTEGER;

DECLARE VARIABLE VNOMOR CHAR(10);

DECLARE VARIABLE VTANGGAL DATE;

DECLARE VARIABLE VPARTNO CHAR(25);

DECLARE VARIABLE VPARTNAME VARCHAR(50);

DECLARE VARIABLE VQTY NUMERIC(10,2);

DECLARE VARIABLE VHARGA NUMERIC(10,2);

DECLARE VARIABLE VDETAILID INTEGER;

DECLARE VARIABLE VTOTALBARIS INTEGER;

DECLARE VARIABLE VID INTEGER;

DECLARE VARIABLE VIDHPP INTEGER;

DECLARE VARIABLE VQTYKELUAR NUMERIC(15,2);

DECLARE VARIABLE VQTYALLREMAIN NUMERIC(15,2);

DECLARE VARIABLE VQTYREMAIN NUMERIC(15,2);

DECLARE VARIABLE VHPP NUMERIC(15,2);

DECLARE VARIABLE VTOTALHPP NUMERIC(15,2);

DECLARE VARIABLE VBARIS INTEGER;

begin

vtotalbaris = 0;

/* untuk data terima */

for select dataterima.jenis,

dataterima.noterima,

dataterima.tglterima,

dataterimadetail.partno,

dataterimadetail.partname,

dataterimadetail.qtysupply,

(dataterimadetail.harga-dataterimadetail.disc),

dataterimadetail.terimadetailid

from dataterima inner join dataterimadetail on

dataterima.noterima=dataterimadetail.noterima

where dataterima.tglterima = :tanggal and dataterima.posting is null

into :vjenis,:VNOmor, :Vtanggal,:VPARTNO, :VPARTNAME ,:VQTY ,:vharga,:vdetailid

do

begin

vtotalbaris = vtotalbaris + 1;

/*jenis 1 = pembelian, 2= ret. pembelian, 3 = mutasi masuk */

if (vjenis="1" or vjenis="3") then

begin

/*sisip data ke table datakartupartlokasi */

insert into datakartupartlokasi

(jenis,nomor,tanggal,partno,partname,qty,qtyout,harga,hpp,carihpp, sourceid) values

(:vjenis,:VNOmor, :Vtanggal,:VPARTNO, :VPARTNAME ,:VQTY

,0,:vharga,0,0,:vdetailid);

/*update ke mutasi masuk ditabel datapartlokasi */

update datapartlokasi set mutasimasuk = mutasimasuk + :VQTY where partno =

:VPARTNO;

end

else

begin

/*sisip data ke table datakartupartlokasi */

insert into datakartupartlokasi

(jenis,nomor,tanggal,partno,partname,qty,qtyout,harga,hpp,carihpp, sourceid) values

(:vjenis,:VNOmor, :Vtanggal,:VPARTNO, :VPARTNAME ,-:VQTY ,0,:vharga,0,0,

:vdetailid);

/*update ke mutasi masuk ditabel datapartlokasi */

update datapartlokasi set mutasimasuk = mutasimasuk -:VQTY where partno =

:VPARTNO;

end

/*update flag posting */

update dataterimadetail set posting = "P" where dataterimadetail.terimadetailid =

:vdetailid;

update dataterima set status = "P", posting = "P" where dataterima.noterima =

:vnomor;

end

/* untuk data keluar */

Page 60: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 60

for select datakeluar.jenis,

datakeluar.nokeluar,

datakeluar.tglkeluar,

datakeluardetail.partno,

datakeluardetail.partname,

datakeluardetail.qtysupply,

(datakeluardetail.harga-datakeluardetail.disc),

datakeluardetail.keluardetailid

from datakeluar inner join datakeluardetail on

datakeluar.nokeluar=datakeluardetail.nokeluar

where datakeluar.tglkeluar = :tanggal and datakeluar.posting is null

into :vjenis,:VNOmor, :Vtanggal,:VPARTNO, :VPARTNAME ,:VQTY ,:vharga,:vdetailid

do

begin

vtotalbaris = vtotalbaris + 1;

/*jenis 4 = penjualan, 5= ret. penjualan, 6 = mutasi keluar */

if (vjenis="4" or vjenis="6") then

begin

/*sisip data ke table datakartupartlokasi */

insert into datakartupartlokasi

(jenis,nomor,tanggal,partno,partname,qty,qtyout,harga,hpp,carihpp, sourceid) values

(:vjenis,:VNOmor, :Vtanggal,:VPARTNO, :VPARTNAME ,-:VQTY ,0,:vharga,0,0,

:vdetailid);

/*update ke mutasi masuk ditabel datapartlokasi */

update datapartlokasi set mutasikeluar = mutasikeluar + :VQTY where partno =

:VPARTNO;

end

else

begin

/*sisip data ke table datakartupartlokasi */

insert into datakartupartlokasi

(jenis,nomor,tanggal,partno,partname,qty,qtyout,harga,hpp,carihpp, sourceid) values

(:vjenis,:VNOmor, :Vtanggal,:VPARTNO, :VPARTNAME ,:VQTY ,0,:vharga,0,0,

:vdetailid);

/*update ke mutasi masuk ditabel datapartlokasi */

update datapartlokasi set mutasikeluar = mutasikeluar + :VQTY where partno =

:VPARTNO;

end

/*update flag posting */

update datakeluardetail set posting = "P" where datakeluardetail.keluardetailid =

:vdetailid;

update datakeluar set status = "P", posting = "P" where datakeluar.nokeluar =

:vnomor;

end

/* untuk data adjust */

for select dataadjust.jenis,

dataadjust.noadjust,

dataadjust.tgladjust,

dataadjust.partno,

dataadjust.partname,

dataadjust.qtyadjust,

dataadjust.harga,

dataadjust.adjustid

from dataadjust where dataadjust.tgladjust = :tanggal and dataadjust.posting

is null

into :vjenis,:VNOmor, :Vtanggal,:VPARTNO, :VPARTNAME ,:VQTY ,:vharga,:vdetailid

do

begin

vtotalbaris = vtotalbaris + 1;

/*sisip data ke table datakartupartlokasi */

insert into datakartupartlokasi

(jenis,nomor,tanggal,partno,partname,qty,qtyout,harga,hpp,carihpp) values

(:vjenis,:VNOmor, :Vtanggal,:VPARTNO, :VPARTNAME ,:VQTY ,0,:vharga,0,0);

/*update ke adjusted ditabel datapartlokasi */

Page 61: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 61

update datapartlokasi set adjusted = adjusted + :VQTY where partno = :VPARTNO;

/*update flag posting */

update dataADJUST set status = "P", posting = "P" where dataADJUST.noadjust =

:vnomor;

end

/* untuk HPP */

for select datakartupartlokasi.partno,datakartupartlokasi.qty, datakartupartlokasi.id

from datakartupartlokasi

where datakartupartlokasi.carihpp = 0 and qty < 0 order by id

into :vpartno, :VQTY, :VID

do

begin

vqtykeluar = -vqty; /*qty keluar negatif, jadi dibuat positif */

select sum(qty-qtyout) from datakartupartlokasi

where datakartupartlokasi.partno = :vpartno and (datakartupartlokasi.qty-

datakartupartlokasi.qtyout) > 0

into :vqtyallremain;

if (vqtyallremain >= vqtykeluar) then

begin

vbaris = 0;

vtotalhpp = 0;

while (vqtykeluar > 0) do

begin

vbaris = vbaris + 1;

select first 1 skip 0 (datakartupartlokasi.qty-

datakartupartlokasi.qtyout),

datakartupartlokasi.id, datakartupartlokasi.harga

from datakartupartlokasi

where datakartupartlokasi.partno = :vpartno and (qty-qtyout) > 0 order

by id asc

into :VQTYREMAIN, :vidhpp, :vhpp;

if (vqtykeluar > vqtyremain) then

begin

insert into datahpplokasi (id,idhpp,qty,hpp) values

(:vid,:vidhpp, :vqtyremain, :vhpp);

update datakartupartlokasi set qtyout=qtyout + :VQTYREMAIN where id =

:vidhpp;

vqtykeluar = vqtykeluar-vqtyremain;

vtotalhpp = vtotalhpp + (vqtyremain*vhpp);

end

else

begin

insert into datahpplokasi (id,idhpp,qty,hpp) values

(:vid,:vidhpp, :vqtykeluar, :vhpp);

update datakartupartlokasi set qtyout=qtyout + :VQTYkeluar

where id = :vidhpp;

vtotalhpp = vtotalhpp + (vqtykeluar*vhpp);

vqtykeluar = 0;

end

end /*end of while*/

update datakartupartlokasi set hpp = :vtotalhpp,

carihpp = :VBARIS where id = :vid;

end /* end of if (vqtyallremain >= vqtykeluar) */

end

result = vtotalbaris;

end

^

ALTER PROCEDURE PRINTDATAKELUAR (

VNOKELUAR CHAR(10))

AS

begin

update datakeluar set status = 'L' Where Nokeluar = :VNOKELUAR;

end

^

ALTER PROCEDURE TUTUPHARIAN (

TANGGAL DATE)

RETURNS (

Page 62: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 62

RESULT INTEGER)

AS

DECLARE VARIABLE VBELUMPOSTINGKELUAR INTEGER;

DECLARE VARIABLE VBELUMPOSTINGTERIMA INTEGER;

DECLARE VARIABLE VBELUMPOSTINGADJUST INTEGER;

DECLARE VARIABLE VTOTALBELUMPOSTING INTEGER;

begin

select count(*) From datakeluar

where posting is null and tglkeluar = :tanggal

into :VBELUMPOSTINGKELUAR;

select count(*) From dataterima

where posting is null and tglterima = :tanggal

into :VBELUMPOSTINGTERIMA;

select count(*) From dataadjust

where posting is null and tgladjust = :tanggal

into :VBELUMPOSTINGADJUST;

VTOTALBELUMPOSTING = VBELUMPOSTINGKELUAR+VBELUMPOSTINGTERIMA+VBELUMPOSTINGADJUST;

if (VTOTALBELUMPOSTING = 0) then

begin

Update DataCompany Set Terakhir = :tanggal;

Result = 0;

end

else

begin

Result = VTOTALBELUMPOSTING;

end

end

^

ALTER PROCEDURE TUTUPPERIODE (

BULAN INTEGER,

TAHUN INTEGER,

BULAN1 INTEGER,

TAHUN1 INTEGER)

RETURNS (

RESULT INTEGER)

AS

DECLARE VARIABLE VBULAN INTEGER;

DECLARE VARIABLE VTAHUN INTEGER;

DECLARE VARIABLE VBELUMPOSTINGKELUAR INTEGER;

DECLARE VARIABLE VBELUMPOSTINGTERIMA INTEGER;

DECLARE VARIABLE VBELUMPOSTINGADJUST INTEGER;

DECLARE VARIABLE VTOTALBELUMPOSTING INTEGER;

begin

select bulan,tahun from datacompany into :VBULAN, :VTAHUN;

if (Bulan = VBULAN and Tahun = VTAHUN ) then

begin

select count(*) From datakeluar

where posting is null and (Extract(month from tglkeluar) = :bulan) and

(Extract(year from tglkeluar)=:tahun)

into :VBELUMPOSTINGKELUAR;

select count(*) From dataterima

where posting is null and (Extract(month from tglterima) = :bulan) and

(Extract(year from tglterima)=:tahun)

into :VBELUMPOSTINGTERIMA;

select count(*) From dataadjust

where posting is null and (Extract(month from tgladjust) = :bulan) and

(Extract(year from tgladjust)=:tahun)

into :VBELUMPOSTINGADJUST;

VTOTALBELUMPOSTING = VBELUMPOSTINGKELUAR+VBELUMPOSTINGTERIMA+VBELUMPOSTINGADJUST;

Page 63: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 63

if (VTOTALBELUMPOSTING= 0) then

Begin

Update DataPart Set BBalanceHPP0 = BBalanceHPP,

BBalance0 = BBalance,

MutasiKeluar0 = MutasiKeluar,

MutasiMasuk0 = MutasiMasuk,

Adjusted0 = Adjusted;

Update DataPart Set BBalance = BBalance0-MutasiKeluar0+MutasiMasuk0+Adjusted0,

MutasiKeluar = 0,

MutasiMasuk = 0,

Adjusted = 0;

/*Menghitung nilai BBalanceHPP */

Update DataPart Set BBalanceHPP =

(select sum((qty-qtyout)*hpp) from datakartupart where

partno =datapart.partno and qty > 0);

Update DataCompany Set Bulan=:Bulan1, Tahun=:Tahun1;

Result = 0;

End

else

Begin

Result = VTOTALBELUMPOSTING;

End

end

else

begin

Result = -1;

end

end

^

ALTER PROCEDURE UPDATEPO (

TANGGAL INTEGER)

RETURNS (

RESULT INTEGER)

AS

DECLARE VARIABLE VQTYORDER NUMERIC(15,2);

DECLARE VARIABLE VQTYSUPPLY NUMERIC(15,2);

DECLARE VARIABLE VNOPO CHAR(10);

DECLARE VARIABLE VPODETAILID INTEGER;

DECLARE VARIABLE VPARTNO CHAR(25);

DECLARE VARIABLE VBARIS INTEGER;

DECLARE VARIABLE VBARISA INTEGER;

DECLARE VARIABLE VBARISF INTEGER;

DECLARE VARIABLE VBARISP INTEGER;

DECLARE VARIABLE VBARISN INTEGER;

begin

VBaris = 0;

for select noPO from dataPO where status='N' or status='P' and TanggalPO <= :tanggal

into :VNOPO do

begin

VBARISA = 0;

VBARISF = 0;

VBARISP = 0;

VBARISN = 0;

for select POdetailid, partno, qtyorder, qtysupply from dataPOdetail where noPO =

:VNOPO

into :VPODETAILID, :VPARTNO, :VQTYORDER , :VQTYSUPPLY do

begin

if (VQTYORDER <= VQTYSUPPLY) then

begin

update dataPOdetail set status = 'F' where POdetailid = :VPODETAILID;

VBARISF = VBARISF + 1;

end

else if (VQTYSUPPLY > 0) then

begin

update dataPOdetail set status = 'P' where POdetailid = :VPODETAILID;

VBARISP = VBARISP + 1;

end

else

Page 64: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 64

begin

update dataPOdetail set status = 'N' where POdetailid = :VPODETAILID;

VBARISN = VBARISN + 1;

end

VBarisA = VBarisA + 1;

VBaris = VBaris + 1;

end

if (VBarisF = VBarisA) then

begin

update dataPO set status = 'F' where noPO = :VNOPO;

end

else if (VBarisN = VBarisA) then

begin

update dataPO set status = 'P' where noPO = :VNOPO;

end

else

begin

update dataPO set status = 'N' where noPO = :VNOPO;

end

end

Result = VBaris;

end

^

ALTER PROCEDURE UPDATESO (

TANGGAL INTEGER)

RETURNS (

RESULT INTEGER)

AS

DECLARE VARIABLE VQTYORDER NUMERIC(15,2);

DECLARE VARIABLE VQTYSUPPLY NUMERIC(15,2);

DECLARE VARIABLE VNOSO CHAR(10);

DECLARE VARIABLE VSODETAILID INTEGER;

DECLARE VARIABLE VPARTNO CHAR(25);

DECLARE VARIABLE VBARIS INTEGER;

DECLARE VARIABLE VBARISA INTEGER;

DECLARE VARIABLE VBARISF INTEGER;

DECLARE VARIABLE VBARISP INTEGER;

DECLARE VARIABLE VBARISN INTEGER;

begin

VBaris = 0;

for select noSO from dataSO where status='N' or status='P' and TanggalSO <= :tanggal

into :VNOSO do

begin

VBARISA = 0;

VBARISF = 0;

VBARISP = 0;

VBARISN = 0;

for select SOdetailid, partno, qtyorder, qtysupply from dataSOdetail where noSO =

:VNOSO

into :VSODETAILID, :VPARTNO, :VQTYORDER , :VQTYSUPPLY do

begin

if (VQTYORDER <= VQTYSUPPLY) then

begin

update dataSOdetail set status = 'F' where SOdetailid = :VSODETAILID;

VBARISF = VBARISF + 1;

end

else if (VQTYSUPPLY > 0) then

begin

update dataSOdetail set status = 'P' where SOdetailid = :VSODETAILID;

VBARISP = VBARISP + 1;

end

else

begin

update dataSOdetail set status = 'N' where SOdetailid = :VSODETAILID;

VBARISN = VBARISN + 1;

end

VBarisA = VBarisA + 1;

VBaris = VBaris + 1;

end

if (VBarisF = VBarisA) then

Page 65: Pemanfaatan database server open source

Pemanfaatan Database Server Open Source Oleh : Hendra, ST.

Indoprog 65

begin

update dataSO set status = 'F' where noSO = :VNOSO;

end

else if (VBarisN = VBarisA) then

begin

update dataSO set status = 'P' where noSO = :VNOSO;

end

else

begin

update dataSO set status = 'N' where noSO = :VNOSO;

end

end

Result = VBaris;

end

^

SET TERM ; ^