สมอง SML

คลังความรู้ / หน้าจอทีละจอ

#screens#master

ปรับราคาสินค้า (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 จุด และเครื่องหมายลบ

ปุ่ม

ปุ่ม ทำอะไร
แก้ไข เข้าโหมดแก้ไข ถ้าไม่มีแถวสร้างแถวว่างให้ (ปิดเมื่ออ่านอย่างเดียว)
เพิ่มใหม่ เริ่มชุดรายการใหม่ (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 จะล้างผลตรวจเดิม ต้องกดตรวจใหม่
  • ปุ่ม ลบ ล้างเฉพาะรายการบนหน้าจอ ไม่ได้ลบราคาในฐานข้อมูล

ที่มาในโค้ด