สมอง SML

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

#screens#transaction

ตารางรายการสินค้า/จำนวนเงินในเอกสาร (TransItemGrid)

ตารางกลางที่อยู่ในแท็บ "รายการ" / "รายการสินค้า / เอกสาร" ของ จอบันทึกเอกสารธุรกรรม มุมมองผู้ใช้ (UniversalTransScreen) ใช้ซ้ำกับทุกเอกสารที่มีบรรทัด: สินค้า (ซื้อ ขาย สต็อก), จำนวนเงิน (รายได้ ค่าใช้จ่าย ตั้งหนี้อื่น), เช็ค/โอนเงิน และเงินมัดจำ คอลัมน์ที่โผล่เปลี่ยนตามสวิตช์ของเอกสารชนิดนั้น (layout, ที่มา transLayouts.ts) ภาพรวมกลไกและไฟล์ใกล้เคียงดู จอเอกสารธุรกรรมแบบเดียวกันทุกจอ (UniversalTransScreen) และ ตารางรายการและหน้าต่างค้นหา (SmlDataList, SmlLookupModal, SmlLookupInput) จอยกเลิก/อนุมัติเรียกตารางนี้ซ้ำแบบอ่านอย่างเดียว ดู จอยกเลิก/อนุมัติเอกสาร (UniversalCancelConfirmScreen)

เปิดจากไหน

ทุกเมนูที่ gridMode เป็น item หรือ amount และโหมด deposit (ใช้ตารางย่อย DepositGrid ด้านล่าง) เอกสารลูกหนี้/เจ้าหนี้แบบใบค้างชำระใช้ตารางอื่น ดู หัวเอกสาร แผงล่าง และแท็บเสริมของจอเอกสาร (TransTopForm / TransBottomPanel / TransExtraTabs) ถ้าเป็นเอกสารเช็ค/โอนเงิน ระบบส่ง getChequeGridSpec(transFlag) ให้ตารางเปลี่ยนเป็นคอลัมน์เช็ค (UniversalTransScreen.tsx:3596)

คอลัมน์ (ตัวที่แสดงตามเงื่อนไข)

คอลัมน์ แสดงเมื่อ
# เสมอ
ประเภทเอกสาร, (หัวคอลัมน์อ้างอิง) ผู้ใช้กดปุ่ม "เอกสารอ้างอิง" ใต้ตาราง และเอกสารชนิดนั้นมีคอลัมน์อ้างอิง (:229-231)
รหัสสินค้า (หรือ "รหัสรายได้/ค่าใช้จ่าย" ตามชนิดเอกสาร; จอเช็คใช้ "เลขที่เช็ค" หรือ "สมุดบัญชี") เสมอ (codeLabel, :235)
ชื่อสินค้า / รายละเอียด (โหมดจำนวนเงินเป็น "ชื่อ", "ชื่อรายได้", "ชื่อค่าใช้จ่าย") เสมอ
จากคลัง / จากที่เก็บ (หรือ คลัง / ที่เก็บ), เข้าคลัง / เข้าที่เก็บ เอกสารที่ใช้คลัง; "เข้า..." เฉพาะเอกสารโอนย้าย (showToWhLocation)
เลข LOT เอกสารที่ระบุล็อต
จอเช็ค: สมุดบัญชี (โอนเข้า), ยอดโอน, ค่าธรรมเนียม, เลขที่เช็ค, ธนาคาร, สาขา, วันครบกำหนด, เอกสารอ้างอิง ตาม ChequeGridSpec ของ flag นั้น (ดูด้านล่าง)
โหมดจำนวนเงิน: คำอธิบายรายการ เอกสารรายได้/ค่าใช้จ่าย/ตั้งหนี้อื่น
โหมดสินค้า: ขนาดสินค้า, จำนวนขาย, หน่วยช่วยขาย flag 30, 34, 36, 44, 144, 46, 48 และ ตั้งค่า "ใช้หน่วยเปรียบเทียบ" (erp_option.use_compare_unit) เปิดอยู่
หน่วยนับ โหมดสินค้า
จำนวนที่ขอ / ราคาที่ขอ / ส่วนลดที่ขอ (พื้นเหลือง) เฉพาะจออนุมัติใบเสนอซื้อ (showRequested)
จำนวน (ชื่อหัวเปลี่ยนได้ เช่น "จำนวนยกเลิก", "จำนวนอนุมัติ") โหมดสินค้า
จำนวน Packaging flag 12, 310, 60 และ เปิดระบบควบคุมคุณภาพ (use_quality_control_system)
ราคา (ชื่อหัวตามเอกสาร) เอกสารที่มีราคา (showPrice)
ส่วนลด เอกสารที่มีส่วนลด (showDiscount)
จำนวนเงิน เสมอ
วันหมดอายุ flag 12, 14, 310, 315, 316, 48, 54, 76, 66, 68, 60, 56, 58, 72, 501, 502, 503, 509 และ เปิด "ใช้วันหมดอายุ" (use_expire) (flag 44 และ 144 มีคอลัมน์ซ่อน, ไม่โชว์)
ผู้ผลิต flag 6 และ เปิดระบบควบคุมคุณภาพ
จัดการ เสมอ

