Field AutoNumber
Definisi Autonumber
Autonumber adalah field yang isinya akan secara otomatis terisi menurut urutan tertentu.
Field Autonumber dapat dibuat dengan 2 cara :
1. Menggunakan field Identity (Autonumber). Field ini harus bertipe Int atau Numeric, kemudian tentukan Seed (Nilai dimulai dari berapa), Increment (Pertambahan Nilai)
2. Menggunakan StoreProcedure / Trigger / Function. Field ini akan dibuat oleh program dengan algoritma sbb :
1. Cari Nomor Akhir (Nomor terakhir yang ada di tabel)
2. Buat Nomor Baru (Nomor Akhir ditambah 1, dengan asumsi incrementnya 1)
3. Insert data dengan pada Field Autonumber dengan Nomor Baru
Field Autonumber Menggunakan Field Identity
Sebagai contoh kita akan membuat urutan sebagai berikut :
Autonumber adalah field yang isinya akan secara otomatis terisi menurut urutan tertentu.
LATIHAN AUTONUMBER PAKAI FIELD INDENTITY
1. NIP : field int dengan identity seed 1000, increment 1, NAMA : varchar(50)
NIP | NAMA |
1000 | A |
1001 | B |
1002 | C |
SQL : select NIP, NAMA FROM TABEL1
2. NIP1 : field char(2), default value 'P-'; NIP2 : field int dengan identity seed 1000, increment 1; NAMA : varchar(50)
NIP | NAMA |
P-1000 | A |
P-1001 | B |
P-1002 | C |
SQL : select NIP1+CONVERT(VARCHAR,NIP2) AS NIP, NAMA FROM TABEL2
3. NIP1 : field char(2), default value 'P-'; NIP2 : field int dengan identity seed 1000, increment 1, NIP3 : field char(4), default value datepart(yyyy,getdate()); NAMA : varchar(50)
NIP | NAMA |
P-1000/2008 | A |
P-1001/2008 | B |
P-1002/2008 | C |
SQL : select NIP1+CONVERT(VARCHAR,NIP2)+'/'+convert(varchar,NIP3) AS NIP, NAMA FROM TABEL3
4. NIP1 : field char(4), default value datepart(yyyy,getdate()) ; NIP2 : field int dengan identity seed 100, increment 1; TGLLAHIR : smalldatetime NAMA : varchar(50)
NIP | TGLLAHIR | NAMA |
2008-100-198003 | 18/03/1980 | A |
2008-101-197406 | 30/06/1974 | B |
2008-102-198104 | 01/04/1981 | C |
SQL : select rtrim(NIP1)+'-'+CONVERT(VARCHAR,NIP2)+'-'+
convert(varchar, datepart(yyyy,TGLLAHIR))+
convert(varchar, datepart(mm,TGLLAHIR)) AS NIP, NAMA,TGLLAHIR FROM TABEL4

