Jumat, 31 Januari 2014

Re: [belajar-access] Re: Cara buat kartu stok dan hpp stok avarage

 

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

====

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
----

Fungsi ini akan menghasilkan nilai number (double). Variabel yang diminta fungsi adalah:

ByVal RecordID : Nilai dari id
nmtabel : nama tabel
fi_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
----

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

---

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:


http://www.lpjkjatim.com/img_art/acc_agung_1.gif

Dan, bila kita eksekusi, hasilnya berubah begini:

http://www.lpjkjatim.com/img_art/acc_agung_2.gif

p_awal ==> price awal.

Kita akan menguraikan lebih lanjut hingga sampai pada titik akhir berupa query seperti dibawah ini:

http://www.lpjkjatim.com/img_art/acc_agung_0.gif

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 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)
Recent Activity:
SPAM IS PROHIBITED
.

__,_._,___

Tidak ada komentar:

Posting Komentar