ค่าเปิด/ปิดของ 3 ตัวเลือก (วันหมดอายุ, หน่วยเปรียบเทียบ, ระบบควบคุมคุณภาพ) อ่านจากตัวเลือกระบบครั้งเดียวเมื่อจอเปิด (useExpireColumn.ts:16-32; ตั้งค่าที่ กำหนดข้อเลือกพิเศษต่างๆ (OptionsForm)) ที่มาของชุด flag เหล่านี้อยู่ใน transLayouts.ts:171-191

การกรอกในแถว

  • รหัสสินค้า: พิมพ์แล้วแปลงเป็นตัวพิมพ์ใหญ่ทันที ปุ่มแว่นขยาย "ค้นหาสินค้า" เปิดกล่องค้นจากทะเบียนสินค้า (ic_inventory) หรือจากตารางที่เมนูนั้นกำหนดไว้ (itemLookup เช่น รายได้ ค่าใช้จ่าย สมุดบัญชี) เมนูที่กำหนดเป็น null ไม่เปิดกล่องค้น (UniversalTransScreen.tsx:3646-3671); จอเช็คที่มี "เลือกเช็คจากทะเบียน" เปิดกล่องเลือกเช็คแทน (:433-452)
  • ชื่อสินค้า: แก้ได้ ขึ้นบรรทัดใหม่ไม่ได้ (Enter ถูกกัน, ตัวขึ้นบรรทัดใหม่ถูกแปลงเป็นช่องว่าง, :462-470)
  • ออกจากช่อง หรือ Enter ในช่องรหัสสินค้า / ขนาด / จำนวนขนาน / หน่วยนับ / จำนวน / ราคา / ส่วนลด: ถ้าค่าเปลี่ยนจากตอนเข้าช่อง ระบบสั่ง backend คำนวณบรรทัดนั้นใหม่ (หาราคา หน่วย คลัง ยอดเงิน) (commitOn, :211-222) เฉพาะเอกสารกลุ่มสินค้า (flag 2, 6, 12, 14, 16, 30, 34, 36, 44, 46, 48, 54, 56, 58, 60, 66, 68, 70, 72, 76, 122, 124, 128, 276, 310, 311, 315, 316, 317) ที่เมนูไม่ได้กำหนดตารางรหัสพิเศษ (gridBackend, UniversalTransScreen.tsx:262-265,2132) เอกสารอื่นไม่คำนวณตอนออกจากช่อง
  • ตัวเลข: ช่องจำนวนใช้จำนวนทศนิยมตามตัวเลือกระบบ ช่องเงินเป็นข้อความทศนิยม ไม่ใช้ตัวเลขไบนารี ดู ตัวเลข เงิน ภาษี และปี พ.ศ. ฝั่ง frontend (numeric.ts)
  • สินค้าที่ใช้วันหมดอายุแต่ยังไม่ใส่วันที่ ตัวอักษรทั้งแถวเป็นสีม่วง (:420-423)
  • สินค้าหน่วยขนาน: ใต้ชื่อมีป้าย "หน่วยนับขนาน (บังคับป้อนคู่ขนาน)" ถ้ายังไม่ใส่หน่วยหรือจำนวนขนานขึ้น "* กรุณาระบุหน่วยและจำนวนขนาน" (:471-480)
  • สินค้าชุด: ในเอกสารขาย (flag 30, 34, 36, 44, 46, 48) แถวลูกของชุดแก้ไขไม่ได้ทั้งแถว; ในเอกสารเบิก (56, 58, 122) แก้ได้ แต่ล็อกรหัสและจำนวน (:110-111,239-240) ลบแถวแม่ของชุดจะลบแถวลูกตามด้วย (UniversalTransScreen.tsx ตอน onRemoveLine)
  • ในโหมดดูข้อมูล แถวว่างถูกซ่อน (แสดงเฉพาะแถวที่มีรหัส ชื่อ หมายเหตุ เอกสารอ้างอิง หรือยอด, :256-269)

