alexa-tracking

Main Content

1024
1024
KASKUS
51
244
https://www.kaskus.co.id/thread/5309df2638cb17ca088b4624/desain-database-inventory-untuk-perhitungan-metode-fifo
Desain Database Inventory Untuk Perhitungan Metode FIFO
Ada yang bisa sharing database design utk metode fifo ?
Biar mudah menghasilkan laporan kartu stocknya.

Thanks.
di table stock, loe tambahin stockdate
bikin table kartustock, setiap penjualan + penambahan stock maka akan nulis kesana
ga terlalu ribet kok emoticon-thumbsup
format laporan kartu stock FIFO yang agan buat seperti apa tampilannya ?
Quote:Original Posted By gagal66
Ada yang bisa sharing database design utk metode fifo ?
Biar mudah menghasilkan laporan kartu stocknya.

Thanks.


pernah bikin stock multi gudang? konsep nya mirip, tinggal tambah date aja untuk sist fifo nya, trus kaya agan pekoy bilang, bikin table history

trus cara potong, ama cara ambil stock, ntar logic aja yg maen emoticon-I Love Indonesia (S)

ntar masuk ke retur barang sesuai kebijakan perusahaan yg kadang bikin rada ribet, emoticon-Berduka (S)
Bisa dikasih contoh desain tablenya (termasuk field2nya) ?

Laporan yang ingin dihasilkan spt di bawah ini

Desain Database Inventory Untuk Perhitungan Metode FIFO
Utk transaksi tgl 15 Januari 2005, di transaksi transfer barang, diinput quantity 400, tetapi dalam laporan kartu stock, dijabarkan quantity 395 dan 5.

utk transaksi saldo awal, dalam satu kode barang, juga bs bbrp harga pembelian. jadi tiap kode barang, tidak bisa cuma diwakili 1 record.
Quote:Original Posted By gagal66
Utk transaksi tgl 15 Januari 2005, di transaksi transfer barang, diinput quantity 400, tetapi dalam laporan kartu stock, dijabarkan quantity 395 dan 5.

utk transaksi saldo awal, dalam satu kode barang, juga bs bbrp harga pembelian. jadi tiap kode barang, tidak bisa cuma diwakili 1 record.



Coba seperti ini, Gan
table penerimaan_barang
kode_barang
nama_barang
qty_awal
qty_akhir
harga
tgl_terima

keterangan :
qty_awal merupakan qty pada waktu nerima barangnya
qty_akhir menyatakan sisa setelah digunakan.
Jadi, pada waktu terima barang, qty_awal = qty_akhir
Pada waktu pengeluaran barang, qty_akhir yang dikurangi.
query nya akan sort by tgl_terima dan qty_akhir > 0



Quote:Original Posted By gagal66
Utk transaksi tgl 15 Januari 2005, di transaksi transfer barang, diinput quantity 400, tetapi dalam laporan kartu stock, dijabarkan quantity 395 dan 5.

yup bener gan, di jabar in
cek table saldo, kan udah buat saldo per tanggal, ntar baca stok paling lama, kalo jml penjualan lebih banyak dari stok yg ada ya potong habis,
trus ambil stok selanjutnya, cukup ga
keduanya di insert jadi 2 transaksi di 2 table( penjualan dan history)


utk transaksi saldo awal, dalam satu kode barang, juga bs bbrp harga pembelian. jadi tiap kode barang, tidak bisa cuma diwakili 1 record

yup bener, mis ada 3 harga, ya buat 3 kali penerimaan, ntar akan masuk 3 stok, berdasar idxbarang
.

table saldo nya tambah in field 2 lagi, yaitu tgl, kalo ane lebih suka index ( auto increment) ntar tinggal liat idx terkecil, itu yg di potong stock duluan
ama idPembelian ( ini untuk link )
saya sederhanakan saja transaksinya.
anggap aja cuma ada transaksi berikut:

- transaksi saldo awal
- transaki penerimaan barang (termasuk quantity dan harga beli satuan)
- transaksi pengeluaran barang (termasuk quantity dan harga jual satuan)

Untuk menghasilkan contoh laporan di atas, dibutuhkan tabel apa saja ?
Gak usah bahas table supplier, table customer dan table barang.

salah satu pertimbangan utk desain databasenya, di contoh laporan transaksi sudah sampe tgl 17 januari, jika sy mengedit harga satuan transaksi tgl 1, maka semua record2 setelah tgl 1 akan ikut berubah di harganya maupun quantitynya/
emoticon-Big Grin...
coba coba lumayan buat referensi saya juga

