Masino Sinaga

Web Development and PHPMaker

Anda di sini: Beranda / PHPMaker / Membuat Kode Otomatis Saat Data Ditambah di Aplikasi Web dari PHPMaker
Menampilkan Data berdasarkan Data Terpilih di ComboBox Lain dari PHPMaker
Mengatur Pilihan Menu Milik Sebuah Record di Aplikasi Web dari PHPMaker

Membuat Kode Otomatis Saat Data Ditambah di Aplikasi Web dari PHPMaker

Jum, 5 September 2014 oleh Masino Sinaga 214 Komentar

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:

function GetNextKodeJenis() {
	$sNextKode = "";
	$sLastKode = "";
	$value = ew_ExecuteScalar("SELECT Kode FROM t_jenis ORDER BY Kode DESC");
	if ($value != "") { // jika sudah ada, langsung ambil dan proses...
		$sLastKode = intval(substr($value, 3, 3)); // ambil 3 digit terakhir
		$sLastKode = intval($sLastKode) + 1; // konversi ke integer, lalu tambahkan satu
		$sNextKode = "JNS" . sprintf('%03s', $sLastKode); // format hasilnya dan tambahkan prefix
		if (strlen($sNextKode) > 6) {
			$sNextKode = "JNS999";
		}
	} else { // jika belum ada, gunakan kode yang pertama
		$sNextKode = "JNS001";
	}
	return $sNextKode;
}

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. Untuk itu, salin kode ini ke dalam server event Row_Inserting:

// Row Inserting event
function Row_Inserting($rsold, &$rsnew) {
	// Enter your code here
	// To cancel, set return value to FALSE
	$rsnew["Kode"] = GetNextKodeJenis(); // mengantisipasi lebih satu user menginput data saat bersamaan
	return TRUE;
}

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 menggunakan server event Row_Rendered dengan kode seperti di bawah ini:

// Row Rendered event
function Row_Rendered() {
	// To view properties of field class, use:
	//var_dump($this-><FieldName>);

	// Kondisi saat form Tambah sedang terbuka (tidak dalam mode konfirmasi)
	if (CurrentPageID() == "add" && $this->CurrentAction != "F") {
		$this->Kode->CurrentValue = GetNextKodeJenis(); // trik
		$this->Kode->EditValue = $this->Kode->CurrentValue; // tampilkan
		$this->Kode->ReadOnly = TRUE; // supaya tidak bisa diubah
	}

	// Kondisi saat form Tambah sedang dalam mode konfirmasi
	if ($this->CurrentAction == "add" && $this->CurrentAction=="F") {
		$this->Kode->ViewValue = $this->Kode->CurrentValue; // ambil dari mode sebelumnya
	}
}

Perhatikanlah dari kode barusan, 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, sehingga kode selengkapnya menjadi seperti ini:

// Page Load event
function Page_Load() {
	//echo "Page Load";
	if ($this->IsGridAdd()) {
		$this->Kode->Visible = FALSE;
	}
}

Betapa mudah dan cepatnya, bukan? 😀

Ditempatkan di bawah: PHPMaker Ditag dengan:Global Code, Grid Add, Page_Load, PHPMaker Indonesia, Row_Rendered, Server Events, Tutorial PHPMaker

Masino Sinaga

Web Developer pengguna PHPMaker untuk membangun Aplikasi Web sejak tahun 2004. Sampai sekarang masih aktif dan rajin membagikan pengalamannya menggunakan PHPMaker melalui situs masinosinaga.com dan ilovephpmaker.com.

Menampilkan Data berdasarkan Data Terpilih di ComboBox Lain dari PHPMaker
Mengatur Pilihan Menu Milik Sebuah Record di Aplikasi Web dari PHPMaker

