ทำตารางและฟอมร์มค่าคอมมิสชั่นรายเดือนอย่างไรดีครับ


0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

05 ต.ค. 62 , 10:56:30
อ่าน 749 ครั้ง

Tongo

กำลังทำโมดูล ค่าคอมมิสชั่นครับ โดยใช้ combo box 2 อันคือ เดือน กับ ปี
ที่ผมทำตอนนี้คือ สร้าง
1. tblmonth เก็บ ชื่อเดือน และรหัสเดือน (1, 2, 3, ..., 12)
2. tblcomh เก็บ รหัสเดือน และค่าคอมมิสชั่น
3. Qprod_sell เป็น cross query เพื่อเอาข้อมูลการขายสินค้าออกมาแสดง และคำนวนค่าคอม
4. frmcomh เป็นฟอมร์มหัว มี combo box เดือน กับ ปี ใช้สำหรับค้นหา
5. frmcomd เป็นฟอร์มจาก Qprod_sell เป็นรายละเอียด ใช้เป็น subform

ผมคาดว่าจะทำเป็น search form และมี subform ของ การขายในเดือนนั้นๆด้วยน่ะครับ (กะว่าจะประยุกต์จากกระทู้ที่แล้วของผม https://www.thai-access.com/index.php?topic=949.0

ที่ติดไปต่อไม่ได้คือ
1. ปี จะทำอย่างไรให้มีการเพิ่มปีอัตโนมัติใน commbo
2. coding จะเป็นอย่างไร

สูตรคำนวนค่าคอมมิสชั่นคือ commission=unit_sale-4336

 

05 ต.ค. 62 , 18:15:44
ตอบกลับ #1

สันติสุข

ถ้าหมายถึงเมื่อเปิดฟอร์มมา จะให้คอมโบบ็อกซ์แสดงปีหลายๆปี ตย.เช่นแสดง 1 ปีย้อนหลังและปีปัจจุบัน ก็ให้กำหนด RowSourceType property ของคอมโบบ็อกซ์เป็น Value List แล้วใส่โค้ดใน Form Load event procedure เป็น

Private Sub Form_Load()
    Me.ชื่อคอมโบบ็อกซ์.RowSource = Year(Date) & ";" & Year(Date) - 1
End Sub
ช่วยพกถุงผ้า/ถุงพลาสติกใช้แล้วไปซื้อของเพื่อลดการใช้พลาสติก ขยะ รักษาสิ่งแวดล้อม และไม่ให้ภาวะโลกร้อนวิกฤติเร็วขึ้นกว่านี้
ช่วยคลิกโฆษณาข้างล่างนี้ เพื่อสนับสนุนเวปบอร์ดด้วยครับ
:nice day:
 
โพสต์นี้ได้รับคำขอบคุณจาก: Tongo

06 ต.ค. 62 , 04:22:46
ตอบกลับ #2

Tongo

ขอบคุณมากครับ ผมเลยลองเอาไปใช้กับ combo box เดือนด้วย ผลออกมาเป็นตัวเลขเดือน ทำยังไงให้เป็นชื่อเดือนแบบเต็มครับ
« แก้ไขครั้งสุดท้าย: 06 ต.ค. 62 , 05:03:58 โดย Tongo »

 

06 ต.ค. 62 , 08:51:15
ตอบกลับ #3

สันติสุข

monthname(1) จะให้ชื่อเต็มเดือน 1
monthname(1, True) จะให้ชื่อย่อเดือน 1 ครับ

ในกรณีเป็นค่าคงที่ ใส่ค่าไปใน RowSource property เลยจะง่ายกว่า  สมมุติคอมโบบ็อกส์คุณใช้ 2 คอลัมน์ คอลัมน์แรกเป็นเลขเดือน อีกคอลัมน์เป็นชื่อย่อเดือน ก็ใส่เป็น 1;"Jan.";2;"Feb.";3;"Mar."
« แก้ไขครั้งสุดท้าย: 06 ต.ค. 62 , 11:04:35 โดย สันติสุข »
ช่วยพกถุงผ้า/ถุงพลาสติกใช้แล้วไปซื้อของเพื่อลดการใช้พลาสติก ขยะ รักษาสิ่งแวดล้อม และไม่ให้ภาวะโลกร้อนวิกฤติเร็วขึ้นกว่านี้
ช่วยคลิกโฆษณาข้างล่างนี้ เพื่อสนับสนุนเวปบอร์ดด้วยครับ
:nice day:
 
โพสต์นี้ได้รับคำขอบคุณจาก: Tongo

06 ต.ค. 62 , 14:32:51
ตอบกลับ #4

Tongo

ขอบคุณมากครับ ขอรบกวนอีกนิดนะครับ ทีนี้เวลาเขียนโค้ดเพื่อกรองข้อมูล โดยใช้ เดือน กับ ปี ซึ่งแยก combo box กัน แต่ใน subform มีฟิลล์ bill_date ซึ่งเป็นข้อมูลแบบ date/time โค้ดการกรองมันจะออกมาเป็นยังไงครับ

ในฟอร์มหัว frmviheclecomh
vihecle_no เป็น combo box โค้ดกรองทำตามคลิป มี row source เป็นคิวรี่
combo_month เป็น เดือน row source เป็น value list เลขเดือน กับชื่อเต็มของเดือน
combo_year เป็นปี ใช้โค้ด Me.combo_year.RowSource = Year(Date) & ";" & Year(Date) - 1

ใน sub form ใช้ฟอร์มชื่อ frmviheclecomd
มีคิวรี Qviheclereport  เป็น cross query
bill_date วันที่ เดือน ปี
vihecle_no รหัสประจำตัว

 

06 ต.ค. 62 , 21:36:51
ตอบกลับ #5

สันติสุข

กรณีที่ต้องการใส่เงื่อนไขให้คิวรี่ วิธีนึงคือให้บรรทัด Criteria (Access ไทยไม่รู้ใช้คำว่าอะไร, "เงื่อนไข" หรือเปล่า) ของฟิลด์ bill_date และ vihecle_no (จริงๆคำสะกดที่ถูกต้องคือ vehicle นะครับ) ใน Qviheclereport อ้างถึงเท็กซ์บ็อกซ์หรือคอมโบบ็อกซ์บนฟอร์ม frmviheclecomh ที่เราได้เลือกเป็นค่าของเงื่อนไขเอาไว้ สำหรับ vihecle_no นั้นคิดว่าไม่มีปัญหา แต่สำหรับ bill_date เราจะสร้างเท็กซ์บ็อกซ์ 2 ตัวเพิ่มเติมไว้บนเมนฟอร์ม สมมุติชื่อ bill_date_from และ bill_date_to เรากำหนดให้ Visible property ของ 2 ตัวนี้เป็น False เพื่อไม่ให้เห็น จุดประสงค์ของ 2 ตัวนี้เพื่อเก็บวันที่แรกและสุดท้ายของเดือน/ปีที่เลือก เช่น 1/9/2019 และ 30/9/2019 สำหรับเดือน 9 ปี 2019 ที่ทำอย่างนี้เพื่อให้เงื่อนไขของฟิลด์ bill_date ในคิวรี่ สามารถอ้างได้อย่างง่ายๆ ต่อไปก็แล้วแต่จะออกแบบไว้ว่าจะให้ subform แสดงคิวรี่ตามเงื่อนไขที่เลือกเมื่อไหร่ สมมุติว่าเมื่อมีการกดปุ่มชื่อ btnRequery แล้วกัน ดังนั้นใน btnRequery_Click event procedure ก็จะต้องรันโค้ดดังต่อไปนี้

โค๊ด: [Select]
Private Sub btnRequery_Click()
   Me.bill_date_from = DateSerial(Me.combo_year , Me.combo_month , 1)
   Me.bill_date_to = DateSerial(Me.combo_year , Me.combo_month + 1 , 0)
   Me.[ชื่อ sub form control].SourceObject = "frmviheclecomd" ' แต่ถ้าผมเข้าใจผิด ถ้า SourceObject ต้องเป็นชื่อ Qviheclereport ก็แก้ให้ถูกต้องด้วย
   Me.[ชื่อ sub form control].Form.Requery ' บรรทัดนี้อย่าเพิ่งใส่ ให้ทดลองดูก่อน ถ้าไม่ใส่แล้วคิวรี่ไม่เปลี่ยนตามเงื่อนไข ค่อยมาใส่
End Sub

กลับมาที่คิวรี่ เราก็จะใส่คำว่า Forms!frmviheclecomh!vihecle_no สำหรับเป็นเงื่อนไขของฟิลด์ videcle_no  และใส่ between Forms!frmviheclecomh!bill_date_from and Forms!frmviheclecomh!bill_date_to สำหรับฟิลด์ bill_date เท่านี้เองครับ

หมายเหตุ :
1. โค้ดทั้งหมดนี้ยังไม่ได้ลองนะครับ และรันแล้วอาจมีผิดพลาด อาจผิด data type ระหว่าง string และ text
2. โค้ดไม่ได้มีการเขียนป้องกันว่า ถ้าไม่ใส่เดือน/ปี จะแสดงข้อความแจ้งเตือนหรืออะไรยังไง ตรงนี้คุณไปจัดการเองแล้วกัน
3. เมื่อเปิดฟอร์มมา เนื่องจากยังไม่ได้ป้อนเลือกอะไร ดังนั้นค่าที่คิวรี่ใช้เป็นเงื่อนไขก็ยังไม่มี อาจจะ error ได้ ผมคิดว่าเราเว้น SourceObject property ของ sub form ว่างๆไว้ดีกว่าครับ (ซึ่งมันจะถูกเติมในโค้ดข้างบน)

ช่วยพกถุงผ้า/ถุงพลาสติกใช้แล้วไปซื้อของเพื่อลดการใช้พลาสติก ขยะ รักษาสิ่งแวดล้อม และไม่ให้ภาวะโลกร้อนวิกฤติเร็วขึ้นกว่านี้
ช่วยคลิกโฆษณาข้างล่างนี้ เพื่อสนับสนุนเวปบอร์ดด้วยครับ
:nice day:
 
โพสต์นี้ได้รับคำขอบคุณจาก: Tongo

08 ต.ค. 62 , 16:27:20
ตอบกลับ #6

Tongo

โมดูลค่าคอมมิสชันเสร็จแล้วครับ ขอบคุณในความกรุณาของอาจารย์ครับ

 


บอร์ดเรียนรู้ Access สำหรับคนไทย


 

Sitemap 1 2 3 4 5