Author Topic: mencari HPP dengan sistem FIFO  (Read 4118 times)

0 Members and 1 Guest are viewing this topic.

Offline sonifox

  • Junior Member
  • *
  • Posts: 178
mencari HPP dengan sistem FIFO
« on: April 12, 2010, 02:35:22 PM »
aku baru belajar foxpro dan aku punya tabel misal beli.dbf dengan field kodbar, tgl, qty, hargabeli aku index berdasarkan kodbar+dtos(tgl)
dan satu lagi ada tabel jual.dbf dengan field kodbar,tgl,qty, hpp aku index berdasarkan kodbar+dtos(tgl|)

disini aku ingin mencari hpp dari item-item penjualan tsb yang harganya diambil dari hargabeli tapi berdasarkan sistem FIFO (First In First Out). Aku sudah mencoba tapi hasilnya masih amburadul. Mungkin teman-teman ada yang bisa membantu saya? terima kasih atas bantuannya

Offline foxy

  • Fox-id M.V.P
  • Hero Member
  • *
  • Posts: 3.079
    • Foxy Land
Re: mencari HPP dengan sistem FIFO
« Reply #1 on: April 12, 2010, 05:49:10 PM »
@sonifox: Anda sudah mencoba dengan struktur tabel seperti apa? Kalau dengan struktur table beli dan jual seperti yang Anda post, gak heran kalau hasilnya amburadul. Sistem inventory FIFO tidak se-simple kepanjangannya (First-in First-out). Anda perlu membuat desain database yang baik supaya data FIFO bisa betul-betul dicatat di database dan bisa dengan cepat (saya tidak bilang 'dengan mudah') ditarik melalui query. Bagaimana model database yang cocok untuk Anda? Yah, saya gak tau. Karena itu tergantung apa yang Anda hadapi. Bagaimana cara mendesain database yang tepat? Hmmm... selain teori, mungkin juga Anda bisa referensi-referensi seperti dari http://www.databaseanswers.org/data_models/ . Nantinya Anda akan bisa menemukan desain yang cocok.

hth,
foxy
This post is provided as is. Feel free to use all the codes and information, however understand that I don't have any obligations to fix any bug(s) or follow up this subject.

Offline poison

  • Hero Member
  • *
  • Posts: 1.483
  • Poison 4 Women
Re: mencari HPP dengan sistem FIFO
« Reply #2 on: April 12, 2010, 06:06:15 PM »
pasti kepikiran nambah table.......

Offline Tgh_Fox

  • Junior Member
  • *
  • Posts: 193
  • - TghFox -
Re: mencari HPP dengan sistem FIFO
« Reply #3 on: April 12, 2010, 06:10:35 PM »
Dalam akuntansi ada dua perhitungan HPP, Fisik dan Perpetual(LIFO, FIFO, AVERAGE),
Meskipun disuatu perusahaan orang2 nya bilang menerapkan FIFO (perpetual), tapi terkadang
dalam penerapannya tidak murni perpetual (FIFO), ada yang penerapannya tidak murni perpetual
 tapi ada campuran dengan metode Fisik (biar lebih mudah).
Nah jadi struktur tabel yang cocok ya tergantung sikon perusahaan :icon_biggrin:
Semangat

Offline Leon2

  • Junior Member
  • *
  • Posts: 302
  • Jelajahi Fox World U'll Be Happy n Rich
Re: mencari HPP dengan sistem FIFO
« Reply #4 on: April 13, 2010, 01:11:40 AM »
@SoniFox :
Sebelum ke HPP coba buat kartu stock-nya
Perhatikan in & out-nya.... tambahkan sedikit imajinasi... dan lihat apa yang terjadi

Selamat berexplorasi dengan data  :icon_thumleft:
Kasih Sayang Tanpa Kekuatan Adalah Kelemahan
Kekuatan Tanpa Kasih Sayang Adalah Kezaliman
Cinta Itu Buta Tapi Lebih Buta Orang Yang Tidak Kenal Cinta

Offline iwan_wong

  • Full Member
  • *
  • Posts: 74
Re: mencari HPP dengan sistem FIFO
« Reply #5 on: April 13, 2010, 10:13:44 AM »
Hehe ...
Kebetulan Saya Sedang Merancang Sistem FIFO, Ini Ada sedikit script akhir dari hasil
Query Data.

