Persediaan
Barang, gudang dan saldo: kartu barang dengan satuan dan barcode, stok opname dan penyesuaian, transfer antar gudang, dan pelacakan nomor seri. Persediaan dinilai dengan metode biaya rata-rata tertimbang, dan setiap perubahan kuantitas berasal dari dokumen yang diposting — saldo tidak pernah diubah secara langsung.
Barang
Rute: Persediaan › Barang — /commercial/items


Fungsi: master barang adalah jantung sistem komersial. Setiap baris pembelian, penjualan, transfer dan penyesuaian menunjuk ke satu kartu barang, jadi buat kartunya dengan benar sebelum dokumen pertama yang memakainya. Gunakan layar ini setiap kali menambah produk atau jasa baru, mengubah harga atau PPN, atau menambah satuan jual yang lebih besar (karton, lusin…).
Daftar barang
Daftar menampilkan: kode, nama Arab, nama Inggris, satuan dasar, kategori, merek, harga jual dan tanda aktif. Seperti semua daftar di KEMTOVA ERP Anda dapat mencari, memfilter kolom, menampilkan/menyembunyikan kolom dan mengekspor. Aksi baris: ubah (pensil) dan hapus (tempat sampah, dengan konfirmasi). Tombol Buat membuka kartu kosong dengan kode otomatis berikutnya.
Kartu barang — semua kolom
| Kolom | Deskripsi |
|---|---|
| Kode | Diberikan otomatis dari seri penomoran dan hanya-baca. Kode ganda ditolak saat menyimpan (“Kode barang … sudah ada”). |
| Nama Arab | Wajib. Nama tampilan utama pada dokumen dan daftar. |
| Nama Inggris | Opsional; jika kosong, nama Arab dipakai otomatis. |
| Jenis Barang | Produk Stok atau Jasa. Jasa (upah, pengiriman, servis…) tidak pernah menyentuh stok. |
| Lacak persediaan | Tampil untuk produk saja. Saat dicentang (default), setiap pergerakan dokumen memperbarui saldo gudang barang. |
| Satuan | Wajib. Satuan dasar (terkecil) — pcs, kg, liter… Semua saldo stok disimpan dalam satuan ini. |
| Kategori | Klasifikasi opsional untuk filter dan laporan. |
| Merek | Produsen / merek dagang opsional, juga untuk filter dan laporan. |
| Barcode | Barcode satuan dasar. Memindainya pada dokumen memilih barang dalam satuan dasar. |
| Harga Jual | Harga jual default satuan dasar (hingga 4 desimal). Diusulkan otomatis pada baris penjualan; dapat diubah per dokumen sesuai izin Anda. |
| Harga Beli | Harga beli default satuan dasar. Diusulkan pada baris pembelian dan dipakai mengisi biaya satuan pada penambahan penyesuaian stok. |
| Tarif PPN | Persentase 0–100, default 15%. Diterapkan otomatis pada baris dokumen (pakai 0 untuk barang tarif nol atau bebas pajak). |
| Titik Pemesanan Ulang | Kuantitas minimum yang diinginkan. Saat saldo turun di bawahnya, barang ditandai di layar Saldo stok. |
| Melacak tanggal kedaluwarsa | Centang untuk barang mudah kedaluwarsa — dokumen penerimaan mencatat tanggal kedaluwarsa dan pengeluaran mengikuti FEFO (kedaluwarsa dulu, keluar dulu) di pemilih nomor seri. |
| Dilacak dengan nomor seri | Centang untuk barang yang diikuti per unit (ponsel, elektronik…). Penerimaan harus mencatat satu seri per unit dan penjualan memilih seri yang terjual — lihat Register nomor seri. |
| Aktif | Tampil saat mengubah. Hapus centang untuk memensiunkan barang: hilang dari pemilih dokumen tetapi riwayatnya tetap utuh. |
| Catatan | Panel samping menyimpan catatan teks bebas untuk kartu ini. |
Satuan alternatif — faktor, barcode dan harga
Di bagian Satuan alternatif tambahkan setiap satuan lebih besar yang dipakai membeli atau menjual barang. Tiap baris berisi: satuan, faktor konversi (berapa satuan dasar di dalamnya), barcode sendiri, harga jual sendiri dan harga beli sendiri. Tekan Enter untuk berpindah antar sel dan menambah baris dengan cepat.
Contoh nyata — minuman dijual per pcs dan per karton isi 12:
| Satuan | Faktor | Barcode | Harga jual | Harga beli |
|---|---|---|---|---|
| Pcs (dasar) | 1 | 6281000000017 | 2.50 | 1.80 |
| Karton | 12 | 6281000000024 | 27.00 | 19.20 |
Cara kerjanya: stok selalu disimpan dalam pcs. Menjual 1 karton mengurangi 12 pcs;
membeli 5 karton menambah 60 pcs. Memindai barcode 6281000000024 pada faktur
memunculkan barang dalam karton seharga 27.00, sedangkan 6281000000017
memunculkannya dalam pcs seharga 2.50. Perhatikan harga jual karton (27.00) tidak harus
sama dengan 12 × 2.50 = 30.00 — satuan grosir biasanya membawa diskon.
Stok per gudang
Saat mengubah barang stok, tabel hanya-baca menampilkan kuantitas, biaya rata-rata dan nilai saat ini di setiap gudang — cek saldo cepat tanpa meninggalkan kartu.
Aksi
Simpan kembali ke daftar, Simpan & Baru menyimpan lalu membuka kartu baru dengan kode berikutnya, Kembali keluar tanpa menyimpan. Menyimpan memerlukan nama Arab dan satuan dasar; jika tidak, kolom yang kurang ditampilkan dalam pesan.
Kesalahan umum
- Memilih satuan dasar yang salah. Saldo disimpan dalam satuan dasar; jika “karton” dijadikan dasar lalu perlu menjual pcs, Anda terpaksa memakai kuantitas pecahan. Selalu pilih satuan terkecil sebagai dasar.
- Menghapus baris satuan alternatif yang sudah dipakai dokumen. Dokumen lama tetap menyimpan datanya, tetapi barcode berhenti terbaca dan satuan hilang dari pemilih. Lebih baik menambah baris baru daripada menghapus.
- Barcode ganda antar barang. Pemindai akan mengambil barang mana pun yang cocok lebih dulu — jaga barcode unik per barang/satuan.
- Mengaktifkan pelacakan seri setelah barang punya pergerakan. Kuantitas lama tidak punya nomor seri, sehingga hitungan dan register seri tak akan cocok. Aktifkan sebelum penerimaan pertama.
FAQ
- Bagaimana mengubah biaya (cost) barang? Tidak diketik — biaya adalah rata-rata tertimbang yang dihitung dari penerimaan. Ia berubah saat memposting pembelian dengan harga baru, atau saat memposting penambahan penyesuaian stok dengan biaya satuan yang benar. Kolom “Harga Beli” hanyalah default untuk baris dokumen baru, bukan biayanya sendiri.
- Mengapa tidak bisa menghapus barang yang punya pergerakan? Transaksinya merujuk barang itu, dan sistem melindungi riwayat — penghapusan ditolak. Hapus centang Aktif saja; barang hilang dari pemilih tetapi laporan tetap berjalan.
- Bisakah satu barang punya dua barcode untuk satuan yang sama? Satu barcode per baris satuan. Jika produk datang dengan dua kode tercetak, tambahkan baris satuan kedua dengan faktor 1 yang membawa barcode lainnya.
- Dari mana harga khusus per pelanggan? Dari layar Daftar harga dan Kebijakan diskon di modul Penjualan — kartu barang hanya memuat harga default.
Saldo stok
Rute: Persediaan › Saldo Stok — /commercial/on-hand