ปุ่มท้ายแถว (คอลัมน์ "จัดการ")

ปุ่ม เงื่อนไข ผล
ราคาขาย แถวมีรหัส และเอกสารเป็น flag 30, 34, 36, 44, 46 (PRICE_INFO_FLAGS, UniversalTransScreen.tsx:268) เปิดดูราคาขาย 3 ตาราง (ทั่วไป / ตามกลุ่มลูกค้า / มาตรฐาน) ดู ป๊อปอัปราคาขาย ต้นทุน และอนุมัติวงเงินเครดิต (PriceFormulaModal / PriceInfoModal / CostLockModal / CreditApproveModal)
ไอคอนเช็คยอด แถวมีรหัส เช็คยอดคงเหลือตามคลัง ดู ป๊อปอัปซีเรียล ล็อต ยอดคงเหลือ ประวัติ สินค้าทดแทน (SerialNumberModal / LotModal / StockBalanceModal / ItemHistoryModal / ItemReplacementModal)
ไอคอน Serial Number แถวมีรหัส จัดการเลขซีเรียล ดู ป๊อปอัปซีเรียล ล็อต ยอดคงเหลือ ประวัติ สินค้าทดแทน (SerialNumberModal / LotModal / StockBalanceModal / ItemHistoryModal / ItemReplacementModal)
ไอคอนกุญแจ ล็อกต้นทุน แถวมีรหัส, ไม่ใช่โหมดจำนวนเงิน/เช็ค, อยู่โหมดแก้ไข หรือแถวถูกล็อกอยู่ เปิดล็อก/ปลดล็อกต้นทุนของบรรทัด ดู ป๊อปอัปราคาขาย ต้นทุน และอนุมัติวงเงินเครดิต (PriceFormulaModal / PriceInfoModal / CostLockModal / CreditApproveModal); tooltip "ล็อกต้นทุนอยู่ (กดเพื่อแก้/ปลดล็อก)" เมื่อล็อกอยู่
ตัวจับลากย้ายแถว โหมดแก้ไข กดค้างแล้วลากขึ้น-ลง หรือโฟกัสที่ปุ่มแล้วกดลูกศรขึ้น/ลง (RowMoveButtons.tsx:238-263); มีรายการเดียวย้ายไม่ได้
ถังขยะ "ลบรายการ" โหมดแก้ไข ลบแถว ถ้าลบแถวสุดท้ายที่เหลือ ระบบเติมแถวว่าง 1 แถวแทน (ตารางไม่ว่างเปล่า)

ในช่องราคา มีปุ่ม ฿ "เลือกสูตรราคาขาย" (ต้องอยู่โหมดแก้ไข แถวมีรหัส) เปิดกล่องสูตรราคา (:921)

ปุ่ม "สูตร" (คำนวณในช่อง)

ปุ่มเล็กสีส้ม "สูตร" ข้างช่องจำนวน ราคา และส่วนลด ปรากฏเมื่อแถวมีรหัสและอยู่โหมดแก้ไข (ช่องจำนวนต้องเป็นเอกสารที่มีราคาด้วย) กดแล้วเปิดกล่องเล็กใต้ปุ่ม (GridShortcutPopover.tsx; ปุ่ม TransItemGrid.tsx:196-206):

ช่อง หัวกล่อง พิมพ์ ผล
จำนวน "ยอดรวม ÷ จำนวน" ยอดรวม/จำนวน เช่น 1000/4 ระบบหาราคาต่อหน่วยให้ เศษที่ปัดไปใส่ช่องส่วนลด
ราคา "ยอดรวม ÷ ราคา" ยอดรวม/ราคา เช่น 1000/25 ระบบหาจำนวนให้ เศษที่ปัดไปใส่ช่องส่วนลด
ส่วนลด "สูตรส่วนลด" =100*2+50 ใช้ + - x * / และวงเล็บ ผลลัพธ์ใส่ช่องส่วนลด

