loading...

Source code Perhitungan Stok barang dan Harga Barang INventory untuk Aplikasi Web PHP & Mysql

Para Programmer ataupun Software Enginner pasti pernah menggunakan SQL. minimal untuk proces CRUD (create, Read, Update, Delete) sederhana. namun sedikit yang memanfaatkan SQL proses perhitung rumit seperti penggajian, perhitungan average harga barang, ststus inventiry dan sebagainya hanya menggunakan Single SQL Statement alias dengan satu perintah SQL saja, waktu lalu saat diskusi online dengan kawan di facebook saya tergelitikmembuat contoh SQL beraksi untuk menghitung nilai stok dan harga rata barang terjadi proses keluar masuk barang pada bulan ternteu Contoh kasusnya adalah sperti ini

Di Ketahui ;

QOB := 1.670,28 Kg ( Opening Balance )
vOB := Rp. 8.397.476,7 ( Value Opening Balance

Akumulasi selama 1 bulan dari pembelian ( Harus Proses seluruh transaksi masuk )
SQB := 1.600,Kg ( Supply quantity Barang )
vSQB := Rp. 8.825.600 ( Value Quantity Barang )

Akumulasi pemakain material selam 1 bulan ( Harus Proses seluruh Transaksi Keluar )
uQB := 973,83 ( Used Quantity Balance )

Di Tanya ;

vuQB : …..?? ( Value used Quatity Balance )
SAB : …… ( Saldo akhir balance )
vSAB : ……..( Value saldo akhir balance )

Jawab ;

Average Bahan Baku := (( vSQB+vOB) / (QOB+SQB) )
vuQB := uQB * average bahan baku
SAB := (( QOB+SQB)-UQB)
vSAB := SAB * average bahan baku

berinteraksi dengan database, maka ada Aturan Emas yang harus selalu dipegang. Golden Rule disampaikan oleh Tom Kyte, Oracle Evangelist, 

Sebisa mungkin, selalu menggunakan perintah SQL.
Jika Anda tidak bisa dalam perintah SQL tunggal, kemudian gunakan Prosedur Tersimpan
Jika Anda tidak dapat menggunakan Stored Prosedur, dilakukan di aplikasi kita
Jika Anda masih tidak bisa juga, mungkin kita perlu berpikir hati-hati, tidak Anda berpikir kita benar-benar perlu melakukan hal ini? :)

Source code Perhitungan Stok barang dan Harga Barang INventory untuk Aplikasi Web PHP & Mysql



Untuk itu kami akan mencoba untuk menyelesaikan masalah di atas hanya menggunakan satu perintah SQL saja. Tapi saya akan menjelaskan langkah-demi-langkah dalam membangun "perintah SQL" adalah, sehingga teman-teman dapat memahami algoritma dan logika di dalamnya. Untuk hal ini saya akan menggunakan PostgreSQL untuk menyelesaikan, tetapi hasil akhirnya adalah perintah SQL standar yang dapat digunakan dalam setiap RDBMS lainnya. Mari kita mulai dengan membuka baris perintah PostgreSQL 

C:\Program Files\PostgreSQL\9.3\bin>psql -U postgres -d inventory
psql (9.3.1)
WARNING: Console code page (850) differs from Windows code page (1252)
         8-bit characters might not work correctly. See psql reference
         page "Notes for Windows users" for details.
Type "help" for help.

Untuk mengatasi kasus di atas kita perlu beberapa buah meja, yaitu

  • item meja untuk menampung data master barang.
  • tabel item_balances untuk menampung data bulanan saldo awal untuk setiap item.
  • transaksi meja untuk mencatat transaksi harian, barang keluar dan masuk.
Pertama-tama kita buat struktur table items.

