Memahami Transaksi Barang
Saya mempunyai transaksi barang. Dengan alasan kemudahan maka barang keluar masuk saya tempatkan pada satu tabel saja yang saya namakan transaksi. Dengan satu tabel saya lebih mudah menjaga integritas data.
Semula saya akan membuat tiga tabel: transaksi_masuk, transaksi_keluar dan stock_opname. Namun setelah saya pikir, tarnsaksi_masuk dan keluar sepertinya lebih mudah dijadikan satu tabel saja. dan setelah saya pikir lebih matang lagi, transaksi_masuk, transaksi_keluar, dan stck_opname lebih baik dijadikan ke dalam satu tabel saja.
Ya, kalau mau berdebat pasti ada plus minusnya, namund alam kasus yang saya tangani, dimana transaksi tidak besar mungkin ini adalah desain terbaik.
Dengan bantuan OpenAI saya dapatkan hasil simulasi sbb:
Saya gunakan kode SQL untuk mysql dibawah 8 agar lebih kompatibel dengan semua versi MySQl. Untuk MySQL versi di bawah 8, Anda tidak dapat menggunakan window functions seperti SUM() OVER()
, yang merupakan fitur yang diperkenalkan pada MySQL 8. Namun, Anda dapat mencapai hasil yang sama dengan menggunakan subquery atau join untuk menghitung stok awal dan stok akhir. Berikut adalah pendekatan alternatif menggunakan subquery:
Tentu, berikut adalah panduan untuk membuat tabel transaksi yang meliputi kategori barang masuk, barang keluar, stok opname tambah, dan stok opname kurang, beserta contoh data dan query SQL laporan untuk versi MySQL di bawah 8.
1. Buat Tabel Transaksi
Gunakan perintah berikut untuk membuat tabel transaksi:
CREATE TABLE transaksi (
ID INT AUTO_INCREMENT PRIMARY KEY,
Tanggal DATE,
Kode_Produk VARCHAR(50),
Nama_Produk VARCHAR(100),
Kategori INT, -- 1 untuk barang masuk, 2 untuk barang keluar, 3 untuk opname tambah, 4 untuk opname kurang
Jumlah INT
);
2. Isi Tabel Transaksi dengan Data Dummy
Masukkan data dummy ke dalam tabel transaksi menggunakan perintah INSERT INTO
.
-- Barang masuk
INSERT INTO transaksi (Tanggal, Kode_Produk, Nama_Produk, Kategori, Jumlah)
VALUES
('2024-07-01', 'PROD001', 'Produk A', 1, 100),
('2024-07-02', 'PROD002', 'Produk B', 1, 150),
('2024-07-03', 'PROD001', 'Produk A', 1, 120);
-- Barang keluar
INSERT INTO transaksi (Tanggal, Kode_Produk, Nama_Produk, Kategori, Jumlah)
VALUES
('2024-07-01', 'PROD001', 'Produk A', 2, 50),
('2024-07-02', 'PROD002', 'Produk B', 2, 70),
('2024-07-03', 'PROD001', 'Produk A', 2, 30);
-- Opname tambah
INSERT INTO transaksi (Tanggal, Kode_Produk, Nama_Produk, Kategori, Jumlah)
VALUES
('2024-07-01', 'PROD001', 'Produk A', 3, 10),
('2024-07-02', 'PROD002', 'Produk B', 3, 20),
('2024-07-03', 'PROD001', 'Produk A', 3, 15);
-- Opname kurang
INSERT INTO transaksi (Tanggal, Kode_Produk, Nama_Produk, Kategori, Jumlah)
VALUES
('2024-07-01', 'PROD001', 'Produk A', 4, 5),
('2024-07-02', 'PROD002', 'Produk B', 4, 8),
('2024-07-03', 'PROD001', 'Produk A', 4, 3);
3. Buat Laporan Stok Barang
Gunakan query SQL berikut untuk membuat laporan stok barang:
SELECT
Tanggal,
Nama_Produk,
SUM(CASE WHEN Kategori = 1 THEN Jumlah ELSE 0 END) AS barang_masuk,
SUM(CASE WHEN Kategori = 2 THEN Jumlah ELSE 0 END) AS barang_keluar,
SUM(CASE WHEN Kategori = 3 THEN Jumlah ELSE 0 END) AS opname_tambah,
SUM(CASE WHEN Kategori = 4 THEN Jumlah ELSE 0 END) AS opname_kurang,
SUM(CASE WHEN Kategori = 1 THEN Jumlah ELSE 0 END)
- SUM(CASE WHEN Kategori = 2 THEN Jumlah ELSE 0 END)
+ SUM(CASE WHEN Kategori = 3 THEN Jumlah ELSE 0 END)
- SUM(CASE WHEN Kategori = 4 THEN Jumlah ELSE 0 END) AS stok_akhir
FROM
transaksi
GROUP BY
Tanggal, Nama_Produk
ORDER BY
Tanggal, Nama_Produk;
Penjelasan Query Laporan Stok Barang
SUM(CASE WHEN Kategori = 1 THEN Jumlah ELSE 0 END) AS barang_masuk
: Menghitung total barang masuk.SUM(CASE WHEN Kategori = 2 THEN Jumlah ELSE 0 END) AS barang_keluar
: Menghitung total barang keluar.SUM(CASE WHEN Kategori = 3 THEN Jumlah ELSE 0 END) AS opname_tambah
: Menghitung total opname tambah.SUM(CASE WHEN Kategori = 4 THEN Jumlah ELSE 0 END) AS opname_kurang
: Menghitung total opname kurang.SUM(CASE WHEN Kategori = 1 THEN Jumlah ELSE 0 END) - SUM(CASE WHEN Kategori = 2 THEN Jumlah ELSE 0 END) + SUM(CASE WHEN Kategori = 3 THEN Jumlah ELSE 0 END) - SUM(CASE WHEN Kategori = 4 THEN Jumlah ELSE 0 END) AS stok_akhir
: Menghitung stok akhir berdasarkan barang masuk, barang keluar, opname tambah, dan opname kurang.
Laporan Harian Stok Barang
Dengan query ini, Anda bisa mendapatkan laporan stok barang yang mencakup barang masuk, barang keluar, opname tambah, opname kurang, dan stok akhir untuk setiap produk pada setiap tanggal.
Untuk mendapatkan laporan harian yang mencakup jumlah barang masuk, jumlah barang keluar, dan sisa barang, Anda bisa menggunakan query SQL berikut. Query ini akan mengelompokkan data berdasarkan tanggal dan menghitung total barang masuk, barang keluar, serta menghitung sisa barang untuk setiap tanggal.
SELECT
Tanggal,
SUM(CASE WHEN Kategori = 1 THEN Jumlah ELSE 0 END) AS barang_masuk,
SUM(CASE WHEN Kategori = 2 THEN Jumlah ELSE 0 END) AS barang_keluar,
SUM(CASE WHEN Kategori = 1 THEN Jumlah ELSE 0 END)
- SUM(CASE WHEN Kategori = 2 THEN Jumlah ELSE 0 END)
+ SUM(CASE WHEN Kategori = 3 THEN Jumlah ELSE 0 END)
- SUM(CASE WHEN Kategori = 4 THEN Jumlah ELSE 0 END) AS sisa_barang
FROM
transaksi
GROUP BY
Tanggal
ORDER BY
Tanggal;
Penjelasan Query Laporan Harian
SUM(CASE WHEN Kategori = 1 THEN Jumlah ELSE 0 END) AS barang_masuk
: Menghitung total barang masuk pada setiap tanggal.SUM(CASE WHEN Kategori = 2 THEN Jumlah ELSE 0 END) AS barang_keluar
: Menghitung total barang keluar pada setiap tanggal.SUM(CASE WHEN Kategori = 1 THEN Jumlah ELSE 0 END) - SUM(CASE WHEN Kategori = 2 THEN Jumlah ELSE 0 END) + SUM(CASE WHEN Kategori = 3 THEN Jumlah ELSE 0 END) - SUM(CASE WHEN Kategori = 4 THEN Jumlah ELSE 0 END) AS sisa_barang
: Menghitung sisa barang berdasarkan total barang masuk, barang keluar, opname tambah, dan opname kurang.
Dengan query ini, Anda bisa mendapatkan laporan harian yang menunjukkan jumlah barang masuk, barang keluar, dan sisa barang untuk setiap tanggal.