1. Query dahulu stock yang ada yaitu dari Penjualan - Pembelian = Stock Awal (Periode)
2. Lalu Buat Script Untuk Ambil Harga Beli pada Stock Tersebut Pada Pembelian
    Saya Akan Mengambil Per 10 Tansaksi Pembelian Mundur Ke Belakang untuk
    Validasi Per Qty untuk harga Modal

Lihat Contoh Script Ini ....
tbStock Adalah Hasil Query Stock, Lalu ada beberapa Script String Connection untuk
membuat Field Tablenya untuk Qty1 dan Qty2


*************************
   SELECT 2
   USE tbStock

   SELECT 1
   USE tbTable1
   DELETE FOR (fdawal = 0)and  (fdmasuk = 0) AND (fdkeluar= 0 )
   COPY TO aax
   IF !EMPTY(_fdcatid) THEN
   DELETE FOR ALLTRIM(fdcatid) <> ALLTRIM(_fdcatid)   
   ENDIF
*   BROWSE
   
   SET DATE MDY
   GO TOP
   DO WHILE !EOF()     
      _fdkode2 = fdkode
      _Stock_Awal = fdAwal
      _Date = param_date1 - 1
      _Count= 1
      _Stock_Ambil = 0000000.000
      _Stock_isi = 00000000.000
      DO WHILE _Stock_Awal <> _Stock_Ambil AND _Count = 1
           uSQLString = "Select top 10 * From tbFIFO1 WHERE fdtglfaktur between '01/01/2008' and '" + DTOC(_Date) + "' and fdKode2 = '"+ ALLTRIM(_fdKode2) + "' ORDER BY fdtglfaktur DESC"
         SQLEXEC (strConnHandle,uSQLString,"tb1")         
         IF RECCOUNT() <> 0 THEN
               GO TOP
               DO WHILE !EOF() AND _Stock_Awal <> _Stock_Ambil
                     _dateX = CTOD(DTOC(fdtglfaktur))   
                  IF ALLTRIM(fdSatuan1) <> ALLTRIM(fdSatuan2) THEN
                     _xQty   = fdQty2
                     _xHarga = fdHarga2
                  ELSE
                     _xQty   = fdQty1
                     _xHarga = fdHarga1
                  ENDIF    
                  
                  IF _Stock_Awal > (_Stock_Ambil + _xQty) THEN
                       _Stock_Isi = _xQty
                       _Stock_Ambil = _Stock_Ambil + _xQty
                  ELSE
                    IF _Stock_Ambil = 0 THEN    
                    _Stock_isi   = _Stock_Awal
                       _Stock_Ambil = _Stock_Awal
                       ELSE
                       _Stock_isi   = _Stock_Awal - _Stock_Ambil
                       _Stock_Ambil = _Stock_Awal
                       ENDIF
                  ENDIF     
                  SELECT tbStock
                  APPEND BLANK
                  replace fdkode2 WITH _fdKode2
                  replace fddate  WITH _dateX
                  replace fdqty1  WITH _Stock_Isi
                  replace fdharga WITH _xHarga
                  replace fdqty2  WITH 0
                  SELECT tb1
                  SKIP
               ENDDO   
         ENDIF          
         _Count = 2
      ENDDO    
      SELECT tbTable1
      SKIP
   ENDDO

   IF !EMPTY(_fdCatID) THEN
      uSQLString = "Select * From tbFIFO1 WHERE fdtglfaktur between '" + DTOC(param_Date1) + "' and '" + DTOC(param_date2) + "' and fdCatID = '"+ ALLTRIM(_fdCatID) + "' ORDER BY fdtglfaktur DESC"
      ELSE
      uSQLString = "Select * From tbFIFO1 WHERE fdtglfaktur between '" + DTOC(param_Date1) + "' and '" + DTOC(param_date2) + "' ORDER BY fdtglfaktur DESC"
      ENDIF
   SQLEXEC (strConnHandle,uSQLString,"tb1")         
    GO TOP
    DO WHILE !EOF()
     _fdKode2 = fdKode2
     _dateX = fdtglfaktur
    
     IF ALLTRIM(fdSatuan1) <> ALLTRIM(fdSatuan2) THEN
            _xQty   = fdQty2
            _xHarga = fdHarga2
              ELSE
           _xQty   = fdQty1
           _xHarga = fdHarga1
      ENDIF    
                  
      SELECT tbStock
      APPEND BLANK
      replace fdkode2 WITH _fdKode2
      replace fddate  WITH _dateX
      replace fdqty1  WITH _xQty
      replace fdharga WITH _xHarga
      replace fdqty2  WITH 0
      SELECT tb1
      SKIP
   ENDDO   

   SELECT tbStock
   COPY TO tbFifoX
   CLOSE DATABASES ALL
   
   IF !EMPTY(_fdCatID) THEN
      uSQLString = "Select * From xtbPenj1 WHERE fdtgl between '" + DTOC(param_Date1) + "' and '" + DTOC(param_date2) + "' and fdCatID = '"+ ALLTRIM(_fdCatID) + "' ORDER BY fdtgl ASC"
      ELSE
      uSQLString = "Select * From xtbPenj1 WHERE fdtgl between '" + DTOC(param_Date1) + "' and '" + DTOC(param_date2) + "' ORDER BY fdtgl ASC"
      ENDIF
   SQLEXEC (strConnHandle,uSQLString,"tb1")         
   COPY TO tbFIFOZ
   CLOSE DATABASES ALL
   
   IF !EMPTY(_fdCatID) THEN
      uSQLString = "Select * From xtbPenj2 WHERE fdtgl between '" + DTOC(param_Date1) + "' and '" + DTOC(param_date2) + "' and fdCatID = '"+ ALLTRIM(_fdCatID) + "' ORDER BY fdtgl ASC"
      ELSE
      uSQLString = "Select * From xtbPenj2 WHERE fdtgl between '" + DTOC(param_Date1) + "' and '" + DTOC(param_date2) + "' ORDER BY fdtgl ASC"
      ENDIF
   SQLEXEC (strConnHandle,uSQLString,"tb1")         
   COPY TO xxw3q
   CLOSE DATABASES ALL
   USE tbFIFOZ
   APPEND from xxw3q
   CLOSE data all

   IF !EMPTY(_fdCatID) THEN
      uSQLString = "Select * From xtbPenj3 WHERE fdtgl between '" + DTOC(param_Date1) + "' and '" + DTOC(param_date2) + "' and fdCatID = '"+ ALLTRIM(_fdCatID) + "' ORDER BY fdtgl ASC"
      ELSE
      uSQLString = "Select * From xtbPenj3 WHERE fdtgl between '" + DTOC(param_Date1) + "' and '" + DTOC(param_date2) + "' ORDER BY fdtgl ASC"
      ENDIF
   SQLEXEC (strConnHandle,uSQLString,"tb1")         
   COPY TO xxw3q
   CLOSE DATABASES ALL
   USE tbFIFOZ
   APPEND from xxw3q
   CLOSE data all
         
   IF !EMPTY(_fdCatID) THEN
      uSQLString = "Select * From xtbPenj4 WHERE fdtgl between '" + DTOC(param_Date1) + "' and '" + DTOC(param_date2) + "' and fdCatID = '"+ ALLTRIM(_fdCatID) + "' ORDER BY fdtgl ASC"
      ELSE
      uSQLString = "Select * From xtbPenj4 WHERE fdtgl between '" + DTOC(param_Date1) + "' and '" + DTOC(param_date2) + "' ORDER BY fdtgl ASC"
      ENDIF
   SQLEXEC (strConnHandle,uSQLString,"tb1")         
   COPY TO xxw3q
   CLOSE DATABASES ALL
   USE tbFIFOZ
   APPEND from xxw3q
   CLOSE data all
   SELECT * from tbFifoz ORDER BY fdkode2,fdtgl  ASC INTO TABLE tbFIFOA
   SELECT * from tbFifox ORDER BY fdkode2,fddate ASC INTO TABLE tbFIFOB
   CLOSE DATABASES ALL
   