Komentar

  1. ARIF mengatakan

    Sen, 21 Mei 2018 pada 2:18 pm

    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,,

    Balas
    • Masino Sinaga mengatakan

      Sab, 26 Mei 2018 pada 2:36 pm

      Pencerahannya ya tinggal ambil saja nilainya. Gampang kan?

      Balas
      • SIMKO mengatakan

        Kam, 31 Mei 2018 pada 10:24 am

        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

        Balas
        • Masino Sinaga mengatakan

          Jum, 8 Juni 2018 pada 11:16 pm

          Kode yang sebenarnya:

          $sJenis = @$_GET["JENIS_TABUNGAN"];
          
          Balas
  2. dina melanisa mengatakan

    Sen, 23 Juli 2018 pada 10:34 am

    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..

    Balas
    • Masino Sinaga mengatakan

      Kam, 8 November 2018 pada 7:53 pm

      Pastikan Anda sudah mendefinisikan function GetNextKodeJenis() tersebut seperti yang saya uraikan pada langkah Pertama di atas.

      Balas
  3. Taufiq mengatakan

    Ming, 6 Januari 2019 pada 4:38 am

    Pak mohon bantuannya

    saya sudah coba sesuai arahan dari bapak, tetapi ketika tambah data Field Kode selalu terisi JNS001.

    Terima kasih sebelumnya pak

    Balas
    • Masino Sinaga mengatakan

      Sen, 7 Januari 2019 pada 10:08 am

      Mungkin Anda kurang teliti saja, coba cek ulang lagi, karena yang lain semuanya berhasil.

      Balas
  4. ari mengatakan

    Sab, 12 Januari 2019 pada 8:34 pm

    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..

    Balas
    • Masino Sinaga mengatakan

      Ming, 13 Januari 2019 pada 8:20 am

      Bisa.

      Balas
  5. ari mengatakan

    Sab, 19 Januari 2019 pada 9:04 pm

    ada contoh kasusnya tidak pak?

    Balas
  6. Tito mengatakan

    Kam, 28 Februari 2019 pada 10:29 am

    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

    Balas
    • Masino Sinaga mengatakan

      Kam, 14 Maret 2019 pada 5:21 pm

      Kalau Anda pakai versi 2019, ganti ew_ExecuteScalar dengan ExecuteScalar, lalu coba lagi.

      Balas
      • Tito mengatakan

        Sab, 16 Maret 2019 pada 12:16 pm

        Wuih mantap, pak saya mau beli masino extensionnya, gimana caranya ? kalau berkenan, minta nomor hapenya ya, terima kasih

        Balas
        • Masino Sinaga mengatakan

          Sab, 16 Maret 2019 pada 12:48 pm

          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.

          Balas
  7. syarif mengatakan

    Sab, 23 Maret 2019 pada 10:56 pm

    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

    Balas
    • Nanda Putra mengatakan

      Jum, 12 April 2019 pada 12:02 am

      Saya juga sangat membutuhkan ini, dimana kode JNS,ABC,EFG sudah saya buat ditable baru dan recordnya JNS,ABC,EFG, mohon bantuanya pak

      Balas
  8. dika mengatakan

    Ming, 5 Mei 2019 pada 10:14 pm

    itu kodenya disimpan dimana kak, dimodel atau di controller atau di view nya??
    mohon bantuannya karna saya baru belajar laravel

    Balas
    • Masino Sinaga mengatakan

      Kam, 9 Mei 2019 pada 1:24 pm

      PHPMaker tidak menggunakan framework seperti Laravel, meskipun PHPMaker sama-sama menggunakan OOP di dalam code PHP yang dihasilkannya.

      Balas
  9. narto mengatakan

    Ming, 22 September 2019 pada 3:09 pm

    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…?

    Balas
    • Masino Sinaga mengatakan

      Jum, 11 Oktober 2019 pada 10:47 am

      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.

      Balas
  10. buz mengatakan

    Sel, 8 Oktober 2019 pada 4:14 pm

    Selamat Sore pak Masino, saya sedang mencoba untuk membuat kode otomatis yang random pilihan user, tapi masih belum berhasil pak masino, saya lampirkan

    function GetNexttest9() {
    	$sNextKode9 = "";
    	$sLastKode9 = "";
    	$idreg = @$_GET["asal"];
    	$value9 = ExecuteScalar("SELECT no_mig FROM test ORDER BY no_mig DESC");
    	if ($value9 != "") { // jika sudah ada, langsung ambil dan proses...
    		$sLastKode9 = intval(substr($value9, 4, 12)); // 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) > 12) {
    			$sNextKode9 =  $idreg . "99999999";
    		}
    	} else { // jika belum ada, gunakan kode yang pertama
    		$sNextKode9 = $idreg . "00183307";
    						  
    	}
    	return $sNextKode9;
    }
    
    
    // Row Inserting event
    function Row_Inserting($rsold, &amp;$rsnew) {
    	// Enter your code here
    	// To cancel, set return value to FALSE
    	$rsnew["no_reg"] = GetNexttest(); // mengantisipasi lebih satu user menginput data saat bersamaan
    	$rsnew["no_mig"] = GetNexttest9();
    	return TRUE;
    }
    
    // Row Rendered event
    function Row_Rendered() {
    	// To view properties of field class, use:
    	//var_dump($this->YourFieldName);
     
    	// Kondisi saat form Tambah sedang terbuka (tidak dalam mode konfirmasi)
    	if (CurrentPageID() == "add" &amp;&amp; $this->CurrentAction != "F") {
    		$this->no_reg->CurrentValue = GetNexttest(); // trik
    		$this->no_reg->EditValue = $this->no_reg->CurrentValue; // tampilkan
    		$this->no_reg->ReadOnly = TRUE; // supaya tidak bisa diubah
    
    $this->no_mig->CurrentValue = GetNexttest9(); // trik
    $this->no_mig->EditValue = $this->no_mig->CurrentValue; // tampilkan
    $this->no_mig->ReadOnly = TRUE; // supaya tidak bisa diubah
    	}
     
    	// Kondisi saat form Tambah sedang dalam mode konfirmasi
    	if ($this->CurrentAction == "add" && $this->CurrentAction=="F") {
    	$this->no_reg->ViewValue = $this->no_reg->CurrentValue; // ambil dari mode sebelumnya
    $this->no_mig->ViewValue = $this->no_mig->CurrentValue;
    	}
    }
    

    hasilnya tanpa error, namun belum sesuai harapan, mungkin pak masino bisa membantu.

    -- phpMyAdmin SQL Dump
    -- version 4.8.5
    -- https://www.phpmyadmin.net/
    --
    -- Host: 127.0.0.1:3306
    -- Generation Time: Oct 08, 2019 at 09:10 AM
    -- Server version: 5.7.26
    -- PHP Version: 7.2.18
    
    SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
    SET AUTOCOMMIT = 0;
    START TRANSACTION;
    SET time_zone = "+00:00";
    
    
    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8mb4 */;
    
    --
    -- Database: `baru`
    --
    
    -- --------------------------------------------------------
    
    --
    -- Table structure for table `test`
    --
    
    DROP TABLE IF EXISTS `test`;
    CREATE TABLE IF NOT EXISTS `test` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `no_reg` varchar(255) DEFAULT NULL,
      `no_mig` varchar(250) DEFAULT NULL,
      `asal` varchar(250) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;
    
    --
    -- Dumping data for table `test`
    --
    
    INSERT INTO `test` (`id`, `no_reg`, `no_mig`, `asal`) VALUES
    (1, 'MGB-00183307', '00183307', 'ts'),
    (2, 'MGB-00183308', '00003308', 'jp'),
    (3, 'MGB-00183309', '00003308', 'bb');
    COMMIT;
    
    /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
    /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
    /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
    
    Balas
    • Masino Sinaga mengatakan

      Jum, 11 Oktober 2019 pada 10:54 am

      Belum berhasilnya seperti apa? Ada pesan error yang muncul?

      Balas
      • buz mengatakan

        Sel, 15 Oktober 2019 pada 5:56 pm

        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;
        }

        Balas
        • Masino Sinaga mengatakan

          Rab, 16 Oktober 2019 pada 7:04 pm

          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.

          Balas
      • buz mengatakan

        Sel, 15 Oktober 2019 pada 6:32 pm

        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

        Balas
  11. narto mengatakan

    Kam, 31 Oktober 2019 pada 5:02 pm

    Terima Kasih pak Masino, sudah dicoba untuk versi yang penambahan berdasarkan pilihan user, seperti ini, dan berhasil jalan :

    function GetNexttest9($x_asal) {
    	$sNextKode9 = "";
    	$sLastKode9 = "";
    	$asaaaal = $x_asal;
    	$value9 = ExecuteScalar("SELECT no_mig FROM test WHERE asal = '$asaaaal' ORDER BY id DESC LIMIT 1");
    	if ($value9 != "") { // jika sudah ada, langsung ambil dan proses...
    		$sLastKode9 = intval(trim(substr($value9, 2, 10))); // ambil 8 digit terakhir
    		$sLastKode9 = intval($sLastKode9) + 1; // konversi ke integer, lalu tambahkan satu
    		$sNextKode9 = trim($asaaaal.sprintf('%08s', $sLastKode9)); // format hasilnya dan tambahkan prefix
    		
    		if (strlen($sNextKode9) > 11) {
    			$sNextKode9 =  $asaaaal."99999999";
    	    }
    	} else { // jika belum ada, gunakan kode yang pertama
    		$sNextKode9 .= trim($x_asal."00183307");
    						  
    	}
    	
    	return $sNextKode9;
    }
    
    function Row_Inserting($rsold, &amp;$rsnew) {
    	// Enter your code here
    	// To cancel, set return value to FALSE
    	$rsnew["no_reg"] = GetNexttest(); // mengantisipasi lebih satu user menginput data saat bersamaan
    	$rsnew["no_mig"] = GetNexttest9($this->asal->CurrentValue);
    	return TRUE;
    }
    
    function Row_Rendered() {
    	// To view properties of field class, use:
    	//var_dump($this->FieldName);
     
    	// Kondisi saat form Tambah sedang terbuka (tidak dalam mode konfirmasi)
    	if (CurrentPageID() == "add" && $this->CurrentAction != "F") {
    		$this->no_reg->CurrentValue = GetNexttest(); // trik
    		$this->no_reg->EditValue = $this->no_reg->CurrentValue; // tampilkan
    		$this->no_reg->ReadOnly = TRUE; // supaya tidak bisa diubah
    		//$asal1 = "ts";
    		//$this->no_mig->CurrentValue = GetNexttest9($asal1); // trik
    		//$this->no_mig->EditValue = $this->no_mig->CurrentValue; // tampilkan
    		//$this->no_mig->ReadOnly = TRUE; // supaya tidak bisa diubah
    	}
     
    	// Kondisi saat form Tambah sedang dalam mode konfirmasi
    	if ($this->CurrentAction == "add" && $this->CurrentAction=="F") {
    	$this->no_reg->ViewValue = $this->no_reg->CurrentValue;// ambil dari mode sebelumnya
    	//$this->no_mig->ViewValue = "tesss";
    	}
    }
    
    Balas
    • hari mengatakan

      Jum, 21 Februari 2020 pada 8:09 am

      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

      Balas
      • Masino Sinaga mengatakan

        Jum, 21 Februari 2020 pada 9:23 am

        Tergantung server event itu milik table yang mana.

        Balas
    • hari mengatakan

      Jum, 21 Februari 2020 pada 8:28 am

      ($x_asal) ini field dari database apa variabel

      Balas
      • Masino Sinaga mengatakan

        Jum, 21 Februari 2020 pada 9:20 am

        Dalam contoh di atas, $x_asal adalah parameter milik function GetNexttest9.

        Balas
  12. hari mengatakan

    Sen, 13 Januari 2020 pada 9:46 am

    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

    Balas
    • Masino Sinaga mengatakan

      Kam, 16 Januari 2020 pada 11:19 am

      Pakai versi berapa PHPMaker-nya?

      Balas
      • narto mengatakan

        Jum, 31 Januari 2020 pada 11:15 pm

        maaf oot pa Masino, apakah ada link penjualan extension pak masino harga paket bundling dengan phpmaker 2020, dengan kurs rupiah…mohon infonya yah..

        Balas
        • Masino Sinaga mengatakan

          Sab, 8 Februari 2020 pada 8:59 pm

          Sayangnya belum ada paket bundling. Harus dibeli terpisah.

          Balas
  13. hari mengatakan

    Rab, 5 Februari 2020 pada 8:36 am

    pak jika kode di atas sudah mencapai 999 record apa masih bisa add lagi

    Balas
    • Masino Sinaga mengatakan

      Sab, 8 Februari 2020 pada 8:55 pm

      Tidak bisa, maksimal hanya 999. Supaya lebih dari situ, panjang field-nya harus diperbesar, dan kodenya disesuaikan supaya bisa 4 digit angka.

      Balas
      • hari mengatakan

        Jum, 21 Februari 2020 pada 7:54 am

        ok trims sudah berhasil pak

        Balas
  14. herianto mengatakan

    Kam, 27 Februari 2020 pada 9:03 am

    mantab pak, phpmaker mmg menyenangkan.

    Balas
  15. agusecc mengatakan

    Kam, 2 Juli 2020 pada 3:52 pm

    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

    Balas
    • Masino Sinaga mengatakan

      Ming, 2 Agustus 2020 pada 7:34 pm

      Apa kode di baris 1067?

      Balas
  16. anonim mengatakan

    Sab, 26 September 2020 pada 10:22 am

    pak kalau membuat batasan record data misalnya 1 kd kelas hanya menampung 8 orang bagaimana?

    Balas
    • Masino Sinaga mengatakan

      Sen, 28 September 2020 pada 11:40 am

      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.

      Balas
  17. Darmayanti mengatakan

    Rab, 17 Maret 2021 pada 10:51 am

    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

    Balas
    • Masino Sinaga mengatakan

      Rab, 17 Maret 2021 pada 12:47 pm

      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.

      Balas
      • Darmayanti mengatakan

        Sen, 22 Maret 2021 pada 10:53 am

        trims penjelasannya, Pak Masino

        Balas
        • Masino Sinaga mengatakan

          Sen, 22 Maret 2021 pada 2:17 pm

          Sama-sama Yanti.

          Balas
  18. iwan hermawan mengatakan

    Jum, 1 Oktober 2021 pada 11:14 am

    kenapa kalo kita migration ke 2022 script diatas tidak fungsi dan muncul error di database ? mohon bantuan nya pak

    Balas
    • Masino Sinaga mengatakan

      Sab, 2 Oktober 2021 pada 8:00 am

      Muncul error di database? Seperti apa pesan error-nya?

      Balas
  19. dalas mengatakan

    Jum, 29 Oktober 2021 pada 10:05 am

    Pak masino mau bertanya kenapa kalau di grid add dia tidak berjalan ya pak
    terimakasih

    Balas
    • Masino Sinaga mengatakan

      Jum, 29 Oktober 2021 pada 6:16 pm

      Karena kode di atas untuk halaman Add biasa.

      Balas
  20. eka dalas pangestu mengatakan

    Jum, 29 Oktober 2021 pada 3:37 pm

    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

    Balas
    • Masino Sinaga mengatakan

      Jum, 29 Oktober 2021 pada 6:16 pm

      Tidak perlu ditampilkan di Grid-Add. Gunakan server event Row_Inserting untuk mengisi field tersebut dengan fungsi yang Anda gunakan untuk melakukan increment.

      Balas
  21. Charly mengatakan

    Sen, 22 November 2021 pada 5:26 am

    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

    Balas
    • Masino Sinaga mengatakan

      Sen, 22 November 2021 pada 7:18 am

      Bisa banget. Cukup tambahkan kode berikut ke dalam server event Row_Inserting di atas baris return true;

      $rsnew["KodeGabung"] = $rsnew["KodePaket"] . "-" . $rsnew["KdBulan"]
      
      Balas
      • Charly mengatakan

        Sen, 22 November 2021 pada 7:19 pm

        Makasih Pak Masino…

        Balas
        • Masino Sinaga mengatakan

          Sel, 23 November 2021 pada 2:38 pm

          Sama-sama.

          Balas
  22. Eka Dalas Pangestu mengatakan

    Jum, 18 Februari 2022 pada 12:24 am

    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 ?

    Balas
    • Masino Sinaga mengatakan

      Ming, 20 Februari 2022 pada 6:23 pm

      Bagaimana saya bisa tahu kalau kodenya saja tidak diberitahu?

      Balas
  23. Kwesi mengatakan

    Sen, 21 Februari 2022 pada 7:33 am

    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;
    }

    Balas
    • Masino Sinaga mengatakan

      Sen, 21 Februari 2022 pada 8:54 am

      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.

      Balas