Enter หรือปุ่ม ตกลง = ใช้สูตร, Esc หรือปุ่ม ยกเลิก = ปิด ช่องส่วนลดมี "=" ใส่ไว้ให้ก่อน (GridShortcutPopover.tsx:42) ถ้า backend ตอบว่าสูตรใช้ไม่ได้ ข้อความผิดพลาดแสดงในกล่องและกล่องไม่ปิด ตัวคำนวณจริงอยู่ฝั่ง backend (onShortcut) ไม่ใช่ในจอ ใน C# เดิมพิมพ์ "/" หรือ "=" ลงในช่องได้เลย (คอมเมนต์ GridShortcutPopover.tsx:6) แต่ฝั่งเว็บไม่มีตัวดักคีย์: ใช้ได้ทางปุ่ม "สูตร" เท่านั้น ช่องส่วนลดรับ 5% หรือ 10 ตรง ๆ ได้ (placeholder "เช่น 5% หรือ 10")

แถวรวมท้ายตาราง

"รวมรายการ (N รายการ):" นับเฉพาะแถวที่มีรหัส แล้วแสดงผลรวมจำนวนและผลรวมจำนวนเงิน (:1051-1086) ผลรวมนี้ไม่ใช่ยอดสุทธิของเอกสาร (ยอดสุทธิ ภาษี ส่วนลดท้ายบิล อยู่ที่แผงล่างจากการคำนวณของ backend ดู หัวเอกสาร แผงล่าง และแท็บเสริมของจอเอกสาร (TransTopForm / TransBottomPanel / TransExtraTabs)) เอกสารขายที่มีสินค้าชุด (flag 30, 34, 36, 44, 46, 48) ไม่นับแถวที่เป็นสินค้าประเภท 3 หรือ 5 ในผลรวมจำนวนและจำนวนเงิน (:241-254) ตามที่คอมเมนต์ระบุว่าเลียนแบบ C# เดิม แต่จำนวนแถวใน "N รายการ" นับทุกแถวที่มีรหัส

แถบปุ่มใต้ตาราง

(:1090-1146) ปุ่มเหล่านี้ทำกับ แถวแรกที่มีรหัสสินค้า ไม่ใช่แถวที่กำลังเลือก:

  • ค้นหาสินค้า (โหมดแก้ไข): ถ้าแถวสุดท้ายมีสินค้าแล้ว เพิ่มแถวใหม่แล้วค้นลงแถวนั้น ถ้าไม่ก็ค้นลงแถวสุดท้าย
  • เช็คสต็อกคลัง, Serial Number, ฿ สูตรราคาขาย: ตัวเดียวกับปุ่มท้ายแถว (สูตรราคาขายใช้ได้เฉพาะโหมดแก้ไข)
  • เอกสารอ้างอิง: สลับแสดง/ซ่อนคอลัมน์เอกสารอ้างอิง ถ้าดึงรายการจากเอกสารอ้างอิงแล้วปุ่มถูกล็อกให้แสดงคอลัมน์ไว้ ("ดึงรายการจากเอกสารอ้างอิงแล้ว ต้องแสดงคอลัมน์อ้างอิง")
  • เพิ่มบรรทัดรายการใหม่ (ขวาสุด โหมดแก้ไข)

จอเช็ค/โอนเงิน

ChequeGridSpec (ChequePickerModal.tsx:10-60) กำหนดคอลัมน์ต่อ flag (ไม่มีหน่วย/จำนวน/ราคา):

  • 405: "เลขที่เช็ค", วันครบกำหนด, ธนาคาร, สาขา
  • 406: "สมุดบัญชี", เลขที่เช็ค, วันครบกำหนด, ธนาคาร, สาขา
  • 410, 413: "สมุดบัญชี", เลขที่เช็ค (เลือกเช็คจากทะเบียน)
  • 411, 412, 451, 452, 453, 461 (ผ่านรายการบัตรเครดิต), 462 (ยกเลิกผ่านรายการบัตรเครดิต): "สมุดบัญชี", เลขที่เช็ค, วันครบกำหนด (เลือกเช็คจากทะเบียน)
  • 463 (wallet): เหมือนข้างบน แต่หัวคอลัมน์เป็น "เลขที่รายการ"
  • 416, 418, 456: "เลขที่เช็ค" ในช่องรหัส, วันครบกำหนด (เลือกเช็คจากทะเบียน)
  • 422: "สมุดบัญชี (โอนออก)" บวก สมุดบัญชี (โอนเข้า), ยอดโอน, ค่าธรรมเนียม

