สมอง SML

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

#screens#process

ปรับปรุงสต็อกอัตโนมัติจากใบตรวจนับ / ปรับมูลค่า Lot คงค้าง

สามเมนูในกลุ่มคลังสินค้า สร้าง "ใบปรับปรุงสต็อก" ให้เองจากข้อมูลที่ผู้ใช้เลือก แล้วตัวระบบออกเลขที่และเขียนเอกสารจริง ยอดทุกตัวคำนวณซ้ำใน Go ไม่เชื่อค่าจากหน้าจอ (หัวไฟล์ LotAdjustScreens.tsx:7) หน้าจอทำหน้าที่เลือกใบ/รายการ ยืนยัน และแสดงผล ตรรกะอยู่ที่ เครื่องมือสต็อก กลุ่ม route stocktools (Stock Tools) และ API สต็อกสินค้า (Process stock actions: stock/rebuild, stocktools/*, point-recal, check-ic-trans, ai-smart-reorder)

ใบปรับปรุงที่ได้เป็นสองแบบ (หัวไฟล์ :3-6): ปรับเพิ่ม (รูปแบบเอกสาร IA, ประเภท 66 ปรับปรุงสต็อกสินค้า/วัตถุดิบ (เพิ่ม) (Stock Adjustment In)) และ ปรับลด (IS, ประเภท 68 ปรับปรุงสต็อกสินค้า/วัตถุดิบ (ลด) (Stock Adjustment Out)) ส่วนต้นทางคือเอกสารนับสต็อก ประเภท 76 ตรวจนับสินค้า (Stock Count)

รหัส เมนู จอ ผูกที่
2045 ปรับปรุงสต็อกสินค้า/วัตถุดิบอัตโนมัติ (menu_ic_stk_adjust_auto) StockAutoAdjustLotScreen mode="normal" screenRegistry.tsx:466
2046 ปรับปรุงสต็อกสินค้า/วัตถุดิบอัตโนมัติ (สินค้า Lot) (menu_ic_stk_adjust_lot_auto) StockAutoAdjustLotScreen mode="lot" :482
2047 ปรับปรุงมูลค่าสินค้า Lot คงค้าง (menu_ic_adjust_stock_lot_amount) LotAmountAdjustScreen :490
มีรหัสเมนูซ้ำ menu_ic_stk_adjust_auto_2 ที่เปิดจอเดียวกับ 2045 (:474, ค่าสำรองรหัสเดิม 2.19.6 เหมือนกัน) กลไกเมนูดู ทะเบียนหน้าจอและโครงเมนู (Screen registry & smlMenu) รหัสเก่า: 2045 = 2.19.6, 2046 = 2.19.7

2045 / 2046 ปรับปรุงสต็อกอัตโนมัติ (StockAutoAdjustLotScreen, :537-943)

เปรียบเทียบผลนับในใบตรวจนับกับยอดในระบบ แล้วสร้างใบปรับ

  • 2045 (normal) เทียบยอดตามคลัง/ที่เก็บ (ส่ง ignoreLot: true ไปที่ Go) และ 2046 (lot) เทียบยอดตาม LOT ด้วย (:667) จึงตารางตรวจมีคอลัมน์ LOT เพิ่มเฉพาะ 2046 (CHECK_COLS_LOT) หัวตารางบนบอกโหมด "สร้างเอกสารปรับปรุงสต็อกตามผลต่างคลัง/ที่เก็บ" หรือ "...ตามผลต่างของ LOT"
  • แถบเงื่อนไข: จากวันที่ / ถึงวันที่ (ค่าเริ่มต้น วันที่ 1 ของเดือนนี้ ถึงวันนี้), รหัสเอกสาร ปรับเพิ่ม (IA) และ รหัสเอกสารปรับปรุงลด (IS) ที่ปุ่มค้นเปิดกล่อง "เลือกรูปแบบเอกสาร" (DocFormatPickerModal, :464-535 เลือกรูปแบบเลขที่ IA หรือ IS จากรูปแบบเลขที่ในระบบ ดู erp_doc_format — รูปแบบ/ชนิดเอกสารและเลขที่รัน; ไม่มีรูปแบบขึ้น "ไม่พบรูปแบบเอกสาร ... (ระบบจะสร้างเลขที่อัตโนมัติ)"), ช่อง "รูปแบบเอกสาร" อ่านอย่างเดียวแสดงรูปแบบเลขที่ (เช่น IA-YYMM-####) และติ๊ก แสดงทั้งหมด เพื่อรวมใบที่ปรับแล้ว ตั้งต้นเลือกรูปแบบแรกของแต่ละประเภทให้เอง (:567-577)
  • เปิดจอแล้ว โหลดใบตรวจนับทันที (load, :599-620) เรียก POST /api/process/stocktools/lotautolist ด้วย {dateBegin, dateEnd, showAll} ผลเป็นตารางใบนับ (เอกสารวันที่, เวลา, เลขที่, อ้างอิงวันที่/เลขที่, หมายเหตุ, สถานะ "ปรับปรุงแล้ว" / "ยังไม่ได้ปรับ") ใบที่ยังไม่ปรับถูกติ๊กไว้ให้ทั้งหมด ใบที่ปรับแล้วไม่ถูกนับรวมในการประมวลผล (นับเฉพาะ !processed, :582) ขึ้นสถานะ พบเอกสารตรวจนับ N ใบ
  • ตารางล่าง: รายการในใบนับที่เลือก (lotautocheck) หรือ "รายการตรวจสอบสินค้าซ้ำ"
  • ปุ่ม: Load · เลือกรูปแบบเอกสาร · เลือกทั้งหมด (เฉพาะใบยังไม่ปรับ) · ไม่เลือกทั้งหมด · ตรวจสอบสินค้าซ้ำ (lotautocheck ด้วย onlyDuplicate: true ใช้ใบที่ติ๊ก หรือทุกใบถ้ายังไม่ติ๊ก, :639-655) · สินค้าที่ไม่มีการตรวจนับและมียอดคงเหลือ (เปิดกล่องด้านล่าง) · ประมวลผล · Stop
  • ประมวลผล (หรือ Ctrl+S): ไม่มีสิทธิ์เพิ่ม/แก้ขึ้น คุณไม่มีสิทธิ์ "เพิ่ม/แก้ไขข้อมูล" ...; ไม่ได้ติ๊กใบที่ยังไม่ปรับขึ้น "กรุณาเลือกเอกสารนับสต็อกที่ยังไม่ได้ปรับปรุง"; แล้วถามยืนยัน ต้องการทำการประมวลผล ปรับปรุงสต็อกสินค้า/วัตถุดิบ (N ใบ) หรือไม่ ยืนยันแล้ว POST /api/process/stocktools/lotautorun ด้วย {docNos, docFormatCode, downDocFormatCode, ignoreLot} (:657-683) ผลขึ้นข้อความรวม เช่น ปรับเพิ่ม <เลขที่> (N รายการ) · ปรับลด <เลขที่> (M รายการ) หรือ "ไม่มีรายการที่ต้องปรับปรุง" และ ข้าม N รายการที่ปรับแล้ว แล้วโหลดตารางใหม่ ข้อความสถานะ: "Start Process..." -> "Process Success!!"
  • Stop ไม่ได้ยกเลิกงานที่เซิร์ฟเวอร์: stopProcess แค่ตั้งธงและปลดสถานะ busy ที่หน้าจอ แล้วไม่แสดงผลลัพธ์เมื่อคำขอกลับมา (:684-689) ไม่มี AbortController คำขอที่ส่งไปแล้วจึงอาจสร้างใบปรับจริง ถ้ากด Stop ให้กด Load ตรวจสถานะใบนับ ("ปรับปรุงแล้ว") ก่อนประมวลผลซ้ำ
  • กล่อง "สินค้าที่ไม่มีการตรวจนับและมียอดคงเหลือ" (ProductNotFoundModal, :282-462): หาสินค้าที่มียอดในคลังแต่ไม่ถูกนับในใบที่เลือก เพื่อออกใบปรับให้เป็น 0 ช่อง เอกสารวันที่ (อ่านอย่างเดียว), เวลา (เช่น 23:59 ว่าง = ทั้งวัน), รายการคลัง (ติ๊กได้ ค่าเริ่มต้นติ๊กทุกคลังตามสิทธิ์ ดู สิทธิ์คลัง/ที่เก็บรายกลุ่มผู้ใช้ (perm_wh_shelf)) ปุ่ม ประมวลผลค้นหา (notcountedlist) แสดงสินค้า/คลัง/ที่เก็บ/จำนวน และปุ่ม สร้างเอกสารปรับปรุงเป็น 0 (notcountedrun) ไม่เลือกคลังขึ้น "กรุณาเลือกคลังสินค้าอย่างน้อย 1 คลัง"

2047 ปรับปรุงมูลค่าสินค้า Lot คงค้าง (LotAmountAdjustScreen, :93-280)

ปรับ LOT ที่จำนวนคงเหลือเป็น 0 แต่ยังมีมูลค่าเหลือ ให้มูลค่าเป็น 0 (โปรแกรมเดิม StockLotAdjustmentForm)

  • เงื่อนไข: ณ วันที่ (วันนี้), สินค้าตั้งแต่ / ถึง (ปุ่มค้นหาเปิด รายการข้อมูล ค้นหา lookup และ dialog กลาง (SmlDataList / SmlLookupModal / SmlDialog) ชุดค้นสินค้า; เลือก "ตั้งแต่" แล้วช่อง "ถึง" ว่างจะเติมค่าเดียวกันให้), รูปแบบ ปรับเพิ่ม (IA) และ รูปแบบ ปรับลด (IS)
  • เปิดจอแล้วโหลดทันที (lotamountload) ปุ่ม โหลดข้อมูล โหลดใหม่ ตาราง: รหัสสินค้า, ชื่อสินค้า, หน่วยนับ, คลัง, ที่เก็บ, LOT, จำนวนคงเหลือ, มูลค่าคงเหลือ ติ๊กเลือกรายการได้ (ค่าเริ่มต้นติ๊กทั้งหมด) ถ้าผลถูกตัดขึ้นสีแดง "แสดงเพียงบางส่วน กรุณาจำกัดช่วงรหัสสินค้าให้แคบลง" ว่างขึ้น "ไม่พบ LOT ที่มีมูลค่าคงเหลือค้าง"
  • ปุ่ม ปรับปรุงมูลค่า (Ctrl+S; ปิดเมื่อไม่ได้ติ๊กรายการ) ถามยืนยัน "ต้องการปรับปรุงมูลค่าคงเหลือ ของสินค้าหรือไม่" ส่ง lotamountsave ด้วยเงื่อนไข + รายการที่ติ๊ก (รหัส/คลัง/ที่เก็บ/LOT) และรูปแบบเลขที่ IA/IS สร้างใบปรับเพิ่ม/ลดตามที่ Go คำนวณ แล้วขึ้นข้อความผลและโหลดใหม่

ตารางที่เกี่ยวข้อง

ตารางที่ Go เขียนไม่ปรากฏในโค้ดหน้าจอ เอกสารที่ได้คือใบปรับ 66/68 ใน หัวเอกสารสินค้า/ซื้อ/ขาย (ic_trans) / รายการสินค้าในเอกสาร (ic_trans_detail) (รายการ LOT ที่ ยอดสินค้าตามล็อต (ic_trans_detail_lot)); รูปแบบเลขที่อ่านจาก erp_doc_format — รูปแบบ/ชนิดเอกสารและเลขที่รัน ผลกระทบต่อต้นทุน/ยอดคงเหลือดู เคลื่อนไหวสต็อกและต้นทุน (Stock Movement & Costing) และ เลข LOT, Serial Number และวันหมดอายุ (lot_number_1 / serial_number / date_expire)

ข้อควรระวัง

  • เอกสารที่สร้างเป็นเอกสารจริง (66/68) ย้อนด้วยการยกเลิกเอกสาร ไม่มีปุ่ม "ย้อนการปรับ" ในจอ ดู ยกเลิกและอนุมัติเอกสาร (Document cancel / approve)
  • สิทธิ์: สร้างใบปรับถือเป็นการเขียน ต้องมีสิทธิ์เพิ่มหรือแก้ไข (คอมเมนต์ :94) ผู้ใช้อ่านอย่างเดียวกดไม่ได้
  • ไม่มีคีย์ Esc ในทั้งสามจอ (useShortcuts(ask, null, true))

ที่มาในโค้ด