Jumat, 24 Agustus 2012

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

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

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 (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" + (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.
source : http://djiesoft.blogspot.jp

3 komentar:

  1. Assalamuallaikum, salam kenal dari zaidindayani. Mas pandji artikel anda ini menarik sekali dan saya mencoba untuk mengimplementasikannya..dari tutorial mas diatas saya menggunakan format Contoh No Bukti yyyymmdd-xxx : 20120801-001,20120801-002
    saya mengikuti listingnya sesuai dengan yang mas buat, dari listing tersebut saya mendapati kendala pada bagian :
    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
    ------------------------------------------------
    Return Format(Now.Date, "yyyyMMdd") + "-" + (Val(Trim(reader.Item(0).ToString)) + 1).ToString

    pada bagian "-" sewaktu saya ubah atau tambahkan dari : "-" menjadi "-00" maka format numbernya menjadi 001-009

    tapi ketika formatnya saya ubah/kurangi menjadi "-0" maka format numbernya jadi 010-099

    terakhir saya bt menjadi "-" maka formatnya menjadi 100-999

    nah kira-kira gimana solusinya ya mas pandji, mohon maaf menggangu waktu anda..artikel2nya sangat menarik dan membantu para pemula seperti saya..keep pos mas

    BalasHapus
  2. Pak Mau tanya, kalau buat nya di delphi gmn ya Pak? dlu dh pernah buat tapi lupa,,,

    BalasHapus
  3. MANTABS MAS BRO ANE CUMA NAMBAHKAN PRIVATE SUB AUTO() LANGSUNG ANE CALL SAAT DI TEKAN SAVE DAN CB GANTI HARI DAN AKHIRNYA BOOOOM NOMOR URUT BERGANTI KE 1 LAGI. THANKS MAS BRO THUN LALU ANE GAGAL SM KODING INI TP SKR ANE BISA EY

    BalasHapus