Apabila dikendaki hal demikian, menurut saya hal pertama yang harus kita tetapkan adalah pengakuan harga (kecuali harga beli, karena sudah ditetapkan oleh user). Mulai dari harga awal, keluar maupun di saldo.
Karena susah untuk diterapkan di query murni, saya coba gabungkan antara query Ms Access dengan VBA. Artinya, VBA yang dieksekusi melalui query. Saya buat VBA untuk saldo rata-rata seperti ini:
=====
Function h_rata2(ByVal RecordID As Variant, nmtabel As Variant _
, fi_harga As Variant, n_id As Variant, fi_db As Variant, _
fi_kr As Variant, iki As Integer) As Double
Dim hsl, qty As Double
Dim rss As DAO.Recordset
Set rss = CurrentDb.OpenRecordset("SELECT sum(" & fi_db _
& " * " & fi_harga & ") From " & nmtabel & " where " & n_id & "<" & RecordID)
If Not rss.EOF Then
hsl = Round(Nz(rss.Fields(0), 0))
Else
hsl = 0
End If
Set rss = CurrentDb.OpenRecordset("SELECT sum(" & fi_kr _
& " * " & fi_harga & ") From " & nmtabel & " where " & n_id & "<" & RecordID)
If Not rss.EOF Then
hsl = hsl - Round(Nz(rss.Fields(0), 0))
End If
rss.Close
Set rss = Nothing
Set rss = CurrentDb.OpenRecordset("SELECT sum(" & fi_db _
& ") From " & nmtabel & " where " & n_id & "<" & RecordID)
If Not rss.EOF Then
qty = Round(Nz(rss.Fields(0), 0))
Else
qty = 0
End If
Set rss = CurrentDb.OpenRecordset("SELECT sum(" & fi_kr _
& ") From " & nmtabel & " where " & n_id & "<" & RecordID)
If Not rss.EOF Then
qty = qty - Round(Nz(rss.Fields(0), 0))
End If
rss.Close
Set rss = Nothing
If qty > hsl Then
h_rata2 = 0
ElseIf qty = hsl Then
If iki = 0 Then
h_rata2 = DLookup("[" & fi_harga & "]", nmtabel, "[" & n_id & "]=" _
& DMin("[" & n_id & "]", nmtabel, ""))
Else
h_rata2 = 0
End If
Else
h_rata2 = (hsl / qty)
End If
End Function
, fi_harga As Variant, n_id As Variant, fi_db As Variant, _
fi_kr As Variant, iki As Integer) As Double
Dim hsl, qty As Double
Dim rss As DAO.Recordset
Set rss = CurrentDb.OpenRecordset("SELECT sum(" & fi_db _
& " * " & fi_harga & ") From " & nmtabel & " where " & n_id & "<" & RecordID)
If Not rss.EOF Then
hsl = Round(Nz(rss.Fields(0), 0))
Else
hsl = 0
End If
Set rss = CurrentDb.OpenRecordset("SELECT sum(" & fi_kr _
& " * " & fi_harga & ") From " & nmtabel & " where " & n_id & "<" & RecordID)
If Not rss.EOF Then
hsl = hsl - Round(Nz(rss.Fields(0), 0))
End If
rss.Close
Set rss = Nothing
Set rss = CurrentDb.OpenRecordset("SELECT sum(" & fi_db _
& ") From " & nmtabel & " where " & n_id & "<" & RecordID)
If Not rss.EOF Then
qty = Round(Nz(rss.Fields(0), 0))
Else
qty = 0
End If
Set rss = CurrentDb.OpenRecordset("SELECT sum(" & fi_kr _
& ") From " & nmtabel & " where " & n_id & "<" & RecordID)
If Not rss.EOF Then
qty = qty - Round(Nz(rss.Fields(0), 0))
End If
rss.Close
Set rss = Nothing
If qty > hsl Then
h_rata2 = 0
ElseIf qty = hsl Then
If iki = 0 Then
h_rata2 = DLookup("[" & fi_harga & "]", nmtabel, "[" & n_id & "]=" _
& DMin("[" & n_id & "]", nmtabel, ""))
Else
h_rata2 = 0
End If
Else
h_rata2 = (hsl / qty)
End If
End Function
====
Penjelasannya sebagai berikut:
-----
Function h_rata2(ByVal RecordID As Variant, nmtabel As Variant _
, fi_harga As Variant, n_id As Variant, fi_db As Variant, _
fi_kr As Variant, iki As Integer) As Double
, fi_harga As Variant, n_id As Variant, fi_db As Variant, _
fi_kr As Variant, iki As Integer) As Double
----
Fungsi ini akan menghasilkan nilai number (double). Variabel yang diminta fungsi adalah:
ByVal RecordID : Nilai dari id
nmtabel : nama tabelfi_harga: Nama Field Harga
n_id: Nama Field id
fi_db: Nama Field masuk
fi_kr: Nama Field keluar
iki: control kebutuhan data (0 ==> harga saldo awal; lainnya untuk harga saldo lainnya)
----
Set rss = CurrentDb.OpenRecordset("SELECT sum(" & fi_db _
& " * " & fi_harga & ") From " & nmtabel & " where " & n_id & "<" & RecordID)
If Not rss.EOF Then
hsl = Round(Nz(rss.Fields(0), 0))
Else
hsl = 0
End If
& " * " & fi_harga & ") From " & nmtabel & " where " & n_id & "<" & RecordID)
If Not rss.EOF Then
hsl = Round(Nz(rss.Fields(0), 0))
Else
hsl = 0
End If
----
Ini akan menjumlah seluruh nilai barang masuk X harga dengan catatan id< kurang dari variable nilai ID. Jadi tergantung nilai variablenya. Karena kita ingin mencarai nilai bersihnya, maka harus dikurangi dengan yang dikeluarkan dengan memakai script ini:
----
Set rss = CurrentDb.OpenRecordset("SELECT sum(" & fi_kr _
& " * " & fi_harga & ") From " & nmtabel & " where " & n_id & "<" & RecordID)
If Not rss.EOF Then
hsl = hsl - Round(Nz(rss.Fields(0), 0))
End If
rss.Close
Set rss = Nothing
Set rss = CurrentDb.OpenRecordset("SELECT sum(" & fi_db _
& ") From " & nmtabel & " where " & n_id & "<" & RecordID)
If Not rss.EOF Then
qty = Round(Nz(rss.Fields(0), 0))
Else
qty = 0
End If
& " * " & fi_harga & ") From " & nmtabel & " where " & n_id & "<" & RecordID)
If Not rss.EOF Then
hsl = hsl - Round(Nz(rss.Fields(0), 0))
End If
rss.Close
Set rss = Nothing
Set rss = CurrentDb.OpenRecordset("SELECT sum(" & fi_db _
& ") From " & nmtabel & " where " & n_id & "<" & RecordID)
If Not rss.EOF Then
qty = Round(Nz(rss.Fields(0), 0))
Else
qty = 0
End If
---
Dari sini kita akan mendapatkan nilai sisa barang pada id sebelum dipilih.
----
Set rss = CurrentDb.OpenRecordset("SELECT sum(" & fi_db _
& ") From " & nmtabel & " where " & n_id & "<" & RecordID)
If Not rss.EOF Then
qty = Round(Nz(rss.Fields(0), 0))
Else
qty = 0
End If
Set rss = CurrentDb.OpenRecordset("SELECT sum(" & fi_kr _
& ") From " & nmtabel & " where " & n_id & "<" & RecordID)
If Not rss.EOF Then
qty = qty - Round(Nz(rss.Fields(0), 0))
End If
rss.Close
Set rss = Nothing
----
Yang ini akan mendapatkan jumlah unit barang. Tujuannya satu: untuk mendapatkan harga rata-rata, karena harga rata-rata diperoleh dari nilai bersih total dibagi jumlah unit bersih. Untuk itu kita turunkan script ini:
----
If qty > hsl Then
h_rata2 = 0
ElseIf qty = hsl Then
If iki = 0 Then
h_rata2 = DLookup("[" & fi_harga & "]", nmtabel, "[" & n_id & "]=" _
& DMin("[" & n_id & "]", nmtabel, ""))
Else
h_rata2 = 0
End If
Else
h_rata2 = (hsl / qty)
End If
----
Cara penggunaan di querynya begini:
p_awal: h_rata2([id];"t";"p_masuk";"id";"masuk";"keluar";1)
asumsinya:
[id] = record id
t = Nama tabel
p_masuk = Nama field harga barang masuk
id = nama field id
masuk = Nama field barang masuk
keluar = Nama field barang keluar
1 = Untuk kebutuhan harga awal
Bila kita letakkan ke dalam query, akan seperti ini:
Dan, bila kita eksekusi, hasilnya berubah begini:
p_awal ==> price awal.
Kita akan menguraikan lebih lanjut hingga sampai pada titik akhir berupa query seperti dibawah ini:
Sebelum sampai kesana. Apakah yang seperti ini sesuai harapan Mas Ivan?
Hariyanto (Surabaya)
On Friday, 31 January 2014, 21:19, ivan alexander <xella_navi@yahoo.com> wrote:
[Attachment(s) from ivan alexander included below]
Agan2 yth, sorry saya compose pertanyaan lagi, sy mau tanya cara buat kartu stok seperti yg ada d lampiran saya. Model kartu stok yg ada nomor transaksi,tanggal,saldo awal,masuk,keluar,saldo akhir, yg ada kuantitas stok dan nilai/harga stoknya.Mungkin ada d antara agan2 yg berkenan membantu, saya ucapkan terimakasih
agan2 yang terhormat,ini saya lampirkan contoh file access yg saya buat.klo recordnya cm beberapa ya harap maklum krna kan aplikasinya aja blm selesai, jd blm d isi recordnya.
yg saya mau tanya ke cak hary yanto, yg di query masuk keluar itu, kan tanggal 1-1-14 ada pembelian brg B 1000 unit, dengan harga Rp600. nah nilai stoknya kan jadi Rp600.000. trus di tanggal 2-1-14 ada jual barang B 100 unit, jd nilai keluarnya (100unit*Rp600=Rp60.000). jadi sisanya (Rp540.000di dapat dari 600.000 - 60.000).dengan nilai rata2 per unit sekarang = 540.000/900unit = Rp600.
trus di tanggal 29-1-14 ada beli barang B sebanyak 2.000 unit dengan harga Rp 500 jd nilai masuknya 2.000*Rp500= Rp1.000.000.
nah skrg nilai rata2 stoknya kan jadinya 1.000.000+540.000 dibagi 2.000+900 = 1.540.000/2.900=Rp531,034.
di tanggal 30-1-14 ada jual lagi barang B sebanyak 100 unit, maka pengurangan stoknya jadi 100*Rp531,034 = Rp53.103
sisa stoknya menjadi 1.540.000-53.103 = 1.486.897 dengan unitnya sebanyak 2.800 unit.
pemahaman saya tentang nilai stok seperti itu cak hary, klo ada kekeliruan atau tidak sesuai dengan konsep akuntansi saya mohon koreksinya
Terimakasih
On Friday, January 31, 2014 12:10 PM, Ivan Alexander <xella_navi@yahoo.com> wrote:
Agan2 yth, sorry saya compose pertanyaan lagi, sy mau tanya cara buat kartu stok seperti yg ada d lampiran saya. Model kartu stok yg ada nomor transaksi,tanggal,saldo awal,masuk,keluar,saldo akhir, yg ada kuantitas stok dan nilai/harga stoknya.Mungkin ada d antara agan2 yg berkenan membantu, saya ucapkan terimakasih
Agan2 yth, sorry saya compose pertanyaan lagi, sy mau tanya cara buat kartu stok seperti yg ada d lampiran saya. Model kartu stok yg ada nomor transaksi,tanggal,saldo awal,masuk,keluar,saldo akhir, yg ada kuantitas stok dan nilai/harga stoknya.Mungkin ada d antara agan2 yg berkenan membantu, saya ucapkan terimakasih
__._,_.___
Reply via web post | Reply to sender | Reply to group | Start a New Topic | Messages in this topic (7) |
SPAM IS PROHIBITED
.
__,_._,___
Tidak ada komentar:
Posting Komentar