tools : SQL Server 2012 Express

Table incoming_t
Code:
_id int identity (1,1) NOT NULL,
itemcode_ch varchar(15),
amount_it int,
price_nm numeric (7,3),
incomingon_dt datetime


Table outgoing_t
Code:

_id int identity (1,1) NOT NULL,
itemcode_ch varchar(15),
amount_it int,
outgoingon_dt datetime,
incoming_id int


notes : dbo.outgoing_t.incoming_id = dbo.incoming_t._id

untuk metode insert incomingnya standar, itemcode, qty (amount) sama harga (price)

nah untuk metode insert outgoingnya baru deh dilakukan ceking. syaratnya :
1. pastikan select statement-nya memfilter incomingon_dt (tgl masuk) < = outgoingon_dt (tgl keluar)
2. pastikan Qty in stock sesuai dengan kebutuhan barang keluar (qty instock merupakan summary dari qty In - Qty Out pra transaksi). jika kurang maka pecah qty Out transaksi menjadi beberapa bagian (diperlukan looping statement dalam insert into outgoing_t).

biar lebih enak, saya coba kasih contoh procedure untuk insert ke table outgoing

Code:

create procedure pInsertOutgoing_t(
@ItemCode varchar(10),
@Amount int,
@OutgoingDate varchar(10)
)

as

declare @iLoop int

set @iLoop = 0
WHILE @iLoop < @Amount
BEGIN

insert into outgoing_t (itemcode_ch,amount_it,outgoingon_dt,incoming_id)
select top 1 a.itemcode_ch, case when (a.amount_it - isnull(b.amount_it,0)) > (@Amount-@iLoop) then (@Amount-@iLoop)
else (a.amount_it - isnull(b.amount_it,0)) end ,@OutgoingDate,a._id from
incoming_t a left join (select itemcode_ch,sum(amount_it) as amount_it,incoming_id from outgoing_t group by itemcode_ch,incoming_id) b
on a.itemcode_ch = b.itemcode_ch and a._id = b.incoming_id
where @OutgoingDate >= convert(char(10),a.incomingon_dt,121) AND a.itemcode_ch=@ItemCode
AND a.amount_it - isnull(b.amount_it,0) > 0
order by incomingon_dt asc

select @iLoop = sum(amount_it) from outgoing_t where convert(char(10),outgoingon_dt,121) = @OutgoingDate
END
GO


sebenernya procedure ini lebih cocok ditaro di trigger, cuman buat kebutuhan development saya sarankan untuk eksekusi procedure dari aplikasi dulu.

dan cara mencoba example yang saya jabarkan tadi.

masukkan data incoming
Code:

insert into incoming_t(itemcode_ch,amount_it,price_nm,incomingon_dt)
select '001' as a,4 as b, 500 as c,'2014-02-01 00:00:00' as d union all
select '001' as a,15 as b, 700 as c,'2014-02-05 00:00:00' as d union all
select '001' as a,10 as b, 1000 as c,'2014-02-10 00:00:00' as d
GO

dari data diatas maka didapat
Quote:
_id | itemcode | Qty | Price | Incoming Date
1 | '001' | 4 | 500 | 2014-02-01
2 | '001' | 15 | 700 | 2014-02-05
3 | '001' | 10 | 1000 | 2014-02-10


nah abis itu baru masukkan data outgoing. untuk mencoba apakah procedure benar maka kita coba masukkan data outgoing via procedure
barang keluar tgl 6 februari sebesar 10 item
Code:

exec pInsertOutgoing_t '001',10,'2014-02-06'


maka hasil di outgoing adalah
Quote:
_id | itemcode | Qty | Incoming_id | Incoming Date
1 | '001' | 4 | 1 | 2014-02-06
2 | '001' | 6 | 2 | 2014-02-06


harap perhatikan incoming_id adalah reference id pada table incoming_t yang artinya bisa kita ambil info field yang ada di table tersebut dengan melakukan join id antar table.

penjelasan diatas hanyalah konsep. walopun ga sesuai dengan keinginan TS, setidaknya dapat memeberikan gambaran TS tentang konsep FIFO pada database. kalo emang TS pake MySQL silahkan gunakan statement punya MySQL, ane pernah make MySQL tapi mentok. kalou cuman buat CRUD doang mah ga masalah. tapi kalo buat programming di mysql ane ngeri sama filter tanggalnya emoticon-Takut
Aku msh bingung gimana desain databasenya sehingga mudah dalam pembuatan laporan hppnya.