กระทู้เก่าบอร์ด อ.Yeadram
        
           1,913   8		  
          
					  
		    URL.หัวข้อ / 
		    URL
        
        running เลขที่อัตโนมัติแบ่งเป็นช่วง      
    
      เช่น 
โกดัง 01 ปี 52 รอบการผลิต 01 ต่อด้วย running 4 หลัก เริ่มรันเลขที่วันที่ 01/01/52
โกดัง 01 ปี 52 รอบการผลิต 02 ต่อด้วย running 4 หลัก เริ่มรันเลขที่วันที่ 14/03/52
โกดัง 01 ปี 52 รอบการผลิต 03 ต่อด้วย running 4 หลัก เริ่มรันเลขที่วันที่ 16/05/52 ซึ่งมันไม่มีรอบแน่นอนไม่เป็นเดือน หรืออาจข้ามปีก็ได้
แต่อยากรันเลขที่เป็นรอบการผลิตของแต่ละโกดัง
จะเขียนคำสั่งแบบไหนครับ
    
  โกดัง 01 ปี 52 รอบการผลิต 01 ต่อด้วย running 4 หลัก เริ่มรันเลขที่วันที่ 01/01/52
โกดัง 01 ปี 52 รอบการผลิต 02 ต่อด้วย running 4 หลัก เริ่มรันเลขที่วันที่ 14/03/52
โกดัง 01 ปี 52 รอบการผลิต 03 ต่อด้วย running 4 หลัก เริ่มรันเลขที่วันที่ 16/05/52 ซึ่งมันไม่มีรอบแน่นอนไม่เป็นเดือน หรืออาจข้ามปีก็ได้
แต่อยากรันเลขที่เป็นรอบการผลิตของแต่ละโกดัง
จะเขียนคำสั่งแบบไหนครับ
				8 Reply in this Topic. Dispaly 1  pages and you are on page number 1 
				
        
    2 @R03765    
        
  
      ก่อนจะให้ฟังก์ชั่นมันตรวจสอบเลขล่าสุดได้
ฟังก์ชั่นจะต้องรู้ค่าเหล่านี้ ณ เรคคอร์ดปัจจุบัน หรือ ณ เอกสารฉบับปัจจุบัน
1 รหัสโกดัง
2 วันที่ของเอกสาร หรือของเรคคอร์ดนี้
3 ช่วงเวลาของ แต่ละรอบการผลิต
การทำงาน
- สร้างสายอักขระเพื่อไปเป็นเงือนไข โดยสร้างจาก ข้อมูลต่างๆ ที่ได้จากข้อ 1,2,3
เช่น
- หารอบการผลิต
dim period ' เพราะไม่รู้ว่าคุณเก็บรอบการผลิตไว้ในรูปใด จึงต้องให้คุณหาเอง (เทียบเคียงวันที่ของเอกสารปัจจุบันกับวันที่ของรอบนั้นๆ)
period = ...
- ต่อไปหา รหัสโกดัง
dim dep
dep=format(รหัสโกดัง,"00")
- ต่อไปหาปี
dim yy
yy = format(วันที่ของเอกสาร, "yy")
-ต่อไป เอามาสร้างสายอักขระ
dim sq
sq = dep & yy & period
- ต่อไป นำสายอักขระที่ได้ไปเป็นเงื่อนไขในการหาเลขที่ล่าสุด
dim x
x = nz(dmax("right([เลขที่],4)","ตาราง","left([เลขที่],6) Like '" & sq & "'"),0)
x=x+1
เลขที่ใหม่ = sq & format(x,"0000")
    
  ฟังก์ชั่นจะต้องรู้ค่าเหล่านี้ ณ เรคคอร์ดปัจจุบัน หรือ ณ เอกสารฉบับปัจจุบัน