Fungsi: tampilan langsung hanya-baca saldo setiap barang stok di setiap gudang. Buka sebelum stok opname, saat pelanggan bertanya “ada barangnya?”, atau untuk meninjau nilai total persediaan Anda.
| Kolom | Arti |
|---|---|
| Kode / Nama | Barang (satu baris per barang per gudang). |
| Gudang | Tempat saldo ini berada. |
| Kuantitas | Kuantitas tersedia saat ini dalam satuan dasar barang. |
| Biaya Rata-rata | Biaya rata-rata tertimbang saat ini per satuan dasar. |
| Nilai | Kuantitas × biaya rata-rata. Kolom ini dijumlahkan di bawah — valuasi persediaan Anda. |
| Di Bawah Titik Pemesanan | Ditandai saat kuantitas turun di bawah titik pemesanan ulang barang — daftar kerja restock Anda. |
Gunakan pencarian dan filter kolom untuk mempersempit per gudang, kategori atau barang, dan Ekspor untuk membawa daftar ke Excel — misalnya sebagai lembar hitung sebelum opname.
FAQ
- Saldonya salah — bisa diedit di sini? Tidak. Layar ini memang hanya-baca; setiap perubahan harus lewat dokumen. Posting penyesuaian stok dengan selisihnya.
- Mengapa biaya rata-rata 0? Saat saldo mencapai nol, biaya rata-rata direset ke 0; dibangun kembali oleh penerimaan berikutnya.
- Mengapa barang jasa tidak muncul? Jasa dan barang dengan “Lacak persediaan” tidak dicentang tidak punya saldo.
- Bagaimana menjalankan stok opname penuh? Ekspor layar ini sebagai lembar hitung, hitung fisik, lalu masukkan selisihnya sebagai penyesuaian stok — lihat langkah-langkahnya di bagian berikut.
Penyesuaian stok
Rute: Persediaan › Penyesuaian Stok — /commercial/stock-adjustments