เลือกเช็คแล้วจอเติมเลขเช็ค เลขเอกสารอ้างอิงและแถวในทะเบียนเช็ค วันครบกำหนด จำนวน 1 และราคา = ยอดเช็ค; เช็คที่ถูกเลือกในแถวอื่นของเอกสารเดียวกันจะไม่ถูกเสนอซ้ำ (TransItemGrid.tsx:1146-1175) รายละเอียดกล่องเลือกเช็คดู ป๊อปอัปเอกสารและรายการสินค้า (ChequePickerModal / DocumentFlowModal / ItemNameModal / ItemRemarkModal / ItemGridContextMenu) ส่วนเอกสารที่เกี่ยวข้องดู เช็ครับ: นำฝาก/ผ่าน/คืน/ขาดสิทธิ์/เปลี่ยน/คืนเช็คตั้งหนี้ใหม่ (Received Cheque Lifecycle), เช็คจ่าย: ผ่าน/ขาดสิทธิ์/คืน/เปลี่ยน (Paid Cheque Lifecycle), บันทึกโอนเงินระหว่างธนาคาร (Bank Transfer), บัตรเครดิต: ขึ้นเงิน/ยกเลิก (Credit Card Pass/Cancel), บันทึกขึ้นเงิน wallet (Wallet Pass)

ตารางเงินมัดจำ/ล่วงหน้า (DepositGrid)

เมื่อ gridMode เป็น deposit ตารางเหลือ 3 คอลัมน์: รายละเอียด, จำนวนเงิน, จัดการ (ลากย้าย/ลบแถว) มีคำอธิบาย "ระบุรายละเอียดและจำนวนเงินมัดจำ/ล่วงหน้า", ปุ่ม "เพิ่มบรรทัดรายการใหม่" และแถวรวม "รวมรายการ (N รายการ):" (TransItemGrid.tsx:270-281,1199-1284) รายละเอียดถูกเก็บในช่องชื่อรายการและฝั่ง backend บันทึกลง ap_ar_trans_detail.remark ตามคอมเมนต์ในโค้ด (:1197) ใช้กับ flag 9010, 10, 20, 9011, 11, 25, 9040, 40, 42, 9110, 110, 112 (DEPOSIT_FLAGS, transLayouts.ts:52) ได้แก่ จ่ายเงินล่วงหน้า / ยกมา / รับคืน (Purchase Advance Payment), จ่ายเงินมัดจำ / ยกมา / รับคืน (Purchase Deposit Payment), รับเงินล่วงหน้า / ยกมา / คืนเงิน (Sales Advance Receipt), รับเงินมัดจำ / ยกมา / คืนเงินมัดจำ (Sales Deposit Receipt)

ข้อควรระวัง

  • ปุ่มใต้ตาราง (เช็คสต็อก, Serial, สูตรราคา) ไม่ได้ทำกับแถวที่คลิกอยู่ ใช้ปุ่มท้ายแถวเมื่อต้องการแถวเจาะจง
  • คอลัมน์วันหมดอายุ/หน่วยเปรียบเทียบ/Packaging/ผู้ผลิต ไม่โชว์ถ้าตัวเลือกระบบที่เกี่ยวข้องปิดอยู่ แม้ flag ของเอกสารจะอยู่ในชุดที่รองรับ
  • ใต้ตารางขึ้นผลรวมที่ใช้ทศนิยมจำนวน/จำนวนเงินตามตัวเลือกระบบ ไม่ใช่ 2 ตำแหน่งตายตัว
  • ยังไม่ได้ตรวจแต่ละ flag ว่าเปิดคอลัมน์ไหนบ้าง (ตารางเต็มอยู่ใน transLayouts.ts เรียกจาก getTransLayout)

ที่มาในโค้ด