ENDIF

*******
* 3. Setelah Terbentuk tbFIFOA dan tbFIFOB Baru Kita Store Harga Modalnya


*** JOINT TABLE ***
CLOSE DATABASES ALL
USE tbFIFOA
COPY TO tbFIFOAB FOR fdKode2 = 'XXX'

CLOSE DATABASES ALL

SELECT 1
USE tbFIFOA

SELECT 2
USE tbFIFOB

SELECT 3
USE tbFIFOAB

SELECT 1
GO top
DO WHILE !EOF()
   _fdkode2 = fdKode2
   _fdnmbrg = fdnmbrg
   _fdnqty  = fdnqty
   _fdnharga= fdnharga
   _fdtgl   = fdtgl
   _fdcatid = fdcatid
   _fdcatname = fdcatname
   _Status  = 0
   _fdmodal = 0
   _Sisa   = 0

   SELECT 2
   LOCATE FOR ALLTR(fdkode2) = ALLTR(_fdkode2) AND fdQty1 <> fdQty2
   DO WHILE !EOF() AND ALLTR(fdkode2) = ALLTR(_fdkode2) AND _Status = 0      
      IF fdQty1-fdQty2 > _fdnqty THEN
          replace fdQty2 WITH fdQty2 + _fdnqty
          _fdModal = fdHarga
          _Status = 1
          SELECT 3
          APPEND BLANK
          replace fdkode2 WITH _fdkode2
          replace fdnmbrg WITH _fdnmbrg
          replace fdtgl WITH _fdtgl
          replace fdnqty WITH _fdnqty
          replace fdnharga WITH _fdnharga
          replace fdModal WITH _fdModal         
          replace fdcatid WITH _fdcatid
          replace fdcatname WITH _fdcatname
      ELSE    
          IF fdQty2 = 0 THEN
             replace fdQty2 WITH fdQty1
             _fdnqty  = _fdnqty - fdQty2
             _Isi     = fdQty1
             _fdModal = fdHarga
             _Status = 0
             SELECT 3
             APPEND BLANK
             replace fdkode2 WITH _fdkode2
             replace fdnmbrg WITH _fdnmbrg
             replace fdtgl WITH _fdtgl
             replace fdnqty WITH _Isi
             replace fdnharga WITH _fdnharga
             replace fdModal WITH _fdModal         
             replace fdcatid WITH _fdcatid
             replace fdcatname WITH _fdcatname
        ELSE
          _fdQty2 = fdQty2
             replace fdQty2 WITH fdQty1
             _fdnqty  = _fdnqty - (fdQty1 - _fdQty2)
             _Isi     = fdQty1 - _fdQty2
             _fdModal = fdHarga
             _Status = 0
             SELECT 3
             APPEND BLANK
             replace fdkode2 WITH _fdkode2
             replace fdnmbrg WITH _fdnmbrg
             replace fdtgl WITH _fdtgl
             replace fdnqty WITH _Isi
             replace fdnharga WITH _fdnharga
             replace fdModal WITH _fdModal         
             replace fdcatid WITH _fdcatid
             replace fdcatname WITH _fdcatname
          ENDIF    
      ENDIF
      SELECT 2
      SKIP       
   ENDDO    
   
   SELECT 1   
   SKIP