Fungsi: menyamakan saldo buku dengan kenyataan — selisih hitung setelah opname, kerusakan, kehilangan, penghapusan kedaluwarsa, atau memasukkan saldo awal barang baru. Daftar menampilkan nomor dokumen, tanggal, gudang, jumlah baris dan status (Draf / Diposting) dengan aksi cetak dan hapus per baris.
Kolom header
| Kolom | Deskripsi |
|---|---|
| Tanggal | Tanggal penyesuaian (default hari ini). Menentukan periode fiskal jurnalnya. |
| Cabang | Cabang tempat jurnal diposting. Terisi otomatis dari cabang default Anda dan terkunci bila izin Anda hanya mencakup satu cabang. |
| Gudang | Wajib. Gudang yang saldonya disesuaikan. Terisi otomatis dari gudang default Anda. |
| Alasan | Teks bebas — “Opname tahunan 2026”, “Rusak di gudang”… dicetak pada dokumen. |
Baris
| Kolom | Deskripsi |
|---|---|
| Barang | Pemilih barang dengan pencarian (barang stok). |
| Kuantitas | Bertanda: kuantitas positif menambah stok, negatif menguranginya. Satu dokumen boleh mencampur baris lebih dan kurang. |
| Biaya Satuan | Terisi otomatis dengan harga beli barang saat dipilih. Hanya dipakai untuk penambahan — pengurangan selalu keluar dengan biaya rata-rata terkini, apa pun yang Anda ketik di sini. |
Tekan Enter untuk berpindah antar sel dan menambah baris. Baris tanpa barang atau dengan kuantitas 0 diabaikan saat menyimpan.
Aksi dan status
- Simpan menyimpan dokumen sebagai Draf — dapat diubah, dapat dihapus, tanpa efek pada stok.
- Posting menerapkan setiap baris ke saldo gudang dan mengunci dokumen (Diposting = hanya-baca, tidak dapat dihapus).
- Setelah posting, toolbar menyediakan Cetak, Unduh (PDF) dan Lihat jurnal.
- Baru mengosongkan editor dan memulai dokumen baru dengan nomor berikutnya.
Validasi: gudang dan minimal satu baris valid wajib diisi. Memposting pengurangan yang melebihi saldo tersedia diblokir: “Stok tidak cukup: tersedia X, diminta Y.”
Efek posting
- Stok: penambahan melebur biaya satuan yang dimasukkan ke rata-rata tertimbang; pengurangan keluar dengan biaya rata-rata terkini. Tiap baris menulis transaksi persediaan (AdjustmentIn / AdjustmentOut) ke riwayat pergerakan barang.
- Akuntansi: perubahan nilai bersih diposting otomatis sebagai jurnal antara akun Persediaan dan akun Penyesuaian Persediaan (keduanya diatur di pengaturan Komersial → akun). Bila akun belum diatur, stok tetap berubah tetapi jurnal tidak dibuat.
Contoh nyata — selisih kurang hasil opname
Opname tahunan menemukan 3 unit barang “Air 330ml” hilang. Kartu menunjukkan biaya rata-rata 25.00. Masukkan satu baris:
| Barang | Kuantitas | Biaya Satuan |
|---|---|---|
| Air 330ml | −3 | (diabaikan untuk pengurangan) |
Saat diposting, stok berkurang 3 dan nilai keluar 3 × 25.00 = 75.00. Jurnal otomatisnya:
| Akun | Debit | Kredit |
|---|---|---|
| Penyesuaian Persediaan (beban) | 75.00 | |
| Persediaan | 75.00 |
Selisih lebih bekerja sebaliknya: kuantitas positif dengan biayanya mendebit Persediaan dan mengkredit akun penyesuaian.
Stok opname penuh — prosedur yang disarankan
- Hentikan pergerakan gudang (penerimaan dan pengeluaran) selama penghitungan.
- Ekspor layar Saldo stok terfilter per gudang — inilah lembar hitung dengan kuantitas buku.
- Hitung fisik dan tulis kuantitas aktual di samping tiap barang.
- Buat satu penyesuaian per gudang: untuk setiap selisih tambahkan baris dengan kuantitas = aktual − buku (negatif untuk kurang, positif untuk lebih; untuk selisih lebih masukkan biaya satuan sebenarnya).
- Tinjau, lalu Posting. Saldo stok kini sama dengan hitungan fisik dan selisih bersihnya berada di akun penyesuaian untuk ditinjau manajemen.
Kesalahan umum
- Mengetik saldo target, bukan selisihnya. Kuantitas adalah perubahan, bukan saldo baru. Buku 10, hitung 7 → masukkan −3 (bukan 7).
- Mengira biaya satuan memengaruhi pengurangan. Tidak pernah — pengurangan dinilai otomatis dengan rata-rata terkini.
- Membiarkan dokumen sebagai Draf. Draf tidak mengubah apa pun; saldo baru bergerak saat Posting.
- Mencoba memperbaiki penyesuaian terposting dengan menghapusnya. Dokumen terposting tidak dapat dihapus — posting penyesuaian baru dengan kuantitas berlawanan.
FAQ
- Bagaimana memasukkan saldo awal barang baru? Posting penyesuaian dengan kuantitas positif dan biaya satuan sebenarnya — biaya itu menjadi rata-rata awal.
- Bisakah menyesuaikan beberapa gudang dalam satu dokumen? Tidak — satu gudang per penyesuaian. Buat satu dokumen per gudang.
- Mengapa jurnal tidak dibuat? Perubahan nilai bersihnya nol, atau kode akun Persediaan / Penyesuaian Persediaan belum diatur di pengaturan Komersial.
- Bisakah mengoreksi biaya rata-rata tanpa mengubah kuantitas? Posting sepasang penyesuaian kecil (keluar lalu masuk dengan biaya benar) — atau hubungi administrator; rata-rata dikelola sistem.
Transfer antar gudang
Rute: Persediaan › Transfer Persediaan — /commercial/inventory-transfers

