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

KEREN.....mas Djie mau nanya untuk coding
BalasHapus"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
artinya:
Hapuspilih 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
Hi Mas..
BalasHapusMinta 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
saya harus lihat dulu function yg mas buat seperti apa? jadi saya akan tahu errornya dan solusinya,,,,
HapusIni mas source codenya. Awalnya No.Transaksi = 00001, terus ketika Record baru, malah jadi 2 bukan 00002.
BalasHapusTerus 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
ok tinggal diubah di bagian ini nya aja :
HapusTxt.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"
Mas djie.. atau Contohnya saya buat format No.Invoice seperti begini.
BalasHapusFO/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
tdi mas contoh 5 digit ya, sekaranga 4 digit, dan databasenya sql server kan :
Hapusubah 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"
Halo mas djie.. sorry nich saya menggangu lagi.
Hapusmas, 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
oh oh ya,,ada yg kurang,ganti bagian ini nya aja :
HapusTxt.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 !
heheheee.. mas pandjie memang Tok Cer.. Thks ya mas..
HapusNoUrut nya run as well..
Jangan bosan2 kasi pencerahannya ya mas..
thks, mas pandjie guanteng..
Mas.. kalau mau membuat no urut tapi tdak connect database bagaimana ya??? ^o^.. maklum masih pemula.. terima kasih..
BalasHapushmm, 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
Hapusmas, 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.
BalasHapussql querynya seperti ini dan eimpan di saat event combobox1_selectedIndexChanged, contoh :
HapusPrivate 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)
mkasih bnyk mas bwt infonya..
Hapusok
Hapuskalau 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?
BalasHapusmksh..
Private Sub ComboBox1_Change()
HapusDim 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
mksh bnyk gan ilmunya, udh berhasil..
HapusOK,, sama sama
Hapusgan maaf, pas di running emg ga da error berhasil, tpi pas tambah data ga jd 0002 ttep 0001, knp ya?
Hapusjadinya berapa? 2 aja? ga 0002 ? ataua tetap 1 atau 0001 ? apa benar codingnya di simapn di combobox? atau gmana?
HapusMas, kalau databasenya pake access 2003 gimana?
BalasHapuscoba pake ms.access 2010, sintaknya sama saja
Hapusmas..
BalasHapuscoding 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
coba ganti menjadi ini:
HapusTxtKode.Text = Val(Microsoft.VisualBasic.Mid(RD.Item("NIK").ToString, 3, 4)) + 1
NB:
RD.Item("NIK") ganti dengan nama field yg akan di otomatisasi
alhmdllah dh bsa mas,
Hapuskalo 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()
maaf kurang faham pertanyaannya
Hapusgini mas,coding button ubah sya :
HapusPrivate 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,.
alhmdlillah sudah bisa ma :-)
HapusformKaryawan.show saya letakkan pling atas.
maksih mas..
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?
HapusMohon batuannya,
fungsi auto generate nya gmana?
HapusSeperti ini mas codingnya:
BalasHapuscmd = 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()
coba ganti dengan yg ini :
HapusDim 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()
alhamdullh maksh mas codingnya maknyus,tp saya rubah sedikit biar jadi A001 ga apa" y mas jd spt ini:
HapusDim 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,.
mas bisa kasih contoh membuat no otomatis dengan store prosedure dan cara memanggilnya di form...thanks sebelumnya
BalasHapusTanya 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 :
BalasHapusSub 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
ok, silahkan coba sintak ini (var_con nya ganti saja dengan yg mas gunakan) :
HapusSub 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
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
Hapusok, good job !
Hapusmaaf pak,saya masih bingung penggunaannya...
BalasHapusada bisa ngasih sourcode jadi nya?
makasih sebelumnya
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
BalasHapusterimakasih
Contoh :
HapusPrivate Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Txt_Nomor.Text = djie_AutoNumber()
End Sub
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.
BalasHapusGimana 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
maaf mas, baru blz, saya baru online lagi
Hapusgini, 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
makasih banyak pak Pandji, problem solved
HapusSiang mas, Nanya lagi saya disini,,, heee
BalasHapussaya 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
coba benerin bagian ini nya aja :
HapusReturn 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
Komentar ini telah dihapus oleh penulis.
BalasHapusmaaf 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
BalasHapusContoh : 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
Function djie_AutoNumber() As String
HapusDim 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
tanya mas,
BalasHapuspada 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
jawabannya ada disini :
Hapushttp://djiesoft.blogspot.com/2013/04/error-handler-generate-nourutbukti-pada.html
cuma pesan error handler aja mas?
Hapuskira² 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.
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,
Hapusjadi 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
oke mas,
Hapuscoba nanti saya test solusi dari mas panji.
terima kasih pencerahannya mas.
regards
yuu, sama sama
Hapusmas, kalo misalkan cuma ambil bulan dan tahunnya saja gimana ya?
BalasHapusmisal 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.
"SELECT LEFT(BUKTI,3) FROM TABLE_SAYA WHERE RIGHT(LEFT(BUKTI,6),2) = '" + VAR_BULAN + "' AND RIGHT(BUKTI,4)='" + VAR_TAHUN + "'"
Hapus'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
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 :
BalasHapusFunction 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
Function AutoNumberdiar() As String
HapusCall 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
makasih mas pandji sukses jalan programnya, hehe :D thanks, semoga sukses blognya mas
HapusAMIN..
Hapusiya sama sama
pk pandi, tolongin dunk yang buat nmr urut yang ini :
BalasHapusP1305001
P = nopinjam
13 = thun
05 = bulan
001 = no. urut
"SELECT LEFT(NOBUKTI,3) AS BUKTI FROM TABLE_NAME
HapusWHERE 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
Mas, bisa gk kasih source code lengkap coding diatas untuk di download dalam bentuk VB.Net,.
BalasHapusMakasih mas sebelumnya, moga makin maju & berkembang ilmunya,.
amin..
Hapusiya nih pengennya, tp blm ada waktu..
maaf mas, bisa tolongin saya buatin nomor urut otomatis,..
BalasHapussaya 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.
"SELECT LEFT(NOBUKTI,3) AS BUKTI FROM TABLE_NAME WHERE RIGHT(NOBUKTI,4)='" + PARAM_TAHUN + "' ORDER BY LEFT(NOBUKTI,3) DESC"
HapusITU 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
mas, PARAM_BULAN sama PARAM_TAHUN nya harus di deklarasikan dahulu y mas.?
Hapusya.. jadi param_tahun dan bulan itu adalah tahun dan bulan sekarang (now)
Hapuscontoh :
dim param_tahun as string = Now.Year.ToString()
dim param_bulan as string = Now.Month.ToString()
ok mas, makasih dh bisa di run.
BalasHapustp 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.
ok....
HapusIf 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
okee...
Hapus:D
sudah bisa di Run mas aplikasinya.
Makasih y mas buat pencerahannya.
yup, sama..
Hapusjangan bosan berkunjung kemari...