Membuat Nomor Transaksi Otomatis Di MySQL

, ,

Terkadang, atau malah sering, kita dihadapkan terhadap sebuah kasus dimana kita harus membuat sebuah nomor otomatis yang nilainya harus selalu urut dan tidak boleh sama diantara record yang satu dengan yang lainnya. Salah satu contoh adalah Nomor Transaksi Penjualan. Penjualan yang dilakukan oleh Kasir, akan menerbitkan Nomor Transaksi Penjualan yang harus unique untuk setiap transaksi.

Disini saya akan melakukannya di sisi Database Server, dimana saya menggunakan MySQL. Oke, tanpa basa-basi langsung saja saya jelaskan step by stepnya sekalian praktek. Disini saya menggunakan SQLYog untuk mempermudah dalam pembuatan tabel, function dan trigger. Anda bebas menggunakan frontend apa saja, karena pada dasarnya sama saja hanya mungkin berbeda tampilan.

Pertama, buat dulu sebuah tabel yang akan menampung semua jenis nomor transaksi.

[code language=”sql”]

CREATE TABLE nomorotomatis (
ID varchar(10) NOT NULL,
Nomor int(4) DEFAULT NULL,
Prefix varchar(2) DEFAULT NULL,
PRIMARY KEY (ID)
)

[/code]

Kedua, insert ke dalam tabel tersebut sbb:

[code language=”sql”]

INSERT INTO nomorotomatis VALUES(‘PENJUALAN’,1,’FJ’);

INSERT INTO nomorotomatis VALUES(‘PEMBELIAN’,1,’FB’);

[/code]

Saya sengaja meninsert 2 buah record dimana id PENJUALAN nanti digunakan untuk nomor transaksi penjualan, dan id PEMBELIAN akan digunakan untuk nomor transaksi PEMBELIAN. Nomor awal saya  beri nilai 1, atau tergantung kebutuhan misalnya nilai awal dikasih angka 1000, karena program baru jalan di pertengahan bulan dan meneruskan nomor transaksi dari proses sebelumnya, dst.

Ketiga, buatlah sebuah tabel yang akan kita gunakan untuk menampung transaksi penjualan & pembelian.

[code language=”sql”]

CREATE TABLE penjualan (
NoTranPenjualan varchar(13) NOT NULL DEFAULT ‘AUTO’,
CustomerName varchar(35) DEFAULT NULL,
PRIMARY KEY (NoTranPenjualan)
);

CREATE TABLE pembelian (
NoTranPembelian varchar(13) NOT NULL DEFAULT ‘AUTO’,
SupplierName varchar(35) DEFAULT NULL,
PRIMARY KEY (NoTranPembelian)
);

[/code]

Untuk kedua tabel di atas, sengaja saya cuman menampilkan dua field saya, selebihnya tinggal disesuaikan dengan program yang akan dibuat. Dan juga biar lebih simple karena disini yang saya tekankan adalah bagaimana membuat nomor otomatis-nya sehingga nantinya bisa diterapkan dalam kasus apa saja.

Nilai DEFAULT ‘AUTO’, ditujukan agar dalam menginsert data ke tabel penjualan dan pembelian tidak perlu menginsertakan nomor transaksi karena field ini nanti akan diisi secara otomatis dari trigger, dan karena primary key tidak boleh dikasih NULL, maka kita set default value nya dengan isian ‘AUTO’;

Keempat, buatlah sebuah fungsi yang akan mengambil  nomor terakhir dari tabel nomorotomatis berdasarkan id

[code language=”sql”]

DELIMITER $$

CREATE DEFINER=root@localhost FUNCTION ambilnomortransaksi(vid VARCHAR(10)) RETURNS VARCHAR(13) CHARSET latin1

DETERMINISTIC
BEGIN
DECLARE _noUrut INT;
DECLARE _prefix VARCHAR(2);
SELECT Nomor,Prefix INTO _noUrut,_prefix FROM nomorotomatis WHERE ID = vid;
UPDATE nomorotomatis SET Nomor = Nomor + 1 WHERE ID = vid;
RETURN CONCAT(_prefix,LPAD(_noUrut,11,’0′));
END$$

DELIMITER ;

[/code]

Kemudian lakukan pengujian dengan menggunakan SELECT sbb:

[code language=”sql”]

SELECT ambilnomortransaksi(‘PENJUALAN’);

[/code]

Jika hasilnya adalah FJ00000000001, maka fungsi sudah berjalan dengan benar, dan kita akan mendapati di tabel nomorotomatis nomor urut dari id PENJUALAN sudah menjadi angka 2, dan angka 2 inilah yang akan dipakai untuk transaksi berikutnya.

Kelima, buatlah Trigger di tabel Penjualan agar setiap record yang masuk nantinya akan diberikan nomor transaksi sesuai dengan urutan yang ada di tabel nomorotomatis.

[code language=”sql”]

DELIMITER $$

CREATE
TRIGGER test.penjualan_before_insert BEFORE INSERT
ON test.penjualan
FOR EACH ROW BEGIN

DECLARE _nomorTransaksi VARCHAR(13);
SELECT ambilnomortransaksi(‘PENJUALAN’) INTO _nomorTransaksi;
SET NEW.NoTranPenjualan := _nomorTransaksi;

END$$

DELIMITER ;

[/code]

Setelah itu coba lakukan insert ke tabel penjualan sbb:

[code language=”sql”]

INSERT INTO penjualan(CustomerName) VALUES(‘Bp. Agus’);

[/code]

Insert hanya pada field CustomerName saja, karena NoTranPenjualan akan digenerate secara otomatis.

Dan hasilnya, coba select tabel penjualan, maka akan didapati record sbb:

[code]

NoTranPenjualan CustomerName
FJ00000000002 Bp. Agus

[/code]

Dan sekarang pastinya Anda sudah bisa membuat hal yang sama pada tabel Pembelian. Selamat belajar dan jangan lupa berdoa biar ilmunya barokah. 😀

 

1 reply
  1. irwan says:

    selamat siang..
    Mengenai nomor urut otomatis, bagaimana kalau script untuk insert ke satu tabel dengan untuk nomor urutnya.

    Terima Kasih.
    Irwan Darmawan

    Reply

Leave a Reply

Want to join the discussion?
Feel free to contribute!

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.