AUTONUMBER MENGGUNAKAN STOREPROCEDURE
Buat tabel TblPeg dengan struktur berikut
NIP : CHAR(4), NAMA : varchar(50)
NIP | NAMA |
1000 | A |
1001 | B |
1002 | C |
SQL : select NIP, NAMA FROM TblPeg
CREATE PROCEDURE SP_TambahPeg
@Nama varchar(50)
AS
BEGIN
DECLARE @NOAKHIR INT
DECLARE @NOBaru INT
--1.Cari Nomor Akhir
select @NoAkhir = convert(int, Max(NIP))
from tblPeg
--2.Cari Nomor Baru
if @NoAkhir is null
Set @Nobaru=1
else
Set @NoBaru = @NoAkhir + 1
--3.Insert Data baru
Insert TblPeg (NIP, Nama) Values (Convert(char(4), @NoBaru), @Nama)
END
Untuk menambahkan data di tabel TblPeg, jalankan Store Procedure SP_TambahPeg sbb :
--menambahkan data dengan nama A
EXEC dbo.SP_TambahPeg 'A'
select * from tblpeg
--menambahkan data dengan nama B
EXEC dbo.SP_TambahPeg 'B'
select * from tblpeg
Latihan :
1. Diketahui Tabel Pelanggan sbb : KodePelanggan NVarchar(10), NamaPelanggan NVarchar(50). Penomoran KodePelanggan adalah C-00001, C-00002, C-00003, dst. Buat SP_TambahPelanggan dengan Parameter NamaPelanggan, sedangkan KodePelanggan dibuat secara otomatis di dalam SPnya.
Jawaban :
CREATE PROCEDURE SP_TambahPelanggan
@NamaPelanggan varchar(50)
AS
BEGIN
DECLARE @NOAKHIR INT
DECLARE @NOBaru INT
DECLARE @KodePelanggan varchar(10)
--1.Cari Nomor Akhir
select @NoAkhir = convert(int, Max(right(KodePelanggan,5)))
from Pelanggan
--2.Cari Nomor Baru
if @NoAkhir is null
Set @Nobaru=1
else
Set @NoBaru = @NoAkhir + 1
Set @KodePelanggan = ‘C-‘ + RIGHT(‘00000’+Convert(varchar, @NoBaru), 5)
--3.Insert Data baru
Insert Pelanggan (KodePelanggan, NamaPelanggan) Values (@KodePelanggan, @NamaPelanggan)
END
Execute SP_TambahPelanggan sbb :
--menambahkan data dengan nama Teddy
EXEC dbo.SP_TambahPelanggan 'Teddy'
select * from Pelanggan order by KodePelanggan DESC
AUTONUMBER RESET PERIODIK
Autonumber dapat pula digunakan untuk pencatatan nomor dokumen transaksi seperti Nomor Dokumen Permintaan Barang, Nomor Pesanan Barang, Nomor Penerimaan Barang, Nomor Pengeluaran Barang, Nomor Pembelian, Nomor Kontra Bon, dsb. Selalu menggunakan penomoran yang berurutan. Penomoran ini memiliki pola yang khas. Contoh :
- Penomoran Dokumen Permintaan Barang : SPP-Tahun-NomorUrut
- Penomoran Dokumen Pesanan Barang : PO-Tahun-NomorUrut
Penomoran ini tergantung dari kebijakan perusahaan setempat. Namun pada prinsipnya Nomor Urut dapat dibagi menjadi 2 kelompok, yaitu :
1) Nomor Urut berlanjut terus (tanpa reset ke semula)
2) Nomor Urut Reset Periodik, reset biasanya mengambil pola sbb :
· Nomor Urut dengan reset Harian
· Nomor Urut dengan reset Bulanan
· Nomor Urut dengan reset Tahunan
Penomoran dengan Nomor Urut Reset Tahunan
Nomor Urut ini akan direset otomatis ke nomor awal (seed) saat tanggal komputer berada di tahun yang baru. Contoh penomoran dokumen pesanan barang dengan pola: PO-Tahun-NomorUrut
Tabel : TbPO
NomorPO | TGLPO | KODESUPPLIER |
PO-2008-00001 | 16/09/2008 | S-00001 |
PO-2008-00002 | 16/09/2008 | S-00001 |
PO-2008-00003 | 17/09/2008 | S-00002 |
Saat tahun berada di Tahun 2009, maka NomorPO akan direset kenomor baru yaitu menjadi PO-2009-00001, PO-2009-00002, PO-2009-00003, dst. Jadi saat akan insert record baru sistem akan memeriksa nomor terakhir di tahun tersebut, kemudian tambahkan 1 (asumsi increment 1). Jika tidak ada nomor terakhir ditahun tersebut maka dapat dipastikan nomor akan reset kenomor semula.
Tabel TbPO dengan Nomor Urut Reset Tahunan
Store Procedure Insert dengan Nomor Urut Reset Tahunan
Untuk Pembuatan Store Procedure Insert pada table TbPO sbb :
CREATE PROCEDURE SP_TambahTBPO
@TglPO datetime, @KodeSupplier varchar(10)
AS
BEGIN
DECLARE @NOAKHIR INT
DECLARE @NOBaru INT
DECLARE @NomorPO varchar(13)
--1.Cari Nomor Akhir
select @NoAkhir = convert(int, Max(right(NomorPO,5)))
from tbPO
where substring(NomorPO,4,4) = convert(char(4), Datepart(yyyy, @TglPO)))
--2.Cari Nomor Baru
if @NoAkhir is null
Set @Nobaru=1
else
Set @NoBaru = @NoAkhir + 1
Set @NomorPO = ‘PO-‘ + convert(char(4), Datepart(yyyy, @TglPO )) + ‘-‘ +
RIGHT(‘00000’+Convert(varchar, @NoBaru), 5)
--3.Insert Data baru
Insert tbPO (NomorPO, TglPO, KodeSupplier) Values (@NomorPO, @TglPO, @KodeSupplier)
END
Berikut hasil eksekusi dari SP_TambahTbPO :