Fungsi: memindahkan kuantitas antar gudang — mengisi ulang cabang dari gudang utama, memuat mobil sales, atau mengonsolidasi stok. Daftar menampilkan nomor transfer, tanggal, kedua gudang, jumlah baris dan status.
Kolom
| Kolom | Deskripsi |
|---|---|
| Tanggal | Tanggal transfer (default hari ini). |
| Dari Gudang | Wajib. Gudang asal. Terisi otomatis dari gudang default Anda. |
| Ke Gudang | Wajib. Gudang tujuan — harus berbeda dari asal (“Gudang asal dan tujuan harus berbeda”). |
| Catatan | Teks bebas yang dicetak pada nota transfer. |
| Baris | Barang + kuantitas (dalam satuan dasar, harus > 0). Navigasi Enter menambah baris. |
Aksi dan efek posting
- Simpan menyimpan Draf (tanpa efek stok); draf dapat diubah atau dihapus.
- Posting mengeluarkan tiap baris dari gudang asal dengan biaya rata-rata barang di sana — saldo minus diblokir — dan menerimanya di gudang tujuan dengan biaya satuan yang sama, sehingga nilai total persediaan tetap.
- Transfer terposting hanya-baca dan menyediakan Cetak / Unduh; tidak dapat dihapus.
Contoh nyata — transfer 50 unit
Transfer 50 unit “Air 330ml” dari Gudang Utama ke Gudang Cabang. Sebelum: Utama menyimpan 120 unit dengan rata-rata 10.00; Cabang menyimpan 20 unit dengan rata-rata 12.00.
| Gudang | Sebelum | Pergerakan | Sesudah |
|---|---|---|---|
| Gudang Utama | 120 @ 10.00 = 1,200 | −50 @ 10.00 = −500 | 70 @ 10.00 = 700 |
| Gudang Cabang | 20 @ 12.00 = 240 | +50 @ 10.00 = +500 | 70 @ 10.57 = 740 |
Rata-rata tujuan dihitung ulang: (240 + 500) ÷ 70 ≈ 10.57. Nilai total 1,440 sebelum dan sesudah — tidak ada yang bertambah atau hilang.
Kesalahan umum & FAQ
- “Stok tidak cukup” saat posting: gudang asal tidak menyimpan kuantitasnya — cek Saldo stok; mungkin barang diterima di gudang lain.
- Arah salah? Tidak ada “batal posting” — buat transfer kedua kembali dari tujuan ke asal.
- Ada status dalam perjalanan (in-transit)? Tidak — posting memindahkan stok seketika; sebelum posting tidak ada yang berpindah.
- Apakah transfer mengubah harga? Tidak. Hanya kuantitas dan biaya yang berpindah; harga jual tidak tersentuh.
Register nomor seri
Rute: Persediaan › Nomor Seri — /commercial/serials

