Welcome Guest Search | Active Topics | Members | Log In | Register

CodeToday: Auto-Generate Document ID Options · View
ball
Posted: Monday, June 30, 2008 11:40:03 AM

Rank: อาจารย์
Groups: Administration

Joined: 12/1/2007
Posts: 459
Location: Bangkok

สำหรับคนที่ต้องการให้สร้างรหัสเอกสารโดยอัตโนมัติเช่น

PPYYYYMMNNN หรือ CCNNN

PP = Prefix, YYYY = ปี, MM = เดือน, NNN = auto number

วันนี้ CodeToday ขอนำเสนอการสร้างรหัสเอกสารอัตโนมัติดังนี้ครับ

เริ่มต้นด้วยการสร้างตารางดังนี้ครับ

tableName = ชื่อตาราง
prefix = ตัวอักษรนำหน้า
year = ปี
month = เดือน
number = auto number
lengthYear = จำนวนหลักปี (4, 2, 0 คือ ไม่ใช้ปี)
lengthMonth = จำนวนหลักเดือน (2, 0 คือไม่ใช้เดือน)
lengthNumber = จำนวนหลัก auto number

ตัวอย่างการเก็บข้อมูลดังนี้

แล้วสร้าง Store Procedure ดังนี้ครับ

CREATE PROCEDURE [dbo].[GetNewID]
(
    @TableName nvarchar(20)
)
AS

declare @prefix as nvarchar(10)
declare @year as int
declare @month as int
declare @number as int
declare @lengthYear as int
declare @lengthMonth as int
declare @lengthNumber as int

select
    @prefix=Prefix,
    @year=[Year],
    @month=[Month],
    @number=Number,
    @lengthYear=LengthYear,
    @lengthMonth=LengthMonth,
    @lengthNumber=LengthNumber
from RunningNumber
where TableName=@TableName

declare @currentYear int
declare @currentMonth tinyint

select
    @currentYear=Year(getdate()),
    @currentMonth=Month(getdate())

if @year<>@currentYear or @month<>@currentMonth
begin
    set @year=@currentYear
    set @month=@currentMonth
    set @number=0
end

set @number=@number+1

update RunningNumber set
    [Year]=@year,
    [Month]=@month,
    [Number]=@number
    where TableName=@TableName

select 
    @prefix + 
    substring(cast(@year as nvarchar), len(@year)-@lengthYear+1,@lengthYear) + 
    ISNULL( replicate('0',@lengthMonth - len(@month)) + 
    cast((@month) as nvarchar), '') + 
    replicate('0',@lengthNumber - len(@number)) + 
    cast((@number) as nvarchar)
 

ถ้าต้องการเรียกใช้ก็สามารถเรัยกใช้ผ่าน Store Procedure ได้เลยครับ ตัวอย่างคือ

EXEC GetNewID @TableName='Customer'

ผลที่ได้คือ

CM00001
CM00002
CM00003
...

ตัวอย่างต่อไป

EXEC GetNewID @TableName='Quotation'

ผลที่ได้คือ

QT0806001
QT0806002
QT0806003
...
 

และเมื่อเดือนหรือปีเปลี่ยนตัวเลขจะไปเริ่มที่ 1 ใหม่ครับ



Imagination is more Important than Knowledge... /A.Einstein
pang
Posted: Wednesday, July 02, 2008 2:41:16 PM
Rank: มือสมัครเล่น
Groups: Member

Joined: 6/19/2008
Posts: 11

เรียกมาใช้ยังไงค่ะ อาจารย์

Users browsing this topic
Guest


Forum Jump
You cannot post new topics in this forum.
You cannot reply to topics in this forum.
You cannot delete your posts in this forum.
You cannot edit your posts in this forum.
You cannot create polls in this forum.
You cannot vote in polls in this forum.

Main Forum RSS : RSS

YAFVision Theme Created by Jaben Cargman (Tiny Gecko)
Powered by Yet Another Forum.net version 1.9.1.8 (NET v2.0) - 3/29/2008
Copyright © 2003-2008 Yet Another Forum.net. All rights reserved.

Sponsored by