Jika tgl PO di tahun baru :

Studi kasus.
Apa yang terjadi jika @TglPO diganti Getdate() seperti ini?
Penomoran dengan Nomor Urut Reset Bulanan
Nomor Urut ini akan direset otomatis ke nomor awal (seed) saat tanggal komputer berada di bulan yang baru. Contoh penomoran dokumen pesanan barang dengan pola: PO-TahunBulan-NomorUrut
Tabel : TbPOBulanan
NomorPO | TGLPO | KODESUPPLIER |
PO-200809-00001 | 16/09/2008 | S-00001 |
PO-200809-00002 | 16/09/2008 | S-00001 |
PO-200809-00003 | 17/09/2008 | S-00002 |
PO-200810-00001 | 17/10/2008 | S-00002 |
PO-200810-00002 | 17/10/2008 | S-00002 |
Saat tahun berada di Bulan 10-2008, maka NomorPO akan direset kenomor baru yaitu menjadi PO-200810-00001, PO-200810-00002, dst. Jadi saat akan insert record baru sistem akan memeriksa nomor terakhir di bulan dan tahun tersebut, kemudian tambahkan 1 (asumsi increment 1). Jika tidak ada nomor terakhir di bulan dan tahun tersebut maka dapat dipastikan nomor akan reset kenomor semula.
Tabel TbPOBulanan dengan Nomor Urut Reset Bulanan
Store Procedure Insert dengan Nomor Urut Reset Bulanan
Untuk Pembuatan Store Procedure Insert pada table TbPOBulanan sbb :
CREATE PROCEDURE SP_TambahTBPOBulanan
@TglPO datetime, @KodeSupplier varchar(10)
AS
BEGIN
DECLARE @NOAKHIR INT
DECLARE @NOBaru INT
DECLARE @NomorPO varchar(15)
--1.Cari Nomor Akhir
select @NoAkhir = convert(int, Max(right(NomorPO,5)))
from tbPOBulanan
where substring(NomorPO,4,4) = convert(char(4), Datepart(yyyy, @TglPO)) AND
convert(int, substring(NomorPO,8,2)) = Datepart(mm, @TglPO)
--2.Cari Nomor Baru
if @NoAkhir is null
Set @Nobaru=1
else
Set @NoBaru = @NoAkhir + 1
Set @NomorPO = 'PO-' + convert(char(4), Datepart(yyyy, @TglPO )) +
right('0'+convert(varchar, datepart(mm,@TglPO)),2) + '-' +
RIGHT('00000'+Convert(varchar, @NoBaru), 5)
--3.Insert Data baru
Insert tbPOBulanan (NomorPO, TglPO, KodeSupplier) Values (@NomorPO, @TglPO, @KodeSupplier)
END
Berikut Pembuatan dari SP_TambahTbPOBulanan :
Hasil eksekusi SP_TambahTbPOBulanan sbb :
Jika tgl PO di bulan yang baru :
Penomoran dengan Nomor Urut Reset Harian
Nomor Urut ini akan direset otomatis ke nomor awal (seed) saat tanggal komputer berada di tanggal yang baru. Contoh penomoran dokumen pesanan barang dengan pola: PO-TahunBulanHari-NomorUrut
Tabel : TbPOHarian
NomorPO | TGLPO | KODESUPPLIER |
PO-20080916-00001 | 16/09/2008 | S-00001 |
PO-20080916-00002 | 16/09/2008 | S-00001 |
PO-20080917-00001 | 17/09/2008 | S-00002 |
PO-20080917-00002 | 17/10/2008 | S-00002 |
PO-20081017-00001 | 17/10/2008 | S-00002 |
Studi kasus :
Berikut pola penomoran reset per tahun, setiap gudang punya nomor urut sendiri (Gudang G1 dan G2)
TbPOKasus1
NomorPO | TGLPO | KODESUPPLIER |
PO-2008-G1-00001 | 16/09/2008 | S-00001 |
PO-2008-G1-00002 | 16/09/2008 | S-00001 |
PO-2008-G2-00001 | 17/09/2008 | S-00002 |
PO-2008-G2-00002 | 17/10/2008 | S-00002 |
PO-2009-G1-00001 | 17/10/2009 | S-00002 |
PO-2009-G2-00001 | 17/10/2009 | S-00002 |
No comments:
Post a Comment