running เลขที่อัตโนมัติแบ่งเป็นช่วง
กระทู้เก่าบอร์ด อ.Yeadram

 1,752   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 ซึ่งมันไม่มีรอบแน่นอนไม่เป็นเดือน หรืออาจข้ามปีก็ได้
แต่อยากรันเลขที่เป็นรอบการผลิตของแต่ละโกดัง
จะเขียนคำสั่งแบบไหนครับ

8 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R03762
เพิ่มเติมข้างต้นอีกหน่อย
สรุป ตั้งแต่วันที่ 01/01/52 - 13/03/52 ให้มันรันอัตโนมัติ 015201XXXX
               วันที่ 14/03/52 - 15/05/52 ให้รันอัตโนมัติ 015202XXXX
               วันที่ 16/05/52 - ปัจจุบัน ให้รันอัตโนมัติ 015203XXXX
ดูวันที่เริ่มต้นที่จะเริ่มรอบการผลิตใหม่ พอถึงวันที่เริ่มรอบนั้น ก็เป?ี่ยนการรันทันที
ซึ่งก็มีหลายโกดัง แต่ละโกดังก็มีรอบการผลิตไม่เท่ากัน จะทำอย่างไรดีครับ
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")
3 @R03776
จะให้เทียบวันที่เอกสาร กับวันที่ของรอบนั้น ๆ อย่างไรครับ ผมเก็บไว้แต่วันที่เริ่มต้นรอบการผลิต
เช่น
วันเริ่มต้นการผลิต      รอบการผลิต
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
5 @R03790
หาวันที่ของการผลิตรอบต่อไป
period = dmax(รอบการผลิต,แหล่งข้อมูล,วันเริ่มต้นการผลิต > xxx
)

ยังงงประโยคนี้ครับ ผมทำแล้วมันออก รอบสูงสุดตลอดเลย
เช่น ตอนนี้รอบสูงสุด รอบ 03 เริ่มต้น 16/05/52   พอคีย์วันที่ของรอบ 01 เข้าไป

ผลที่ได้ มันก็ออกรอบ 02 ไม่เห็นออกรอบ 01 เลยครับ คือมันมองเห็นรอบสูงสุด
ตลอดเลยไม่ว่าจะคีย์เอกสารรอบไหน

ช่วยดูอีกรอบครับ ขอบคุณครับ
6 @R03792
ผมคิดผิดครับ ขออภัย
เขาเรียกอะไรนะ อัลกอริธึมฺ หรือ ตรรกะ ครับ

บรรทัดนั้นต้องใช้ Dmin ครับไม่ใช่ Dmax
ปล. ก่อนหน้านี้ไม่ใช่เขียนผิดนะ เป็นการคิดผิดจริงๆ ยอมรับผิดคร้าบบ

อ้อ อีกอย่าง ระวังการใช้รูปแบบของวันที่ นะครับ เมื่อใช้เงื่อนไขกับข้อมูลประเภท date/Time ยิ่งเราคนไทยยิ่งต้องระวังเรื่องรูปแบบมากๆ เพราะชีวิตประจำวันของไทยเรามีรูปแบบวันที่ ที่แตกต่างจากสากล

ลองดูใหม่นะครับ ถ้ายังไม่ได้ จะขอดูตัวอย่างโค้ดที่นำไปประยุกต์ จะได้ไหมครับ ถ้าได้แล้วก็ไม่เป็นไรนะครับ
7 @R03795
ได้แล้วครับ ขอบคุณมากครับ
8 @R03798
ผมลองใช้
period=dmax(รอบการผลิต,แหล่งข้อมูล,วันเริ่มต้นการผลิต<=xxx) มันจะได้ตรง period เลย ไม่ต้องลบ -1 เผื่อค่ารอบการผลิตเป็น Text ขอบคุณผู้แนะนำ yeadram อีกครั้งครับ

@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3283s