twitter

Membuat No Nota Otomatis dengan PHP dan MySQL

Ilustrasi

No nota yang dimaksud bukan sekadar no berurutan dari 1 sampai dengan n atau model 0001 samap dengan 000n, tapi nota dengan format yang sudah ditentukan.

Dalam kasus kali ini, kita membuat no nota dengan format model ‘D-0109010-0001’ dan sejenisnya. Dimana nilai D merupakan jenis dari transaksi bersangkutan. Jenis ini sifatnya bebas, bisa berupa inisial penjual, inisial pembeli atau bisa jadi jenis transaksi yang sedang berlangsung. Panjang karakter juga bisa disesuaikan. 010910 merupakan format tanggal terjadinya transaksi. Sedangkan 0001 merupakan nomor otomatis setiap transaksi dilakukan. Apabila dalam sehari transaksi lebih dari 9999 transaksi, kita bisa menambahkan digit nomor otomatis menjadi lima karakter, misal ‘D-310810-00001’.


Aturannya begini, setiap ganti tanggal maka nomor nota akan diset ulang dan kembali menjadi 0001 atau 00001. Contohnya seperti berikut :
  1. D-010910-0001 
  2. S-010910-0002
  3. P-010910-0003
  4. DYP-020910-0001H-020910-0002
  5. Dan seterusnya
Hal pertama yang kita lakukan adalah membuat tabel nota tersebut.  DDL berikut hanya memberikan beberap field yang penting saja, untuk field lainnya bisa ditambahkan sendiri sesuai dengan kebutuhan transaksi.
CREATE TABLE `nota` (
`id_nota` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`no_nota` VARCHAR( 15 ) NOT NULL ,
`date_added` DATE NOT NULL ,
UNIQUE (
`no_nota`
)
) ENGINE = InnoDB;
Logikanya begini :
  1. Kita melakukan pengecekan ke tabel nota, apakah tanggal terjadinya transaksi sudah ada nota yang tersimpan.
  2. Jika ada nota yang tersimpan, cari data terakhir untuk mengambil nilainya. Kemudian ditambahkan 1 untuk membuat urutan no nota  otomatis.
  3. Apabila data pada tanggal transaksi tidak ada, maka otomatis no nota dimulai dengan 1 atau 0001.
  4. Gabungkan format jenis transaksi, tanggal dan no otomatis. Kemudian simpan ke tabel (jika perlu).

Kelihatan mudah kan? Skrip lengkap bisa dilihat disini.

Dari skrip diatas, format yang dihasilkan masih bisa disesuaikan dengan kebutuhan kita. Set ulang no otomatis juga bisa dilakukan perhari, perminggu, atau perbulan. Cukup dengan modifikasi skrip pada method generate untuk mengembalikan nilai yang sesuai dengan kita inginkan.

Sedikit penjelasan fungsi substr(string string, int int, [int length]). Pada skrip diatas, string yang diambil adalah nilai nota terakhir dengan format ‘D-010910-0001’ dengan panjang 4 karakter (isi dengan -5 apabila menggunakan 5 digit). Apabila menggunakan nilai negatif, otomatis pemotongan karakter dimulai dari belakang. Dalam hal ini nilanya menjadi 0001 setelah dipotong dengan funsgi tersebut. Oleh karena menggunakan (int) didepan fungsi tersebut, maka nilai string 0001 dikonversi menjadi integer sehingga nilainya menjadi 1. Nilai tersebut ditambah 1 untuk menghasilkan no nota dengan urutan baru. Baca selengkapnya fungsi substr() disini.

Formating, selanjutnya diserahkan pada fungsi str_pad(string input, int pad_length, [string pad_string], [int pad_type). Nilai increment yang awalnya integer 2, akan kita ubah kedalam bentuk string yang berbentuk 0002. Apabila digit yang digunakan berjumlah 5 akrakter, nilai pad_length diisi 5. Baca selengkapnya funsgi str_pad() disini. Langkah terakhir cukup menggabungkan variabel type, today dan increment sehingga menjadi no nota sesuai dengan format yang kita inginkan diawal.

Contoh kasus yang sederhana, tapi kadang bikin mumet. Yang jelas, dengan perlakuan seperti ini, aplikasi melakaukan kerja ganda, pertama melakukan pengecekan ke tabel, kemudian melakukan formating untuk nota yang baru dan meyimpan ke tabel yang sama.

Sebenarnya masih ada satu cara membuat no nota otomatis hanya dengan bantuan MySQL saja. Hanya saja, format yang diinginkan tidak seperti kasus diatas. Khusus ulasan tersebut, saya bahas dijudul yang berbeda.
Lihat skrip lengkap disini. Bagi yang punya cara lebih efektif bisa dibagi disini

1 komentar:

Anonim mengatakan...

fungsi udah ane coba gan, yang keluar cuma :

D-201110-0001
S-201110-0001
p-201110-0001

insertnya ke db gan ?
trus biar keluar dengan model
D-201110-0002, D-201110-0003, D-201110-0004, dst tiap di eksekusi gimana ?

btw thx inponya

Posting Komentar