ขอคำแนะนำแนวคิดการเก็บข้อมูลใบเสร็จ
กระทู้เก่าบอร์ด อ.Yeadram

 5,639   21
URL.หัวข้อ / URL
ขอคำแนะนำแนวคิดการเก็บข้อมูลใบเสร็จ

ผมกำลังหัดทำระบบ POS อยู่ครับ ใช้วิธีดัดแปลงจาก workshop ในหนังสือ แต่ยังไม่เข้าใจในหลายๆ ส่วน รบกวนคือคำชี้แนะหน่อยนะครับ

ในส่วนขายฟอร์มการขาย ผมสร้าง table ขึ้นมา 2 ตาราง ตารางแรกไว้เก็บรหัสการขาย (เลขที่ใบเสร็จ) / ชื่อผู้ขาย / วัน-เวลาที่ขาย

ส่วนอีกตารางจะเก็บรายละเอียดสินค้าที่ซื้อในใบเสร็จนั้นๆ ครับ ซึ่งก็จะมีชื่อสินค้า / ราคาต่อหน่วย / จำนวนที่ซื้อ / ราคารวม และท้ายใบเสร็จจะมียอดเงินรวมสินค้าที่ซื้อทั้งหมดอีกที ซึ่งเจ้ายอดรวมเนี่ยมันมาจาก จำนวนที่ซื้อ*ราคาต่อหน่วย ใน table 2 ใช่มั้ยครับ แต่ผมคิดว่ามันไม่ถูกต้องเท่าไหร่ ยอดรวมมันควรจะเก็บไว้ใน table แรกมากกว่า อย่างนี้เราจะนำยอดรวมไปเก็บไว้ใน table แรกยังไงดีครับ

ผมให้ table 1 เป็น main form ส่วน table 2 เป็น sub form ครับ

อีกอย่างที่ยังมีปัญหาอยู่คือ เมื่อเริ่มการขายใหม่ รายละเอียดสินค้าที่ซื้อของบิลก่อนๆ ก็จะยังขึ้นอยู่ด้วย

ตอนนี้ยังสับสนกับ Access พอสมควรครับ เพิ่งเริ่มหัดใช้เอง รบกวนขอคำชี้แนะด้วยนะครับ


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

1 @R14164
เนื้อหาเป็นบทเรียนเมื่อ 20 ตค รบกวนนักเรียนรุ่น 20 ตค ช่วยตอบหน่อย
ลองสังเกตุตารางและบอกซิว่าออกแบบุถูกต้องใหม
ริ่มต้นควรออกแบบอย่างไร
นักเรียนคนใหนอธิบายได้มีรางวัลให้(อย่าให้เสียชื่อรุ่นนะ)
ครูต้อง
2 @R14167
จากบทเรียนเมื่อวันที่ 20 ต.ค. ครับ รบกวนครูต้องช่วยตรวจอีกทีนะครับว่าถูกหรือผิดอย่างไรครับ
3 @R14168
อีกภาพครับ
4 @R14176
ขอบคุณครับ คุณ Viboon
ผมทำออกมาได้คล้ายๆ คุณ Viboon แปลว่าน่าจะออกแบบได้ถูกต้องใช่มั้ยครับ
แต่ผมยังไม่เคลียร์ในส่วนของการเก็บยอดรวมไปไว้ที่ Table แรก กับเวลาเริ่มใบเสร็จใหม่ ให้ฟอร์มย่อยที่สร้างจาก Table 2 เป็นฟอร์มเปล่า รอใส่สินค้าลงไปน่ะครับ

