Minggu, 08 Mei 2016

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

Read more »

Kumpulan Full Source Code APlikasi Web Persediaan Barang (Sistem Inventory) Menggunakan Yii2 Framework

Inventory System atau Aplikasi persediaan barang adalah salah satu aplikasi umum dan cukup menantang, terutama untuk programmer pemula yang mengasah keterampilan pemrograman. Artikel ini merupakan kelanjutan dari artikel keempat yang membahas Barang Transaksi Form Penciptaan dan bagian terakhir dari seri artikel ini Aplikasi Persediaan Menggunakan Yii2. Artikel ini membahas pembuatan kartu stok laporan yang merupakan laporan yang harus tersedia dalam inventarisasi aplikasi, dan kami dibuat sederhana sehingga akan sangat mudah untuk memahami programmer pemula.


modifikasi ItemController


kartu stok pada dasarnya adalah daftar transaksi setiap item, yang menyatakan jumlah masuk, jumlah keluar, dan saldo barang yang tersedia. sehingga kita bisa melihat pergerakan dan perubahan stok barang yang bersangkutan. Untuk mencapai hal ini, kita hanya melakukan bergabung dengan tabel barang (item) dan transaksi meja (transaksi dan transaction_details) untuk mendapatkan laporan yang kita inginkan.

Untuk itu kita bisa melakukan query dan memberikan hasil query ke tampilan yang dapat ditampilkan dalam bentuk GridView. Untuk itu kita melakukan modifikasi fungsi ActionView yang ada di ItemController kelas. Dengan mengubah ActionView, maka setiap kali kita membuka / melihat informasi rinci tentang item di bawahnya sejarah transaksi. Perubahan adalah sebagai berikut,

/**
 * Displays a single Items model.
 * @param integer $id
 * @return mixed
 */
public function actionView($id)
{
    // query kartu stok
    $sql_list = "
        SELECT t.id AS trans_id
        , t.trans_code AS trans_code
        , t.trans_date AS trans_date
        , a.id AS detail_id, a.item_id AS item_id
        , trim(concat(t.remarks,' - ',a.remarks)) AS remarks
        , b.code AS item_code, b.name AS item_name
        , CASE
            WHEN t.type_id=1 THEN a.quantity
            WHEN t.type_id=2 THEN -a.quantity
            ELSE 0 END
          AS quantity
        , @sal := @sal + CASE
            WHEN t.type_id=1 THEN a.quantity
            WHEN t.type_id=2 THEN -a.quantity
            ELSE 0 END
          AS saldo
        FROM transactions t
        JOIN transaction_details a ON t.id = a.trans_id
        JOIN items b ON a.item_id = b.id
        JOIN ( SELECT @sal:=0 ) v
        WHERE b.id = :id
        ORDER BY t.trans_date, t.id, a.id
    ";
    // query total data di kartu stok
    $sql_count = "
        SELECT count(*)
        FROM transactions t
        JOIN transaction_details a ON t.id = a.trans_id
        JOIN items b ON a.item_id = b.id
        ORDER BY t.trans_date, t.id, a.id;
    ";
    // count data
    $count = Yii::$app->db->createCommand($sql_count, [':id' => $id])->queryScalar();
    // data provider untuk ditampilkan di view
    $dataProvider = new SqlDataProvider([
        'sql' => $sql_list,
        'params' => [':id' => $id],
        'totalCount' => $count,
        'pagination' => [
            'pageSize' => 20,
        ],
    ]);

    // render view
    return $this->render('view', [
        'model' => $this->findModel($id),
        'dataProvider' => $dataProvider,
    ]);
}

in the above query @sal there are variables that we use to generate the balance column is based on the calculation of the addition / subtraction goods transactions. In the query is also a CASE clause that serves as a branching logic to distinguish transactions of goods in and goods out, because the incoming goods must add balance, while the goods out should reduce the balance.


Modifikasi View Item

Dan untuk menampilkan, cukup mudah, kita hanya menambahkan kode GridView dan Detil Lihat sebelumnya ada di file view.php menjadi seperti ini

<?= DetailView::widget([
    'model' => $model,
    'attributes' => [
        'code',
        'name',
        'quantity',
        'remarks',
    ],
]) ?>

<h3>Stock Card</h3>
<?= GridView::widget([
    'dataProvider' => $dataProvider,
    'columns' => [
        ['class' => 'yii\grid\SerialColumn'],
        'trans_code',
        'trans_date',
        'item_code',
        'item_name',
        'quantity',
        'saldo',
        'remarks',
    ],
]); ?>

ini salah satu contoh penampakan kartu stok-nya di tampilan View Web


Kesimpulan dan Saran


Sesuai dengan judulnya, aplikasi ini masih sangat sederhana hanya contoh ajah. Banyak ide yang bisa dikembangkan dari aplikasi ini, 


misalkan contoh :

  1. Dukungan transaksi multi-warehouse.
  2. Penambahan laporan-laporan periodik, seperti laporan mutasi stok bulanan, dan sebagainya.
  3. Integrasi dengan aplikasi Point of Sales.
Dan masih banyak ide-ide lain yang bisa kita kembangkan.

Statistik

Translate

Blog Archive