Fungsi: registri siklus hidup hanya-baca untuk setiap nomor seri barang berpelacakan seri (ponsel, elektronik…): dari mana tiap unit berasal, di mana sekarang, dan dokumen mana yang mengeluarkannya — tulang punggung layanan garansi. Cari seri apa pun untuk menjawab “kapan kami menjual perangkat ini persisnya, dan dengan faktur yang mana?”
| Kolom | Arti |
|---|---|
| Nomor seri | Seri unik satu unit fisik. |
| Kode / nama barang | Kartu barang pemiliknya. |
| Status | Tersedia di stok, Terjual, atau Diretur ke pemasok. |
| Gudang | Lokasi unit (untuk seri yang di stok). |
| Tanggal kedaluwarsa | Untuk barang berpelacakan kedaluwarsa; usulan pengeluaran mengikuti FEFO (kedaluwarsa dulu, keluar dulu). |
| Diterima pada / tanggal | Dokumen pembelian/penerimaan yang memasukkan seri. |
| Dikeluarkan pada / tanggal | Dokumen penjualan/retur yang mengeluarkannya (kosong selama masih di stok). |
Aturan siklus hidup (ditegakkan otomatis)
- Penerimaan memerlukan tepat satu seri per unit yang diterima; seri yang sudah terdaftar tidak dapat diterima lagi (duplikat diblokir dengan status terkininya ditampilkan).
- Penjualan mensyaratkan seri berada di stok di gudang yang sama dengan dokumen; seri yang tak pernah diterima atau sudah terjual ditolak.
- Retur pelanggan hanya mengaktifkan kembali seri yang benar-benar terjual; retur ke pemasok mensyaratkan seri berada di stok.
- Pembelian tidak dapat dibatalkan postingnya bila salah satu serinya sudah terjual.
FAQ
- Seri yang sama tercetak di dua kotak fisik — bagaimana? Sistem hanya menerimanya sekali. Beri unit kedua seri yang dapat dibedakan (mis. akhiran) atau minta pemasok memperbaiki labelnya.
- Mengapa barang saya tidak meminta nomor seri? Tanda Dilacak dengan nomor seri pada kartu barang belum aktif. Aktifkan sebelum menerima stok baru.
- Bisakah mengedit seri di sini? Tidak — registri hanya-baca; nomor seri ditulis oleh dokumennya sendiri.
Gudang
Rute: Persediaan › Gudang — /commercial/warehouses