รบกวนช่วยชี้แนะเพิ่มเติมทีนะครับ
5 @R14177
คุณViboon ครับ
ฟิลด์รหัสไม่ต้องมี มีเพียงฟิลด์ใบเสร็จรับเงินที่เป็นAutoNumberเป็นฟิลด์หลักพอแล้ว
คุณrmkan
ยอดรวมเป็นผลของการคำนวนไม่ควรเก็บในตารางครับ
ส่วนเมื่อเริ่มต้นขายแล้วข้อมูลเก่ายังอยู่ต้องไปตั้งค่าที่ฟอร์ม
ที่การป้อนข้อมูลจะมีค่าNo ให้เปลี่ยนเป็นyes
เมื่อเปิดฟอร์มขึ้นมาก็จะว่าง กรอกขายต่อไปได้เลย
ครูต้อง
6 @R14179
7 @R14180
8 @R14181
Record Source ของ report :SELECT TBL_Sell.Sell_ID, TBL_Sell.Receipt, TBL_Sell.Sale_Name, TBL_Sell.Sell_Date, TBL_Sell.Sell_Time, TBL_List.Goods, TBL_List.Price, TBL_List.Amount FROM TBL_Sell INNER JOIN TBL_List ON TBL_Sell.Sell_ID=TBL_List.Sell_ID WHERE (((TBL_Sell.Sell_ID)=Forms![Frm Sell]!Sell_ID));
ถ้ายังไม่เข้าใจ รบกวนของ Mail ด้วยครับ จะส่ง File ไปให้ครับ
9 @R14183
ตรงส่วนของในการเริ่มใบเสร็จใหม่แล้วฟอร์มเป็นค่าว่าง ผมได้ทำแล้วครับ

แต่ในส่วนของการสรุปยอดรวมของแต่ละใบเสร็จ เราจะเรียกดูได้อย่างไรต่อครับ
เนื่องจากยอดรวมนี้ ต้องเอาไปคำนวณต่ออีกที เก็บไว้ในคิวรี่รึเปล่าครับ ไม่รู้ว่าจะเขียนฟังก์ชั่นยังไงดีครับ เดี๋ยวจะลองของคุณ Viboon ดูนะครับ

รบกวนคุณ Viboon ช่วยส่งตัวอย่างไฟล์มาที่ l2oml2oml2om(at)gmail.com ทีนะครับ เจอ code ยาวๆ แล้วมึนไปเลย

ขอบคุณทั้งครูต้องและคุณ Viboon มากๆ ครับ
10 @R14184
คุณ rmkan Mail ไปแล้วนะครับ

11 @R14186
ได้รับเรียบร้อยครับผม คุณ Viboon ขอบคุณมากครับ

ผมยังติดใจเรื่องยอด sum ของใบเสร็จแต่ละใบอยู่อีกนิดนึงครับ
ไม่รู้ว่าจะทำยังไงดี
12 @R14187
เปิด team viewer 7 แล้วโทรหาผม 081-8184484
13 @R14189
ทำได้แล้วครับ!! คุณ Viboon
เจอแล้วครับที่กดปุ่มแล้ว Error เพราะว่าปุ่มมีคำสั่ง [Embedded Macro] ค้างตอน OnClick อยู่คับ แต่จริงๆ เราจะเรียกใช้จาก code ที่เขียนไว้แทน


Private Sub Command19_Click()
Stsn_amount.Value = [frmSellDetail].Form![Text28].Value
End Sub