ENDDO

CLOSE DATABASES ALL


*****************
Selesai....
Silakan Pelajari Logikanya Sangat Simple Dan sedarhana
Semoga Bermanfaat ...
 :happy2:


Offline arifinc

  • Senior Member
  • *
  • Posts: 473
  • snowfox
Re: mencari HPP dengan sistem FIFO
« Reply #6 on: April 13, 2010, 07:06:20 PM »
Prinsipnya gampangnya mungkin seperti bisa seperti ini;

create table hpp (faktur c(10), tanggal D, QtyMasuk n(10), QtyKeluar N(10), Hargabeli N(10))

Saat barang masuk (pembelian, adjustment stok, retur penjualan (tergantung kebijaksanaan) ; insert into hpp (faktur, tanggal, qtymasuk, hargabeli) ......

Saat barang keluar; Looping untuk isi QtyKeluar dengan Qty barang keluar dan secara bersamaan mengambil hargabeli.
Jika mendapati 2 harga bisa di avg.

hth

arifinc

Offline rnd

  • Hero Member
  • *
  • Posts: 1.242
Re: mencari HPP dengan sistem FIFO
« Reply #7 on: April 14, 2010, 07:03:19 AM »
FIFO kok di average

Offline sonifox

  • Junior Member
  • *
  • Posts: 178
Re: mencari HPP dengan sistem FIFO
« Reply #8 on: April 14, 2010, 11:43:33 AM »
ini pake sistem FIFO lho bukan average mas arifinc jadi barang yang masuk ke gudang yang pertama misal
tgl 5/1   qty= 10 harga 1000
tgl 7/1  qty=15  harga 1100

jika barang keluar tgl 8/1 misal qty= 8  maka hpp=1000
jika keluar tgl 8/1 qty=12 maka hpp= 10 x 1000, dan 2 x 100. itu contoh yang mudah tapi prakteknya sangat variatif sekali

Offline Tgh_Fox

  • Junior Member
  • *
  • Posts: 193
  • - TghFox -
Re: mencari HPP dengan sistem FIFO
« Reply #9 on: April 14, 2010, 04:47:47 PM »
Prinsipnya gampangnya mungkin seperti bisa seperti ini;

create table hpp (faktur c(10), tanggal D, QtyMasuk n(10), QtyKeluar N(10), Hargabeli N(10))

Saat barang masuk (pembelian, adjustment stok, retur penjualan (tergantung kebijaksanaan) ; insert into hpp (faktur, tanggal, qtymasuk, hargabeli) ......

Saat barang keluar; Looping untuk isi QtyKeluar dengan Qty barang keluar dan secara bersamaan mengambil hargabeli.
Jika mendapati 2 harga bisa di avg.

hth

arifinc
sepertinya penerapan FIFO di Fisiknya (kartu Gudang) bukan untuk pencatatan HPP (kartu Stok), tapi pencatatan HPP pakai Average :) :)
Semangat