Fungsi: mendefinisikan lokasi penyimpanan (gudang utama, gudang cabang, mobil sales…). Setiap pergerakan stok milik tepat satu gudang, jadi buat gudang sebelum memasukkan dokumen stok apa pun.
| Kolom | Deskripsi |
|---|---|
| Kode | Otomatis, hanya-baca; duplikat ditolak. |
| Nama Arab / Inggris | Nama Arab wajib; tampil di semua pemilih gudang. |
| Aktif | Hanya saat mengubah — nonaktifkan lokasi yang ditutup, jangan dihapus. |
| Catatan | Panel samping untuk catatan teks bebas. |
FAQ
- Mengapa gudang tidak bisa dihapus? Ada pergerakan atau saldo stok yang merujuknya. Nonaktifkan saja — riwayat tetap terjaga.
- Bagaimana menutup gudang yang masih berisi stok? Transfer semuanya keluar dulu, pastikan Saldo stok menunjukkan nol, lalu nonaktifkan.
Satuan ukur
Rute: Persediaan › Satuan — /commercial/units

Fungsi: daftar bersama satuan (pcs, karton, kg, liter…) dengan kode otomatis dan nama dwibahasa. Kartu barang merujuk satuan ini sebagai satuan dasar dan satuan alternatif — faktor konversi disimpan di kartu barang, bukan di sini, sehingga “karton” bisa berarti 12 untuk satu barang dan 24 untuk barang lain.
| Kolom | Deskripsi |
|---|---|
| Kode | Otomatis, hanya-baca. |
| Nama Arab / Inggris | Arab wajib; tampil pada dokumen dan cetakan. |
| Aktif | Hanya saat mengubah — pensiunkan satuan yang tak terpakai. |
FAQ
- Mengapa satuan tidak bisa dihapus? “Satuan ini dipakai oleh barang dan tidak dapat dihapus.” Nonaktifkan, atau pindahkan dulu barang yang memakainya.
- Jika satuan diganti nama, apakah dokumen lama berubah? Nama hanyalah label — tampilan dan cetakan baru memakai nama baru; kuantitas tersimpan tidak terpengaruh.
Kategori & merek
Rute: Persediaan › Kategori / Merek — /commercial/categories, /commercial/brands


Fungsi: mengklasifikasi barang untuk filter dan laporan: kategori mengelompokkan menurut sifat (makanan, elektronik…), merek menurut produsen. Keduanya layar master sederhana dengan tata letak sama: kode otomatis + nama Arab (wajib) + nama Inggris + tanda aktif + panel catatan, dengan Simpan / Simpan & Baru / Kembali.
FAQ
- Mengapa kategori atau merek tidak bisa dihapus? “…dipakai oleh barang dan tidak dapat dihapus.” Pindahkan barangnya ke nilai lain dulu, atau nonaktifkan.
- Apakah kategori dan merek wajib pada barang? Tidak — keduanya opsional, tetapi mengisinya membuat filter daftar serta laporan penjualan/pembelian jauh lebih berguna.
Pertanyaan umum
Bagaimana menambah item?
Buka Persediaan › Item › Baru. Kode dibuat otomatis (atau manual sesuai pengaturan penomoran); isi nama, satuan, pajak, harga, lalu Simpan.
Bagaimana menyesuaikan stok?
Gunakan Penyesuaian Stok untuk mengoreksi kuantitas setelah opname, memilih gudang dan alasan; posting memperbarui persediaan dan valuasinya.
Bagaimana biaya item dihitung?
KEMTOVA ERP memelihara biaya rata-rata bergerak per item, diperbarui otomatis setiap Anda posting pembelian atau penyesuaian.
Bisakah mengelola banyak gudang?
Ya. Stok dilacak per gudang, dan transfer memindahkan kuantitas antar gudang tanpa memengaruhi total nilai tersedia.