ขอบคุณ คุณ Viboon มากครับที่อุตส่าห์เสียเวลาเกือบครึ่งชั่วโมงช่วยให้ผมทำสำเร็จจนได้ แถมรบกวนเวลาพักผ่อนด้วย ขอบคุณจริงๆ ครับ
14 @R14196
แล้วการสั่งพิมพ์ใบเสร็จให้พิมพ์ใบสุดท้ายทุกครั้ง ทำได้หรือยัง
ครูต้อง
15 @R14198
หลักการที่เรียนกับ อ.ต้อง มา คือ เทเบิ้ลหลักจะเก็บเรคอร์ดจำเพาะ(ไม่ซ้ำกัน) ส่วนเทเบิ้ลรอง จะเก็บเรคอร์ดที่มีความสัมพันธ์กับเทเบิ้ลหลัก และเราจะไม่เก็บฟิลด์คำนวณ หรือผลรวมเอาไว้ในเทเบิ้ล เพราะผิดหลักของแอคเซส (ข้อนี้อาจารย์ทุกท่านในบอร์ดนี้ได้ยืนยันมาแล้ว ไม่ว่าจะเป็น อ.yeadram อ.สันติสุข ครั้งที่เรียนกับ อ.พิชัย ท่านก็ย้ำเรื่องนี้) ครั้งนี้เรียนกับ อ.ต้อง ก็ถูกย้ำเรื่องนี้เหมือนกัน
แล้วเราต้องการผลรวม จะเอาไปไว้ที่ไหนล่ะ ก็สร้างฟิลด์ unbound ไว้ในฟอร์ม หรือรีปอร์ต (คงจะ/น่าจะเอาไว้ที่ฟูตเตอร์) หากต้องการให้คอมฯแสดงผลออกมา ค่อยเรียกเรคอร์ดกลับมาคำนวณใหม่ หลักการเป็นเช่นนี้ครับ
16 @R14201
ยังเลยครับครูต้อง ผมยังไม่ได้ทำไปถึงส่วนใบเสร็จเลยครับ แปลว่าตอนช่วงทำใบเสร็จผมจะเจอปัญหาการสั่งให้พิมพ์ใบเสร็จใบสุดท้ายทุกครั้งอีกใช่มั้ยครับ

คุณ TheBeginer ขอบคุณที่ช่วยแนะนำผมครับ ผมพอทราบอยู่จากการ search ในบอร์ดว่าไม่ควรเก็บผลการคำนวณไว้ใน table เพราะสามารถเรียกมาคำนวณใหม่ได้อยู่แล้ว แต่ว่าผลรวมของใบเสร็จ ผมจะต้องเอามาคำนวณต่ออีกที เพื่อคืนเป็นค่าเฉลีั่ยยอดซื้อให้กับผู้ซื้อน่ะครับ (ระบบสหกรณ์ มีปันผล+เงินเฉลี่ยยอดซื้อคืนให้สมาชิก) ก็คือในตอนสิ้นปี ผมจะต้องรวมยอดซื้อทั้งหมดของสมาชิกคนนั้นทั้งปี แล้วเฉลี่ยคืนตาม % ที่สหกรณ์กำหนดน่ะครับ เลยคิดไปว่าถ้าเก็บผลรวมไว้ใน Table เลยน่าจะสะดวกกว่าในการเอามาคำนวณต่อรึเปล่าน่ะครับ ผมอาจจะยังไม่ค่อยเข้าใจแนวคิดของ access เท่าไหร่ด้วย ยังคิดแบบซับซ้อนไม่ได้ค่อยได้ ติดนิสัยทำแบบ excel แต่จะพยายามทำความเข้าใจศึกษาเพิ่มเติมครับผม
17 @R14204
(ผมจะโพส แต่ระบบไม่โพสขึ้นกระดานให้ ขอทดสอบหน่อยครับ)
18 @R14205
ผมค่อนข้างแน่ใจว่าไม่เคยบอกว่า "จะไม่เก็บฟิลด์คำนวณ หรือผลรวมเอาไว้ในเทเบิ้ล เพราะผิดหลักของแอคเซส" นะครับ ผมจะพูดในทำนองนี้เสมอว่า "ถ้าสามารถอธิบายเหตุผลได้ว่าทำไมต้องเก็บ ก็โอเค"

