Tidak akan pernah bisa dihindari di sebuah Aplikasi Web yang mengharuskan sistem membuat ID atau Kode secara otomatis saat Pengguna menambah data yang baru. Tidak terkecuali juga dengan Aplikasi Web yang dihasilkan oleh PHPMaker. Hanya saja, Aplikasi Web yang dihasilkan oleh PHPMaker akan jauh lebih mudah mengimplementasikannya dibandingkan (mungkin) dengan Aplikasi Web yang dibuat dengan cara lain. Tidak percaya? Simak saja artikel ini selengkapnya.
Supaya lebih mudah, mari kita menggunakan contoh pada sebuah tabel yang paling sederhana. Tabel ini bernama t_jenis hanya memiliki dua buah Field, masing-masing bernama Kode dengan tipe CHAR(6) dan Deskripsi dengan tipe VARCHAR(20). Format data Kode yang diinginkan misalnya seperti ini: JNS001, JNS002, JNS003, dan seterusnya. Artinya, Kode tersebut tidak diinput oleh Pengguna, tapi akan otomatis dibuat oleh sistem. Jadi, Pengguna hanya perlu memasukkan data pada field Deskripsi saja.
Ada tiga langkah utama yang perlu dilakukan (tentu saja diasumsikan project PHPMaker Anda sudah sinkron dengan struktur tabel tadi).
Pertama, kita harus menyiapkan sebuah fungsi global untuk men-generate data Kode dengan format seperti di atas. Katakanlah nama fungsi tadi GetNextKodeJenis, kemudian kita menempatkannya ke dalam Global Code yang terdapat di bawah Server Events -> Global -> All Pages.
Kedua, kita harus memastikan bahwa saat Pengguna sedang menyimpan data yang baru, maka sistem akan mengambil data Kode yang terakhir dan telah ditambahkan dengan nilai satu. Kode tersebut akan kita tempatkan ke dalam server event Row_Inserting:
Perhatikan bahwa kita cukup hanya menugaskan nilai yang dihasilkan oleh fungsi GetNextKodeJenis ke dalam Field Kode di recordset yang baru; $rsnew[“Kode”]. Hal ini penting, untuk mengantisipasi jika ada lebih dari satu Pengguna yang hampir secara bersamaan menambah data pada tabel ini.
Ketiga, kita harus mengantisipasi kondisi di form saat Pengguna sedang menambah data. Karena field Kode tidak diinput secara manual oleh Pengguna, tapi akan diisi otomatis oleh sistem. Jadi, field Kode harus dinonaktifkan (sekalipun masih tetap bisa kelihatan), sambil tetap menampilkan kode berikutnya yang berasal dari fungsi buatan di atas tadi. Untuk itu, kita cukup menggunakan server event Row_Rendered.
Perhatikanlah dari kode di server event Row_Rendered tersebut, kita harus menangani dua kemungkinan. Kemungkinan pertama, saat Pengguna sedang menambah data atau mode form dalam keadaan terbuka. Lalu kemungkinan yang kedua, saat Pengguna sedang dalam mode konfirmasi, maka kita menampilkan data Kode dari nilai Kode yang diperoleh dari mode form yang terbuka sebelumnya.
Perlu diketahui, bahwa meskipun kita menampilkan kode berikutnya di saat Pengguna sedang menambahkan data, tapi itu bukan berarti kode tersebut yang akan digunakan. Itu hanya referensi saja buat Pengguna pada saat dia membuka form Add. Jika pada saat yang hampir bersamaan ada Pengguna lain yang menambahkan data di tabel ini, maka ada kemungkinan si Pengguna tadi yang duluan mendapatkan dan menyimpan kode tersebut.
Itulah kenapa sebabnya di server event Row_Inserting kita pun harus mengantisipasi hal tersebut dengan mengambil ulang nilai kode yang terakhir dari Database, lalu mengisikannya kembali ke field Kode sebelum data benar-benar disimpan ke Database. Paham maksudnya, ‘kan? 😉
Yang hebatnya lagi adalah, trik ini bisa digunakan pada mode Grid-Add. Kita hanya cukup menyembunyikan kolom atau field Kode, dengan menambahkan sedikit kode saja di server event Page_Load yang terdapat di bawah lokasi Server Events -> Table-Specific -> List Page.
Ingin lihat demonya? Klik di sini untuk mencoba demonya secara langsung.
Ingin tahu kode selengkapnya? Silahkan Beli Project PHPMaker ini. Selagi ada diskon besar-besaran (SALE) untuk contoh-contoh project yang baru saya rilis tanggal 1 April 2023 kemarin. Jangan lewatkan kesempatan ini!
ARIF mengatakan
Pak masino,
mau tanya, jika kode “JNS” nya di ganti dengan value yg sudah dipilih pada field lain gmn ya ?
misal ada pilihan barang dan jasa dengan kode JNS/JSA,
Mohon pencerahannya
Terimakasih,,
Masino Sinaga mengatakan
Pencerahannya ya tinggal ambil saja nilainya. Gampang kan?
SIMKO mengatakan
function GetNextKodeTabung() {
$sNextKode = “”;
$sLastKode = “”;
// $sKodeCabang = CurrentUserInfo(“kode_cabang”);
if (CurrentUserInfo(“kode_cabang”) != “”){
$sKodeCabang = CurrentUserInfo(“kode_cabang”);}
else {
$sKodeCabang = “01”;
}
// $sJenis = “TAB”;
$sJenis =”$_GET[JENIS_TABUNGAN]”;
$value = ew_ExecuteScalar(“SELECT no_rekening FROM tabung ORDER BY no_rekening DESC limit 1”);
if ($value != “”) { // jika sudah ada, langsung ambil dan proses…
$sLastKode = intval(substr($value, 8, 5)); // ambil 3 digit terakhir
$sLastKode = 100000+(intval($sLastKode) + 1); // konversi ke integer, lalu tambahkan satu
$sNextKode = $sJenis . “.” . $sKodeCabang . “.” . substr($sLastKode,1,5); // format hasilnya dan tambahkan prefix
if (strlen($sNextKode) > 13) {
$sNextKode = $sJenis . “.” . $sKodeCabang . “.99999”;
}
} else { // jika belum ada, gunakan kode yang pertama
$sNextKode = $sJenis . “.” . $sKodeCabang . “.00001″;
}
return $sNextKode;
muncul eror seperti ini
Notice: Undefined index: JENIS_TABUNGAN in D:\xampp\htdocs\simko\userfn14.php on line 58
line 58 mengarah ke= $sJenis =”$_GET[JENIS_TABUNGAN]”;
mohon pencerahannya pak hehe
Masino Sinaga mengatakan
Kode yang sebenarnya:
dina melanisa mengatakan
saya coba2 membuat contoh memakai kode otomatis, tetapi ada warning seperti ini:
Warning: Creating default object from empty value in C:\xampp\htdocs\cobasekolah\phpmaker\dm_muridinfo.php on line 1890
dan warning dibaris 1890 itu adalah:
$this->Kode->CurrentValue = GetNextKodeJenis(); // trik
saya copypaste contoh diatas dari pak masino tetapi ada warnng tsb, kenapa ya pak? terimakasih..
Masino Sinaga mengatakan
Pastikan Anda sudah mendefinisikan function GetNextKodeJenis() tersebut seperti yang saya uraikan pada langkah Pertama di atas.
Taufiq mengatakan
Pak mohon bantuannya
saya sudah coba sesuai arahan dari bapak, tetapi ketika tambah data Field Kode selalu terisi JNS001.
Terima kasih sebelumnya pak
Masino Sinaga mengatakan
Mungkin Anda kurang teliti saja, coba cek ulang lagi, karena yang lain semuanya berhasil.
ari mengatakan
pak masino diphp maker bisa menggunakan fungsi terbilang tidak.
contoh di field ‘angka’ diisi nilai ‘900’ kemudian di field ‘huruf’ otomatis terisi ‘Sembilan Ratus’.
terimakasih sebelumnya..
Masino Sinaga mengatakan
Bisa.
ari mengatakan
ada contoh kasusnya tidak pak?
Tito mengatakan
Pak Masino, asik memang belajar PHPMaker….
Tapi yang kasus ini saya koq gagal melulu ya, hehhe, saya buat begini:
– setiap ganti bulan, nomor reset ke angka 1
– format bulan menjadi romawi
script saya:
function GetNextKodeJenis() {
$nota = “”;
$bllast = “”;
$blcurr = “”;
$romawi = “”;
$blrom = “”;
//mengambil nilai NO dari tabel teseq1
$no = ew_ExecuteScalar(“SELECT no FROM teseq1 ORDER BY tg_nota DESC limit 1”);
//mengambil nilai TG_NOTA dari tabel teseq1
$tg = ew_ExecuteScalar(“SELECT tg_nota FROM teseq1 ORDER BY tg_nota DESC limit 1”);
// cek bulan record terakhir
$bllast=substr($tg,6,2);
// cek bulan sekarang
$blcurr=date(“m”);
if ($bllast$blcurr) {
$no = 1;
} else {
$no = $no + 1;
}
$romawi=array(“I”,”II”,”III”,”IV”,”V”,”VI”,”VII”,”VIII”,”IX”,”X”,”XI”,”XII”);
$blrom=$romawi[(int)$blcurr-1];
$nota = sprintf(“%02s”, $no).”/”.$blrom;
return $nota;
}
Masalahnya, begitu saya saya tekan tombol untuk tambah data, iconnya cuma muter aja, nggak ada reaksi apa-apa…
Mohon pencerahannya pak Masino, terima kasih
Masino Sinaga mengatakan
Kalau Anda pakai versi 2019, ganti ew_ExecuteScalar dengan ExecuteScalar, lalu coba lagi.
Tito mengatakan
Wuih mantap, pak saya mau beli masino extensionnya, gimana caranya ? kalau berkenan, minta nomor hapenya ya, terima kasih
Masino Sinaga mengatakan
Kalau mau beli Masino Extensions, silahkan langsung ke sini: http://www.ilovephpmaker.com/membership-options-page/.
Nomor HP saya sudah saya kirim ke Email Anda. Silahkan cek.
syarif mengatakan
pak Masino, kalau saya punya kode “JNS,ABC,EFG”. begitu kita input jadi “JNS001”. nah gimana caranya setiap kode itu perhitungannya beda. jadi seperti ini outputnya “JNS001, JNS002, ABC001, ABC002, ABC003, EFG001, EFG002. Gimana pak script nya
Nanda Putra mengatakan
Saya juga sangat membutuhkan ini, dimana kode JNS,ABC,EFG sudah saya buat ditable baru dan recordnya JNS,ABC,EFG, mohon bantuanya pak
dika mengatakan
itu kodenya disimpan dimana kak, dimodel atau di controller atau di view nya??
mohon bantuannya karna saya baru belajar laravel
Masino Sinaga mengatakan
PHPMaker tidak menggunakan framework seperti Laravel, meskipun PHPMaker sama-sama menggunakan OOP di dalam code PHP yang dihasilkannya.
narto mengatakan
terima kasih panduannya pak masino, jika ingin custom kode ,seperti contoh jns001,jns002..dst..mungkin pak masino bisa membantu saya , saya ngin kode tersebut auto increment berdasarkan user selection dari tabel lain jnt001,jnr002,bml01..dst,..dan utk koresponden kedepan, apa boleh saya minta alamat email pak masino…?
Masino Sinaga mengatakan
Kalau untuk table lain prinsipnya sama saja. Anda tinggal perlu memanggil data di tabel lain tadi, lalu memprosesnya sama seperti yang sudah dijelaskan di atas.
buz mengatakan
Selamat Sore pak Masino, saya sedang mencoba untuk membuat kode otomatis yang random pilihan user, tapi masih belum berhasil pak masino, saya lampirkan
hasilnya tanpa error, namun belum sesuai harapan, mungkin pak masino bisa membantu.
Masino Sinaga mengatakan
Belum berhasilnya seperti apa? Ada pesan error yang muncul?
buz mengatakan
tidak ada error yang muncul Pak Masino, hanya isi tabel masih belum terisi sesuai dengan harapan, maksudnya saat user memilih jenis kode,harusnya munculnya seperti contoh field dalam database ts00183307,ts183308. jp183307,jp183308 dst,..namun saat ini yang muncul baru no urut saja, contoh 00183307,00183308, dst nya….berikut kodenya, mungkin ada saran dari pak Masino, terima kasih pak…
function GetNexttest9() {
$sNextKode9 = “”;
$sLastKode9 = “”;
$idreg = @$_GET[“asal”];
$value9 = ExecuteScalar(“SELECT no_mig FROM test ORDER BY no_mig DESC LIMIT 1”);
if ($value9 != “”) { // jika sudah ada, langsung ambil dan proses…
$sLastKode9 = intval(substr($value9, 2, 10)); // ambil 8 digit terakhir
$sLastKode9 = intval($sLastKode9) + 1; // konversi ke integer, lalu tambahkan satu
$sNextKode9 = $idreg . sprintf(‘%08s’, $sLastKode9); // format hasilnya dan tambahkan prefix
if (strlen($sNextKode9) > 10) {
$sNextKode9 = $idreg. “99999999”;
}
} else { // jika belum ada, gunakan kode yang pertama
$sNextKode9 = $idreg . “00183307”;
}
return $sNextKode9;
}
Masino Sinaga mengatakan
Berarti masih ada masalah di baris kode yang ini:
$idreg = @$_GET[“asal”];
Coba cek dan tampilkan nilai variabel $idreg, pastikan nilainya ada dan sesuai yang diharapkan.
buz mengatakan
jadi untuk load variable dan insert serta concatenate number yang belum bisa berjalan, yang baru muncul baru
1 MGB-00183307 00183307 ts
2 MGB-00183308 00183308 jp
3 MGB-00183307 00183309 ts
4 MGB- 00183308 00183309 jp
yang diinginkan
1 MGB-00183307 ts00183307 ts
2 MGB-00183308 jp00183308 jp
3 MGB-00183309 ts00183308 ts
4 MGB- 00183310 jp00183309 jp
narto mengatakan
Terima Kasih pak Masino, sudah dicoba untuk versi yang penambahan berdasarkan pilihan user, seperti ini, dan berhasil jalan :
hari mengatakan
apakah ini berdasarkan pilihan dari login user ,misal user login sebagai sales a dengan kode sales rb,maka hasilnya no urut tadi ditambahkan degan kode user sales yang sudah login tadi
Masino Sinaga mengatakan
Tergantung server event itu milik table yang mana.
hari mengatakan
($x_asal) ini field dari database apa variabel
Masino Sinaga mengatakan
Dalam contoh di atas, $x_asal adalah parameter milik function GetNexttest9.
hari mengatakan
pak saya taruh kodenya di , dalam Global Code yang terdapat di bawah Server Events -> Global -> All Pages: kok gak bisa di paste ya pak ,kayak disable gitu
Masino Sinaga mengatakan
Pakai versi berapa PHPMaker-nya?
narto mengatakan
maaf oot pa Masino, apakah ada link penjualan extension pak masino harga paket bundling dengan phpmaker 2020, dengan kurs rupiah…mohon infonya yah..
Masino Sinaga mengatakan
Sayangnya belum ada paket bundling. Harus dibeli terpisah.
hari mengatakan
pak jika kode di atas sudah mencapai 999 record apa masih bisa add lagi
Masino Sinaga mengatakan
Tidak bisa, maksimal hanya 999. Supaya lebih dari situ, panjang field-nya harus diperbesar, dan kodenya disesuaikan supaya bisa 4 digit angka.
hari mengatakan
ok trims sudah berhasil pak
herianto mengatakan
mantab pak, phpmaker mmg menyenangkan.
agusecc mengatakan
saya gunakan di phpmaker 2019 gagal dan terdapat pesan:
Warning: Creating default object from empty value in C:\xampp\htdocs\tes\classes\t_jenis.php on line 1067
catatan: Ew_ExecuteScalar sudah saya ganti dengan ExecuteScalar.
mohon bantuannya.. terimakasih
Masino Sinaga mengatakan
Apa kode di baris 1067?
anonim mengatakan
pak kalau membuat batasan record data misalnya 1 kd kelas hanya menampung 8 orang bagaimana?
Masino Sinaga mengatakan
Tinggal periksa saja jumlah record di table yang bertalian menggunakan server event Row_Inserting. Jika kondisi tersebut sudah tercapai, batalkan proses penyimpanan dengan mengembalikan nilai FALSE di server event tadi.
Darmayanti mengatakan
Pak Masino, mohon bantuannya, Pak
– saya memiliki tabel_modal dengan field: id(int), tanggal(date), jumlah_setor(double), total_modal(double)
– saya membuat function di server events-> global-> all pages-> global code
function GetTotalModal() {
$sTotalModal = “”;
$value = ew_ExecuteScalar(“SELECT total_modal FROM tabel_modal ORDER BY id DESC limit 1”);
if ($value != 0) {
$sTotalModal = $value;
} else { // jika belum ada, gunakan kode yang pertama
$sTotalModal = 0;
}
return $sTotalModal;
}
– pada server events-> global-> table-specific-> common-> row_inserting
function Row_Inserting($rsold, &$rsnew) {
$rsnew[“total_modal”] = GetTotalModal();
$JS = $rsnew[“jumlah_setor”];
$rs = ew_ExecuteScalar(“SELECT * FROM tabel_modal ORDER BY id DESC LIMIT 1”);
if ($rs > 0) { isi
$TM = $rsnew[“total_modal”] + $JS;
ew_Execute(“INSERT into tabel_modal_usaha (tanggal, jumlah_setor, total_modal) VALUES (‘”.$rsnew[‘tanggal’].”‘, ‘”.$rsnew[‘jumlah_setor’].”‘, $TM)”);
} else { // kosong
ew_Execute(“INSERT into tabel_modal_usaha (tanggal, jumlah_setor, total_modal) VALUES (‘”.$rsnew[‘tanggal’].”‘, ‘”.$rsnew[‘jumlah_setor’].”‘, ‘”.$rsnew[‘jumlah_setor’].”‘)”);
}
return TRUE;
}
– di database selalu tersimpan 2 record yaitu:
1;01/03/2021;R001;25000;25000
2;01/03/2021;R001;25000;0
tidak ada for each ataupun while di program saya, kenapa berulang terus yah, Pak
Masino Sinaga mengatakan
Kalau server event Row_Inserting tersebut milik table yang sama dengan yang INSERT INTO di atas, yaitu tabel_modal_usaha, maka akan ada 2 record yang tersimpan.
Darmayanti mengatakan
trims penjelasannya, Pak Masino
Masino Sinaga mengatakan
Sama-sama Yanti.
iwan hermawan mengatakan
kenapa kalo kita migration ke 2022 script diatas tidak fungsi dan muncul error di database ? mohon bantuan nya pak
Masino Sinaga mengatakan
Muncul error di database? Seperti apa pesan error-nya?
dalas mengatakan
Pak masino mau bertanya kenapa kalau di grid add dia tidak berjalan ya pak
terimakasih
Masino Sinaga mengatakan
Karena kode di atas untuk halaman Add biasa.
eka dalas pangestu mengatakan
Pak masino maaf saya mau bertanya bagimana ya cara nya membuat grid add dapat otomatis kode 001,002,003 dalam gridd add, saya sudah mencoba artikel tersebut dan mempelajari dengan teliti pak tapi saat page load saya masukan itu hanya menyembunyikan saja pak.
yang saya butuhkan cara menampilkannya dalam gridd add ?
terimakasih
Masino Sinaga mengatakan
Tidak perlu ditampilkan di Grid-Add. Gunakan server event Row_Inserting untuk mengisi field tersebut dengan fungsi yang Anda gunakan untuk melakukan increment.
Charly mengatakan
Pak Masino, mohon bantuannya apakah sudah ada tutorialnya kode otomatis seperti dibawah ini:
Misalkan saya mempunyai 2 field yaitu KodePaket, dan KodeBulan, pada saat saya menyimpan data secara otomatis data akan tersimpan pada field ke-3 dari gabungan field KodePaket dan Field KodeBulan.
sebagai contoh:
KodePaket –> BM0001
KdBulan –> 01
hasil yang diharapkan:
KodeGabung –> BM0001-01
Mohon bantuannya Pak Masino
Masino Sinaga mengatakan
Bisa banget. Cukup tambahkan kode berikut ke dalam server event Row_Inserting di atas baris return true;
Charly mengatakan
Makasih Pak Masino…
Masino Sinaga mengatakan
Sama-sama.
Eka Dalas Pangestu mengatakan
Hallo pak masino
Izin bertanya pak masino, pada kasus saya JNS itu diganti dengan DATE pada hari penginputan
Contoh pada tanggal 22021701 (Penginputan pada tanggal 17/02/2022)
tapi saat berganti tanggal dia tidak berubah pak, malah jadinya (22021702)
Itu kenapa ya pak ?
Masino Sinaga mengatakan
Bagaimana saya bisa tahu kalau kodenya saja tidak diberitahu?
dodo mengatakan
format yang diinginkan bagaimana ?
tanggal input :: 17/02/2022 (dd/mm/yyyy)
kode hasil :: 2202021701
tanggal input :: 17/02/2022 (dd/mm/yyyy), input kedua
kode hasil :: 2202021702
tanggal input :: 18/02/2022 (dd/mm/yyyy)
kode hasil :: 2202021801
apakah begitu ?
Kwesi mengatakan
Hello Mr. Masino,
I need some help. How do I auto-update a balance field from ‘total_fee’ and ‘amount_paid’ fields on the form. Please is there a way to get the total_fee, and amount_paid values from the forms (Inputs). I created a function in the global code and added to the auto-update functions, but I don’t seem to find a way to get the actual values from the two fields.
//Function example below:
function computebalance(){
$balance = ‘total_fee (from form)’ – ‘amount_paid (from form)’;
return $balance;
}
Masino Sinaga mengatakan
Are you sure that is all of your code that related to the global function that will calculate the balance? If so, the code is wrong. Double check again your code, and make sure your function will return the expected value.
Sandy mengatakan
Halo pak, saya sudah copas code nya semua tapi dan sesuai tabelnya namun hasilnya
Parse error: syntax error, unexpected ‘Object’ (T_STRING), expecting ‘]’ in C:\Users\Admin\Agendaris\ewcfg.php on line 221
mohon pencerahannya
Masino Sinaga mengatakan
Copy-kan ke sini kode yang terdapat pada baris 221 file ewcfg.php tersebut.
Sandy mengatakan
dan kalo seperti ini jadinya bagaimana pak ?
Fatal error: Uncaught Error: Call to undefined function PHPMaker2020\Agendaris\GetNextKodeJenis() in C:\Users\Admin\Agendaris\classes\suratmasuk.php:1692 Stack trace: #0 C:\Users\Admin\Agendaris\classes\suratmasuk_add.php(1822): PHPMaker2020\Agendaris\suratmasuk->Row_Rendered() #1 C:\Users\Admin\Agendaris\classes\suratmasuk_add.php(788): PHPMaker2020\Agendaris\suratmasuk_add->renderRow() #2 C:\Users\Admin\Agendaris\suratmasukadd.php(23): PHPMaker2020\Agendaris\suratmasuk_add->run() #3 {main} thrown in
mohon petunjuk
Masino Sinaga mengatakan
Pesan ini artinya fungsi GetNextKodeJenis belum ditambahkan ke bagian Global Code yang terdapat di bawah Server Events -> Global -> All Pages.
Pastikan sudah menambahkan global function tersebut di bagian tadi, lalu generate ulang semua file script tanpa terkecuali seperti biasa.
andrik mengatakan
izin bertanya pak masino,
kalau saya ingin buat kode nya jadi RE-202302252122 (YmdHis) di filed id tanpa membuat tabel jenis kode bisa kah pak?
Masino Sinaga mengatakan
Tentu bisa dong.
Murniyati mengatakan
apakah kode ini ini berjalan di php maker 2023 dengan mode grid-add. kode ini akan menghasilkan no urut yang sama setiap penambahan pada mode grid-add
Murniyati mengatakan
Apa ada cara/solusi untuk membuat kode otomatis dengan mode Grid-Add pada phpmaker 2023
Masino Sinaga mengatakan
Kode di atas ternyata berlaku juga untuk Grid-Add. Hari ini baru saja saya coba dan buatkan ulang projectnya dengan menggunakan PHPMaker 2023.
Langsung beli project PHPMaker 2023 nya di sini.