pemanfaatan database server open source
Post on 07-Nov-2014
957 Views
Preview:
DESCRIPTION
TRANSCRIPT
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
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
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
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.
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
Pemanfaatan Database Server Open Source Oleh : Hendra, ST.
Indoprog 6
Klik pada next
Klik Finish
dan secara otomatis akan mengaktifkan IBExpert.
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.
Pemanfaatan Database Server Open Source Oleh : Hendra, ST.
Indoprog 8
Klik pada Test Connect
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.
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
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
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.
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 :
Pemanfaatan Database Server Open Source Oleh : Hendra, ST.
Indoprog 14
dan klik pada (ctrl+f9) untuk mengkompilasi script anda.
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)
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;
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
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.
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 :
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
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
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
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
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 :
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
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
Pemanfaatan Database Server Open Source Oleh : Hendra, ST.
Indoprog 27
Pilih Microsoft OLE DB Provider for ODBC Drivers
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
Pemanfaatan Database Server Open Source Oleh : Hendra, ST.
Indoprog 29
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
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^
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 (
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,
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
);
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 (
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),
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),
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,
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,
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
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
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
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,
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
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
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
;
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)
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
^
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
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
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
^
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
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;
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;
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
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
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
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 (
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 */
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 */
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 (
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;
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
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
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 ; ^
top related