เพราะว่าในบางกรณี การเก็บข้อมูลซ้ำหรือเก็บผลรวมก็มีความจำเป็นเพื่อให้แลกกับบางสิ่งบางอย่าง ซึ่งมักจะเป็นเรื่องของประสิทธิภาพในการให้ได้มาซึ่งข้อมูลที่เราต้องการ ยกตัวอย่างเช่น เมื่อต้องการดูสต็อคการ์ดของสินค้าคงคลัง ณ เดือนใดเดือนหนึ่ง สิ่งที่มักต้องการเห็นก็คือ ยอดยกมาของเดือนที่แล้ว ซึ่งถ้าเราไม่เก็บผลรวมเอาไว้ มันก็จะได้มาจากยอดเริ่มต้นในคลังนี้ตั้งแต่เริ่มระบบ บวกลบๆๆๆ ตัวเลขจำนวนของรับเข้าและจ่ายออก ไปเรื่อยๆจนถึงสิ้นเดือนก่อนเดือนที่จะดูสต็อคการ์ด ถ้าระบบคุณเริ่มตั้งแต่ปีสิบปีก่อน แล้วผู้ใช้บอกว่าต้องการขอดูสต็อคของเดือนนี้ ผมว่าไม่มีใครแฮปปี้แน่ๆ ดังนั้นเรามักจะมีกระบวนการปิดยอดสิ้นเดือนเพื่อนำยอดไปใส่เป็นยอดยกมาให้กับเดือนถัดไป

ถ้าคุณไปลองแกะระบบที่เขาขายๆกัน เราจะพบเลยว่า ข้อมูลประเภท จำนวน/มูลค่าของปัจจุบัน/เดือน/ไตรมาส/ปี/ปีบัญชี (ตามหรือระยะเวลาใดๆที่ผู้ใช้ต้องการ) เขาจะเก็บเอาไว้ด้วยเสมอครับ   

หรืออีกตัวอย่างที่เห็นชัดๆก็คือ คุณคิดว่าเวลาเรากดดูยอดเงินคงเหลือในตู้เอทีเอ็ม เขาจะมานั่งบวกลบๆๆๆ เงินเข้าและเงินออกหรือ ทรานแซกชั่นต่อวินาทีทั่วประเทศเท่าไหร่ ยิ่งเวลาที่ใช้งานสูงสุด ถ้ามานั่งบวกลบๆ ผมว่าระบบจะล่มแน่นอน เพราะเซิฟเวอร์จะต้องมานั่งคำนวนและค้นหาอ่านดิสก์มหาศาลต่อวันเลย ด้วยระบบที่ใหญ่ขนาดนี้ ความพึงพอใจของลูกค้าเมื่อตีออกมาเป็นตัวเงินแล้ว จะมากกว่าค่าจ้างเจ้าหน้าที่คอมพิวเตอร์ให้เขียนระบบที่มีความซ้ำซ้อนมากมายครับ

การออกแบบระบบ ขอให้ทุกอย่างอยู่ที่คำอธิบายที่สมเหตุสมผลครับ มีทฤษฏีเป็นแนวทางเท่านั้น
19 @R14216
เช่นเดียวกับอาจารย์สันติสุขครับ
เรื่องการออกแบบตาราง ไม่ได้มีข้อห้ามชัดเจนขนาดนั้นครับ
กฎพื้นฐานคือ ฐานข้อมูลสร้างขึ้นมาเพื่อลดปัญหาความซ้ำซ้อนของข้อมูล,...
แต่ในบางกรณีเช่นเพื่อความรวดเร็วและสะดวกในการนำข้อมูลมาใช้(ดังตัวอย่างของอาจารย์สันติสุข)
หรือในกรณีการการออกแบบตารางข้อมูลเกี่ยวกับเรื่องเงินเช่น ใบเสร็จ นี้
อาจจะจำเป็นต้องเก็บข้อมูลผลรวมของราคาสินค้าทั้งหมดในใบเสร็จไว้ด้วย เพราะอาจมีการคำนวณในระดับทศนิยมหลายตำแหน่งแต่ตัวเลขสุดท้ายต้องปัดเศษให้เหลือ 2 ตำแหน่ง เช่นนี้ก็จำเป็นต้องเก็บค่าสรุปไว้เพื่อส่งบัญชี

*** ทุกกฏมีข้อยกเว้น หากมีเหตุผลอันควรนะครับ ***
20 @R14242
ขอบคุณครับ อาจารย์ทั้งสองท่าน
เข้าใจตามที่อาจารย์กรุณาอธิบายมาแล้วครับ
ผมยังต้องเรียนรู้อีกมากครับ
เลยยังเป็น beginner อยู่นี่แหละครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.2796s