Offline arifinc

  • Senior Member
  • *
  • Posts: 473
  • snowfox
Re: mencari HPP dengan sistem FIFO
« Reply #10 on: April 14, 2010, 10:12:06 PM »
FIFO kok di average

Maksudnya dengan kasus di bawah ini

[/quote]
ini pake sistem FIFO lho bukan average mas arifinc jadi barang yang masuk ke gudang yang pertama misal
tgl 5/1   qty= 10 harga 1000
tgl 7/1  qty=15  harga 1100

jika barang keluar tgl 8/1 misal qty= 8  maka hpp=1000
jika keluar tgl 8/1 qty=12 maka hpp= 10 x 1000, dan 2 x 100. itu contoh yang mudah tapi prakteknya sangat variatif sekali


Jadi Kalau kita dapat kondisi yang ke-2
Hasilnya ((10*1000) + (2*1100) ) / (10+2)  atau dapat nilai rata-rata dari 2 data tersebut (avg)


Offline Tgh_Fox

  • Junior Member
  • *
  • Posts: 193
  • - TghFox -
Re: mencari HPP dengan sistem FIFO
« Reply #11 on: April 15, 2010, 04:51:31 PM »
Quote
Jadi Kalau kita dapat kondisi yang ke-2
Hasilnya ((10*1000) + (2*1100) ) / (10+2)  atau dapat nilai rata-rata dari 2 data tersebut (avg)

kalo seperti ini mungkin bisa saja hasil HHP akhirnya sama (nilai total) :) :), tapi untuk menampilkan
kartu stoknya ntar gak sesuai (tampilan kartu stok hpp/item barang keluar harus sama dengan barang keluar)
Semangat

Offline arifinc

  • Senior Member
  • *
  • Posts: 473
  • snowfox
Re: mencari HPP dengan sistem FIFO
« Reply #12 on: April 15, 2010, 10:21:01 PM »
disini aku ingin mencari hpp dari item-item penjualan tsb yang harganya diambil dari hargabeli tapi berdasarkan sistem FIFO (First In First Out).

kalo seperti ini mungkin bisa saja hasil HHP akhirnya sama (nilai total) :) :),

betul betul betul

tapi untuk menampilkan
kartu stoknya ntar gak sesuai (tampilan kartu stok hpp/item barang keluar harus sama dengan barang keluar)

Pan yang ditanya hpp dari item-item penjualan bukan Kartu HPP FIFO.  :icon_biggrin:

Offline Tgh_Fox

  • Junior Member
  • *
  • Posts: 193
  • - TghFox -
Re: mencari HPP dengan sistem FIFO
« Reply #13 on: April 17, 2010, 01:37:39 PM »
Pan yang ditanya hpp dari item-item penjualan bukan Kartu HPP FIFO.  :icon_biggrin:

sesuai dengan permintaan konsumen :icon_biggrin: :icon_biggrin:
Semangat

Offline udinjgl

  • Newbie
  • *
  • Posts: 12
Re: mencari HPP dengan sistem FIFO
« Reply #14 on: July 28, 2010, 07:14:10 AM »
Wah keren hebat, silahkan mempelajari membuat aplikasi HPP berdasarkan FIFO dan LIFO, saya saat ini juga sedang membuat Aplikasi HPP menggunakan FIFO dan LIFO, dan pada beberapa kasus tertentu perhitungannya masih belum pas. Dan kita harus mencoba dan mencoba lagi sampai bisa. Tapi kalau tetap kesulitan. Saya sarankan untuk menggunakan metode Rata-Rata saja, supaya lebih aman dan cepat selesai. Kebetulan banyak perusahaan lebih memilih metode Rata-Rata. Kalau membuat dengan metode FIFO dan LIFO memang susah. Jangan menyerah. Saya juga sedang berusaha.