DjieSoft, All About Source Code


This is about programming, information technology, computers, source code, program, application and more ...
_______________________________________________________________________________{FOR EDUCATION}
Search in djiesoft

Search with Google

Rabu, 22 Agustus 2012

Cara Membuat Generate Auto Number/No Urut/No Bukti VBNET

Ini merupakan penjelasan tambahan (lebih lanjut) dari postingan saya tentang Basic Generate Auto Number, Kali ini saya akan sedikit menjelaskan untuk beberapa kasus dan jenis No Urut yang biasa ada dalam aplikasi sehari hari. Baiklah saya langsung contohkan ke coding vbnet dan cara melakukan SELECT query untuk mendapatkan No urut terakhir dari database.

Function djie_AutoNumber() As String
        Dim v_sql As String
        'No Bukti Dengan Format Biasa 001,002,003
        v_sql = "SELECT NO_BUKTI FROM TBL_HEAD ORDER BY NO_BUKTI DESC"
        Using con As New SqlClient.SqlConnection("DATA SOURCE=djiesoft;INITIAL CATALOG=test_db;USER ID=sa;PASSWORD=123"
            con.Open()
            Dim cmd As New SqlClient.SqlCommand(v_sql, con)
            Dim reader As SqlClient.SqlDataReader
            reader = cmd.ExecuteReader
            If reader.HasRows Then
                reader.Read()
                Return Mid("000",1,3-(Val(Trim(reader.Item(0).ToString)) + 1).ToString.Length) + (Val(Trim(reader.Item(0).ToString)) + 1).ToString
            Else
                Return "001"
            End If
        End Using
End Function

Untuk kasus lain yang sedikit lebih rumit, misalanya ada kombinasi karakter, tahun, bulan,hari dan sebagainya anda cukup ganti saja pada bagian ini :
        'Contoh Custom No Bukti A001, A002, B001, C001, C002
        'Jadi Setiap Karakter Masing2 A,B,C punya no urut masing2
        v_sql = "SELECT RIGHT(NO_BUKTI,3) AS NO_BUKTI FROM TBL_HEAD WHERE LEFT(NO_BUKTI,1)='A' ORDER BY RIGHT(NO_BUKTI,3) DESC"
        If reader.HasRows Then
            reader.Read()
             Return "A" + Mid("000",1,3-(Val(Trim(reader.Item(0).ToString)) + 1).ToString.Length) + (Val(Trim(reader.Item(0).ToString)) + 1).ToString
        Else
            Return "A001"
        End If

        'Contoh No Bukti yyyymmdd-xxx : 20120801-001,20120801-002
        'Jika Ingin Setiap TAHUN Ganti/Reset Ke 001 Lagi
        v_sql = "SELECT RIGHT(NO_BUKTI,3) AS NO_BUKTI FROM TBL_HEAD WHERE YEAR(LEFT(NO_BUKTI,8))=YEAR(GETDATE()) ORDER BY RIGHT(NO_BUKTI,3) DESC"
        'Jika Ingin Setiap BULAN Ganti/Reset Ke 001 Lagi
        v_sql = "SELECT RIGHT(NO_BUKTI,3) AS NO_BUKTI FROM TBL_HEAD WHERE YEAR(LEFT(NO_BUKTI,8))+MONTH(LEFT(NO_BUKTI,8))=YEAR(GETDATE())+MONTH(GETDATE()) ORDER BY RIGHT(NO_BUKTI,3) DESC"
        'Jika Ingin Setiap HARI Ganti/Reset Ke 001 Lagi
        v_sql = "SELECT RIGHT(NO_BUKTI,3) AS NO_BUKTI FROM TBL_HEAD WHERE YEAR(LEFT(NO_BUKTI,8))+MONTH(LEFT(NO_BUKTI,8))+DAY(LEFT(NO_BUKTI,8))=YEAR(GETDATE())+MONTH(GETDATE())+DAY(GETDATE()) ORDER BY RIGHT(NO_BUKTI,3) DESC"
        If reader.HasRows Then
            reader.Read()
            Return Format(Now.Date, "yyyyMMdd") + "-" + (Val(Trim(reader.Item(0).ToString)) + 1).ToString
        Else
            Return Format(Now.Date, "yyyyMMdd") + "-001"
        End If

Ini adalah cara saya sendiri yang biasa saya lakukan dan tentu harus ada modifikasi sesuai dengan kasus dan kebutuhan anda, dan sebenarnya masih banyak "Jalan/Cara" lain untuk melakukan generate No Urut ini, Mungkin anda bisa lebih menyingkat/menyederhanakan lagi sintak diatas atau mungkin anda mempunya cara lain yang lebih praktis yang bisa share (berbagi) melalui comment dibawah atau mungkin juga anda ingin bertanya tentang kasus No Urut lain yang saya tidak sebutkan diatas. Semoga bermanfaat.

Tags:
cara generate autonumber, cara membuat nobukti bertambah, cara generate nobukti otomatis, cara membuat auto nourut, cara membuat custom nourut vbnet, generate auto increment sqlserver , cara membuat norutu berdasarkan tahun tangal bulan , cara membuat nourut berganti setiap tahun atau bulan, membuat no bukti pertanggal, membuat nourut transaksi vbnet sql

Related Post:

76 komentar:

  1. KEREN.....mas Djie mau nanya untuk coding
    "SELECT RIGHT(NO_BUKTI,3) AS NO_BUKTI FROM TBL_HEAD WHERE YEAR(LEFT(NO_BUKTI,8))=YEAR(GETDATE()) ORDER BY RIGHT(NO_BUKTI,3) DESC"
    ini maksudnya apa ?
    maaf masih newbie...tq

    BalasHapus
    Balasan
    1. artinya:
      pilih 3 digit kanan, dimana tahun di ambil dari 8 digit kiri (tanggal)= tahun (tanggal server) diurutkan berdasarkan 3 digit kanan (...,003,002,001) dengan nilai tertinggi

      jadi contoh format nya = 20120925-003

      Hapus
  2. Hi Mas..
    Minta tolong pencerahannya mas. saya buat Function NoUrut yang 001. saya buat coding nya di Module. bagaimana cara memanggilnya/menampungnya di sebuah textbox di form mas..?? krn functionnya gak ada Object yang, seperti gini
    Function Nourut() as string

    saya dah buat function yang cuma pake 0001, tapi ketika no urut yang kedua, malah menjadi 2 bukan 0002.

    mohon pencerahannya mas..
    thks Putu

    BalasHapus
    Balasan
    1. saya harus lihat dulu function yg mas buat seperti apa? jadi saya akan tahu errornya dan solusinya,,,,

      Hapus
  3. Ini mas source codenya. Awalnya No.Transaksi = 00001, terus ketika Record baru, malah jadi 2 bukan 00002.
    Terus di Window Error List muncul Exception : Function NoUrut doesn't return a value on all code paths. Are you missing Return statement..?
    Mohon pencerahannya mas. thks putu

    Function NoUrut(Txt As TextBox, NAMATABLE As String, FIELD As String) As Integer
    Dim Sql As String = Nothing
    Dim Cmd As New SqlCommand
    Dim Ds As New DataSet
    Dim DtReader As SqlDataReader
    Dim Dt As New DataTable
    Try
    Conn = New SqlConnection(My.MySettings.Default.ConnString)
    Conn.Open()

    Sql = "SELECT " & FIELD & " FROM " & NAMATABLE & " ORDER BY " & FIELD & " DESC "
    Using Conn
    Cmd.Connection = Conn
    Cmd.CommandText = Sql
    DtReader = Cmd.ExecuteReader

    If DtReader.HasRows Then
    DtReader.Read()
    Txt.Text = (DtReader.Item(0).ToString + 1).ToString
    Else
    Txt.Text = 1
    End If
    DtReader.Close()
    End Using

    Catch ex As Exception
    MsgBox(ex.Message)
    End Try
    End Function

    BalasHapus
    Balasan
    1. ok tinggal diubah di bagian ini nya aja :

      Txt.Text = (DtReader.Item(0).ToString + 1).ToString
      else
      Txt.Text = 1

      menjadi :

      Txt.Text = Mid("00000", 1, 5 - val(DtReader.Item(0)).ToString.Length) + (Val(DtReader.Item(0)) + 1).ToString
      else
      Txt.Text = "00001"

      Hapus
  4. Mas djie.. atau Contohnya saya buat format No.Invoice seperti begini.
    FO/GMH/XI/12/0001, dan saya mau taruh di Textbox1. Listing function nya gimana ya mas..??

    maaf sblmnya mas, maklum masih newbie.. heheheh
    Makasi banyak mas. PUTU

    BalasHapus
    Balasan
    1. tdi mas contoh 5 digit ya, sekaranga 4 digit, dan databasenya sql server kan :

      ubah aja menjadi seperti ini :
      "SELECT TOP 1 RIGHT(" & FIELD & ",4) AS BUKTI FROM " & NAMATABLE & " ORDER BY RIGHT(" & FIELD & ",4) DESC "

      trus bagian ini juga :
      Txt.Text = "FO/GMH/XI/12/" + Mid("0000", 1, 4 - Val(DtReader.Item(0)).ToString.Length) + (Val(DtReader.Item(0)) + 1).ToString
      else
      Txt.Text = "FO/GMH/XI/12/0001"

      Hapus
    2. Halo mas djie.. sorry nich saya menggangu lagi.
      mas, saya sudah coba contoh diatas. nourut nya mau otomatis terganti, setelah nourut yang tertampung dalam table sampai nourut 0009, dan ketika mau menjadi 0010, malah menjadi 00010 (jumlah digitnya yang bertambah) yang harusnya menjadi 0010. dan muncul error ketika disimpan (karena size digit nourutnya saya pake Char(4).

      saya sudah coba, tapi tetap gak nemu mas..mohon pencerahannya ya mas.. maaf nich banyak nanya.

      thks
      Putu

      Hapus
    3. oh oh ya,,ada yg kurang,ganti bagian ini nya aja :
      Txt.Text = "FO/GMH/XI/12/" + Mid("0000", 1, 4 - (Val(DtReader.Item(0)) + 1).ToString.Length) + (Val(DtReader.Item(0)) + 1).ToString

      ok, mas putu ganteng !

      Hapus
    4. heheheee.. mas pandjie memang Tok Cer.. Thks ya mas..
      NoUrut nya run as well..

      Jangan bosan2 kasi pencerahannya ya mas..

      thks, mas pandjie guanteng..

      Hapus
  5. Mas.. kalau mau membuat no urut tapi tdak connect database bagaimana ya??? ^o^.. maklum masih pemula.. terima kasih..

    BalasHapus
    Balasan
    1. hmm, tergantung form nya seperti apa dulu,, apa mau generate nourut itu dati grid/list atau textbox aja, yg pastinya menggunakan 1 variable untuk menampung sementara. begitu form itu di close dan dibuka lagi berarti akan kembali ke 1 atau melanjutkan dari list/grid

      Hapus
  6. mas, klo membuat no urut dari pilihan combobox, dari pilihan tersebut nantinya menjadi no urut, dan kombinasi dari isi combox tersebut dan no urut berdasarkan tahun dan kembali ke nol setiap tahun gmn ya caramya? contoh S20120001 untuk isi comoboxsiswa,dan G20120001 untuk guru.

    BalasHapus
    Balasan
    1. sql querynya seperti ini dan eimpan di saat event combobox1_selectedIndexChanged, contoh :
      Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
      Dim SQL As String = "SELECT RIGHT(NO_URUT,4) AS NO_URUT FROM TBL_DATA WHERE YEAR(RIGHT(LEFT(NO_URUT,5),4))=YEAR(GETDATE()) AND LEFT(NO_URUT,1)='" + Mid(ComboBox1.Text, 1, 1) + "' ORDER BY RIGHT(NO_URUT,3) DESC"
      End Sub

      trus selanjutnya ikuti contoh function saya diatas (sesuaikan dengan kebutuhan)

      Hapus
    2. mkasih bnyk mas bwt infonya..

      Hapus
  7. kalau source code auto number rubah no tiap tahun di atas, bisa di terapkan di vb 6 ga gan? klo bsa apa nya yg di rubah?
    mksh..

    BalasHapus
    Balasan
    1. Private Sub ComboBox1_Change()
      Dim hasil As String
      Dim sql As String
      sql = "SELECT RIGHT(NO_URUT,4) AS NO_URUT FROM TBL_DATA WHERE YEAR(RIGHT(LEFT(NO_URUT,5),4))=YEAR(GETDATE()) AND LEFT(NO_URUT,1)='" + Mid(ComboBox1.Text, 1, 1) + "' ORDER BY RIGHT(NO_URUT,3) DESC"
      Dim rec As New ADODB.Recordset
      Set rec = con.Execute(sql)
      If rec.EOF Or rec.BOF Then
      hasil = Mid(ComboBox1.Text, 1, 1) & "0001"
      Else
      hasil = Str(Val(rec.Fields(0).Value) + 1)
      hasil = Left("0000", 4 - Len(hasil)) & hasil
      End If
      End Sub

      Hapus
    2. mksh bnyk gan ilmunya, udh berhasil..

      Hapus
    3. gan maaf, pas di running emg ga da error berhasil, tpi pas tambah data ga jd 0002 ttep 0001, knp ya?

      Hapus
    4. jadinya berapa? 2 aja? ga 0002 ? ataua tetap 1 atau 0001 ? apa benar codingnya di simapn di combobox? atau gmana?

      Hapus
  8. Mas, kalau databasenya pake access 2003 gimana?

    BalasHapus
    Balasan
    1. coba pake ms.access 2010, sintaknya sama saja

      Hapus
  9. mas..

    coding saya ini slhnya dimana yaa?

    Sub Kode_Otomatis()
    Call Koneksi()
    CMD = New OdbcCommand("Select * From tbkaryawan order by kode desc", CONN)
    RD = CMD.ExecuteReader
    RD.Read()
    If Not RD.HasRows Then
    TxtKode.Text = "K-0001"
    Else

    TxtKode.Text = Val(Microsoft.VisualBasic.Mid(TxtKode.Text, 3, 4)) + 1

    If Len(TxtKode.Text) = 1 Then
    TxtKode.Text = "K-000" & TxtKode.Text & ""
    ElseIf Len(TxtKode.Text) = 2 Then
    TxtKode.Text = "K-00" & TxtKode.Text & ""
    ElseIf Len(TxtKode.Text) = 3 Then
    TxtKode.Text = "K-0" & TxtKode.Text & ""
    ElseIf Len(TxtKode.Text) = 4 Then
    TxtKode.Text = "K-" & TxtKode.Text & ""
    End If
    End If
    End Sub

    BalasHapus
    Balasan
    1. coba ganti menjadi ini:

      TxtKode.Text = Val(Microsoft.VisualBasic.Mid(RD.Item("NIK").ToString, 3, 4)) + 1

      NB:
      RD.Item("NIK") ganti dengan nama field yg akan di otomatisasi

      Hapus
    2. alhmdllah dh bsa mas,

      kalo coding di button ubah nya apa mas..?

      kan gini,
      FormKaryawan.TxtKode.Text = Datagrid.CurrentRow.Cells("kode").Value.ToString
      dst...

      soalnya di event load formKaryawan saya call Kode_Otomatis()

      Hapus
    3. maaf kurang faham pertanyaannya

      Hapus
    4. gini mas,coding button ubah sya :

      Private Sub BtnUbah_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnUbah.Click

      FormKaryawan.TxtKode.Text = DGVKry.CurrentRow.Cells("kode").Value.ToString
      FormKaryawan.TxtNama.Text = DGVKry.CurrentRow.Cells("nama").Value.ToString
      FormKaryawan.TxtAlamat.Text = DGVKry.CurrentRow.Cells("alamat").Value.ToString

      FormKaryawan.Show()
      End Sub

      yang jadi masalah TxtNama,TxtAlamat pada formKaryawan tidak terisi. yang terisi cuma Txtkode, soalnya TxtKode saya buat kode_otomatis.

      NB : formKaryawan saya rncang untuk form tambah data sekaligus untuk ubah data.
      tadi sebelum buat kode_otomatis bisa mas,.

      Hapus
    5. alhmdlillah sudah bisa ma :-)

      formKaryawan.show saya letakkan pling atas.

      maksih mas..

      Hapus
    6. Mas kalau misalkan databasenya mysql gimana ya?soalnya saya coba yang 001 tapi berhenti di 010 ga bisa lanjut jadi 011,itu gimana ya mas?
      Mohon batuannya,

      Hapus
    7. fungsi auto generate nya gmana?

      Hapus
  10. Seperti ini mas codingnya:
    cmd = New MySqlCommand("SELECT id_jual FROM jual ORDER BY id_jual DESC", strcon)
    reader = cmd.ExecuteReader
    If reader.HasRows Then
    reader.Read()
    Return Mid("00000", 1, 5 - Val(reader.Item(0)).ToString.Length) + (Val(Trim(reader.Item(0).ToString)) + 1).ToString
    Else
    Return "00001"
    End If
    reader.Close()

    BalasHapus
    Balasan
    1. coba ganti dengan yg ini :

      Dim currentValue As Double = 0
      cmd = New MySqlCommand("SELECT id_jual FROM jual ORDER BY id_jual DESC", strcon)
      reader = cmd.ExecuteReader
      If reader.HasRows Then
      reader.Read()
      currentValue = Val(reader.Item(0).tostring) + 1
      Return Mid("00000", 1, 5 - currentValue.ToString.Length) + currentValue.ToString
      Else
      Return "00001"
      End If
      reader.Close()

      Hapus
    2. alhamdullh maksh mas codingnya maknyus,tp saya rubah sedikit biar jadi A001 ga apa" y mas jd spt ini:
      Dim currentValue As Double = 0
      cmd = New MySqlCommand("SELECT RIGHT(id_jual,3) AS id_jual FROM jual WHERE LEFT(id_jual,1)='A' ORDER BY RIGHT(id_jual,3) DESC", strcon)
      reader = cmd.ExecuteReader
      If reader.HasRows Then
      reader.Read()
      currentValue = Val(reader.Item(0).ToString) + 1
      Return Mid("A000", 1, 4 - currentValue.ToString.Length) + currentValue.ToString
      Else
      Return "A001"
      End If
      reader.Close()
      tp maslahnya sy pngen tiap bln no belakangnya rubah kembali ke A001 gmana y mas, sy sdh coba pke select spt ini::
      cmd = New MySqlCommand("SELECT RIGHT(id_jual,3) AS id_jual FROM jual WHERE YEAR(LEFT(id_jual,8))+MONTH(LEFT(id_jual,8))=YEAR(GETDATE())+MONTH(GETDATE()) ORDER BY RIGHT(id_jual,3) DESC", strcon)
      tapi eror kenapa y mas?maaf sblmnya mas jd keterusan,.

      Hapus
  11. mas bisa kasih contoh membuat no otomatis dengan store prosedure dan cara memanggilnya di form...thanks sebelumnya

    BalasHapus
  12. Tanya pak, saya sudah buat fungsi no otomatis dan sudah jalan dimana nomernya terus bertambah, namun saya ingin merubahnya pada setiap bulan dan tahunnya berubah no otomatisnya kembali ke nomer 0001 lagi, gimana caranya ya pak, tolong bantuannya, koding saat ini seperti dibawah ini, dibagian mana saya harus merubahnya, makasih :

    Sub Kode_Otomatis()
    Dim Tahun As String
    Tahun = Format(Now, "yyyy")
    Dim Bln As String
    Bln = Format(Now, "MM")

    tblIsi = Proses.ExecuteQuery("Select * From kas_kdr order by no_kasbon desc")
    If tblIsi.Rows.Count = 0 Then
    txtNoKasbon.Text = "0001/BKKPD/" & Bln & "/" & Tahun & ""
    Else
    With tblIsi.Rows(0)
    txtnokasbon.Text = .Item("no_kasbon")
    End With

    txtNoKasbon.Text = Val(Microsoft.VisualBasic.Mid(txtNoKasbon.Text, 1, 4)) + 1
    If Len(txtNoKasbon.Text) = 1 Then
    txtNoKasbon.Text = "000" & txtNoKasbon.Text & "/BKKPD/" & Bln & "/" & Tahun & ""
    ElseIf Len(txtNoKasbon.Text) = 2 Then
    txtNoKasbon.Text = "00" & txtNoKasbon.Text & "/BKKPD/" & Bln & "/" & Tahun & ""
    ElseIf Len(txtNoKasbon.Text) = 3 Then
    txtNoKasbon.Text = "0" & txtNoKasbon.Text & "/BKKPD/" & Bln & "/" & Tahun & ""
    ElseIf Len(txtNoKasbon.Text) = 4 Then
    txtNoKasbon.Text = "" & txtNoKasbon.Text & " /BKKPD/ " & Bln & " / " & Tahun & ""
    End If
    End If
    End Sub

    BalasHapus
    Balasan
    1. ok, silahkan coba sintak ini (var_con nya ganti saja dengan yg mas gunakan) :

      Sub Kode_Otomatis()
      Dim Tahun As String
      Tahun = Format(Now, "yyyy")
      Dim Bln As String
      Bln = Format(Now, "MM")

      Using cmd As New SqlClient.SqlCommand("Select no_kasbon From kas_kdr where right(no_kasbon,7)='" + Bln + "/" + Tahun + "' order by LEFT(no_kasbon,4) desc", var_con)
      Dim lastNo As String = cmd.ExecuteScalar()
      If lastNo Is Nothing Then
      txtNoKasbon.Text = "0001/BKKPD/" + Bln + "/" + Tahun
      Else
      txtNoKasbon.Text = Mid("0000", 1, 4 - Val(Mid(lastNo, 1, 4)).ToString.Length) + (Val(Mid(lastNo, 1, 4)) + 1).ToString
      End If
      End Using
      End Sub

      Hapus
    2. mantap pak, setelah saya run yang muncul nomernya saja seperti 0060, setelah saya teliti ternyata kurang ini pak & "/BKKPD/" + Bln + "/" + Tahun, setelah saya tambahkan akhirnya problem solved, makasih pak Pandji

      Hapus
  13. maaf pak,saya masih bingung penggunaannya...
    ada bisa ngasih sourcode jadi nya?

    makasih sebelumnya

    BalasHapus
  14. saya sudah mngetik kode sama persis, tapi saya bngung dimana harus meletakkan sub auto tersebut, saya coba d button tambah tp setelah disimpan, no urut tidak menambah, tetap A001 terus

    terimakasih

    BalasHapus
    Balasan
    1. Contoh :
      Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      Txt_Nomor.Text = djie_AutoNumber()
      End Sub

      Hapus
  15. Tanya lagi pak, maaf kalo diluar topik, saya bikin program dengan ambil tgl bulan dan tahunnya kayak ini : txtTanggal.Text = System.DateTime.Now.ToString("dd/MM/yyyy"), pada saat form load saya tampilkan textnya supaya tampil tgl bln thn sekarang. Install di client juga sudah berjalan baik, masalah timbul saat settingan tanggal bulan dan tahun di komputer client diganti dan dimundurkan tgl bln dan tahunnya, akhirnya yang muncul bukan tanggal sekarang dan database menjadi kacau.
    Gimana caranya pak walaupun settingan tgl bln tahun di komputer client dirubah, tetapi yang tampil saat program dijalankan tetap tanggal bulan dan tahun sekarang termasuk jamnya juga tetap tidak berubah sesuai komputer servernya, harap bantuannya ya pak Pandji, makasih

    BalasHapus
    Balasan
    1. maaf mas, baru blz, saya baru online lagi
      gini, sema client harus merujuk pada satu server (termasuk datetime fi aplikasi/form nya)
      caranya ini :
      http://djiesoft.blogspot.com/2011/12/get-server-datetime-using-sqlserver.html

      Hapus
    2. makasih banyak pak Pandji, problem solved

      Hapus
  16. Siang mas, Nanya lagi saya disini,,, heee

    saya mencoba auto number dengn kode sperti ini

    Private Function auto() As String
    MyCon = New OleDbConnection(StrCon)
    MyCon.Open()
    StrSql = "SELECT no_Pinjam FROM tb_pinjam ORDER BY no_pinjam DESC"
    ObjCommand = New OleDbCommand(StrSql, MyCon)
    ObjReader = ObjCommand.ExecuteReader()
    If ObjReader.HasRows Then
    ObjReader.Read()
    Return Mid("00000", 1, 5 - Val(ObjReader.Item(0)).ToString.Length) + (Val(ObjReader.Item(0)) + 1).ToString
    Else
    Return "00001"
    End If
    End Function

    pada saat di jalankan masih berjalan sesuai harapan, tapi kalau sudah d angka "000010" jadi berhenti dan tidak lanjut lagi ke angka "000011 dst"

    kira kira apa yang salah ya mas dg kode tersebut?


    terimaskih banyak sebelumnya

    BalasHapus
    Balasan
    1. coba benerin bagian ini nya aja :
      Return Mid("00000", 1, 5 - Val(ObjReader.Item(0)).ToString.Length) + (Val(ObjReader.Item(0)) + 1).ToString
      menjadi :
      Return Mid("00000", 1, 5 - (Val(ObjReader.Item(0)) + 1).ToString.Length) + (Val(ObjReader.Item(0)) + 1).ToString

      Hapus
  17. Komentar ini telah dihapus oleh penulis.

    BalasHapus
  18. maaf mas pandji mau ngerepotin nih tolong dibantu ya hehe. saya ingin membuat no urut otomatis pada textbox di vb 2010 dengan menggunakan sql server kira-kira hasilnya seperti ini
    Contoh : Kode Customer C131018-01
    Keterangan :
    C = Kode Customer
    13 = Kode Tahun Pada 2013
    10 = Kode Bulan Pada Bulan Ke-10 (Oktober)
    18 = kode tanggal
    01 = Nomor Urut Customer yang ke 1
    makasih mas pandji di tunggu balasannya

    BalasHapus
    Balasan
    1. Function djie_AutoNumber() As String
      Dim v_sql As String
      v_sql = "SELECT
      RIGHT(NOURUT,2) AS NOURUT,
      LEFT(NOURUT,1) AS KODE,
      RIGHT(YEAR(GETDATE()),2) AS TAHUN,
      CASE WHEN LEN(MONTH(GETDATE())) =1 THEN '0' + CONVERT(VARCHAR,MONTH(GETDATE())) ELSE MONTH(GETDATE()) END AS BULAN,
      FROM TBL_TEST
      WHERE LEFT(NOURUT,1)='C'
      AND RIGHT(LEFT(NOURUT,3),2) = RIGHT(YEAR(GETDATE()),2)
      AND RIGHT(LEFT(NOURUT,5),2) = CASE WHEN LEN(MONTH(GETDATE())) =1 THEN '0' + CONVERT(VARCHAR,MONTH(GETDATE())) ELSE MONTH(GETDATE()) END
      ORDER BY RIGHT(NOURUT,2) DESC
      "
      Using con As New SqlClient.SqlConnection("DATA SOURCE=djiesoft;INITIAL CATALOG=test_db;USER ID=sa;PASSWORD=123"
      con.Open()
      Dim cmd As New SqlClient.SqlCommand(v_sql, con)
      Dim reader As SqlClient.SqlDataReader
      reader = cmd.ExecuteReader
      If reader.HasRows Then
      reader.Read()
      Return READER("KODE").tostring + READER("tahun").tostring + READER("bulan").tostring + mid ("00",1, 2 - (Val(reader.Item(0).ToString) + 1).ToString.Length) + Val(reader.Item(0).ToString) + 1).ToString
      Else
      Return "C" + Mid(Now.Year.ToString, 3, 2) + IIf(Now.Month.ToString.Length = 1, "0" + Now.Month.ToString, Now.Month.ToString) + "01"
      End If
      End Using
      End Function

      Hapus
  19. tanya mas,
    pada aplikasi client - server, jika auto generate tsb ditampilkan di textbox kemudian nanti disimpan ke dalam tabel, bukankah nanti akan terjadi duplikasi data?
    apakah ada cara utk mengakalinya agar tidak terjadi duplikasi data?

    thanks

    BalasHapus
    Balasan
    1. jawabannya ada disini :
      http://djiesoft.blogspot.com/2013/04/error-handler-generate-nourutbukti-pada.html

      Hapus
    2. cuma pesan error handler aja mas?
      kira² bisa ngga kemudian auto-generate nya lgsg increment gitu?
      misal secara bersamaan (beda bbrp detik/menit) client 1 klik ADD dpt 0001, dan client 2 dpt 0002?
      soale kasus ini dulu pernah ditanya sama dosenku.
      mau ga mau, waktu itu diakali INSERT dulu, kmdn begitu SAVE lgsg pake perintah UPDATE.
      tapi ya itu, njlimeeet alias ribet kwkwkwk.
      mohon pencerahannya mas jika ada solusi yg lebih baik.

      thanks.

      Hapus
    3. hmmm, konsep saya adalah jika client1 dan 2 membawa nobukti yg sama, kemudian hanya bebrapa detik saja perbedaan waktunya dan ternya client 1 lebih dulu insert ke table, kana secara sqlserver/system akan mengunci (lock) table tersebut sampai proses insert itu selesai,

      jadi client 2 akan loading lama (menunggu secara otomatis), jika client 1 sudah selesai insert dan sql sudah unlock/melepas table itu, maka client 2 sudah pasti duplcate (can't insert), maka dari itu di VB.NET nya langsung di tangkap oleh error handle untuk generate lagi bukti yg berbeda

      Hapus
    4. oke mas,
      coba nanti saya test solusi dari mas panji.
      terima kasih pencerahannya mas.

      regards

      Hapus
  20. mas, kalo misalkan cuma ambil bulan dan tahunnya saja gimana ya?
    misal format autonumbernya : nomor/bulan/tahun (001/05/2013)
    perintah SQL nya gimana ya mas agar tiap awal bulan bisa reset mulai dari 001 lagi?
    aku coba utak atik sql yg dari mas pandji ga bisa hehe.
    thanks before.

    BalasHapus
    Balasan
    1. "SELECT LEFT(BUKTI,3) FROM TABLE_SAYA WHERE RIGHT(LEFT(BUKTI,6),2) = '" + VAR_BULAN + "' AND RIGHT(BUKTI,4)='" + VAR_TAHUN + "'"
      'execute reader ...
      If reader.Read Then
      Return MID("000",1,3- (Val(reader.Item(0).ToString) + 1).ToString.Length) + (Val(reader.Item(0).ToString) + 1).ToString + VAR_BULAN + "/" + VAR_TAHUN
      Else
      Return "001/" + VAR_BULAN + "/" + VAR_TAHUN
      End If

      Hapus
  21. Mas pandji saya punya masalah seperti temen temen yang diatas, dari no 001 pas data kedua cuman jadi 2 , gimana mas solusinya? jadi yang saya ingin jadi 002, mohon pencerahan nya mas, ini coding yang saya buat :

    Function AutoNumberdiar() As String
    Call koneksi()
    'No Bukti Dengan Format Biasa 001,002,003
    sql = "SELECT no FROM stokbuku ORDER BY no DESC"
    cmd = New MySqlCommand(sql, conn)
    Dim reader As MySqlDataReader
    reader = cmd.ExecuteReader
    If reader.HasRows Then
    reader.Read()
    Return (Val(Trim(reader.Item(0).ToString)) + 1).ToString
    Else
    Return "001"
    End If
    End Function

    BalasHapus
    Balasan
    1. Function AutoNumberdiar() As String
      Call koneksi()
      'No Bukti Dengan Format Biasa 001,002,003
      Sql = "SELECT no FROM stokbuku ORDER BY no DESC"
      cmd = New MySqlCommand(Sql, conn)
      Dim reader As MySqlDataReader
      reader = cmd.ExecuteReader
      If reader.HasRows Then
      reader.Read()
      Return Mid("000", 1, 3 - (Val(reader.Item(0).ToString) + 1).ToString.Length) + (Val(reader.Item(0).ToString) + 1).ToString
      Else
      Return "001"
      End If
      End Function

      Hapus
    2. makasih mas pandji sukses jalan programnya, hehe :D thanks, semoga sukses blognya mas

      Hapus
  22. pk pandi, tolongin dunk yang buat nmr urut yang ini :

    P1305001

    P = nopinjam
    13 = thun
    05 = bulan
    001 = no. urut

    BalasHapus
    Balasan
    1. "SELECT LEFT(NOBUKTI,3) AS BUKTI FROM TABLE_NAME
      WHERE RIGHT(LEFT(NOBUKTI,3),2) = '" + PARAM_TAHUN + "'
      AND RIGHT(LEFT(NOBUKTI,5),2) = '" + PARAM_BULAN + "'
      ORDER BY LEFT(NOBUKTI,3) DESC"

      ITU SQL SELECT NYA
      '.....
      If reader.HasRows Then
      reader.Read()
      Return "P" + PARAM_TAHUN + PARAM_BULAN + MID("000",1,3-(Val(Trim(reader.Item(0).ToString)) + 1).ToString.lENGTH)+ (Val(Trim(reader.Item(0).ToString)) + 1).ToString
      Else
      Return "P" + PARAM_TAHUN + PARAM_BULAN + "001"
      End If

      jadi setiap ganti bulan dan tahun akan kembali ke 001

      Hapus
  23. Mas, bisa gk kasih source code lengkap coding diatas untuk di download dalam bentuk VB.Net,.
    Makasih mas sebelumnya, moga makin maju & berkembang ilmunya,.

    BalasHapus
    Balasan
    1. amin..
      iya nih pengennya, tp blm ada waktu..

      Hapus
  24. maaf mas, bisa tolongin saya buatin nomor urut otomatis,..
    saya mw buat nmor urut spt ini: 001/BHS-Gnj/2013

    dimana:
    001=nomor urutan daftar
    BHS=bahasa
    Gnj=Ganjil (1,2,3,4,5,6)dalam bulan
    Gnp=Genap (7,8,9,10,11,12)dalam bulan
    2013=tahun
    pemisah= / & -

    jadi bila bulan berganti termasuk kedalam priode genap maka kata "Gnj" berubah jadi "Gnp" tapi nomor urut tdk brubah,nomor urut berubah bila berganti tahun maka kembali ke 001.
    tolongin y mas, d tunggu pencerahannya mas.
    makasih sebelumnya mas.

    BalasHapus
    Balasan
    1. "SELECT LEFT(NOBUKTI,3) AS BUKTI FROM TABLE_NAME WHERE RIGHT(NOBUKTI,4)='" + PARAM_TAHUN + "' ORDER BY LEFT(NOBUKTI,3) DESC"
      ITU SQL SELECT NYA
      '.....
      dim tempNo as string
      If reader.Read() Then
      tempNo = MID("000",1,3-(Val(reader.Item(0).ToString) + 1).ToString.lENGTH) + (Val(reader.Item(0).ToString) + 1).ToString
      tempNo = tempNo + "/BHS-" + iif(val(PARAM_BULAN) MOD 2 = 0,"Gnp","Gnj") + "/" + PARAM_TAHUN
      return tempNo
      Else
      Return "001" + "/BHS-" + iif(val(PARAM_BULAN) MOD 2 = 0,"Gnp","Gnj") + "/" + PARAM_TAHUN
      End If

      Hapus
    2. mas, PARAM_BULAN sama PARAM_TAHUN nya harus di deklarasikan dahulu y mas.?

      Hapus
    3. ya.. jadi param_tahun dan bulan itu adalah tahun dan bulan sekarang (now)
      contoh :
      dim param_tahun as string = Now.Year.ToString()
      dim param_bulan as string = Now.Month.ToString()

      Hapus
  25. ok mas, makasih dh bisa di run.
    tp mas masih binggung ni.
    kan fungsi MOD itu mencari sisa bagi, jadi bila sisanya 0=genap, 1=ganjil.
    seperti ini hasil nya mas,;
    Bulan hasil MOD
    1 1
    2 0
    3 1
    4 0
    5 1
    6 0
    7 1
    8 0
    9 1
    10 0
    11 1
    12 0

    berarti logikanya blum benar mas.
    seharusnya
    Bulan Hasil
    1 1(Ganjil)
    2 1
    3 1
    4 1
    5 1
    6 1
    7 0 (Genap)
    8 0
    9 0
    10 0
    11 0
    12 0
    seperti ini mas.
    mohon bantuannya mas.

    BalasHapus
    Balasan
    1. ok....

      If reader.Read() Then
      tempNo = Mid("000", 1, 3 - (Val(reader.Item(0).ToString) + 1).ToString.lENGTH) + (Val(reader.Item(0).ToString) + 1).ToString
      tempNo = tempNo + "/BHS-" + IIf(Val(PARAM_BULAN) >= 7, "Gnp", "Gnj") + "/" + PARAM_TAHUN
      Return tempNo
      Else
      Return "001" + "/BHS-" + IIf(Val(PARAM_BULAN) >= 7, "Gnp", "Gnj") + "/" + PARAM_TAHUN
      End If

      Hapus
    2. okee...
      :D
      sudah bisa di Run mas aplikasinya.
      Makasih y mas buat pencerahannya.

      Hapus
    3. yup, sama..
      jangan bosan berkunjung kemari...

      Hapus