1 รหัสโกดัง
2 วันที่ของเอกสาร หรือของเรคคอร์ดนี้
3 ช่วงเวลาของ แต่ละรอบการผลิต
การทำงาน
- สร้างสายอักขระเพื่อไปเป็นเงือนไข โดยสร้างจาก ข้อมูลต่างๆ ที่ได้จากข้อ 1,2,3
เช่น
- หารอบการผลิต
dim period ' เพราะไม่รู้ว่าคุณเก็บรอบการผลิตไว้ในรูปใด จึงต้องให้คุณหาเอง (เทียบเคียงวันที่ของเอกสารปัจจุบันกับวันที่ของรอบนั้นๆ)
period = ...
- ต่อไปหา รหัสโกดัง
dim dep
dep=format(รหัสโกดัง,"00")
- ต่อไปหาปี
dim yy
yy = format(วันที่ของเอกสาร, "yy")
-ต่อไป เอามาสร้างสายอักขระ
dim sq
sq = dep & yy & period
- ต่อไป นำสายอักขระที่ได้ไปเป็นเงื่อนไขในการหาเลขที่ล่าสุด
dim x
x = nz(dmax("right([เลขที่],4)","ตาราง","left([เลขที่],6) Like '" & sq & "'"),0)
x=x+1
เลขที่ใหม่ = sq & format(x,"0000")
        
    3 @R03776    
        
  
      จะให้เทียบวันที่เอกสาร กับวันที่ของรอบนั้น ๆ อย่างไรครับ ผมเก็บไว้แต่วันที่เริ่มต้นรอบการผลิต
เช่น
วันเริ่มต้นการผลิต รอบการผลิต
01/01/52 01
14/03/52 02
จะทำให้มันรู้ได้อย่างไรครับ ว่า วันที่ 02/02/52 เป็นรอบ 01 หรือ วันที่ 15/03/52 เป็นรอบ 02 แล้ว หรือต้องใช้วิธีอื่น ช่วยแนะนำด้วยครับ ขอบคุณครับ
    
    
  เช่น
วันเริ่มต้นการผลิต รอบการผลิต
01/01/52 01
14/03/52 02
จะทำให้มันรู้ได้อย่างไรครับ ว่า วันที่ 02/02/52 เป็นรอบ 01 หรือ วันที่ 15/03/52 เป็นรอบ 02 แล้ว หรือต้องใช้วิธีอื่น ช่วยแนะนำด้วยครับ ขอบคุณครับ
        
    4 @R03783    
        
  
      xxx = วันที่ของเอกสาร(เรคคอร์ด)ปัจจุบัน
- หาวันที่ของการผลิตรอบต่อไป
period = dmax(รอบการผลิต,แหล่งข้อมูล,วันเริ่มต้นการผลิต > xxx)
- หารอบการผลิตปัจจุบัน
if period = 0 then
period = dmax(รอบการผลิต,แหล่งข้อมูล)
else
period = period -1
end if
- ตรวจสอบ การมีอยู่ ของข้อมูลอีกครั้ง พร้อมวิธีแก้ไข
if period < 1 then period =1
    
  - หาวันที่ของการผลิตรอบต่อไป
period = dmax(รอบการผลิต,แหล่งข้อมูล,วันเริ่มต้นการผลิต > xxx)
- หารอบการผลิตปัจจุบัน
if period = 0 then
period = dmax(รอบการผลิต,แหล่งข้อมูล)
else
period = period -1
end if
- ตรวจสอบ การมีอยู่ ของข้อมูลอีกครั้ง พร้อมวิธีแก้ไข
if period < 1 then period =1
        
    5 @R03790    
        
  
       หาวันที่ของการผลิตรอบต่อไป 
period = dmax(รอบการผลิต,แหล่งข้อมูล,วันเริ่มต้นการผลิต > xxx)
ยังงงประโยคนี้ครับ ผมทำแล้วมันออก รอบสูงสุดตลอดเลย
เช่น ตอนนี้รอบสูงสุด รอบ 03 เริ่มต้น 16/05/52 พอคีย์วันที่ของรอบ 01 เข้าไป
ผลที่ได้ มันก็ออกรอบ 02 ไม่เห็นออกรอบ 01 เลยครับ คือมันมองเห็นรอบสูงสุด
ตลอดเลยไม่ว่าจะคีย์เอกสารรอบไหน
ช่วยดูอีกรอบครับ ขอบคุณครับ
    
  period = dmax(รอบการผลิต,แหล่งข้อมูล,วันเริ่มต้นการผลิต > xxx)