inventory=# -- -----------------------
inventory=# -- buat table items
inventory=# -- -----------------------
inventory=# create table items (
inventory(#   id serial primary key,
inventory(#   code varchar(20) not null,
inventory(#   name varchar(200) null
inventory(# ) ;
CREATE TABLE

fill some data using the insert command into. and show the results to be sure.

inventory=# -- -----------------------
inventory=# -- masukkan beberapa data
inventory=# -- -----------------------
inventory=# insert into items (code, name)
inventory-# select 'ITEM01', 'Barang Pertama' union all
inventory-# select 'ITEM02', 'Barang Kedua' union all
inventory-# select 'ITEM03', 'Barang Ketiga'
inventory-# ;
INSERT 0 3
 
inventory=# -- -----------------------
inventory=# -- lihat hasilnya
inventory=# -- -----------------------
inventory=# select * from items
inventory-# ;
 
 id |  code  |      name
----+--------+----------------
  1 | ITEM01 | Barang Pertama
  2 | ITEM02 | Barang Kedua
  3 | ITEM03 | Barang Ketiga
(3 rows)

Selanjutnya kita mengatur meja saldo item yang digunakan untuk menyimpan saldo awal dan harga barang setiap bulan. perlu untuk periode bidang-bulan untuk identifikasi.

inventory=# -- -----------------------
inventory=# -- buat table balance
inventory=# -- -----------------------
inventory=# create table item_balances (
inventory(#   id serial primary key,
inventory(#   item_id integer not null,
inventory(#   period date not null,
inventory(#   quantity numeric(15,2),
inventory(#   unit_price numeric(15,2),
inventory(#   foreign key (item_id) references items(id)
inventory(# ) ;
CREATE TABLE

do JOIN terhadal table items, and the result of crosstab item_balance transactions for the calculation process in accordance with the formula given at the beginning of this article

inventory=# -- -----------------------
inventory=# -- perhitungan akhir
inventory=# -- -----------------------
inventory=# select it.id, it.code, it.name
inventory-# , bl.period, bl.quantity QOB, bl.unit_price Avg1
inventory-# , ( bl.quantity *bl.unit_price ) vOB
inventory-# , tx.qty_in SQB, tx.value_in vSQB, tx.qty_out uQB
inventory-# , ( (tx.value_in +bl.quantity *bl.unit_price) / (bl.quantity +tx.qty_in) ) Avg2
inventory-# , tx.qty_out
inventory-# * ( (tx.value_in+bl.quantity*bl.unit_price) / (bl.quantity +tx.qty_in) ) vuQB
inventory-# , ( bl.quantity +tx.qty_in ) -tx.qty_out SAB
inventory-# , ( (bl.quantity +tx.qty_in) -tx.qty_out )
inventory-# * ( (tx.value_in +bl.quantity *bl.unit_price) / (bl.quantity +tx.qty_in) ) vSAB
inventory-# from items it
inventory-# join item_balances bl on it.id = bl.item_id
inventory-# left join (
inventory(#   select item_id
inventory(#   , date_trunc('month',tx_date) tx_date
inventory(#   , sum(case when tx_type='IN' then quantity else 0 end) qty_in
inventory(#   , sum(case when tx_type='IN' then quantity*unit_price else 0 end) value_in
inventory(#   , sum(case when tx_type='OUT' then quantity else 0 end) qty_out
inventory(#   from transactions
inventory(#   group by item_id
inventory(#   , date_trunc('month',tx_date)
inventory(# ) tx
inventory-# on bl.item_id = tx.item_id
inventory-# and bl.period = tx.tx_date
inventory-# ;
 
 id |  code  |      name      |   period   |   qob   |   avg1   |     vob     |   sqb   |     vsqb    |   uqb   |   avg2   |    vuqb     |   sab   |   vsab
----+--------+----------------+------------+---------+----------+-------------+---------+-------------+---------+----------+-------------+---------+-------------
  1 | ITEM01 | Barang Pertama | 2013-12-01 | 1600.00 | 23125.00 | 37000000.00 |  300.00 |  7437500.00 |  700.00 | 23388.16 | 16371712.00 | 1200.00 | 28065792.00
  2 | ITEM02 | Barang Kedua   | 2013-12-01 | 1250.00 | 13100.00 | 16375000.00 | 3000.00 | 43325000.00 | 2700.00 | 14047.06 | 37927062.00 | 1550.00 | 21772943.00
  3 | ITEM03 | Barang Ketiga  | 2013-12-01 | 3250.00 |  3100.00 | 10075000.00 | 3000.00 | 10900000.00 | 4700.00 |  3356.00 | 15773200.00 | 1550.00 |  5201800.00
(3 rows)

Kita berhasil membuat satu perintah SQL untuk perhitungan status stok akhir bulan dan menghitung harga rata-ratanya. hasil dari perintah SQL ini sudah matang, sehingga aplikasi kita - PHP atau VB.net atau lainnya - bisa langsung menampilkan hasilnya tanpa perlu melakukan proses perhitungan lagi........

Semoga berguna buat anda Semua....





0 Response to "Source code Perhitungan Stok barang dan Harga Barang INventory untuk Aplikasi Web PHP & Mysql"

Post a comment

Kunjungi Fasnpage Kami