« Komentar Lebih Lama

Tinggalkan Balasan Batalkan balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

Situs ini menggunakan Akismet untuk mengurangi spam. Pelajari bagaimana data komentar Anda diproses.

Pos-pos Terbaru

  • Hati-Hati Memilih Versi PHP Sebelum Generate Code di PHPMaker 2022
  • Alasan AlwaysUseEnglishUSLocale Sebaiknya Aktif di Masino Extensions untuk PHPMaker 2022
  • MasinoInputMask18 Extension, Autoformat Angka dengan Fitur Lebih Kaya di PHPMaker 2022
  • MasinoSignature18 Extension, Mudahnya Mengelola Tanda Tangan di PHPMaker 2022
  • MasinoFormWizard18 Extension, Mengubah Tampilan Multi-Page di PHPMaker 2022

Menu

  • Siapa Saya?
  • Web Development
  • PHPMaker
  • Umum
  • Syarat dan Ketentuan
  • Sitemap (Peta Situs)
  • Komentar

Komentar Terbaru

  • Masino Sinaga pada Hati-Hati Memilih Versi PHP Sebelum Generate Code di PHPMaker 2022
  • Thien Rudi pada Hati-Hati Memilih Versi PHP Sebelum Generate Code di PHPMaker 2022
  • Masino Sinaga pada Cara Menggunakan Login by session variables di Aplikasi Web dari PHPMaker 2021
  • Masino Sinaga pada Cara Menggunakan Login by session variables di Aplikasi Web dari PHPMaker 2021
  • Masino Sinaga pada Cara Menggunakan Login by session variables di Aplikasi Web dari PHPMaker 2021

Situs Terkait

  1. I Love PHPMaker
  2. Situs Resmi PHPMaker
  3. Forum Diskusi PHPMaker
  4. PHPMaker di IlmuKomputer.com
  5. PHPMaker Learning

Baru di PHPMaker?

Baca ini terlebih dulu ...

  1. Ayo Menjadi Web Developer yang Cerdas!
  2. PHPMaker: PHP Code Generator + PHP Framework
  3. Pertanyaan-Pertanyaan yang Paling Sering Diajukan Seputar PHPMaker
  4. Tips buat Anda Pemula yang Baru Mengenal dan Menggunakan PHPMaker
  5. Bacalah Help, Bacalah Help, dan Bacalah Help di PHPMaker!

(c) Masino Sinaga 2009 - 2021 | WordPress | Catat masuk | Kembali ke atas