ยังงงประโยคนี้ครับ ผมทำแล้วมันออก รอบสูงสุดตลอดเลย
เช่น ตอนนี้รอบสูงสุด รอบ 03 เริ่มต้น 16/05/52 พอคีย์วันที่ของรอบ 01 เข้าไป
ผลที่ได้ มันก็ออกรอบ 02 ไม่เห็นออกรอบ 01 เลยครับ คือมันมองเห็นรอบสูงสุด
ตลอดเลยไม่ว่าจะคีย์เอกสารรอบไหน
ช่วยดูอีกรอบครับ ขอบคุณครับ
        
    6 @R03792    
        
  
      ผมคิดผิดครับ ขออภัย
เขาเรียกอะไรนะ อัลกอริธึมฺ หรือ ตรรกะ ครับ
บรรทัดนั้นต้องใช้ Dmin ครับไม่ใช่ Dmax
ปล. ก่อนหน้านี้ไม่ใช่เขียนผิดนะ เป็นการคิดผิดจริงๆ ยอมรับผิดคร้าบบ
อ้อ อีกอย่าง ระวังการใช้รูปแบบของวันที่ นะครับ เมื่อใช้เงื่อนไขกับข้อมูลประเภท date/Time ยิ่งเราคนไทยยิ่งต้องระวังเรื่องรูปแบบมากๆ เพราะชีวิตประจำวันของไทยเรามีรูปแบบวันที่ ที่แตกต่างจากสากล
ลองดูใหม่นะครับ ถ้ายังไม่ได้ จะขอดูตัวอย่างโค้ดที่นำไปประยุกต์ จะได้ไหมครับ ถ้าได้แล้วก็ไม่เป็นไรนะครับ
    
  เขาเรียกอะไรนะ อัลกอริธึมฺ หรือ ตรรกะ ครับ
บรรทัดนั้นต้องใช้ Dmin ครับไม่ใช่ Dmax
ปล. ก่อนหน้านี้ไม่ใช่เขียนผิดนะ เป็นการคิดผิดจริงๆ ยอมรับผิดคร้าบบ
อ้อ อีกอย่าง ระวังการใช้รูปแบบของวันที่ นะครับ เมื่อใช้เงื่อนไขกับข้อมูลประเภท date/Time ยิ่งเราคนไทยยิ่งต้องระวังเรื่องรูปแบบมากๆ เพราะชีวิตประจำวันของไทยเรามีรูปแบบวันที่ ที่แตกต่างจากสากล
ลองดูใหม่นะครับ ถ้ายังไม่ได้ จะขอดูตัวอย่างโค้ดที่นำไปประยุกต์ จะได้ไหมครับ ถ้าได้แล้วก็ไม่เป็นไรนะครับ
        
    7 @R03795    
        
  
      ได้แล้วครับ  ขอบคุณมากครับ    
    
  
        
    8 @R03798    
        
    
      ผมลองใช้ 
period=dmax(รอบการผลิต,แหล่งข้อมูล,วันเริ่มต้นการผลิต<=xxx) มันจะได้ตรง period เลย ไม่ต้องลบ -1 เผื่อค่ารอบการผลิตเป็น Text ขอบคุณผู้แนะนำ yeadram อีกครั้งครับ
    
    
  period=dmax(รอบการผลิต,แหล่งข้อมูล,วันเริ่มต้นการผลิต<=xxx) มันจะได้ตรง period เลย ไม่ต้องลบ -1 เผื่อค่ารอบการผลิตเป็น Text ขอบคุณผู้แนะนำ yeadram อีกครั้งครับ
      Time: 0.5010s
    
      
		
สรุป ตั้งแต่วันที่ 01/01/52 - 13/03/52 ให้มันรันอัตโนมัติ 015201XXXX
วันที่ 14/03/52 - 15/05/52 ให้รันอัตโนมัติ 015202XXXX
วันที่ 16/05/52 - ปัจจุบัน ให้รันอัตโนมัติ 015203XXXX
ดูวันที่เริ่มต้นที่จะเริ่มรอบการผลิตใหม่ พอถึงวันที่เริ่มรอบนั้น ก็เป?ี่ยนการรันทันที
ซึ่งก็มีหลายโกดัง แต่ละโกดังก็มีรอบการผลิตไม่เท่ากัน จะทำอย่างไรดีครับ