ปรับราคาสินค้า (ModifyPriceScreen)
จอปรับราคาสินค้าครั้งละหลายรายการ: ใส่รายการราคา (นำเข้าไฟล์ข้อความ/CSV หรือพิมพ์ลงตาราง) -> ตรวจดูราคาเก่า -> สั่งประมวลผลทั้งชุด หัวไฟล์อ้างถึงโปรแกรมเดิม SMLERPIC/_icModifyPrice.cs (รหัสเก่า 2.1.25) กฎการหาแถวเดิม/ราคา 0/ประเภทการขาย/บันทึกประวัติ (master_logs) อยู่ที่ Go /api/process/modifyprice/* (ModifyPriceScreen.tsx:3-7) ราคาเป็นสตริงทั้งหมดไม่แปลงเป็นตัวเลข ดู ตัวเลข เงิน ภาษี และปี พ.ศ. ฝั่ง frontend (numeric.ts) ตรรกะราคาโดยรวมดู เครื่องมือหาราคาและแก้ราคา (Price engine / price center / modify price)
วิธีเปิด
เมนู 2014 "ปรับราคาสินค้า" (menu_ic_modify_price) ในหมวดสินค้า/คลัง กลไกเมนูดู ทะเบียนหน้าจอและโครงเมนู (Screen registry & smlMenu)
โครงจอ
- ซ้าย: รายการสินค้า (รหัส, ชื่อ, หน่วย) โหลด 500 แถว (
queryLimit ... 500,:117-125) คลิกสินค้า = เติมรหัสและหน่วยนับมาตรฐานลงแถวว่างแถวแรกของตาราง (หรือต่อท้ายแถวใหม่) เฉพาะตอนอยู่โหมดแก้ไขและไม่ใช่ราคาบาร์โค้ด (handlePickItem,:226-236) ดับเบิลคลิก = เข้าโหมดแก้ไขแล้วเติมให้ ดู รายการข้อมูล ค้นหา lookup และ dialog กลาง (SmlDataList / SmlLookupModal / SmlDialog) - ขวา: แถบเลือก ชนิดราคา (radio): ราคามาตรฐาน / ราคาทั่วไป / ราคาบาร์โค้ด / ราคาตามสูตร และสำหรับสองชนิดแรกมีขอบเขต 3 แบบ: ราคาขายทั่วไป / ราคาตามกลุ่มลูกค้า / ราคาตามลูกค้า (
SCOPES,:53) ค่าkindที่ส่งไปเซิร์ฟเวอร์คือ<standard|general>_<1|2|3>,barcodeหรือformula(:142) เมื่อในตารางมีข้อมูลแล้วจะเปลี่ยนชนิดราคาไม่ได้ (radio ถูกปิด) ต้องล้างตารางก่อน - ช่องติ๊ก "(Option) แก้ไขราคาให้เป็น 0": ถ้าติ๊ก ช่องราคาที่พิมพ์ 0 จะถูกบันทึกเป็น 0 ช่องที่เว้นว่างไม่เปลี่ยนราคา (ข้อความบนจอ
:339) การจัดการค่า 0 เมื่อไม่ติ๊กตัดสินที่ Go - ตาราง "รายการปรับราคา (n/5000)" คอลัมน์ขึ้นกับชนิดราคา:
- มาตรฐาน/ทั่วไป: รหัสสินค้า, หน่วยนับ, [กลุ่มลูกค้าหลัก+ย่อย หรือ รหัสลูกค้า ตามขอบเขต], ตั้งแต่วันที่, ถึงวันที่, จากจำนวน, ถึงจำนวน, ประเภทการขาย, ราคาขาย 1, ราคาขาย 2 (
:34-38) - บาร์โค้ด: บาร์โค้ด, ราคา, ราคาสมาชิก, ราคา 2/สมาชิก 2, ราคา 3/สมาชิก 3, ราคา 4/สมาชิก 4 (
:39-43) - สูตร: รหัสสินค้า, หน่วยนับ, ประเภทการขาย, ประเภทภาษี, ราคา 0-9 (
:44-47) - ช่องวันที่พิมพ์รูปแบบ
วว/ดด/ปปปปผิดรูปขึ้นแถวที่ N: <คอลัมน์> "<ค่า>" ต้องเป็นรูปแบบ วว/ดด/ปปปป; ช่องตัวเลขรับเฉพาะ 0-9 จุด และเครื่องหมายลบ
- มาตรฐาน/ทั่วไป: รหัสสินค้า, หน่วยนับ, [กลุ่มลูกค้าหลัก+ย่อย หรือ รหัสลูกค้า ตามขอบเขต], ตั้งแต่วันที่, ถึงวันที่, จากจำนวน, ถึงจำนวน, ประเภทการขาย, ราคาขาย 1, ราคาขาย 2 (
ปุ่ม
| ปุ่ม | ทำอะไร |
|---|---|
| แก้ไข | เข้าโหมดแก้ไข ถ้าไม่มีแถวสร้างแถวว่างให้ (ปิดเมื่ออ่านอย่างเดียว) |
| เพิ่มใหม่ | เริ่มชุดรายการใหม่ (startNew) |
| ลบ | ล้างทั้งตารางและออกจากโหมดแก้ไข (clearAll, :219) |
| นำเข้าไฟล์ | เปิดเลือกไฟล์ .csv .txt .tsv อ่านเป็นข้อความ |
| ตรวจราคาเก่า | POST /api/process/modifyprice/preview ยังไม่เขียนข้อมูล ผลรายแถวแสดงท้ายตารางสองคอลัมน์: ราคาเก่า และผล "แก้ไขราคา" / "เพิ่มราคาใหม่" / "ข้าม" พร้อมเหตุผล (แถว "ข้าม" เป็นสีแดง :408-412) |
| บันทึก | เปิดถามยืนยัน ปรับราคาสินค้า N รายการ ใช่หรือไม่? แล้ว POST /api/process/modifyprice/apply สำเร็จขึ้น ปรับราคาเสร็จ: แก้ไข a · เพิ่มใหม่ b · ข้าม c รายการ |
| ล้างตาราง / เพิ่มแถว / ไอคอนถังขยะต่อแถว / ปุ่มย้ายแถว | จัดการแถวในตาราง (เพิ่มแถวปิดเมื่อครบ 5000) |
| ปิดหน้าจอ | ในโหมดแก้ไขคือยกเลิกการแก้ |
คีย์ลัด (:221, ScreenFrame.tsx:37-58) ขณะอยู่โหมดแก้ไข: Ctrl+S เปิดกล่องถามยืนยันเดียวกับปุ่มบันทึก (ถ้ามีรายการในตาราง), Esc ยกเลิกการแก้ ไม่มีสิทธิ์ขึ้น คุณไม่มีสิทธิ์ "เพิ่ม/แก้ไขข้อมูล" ในหน้าจอนี้ ... |
การนำเข้าไฟล์ (parseImport, :90-105)
- ตัวคั่นเลือกอัตโนมัติจากบรรทัดแรก: Tab, จุลภาค, อัฒภาค หรือขีดตั้ง (ลำดับตามนี้) ตัดเครื่องหมายคำพูดหัวท้ายเซลล์
- ถ้าบรรทัดแรกมีชื่อคอลัมน์ (ตรงกับ key หรือชื่อไทยบนจอ) ถือเป็นหัวตาราง ถ้าไม่มี เรียงค่าตามลำดับคอลัมน์ของชนิดราคาที่เลือกอยู่
- ไฟล์ว่างขึ้น "ไม่พบรายการในไฟล์"; รวมกับของเดิมเกิน 5000 แถวขึ้น
นำเข้าได้รวมไม่เกิน 5000 รายการ (ไฟล์นี้ N รายการ); ตารางว่างตอนกดตรวจ/บันทึกขึ้น "ยังไม่มีรายการราคา กรุณานำเข้าไฟล์หรือเพิ่มแถวก่อน"; ปรับได้ครั้งละไม่เกิน 5000 รายการ (MAX_ROWS,:29)
ตารางที่เกี่ยวข้อง
ตารางราคาที่จอเขียนผ่านเซิร์ฟเวอร์ตามชนิดราคา (ตัวจอไม่เขียนตารางเอง): ราคาขายสินค้าตามเงื่อนไข (ic_inventory_price), ส่วนลดตามบาร์โค้ด (ic_inventory_barcode_price), บาร์โค้ดและราคาขายหน้าร้าน (ic_inventory_barcode) การจับคู่ชนิดราคาเป็นตารางอยู่ที่ Go (/api/process/modifyprice/*) ไม่ปรากฏในโค้ดหน้าจอ
ข้อควรระวัง
- ปุ่ม "ตรวจราคาเก่า" ควรกดก่อนบันทึกทุกครั้ง เพราะผลแสดงว่าแถวไหนถูกข้าม (เหตุผลที่แสดงมาจากเซิร์ฟเวอร์ ไม่ได้กำหนดในหน้าจอ)
- การเปลี่ยนค่าใดในตารางหรือในตัวเลือก 0 จะล้างผลตรวจเดิม ต้องกดตรวจใหม่
- ปุ่ม ลบ ล้างเฉพาะรายการบนหน้าจอ ไม่ได้ลบราคาในฐานข้อมูล
ที่มาในโค้ด
frontend/account/master/ModifyPriceScreen.tsx:29-62นิยามคอลัมน์/ชนิดราคา;:90-105นำเข้าไฟล์;:142-223payload/ตรวจ/ประมวลผล;:226-236เติมแถวจากรายการสินค้า;:300-340แถบเลือกชนิดราคา;:440-454กล่องยืนยัน- ดูเพิ่ม: กำหนดส่วนลดตามบาร์โค้ด รายตัวและแบบเร็ว (BarcodeDiscountScreen, MultiBarcodeDiscountScreen) · กำหนดบาร์โค้ด เพิ่มบาร์โค้ดแบบเร็ว และตรวจบาร์โค้ด EAN13 (BarcodeSetupScreen, BarcodeFastAddScreen, Ean13CheckerScreen) · รายการจอข้อมูลหลักแบบตารางเดียว (IC_MASTER_CONFIGS) · สารบัญหน้าจอทั้งหมดของ SML Ai Account (ต้นไม้เมนู → หน้าจอ → โน้ต)