# สแกนหยิบสินค้า — Handheld

เมนู: Tab Operate → Scan Pick

ใช้สำหรับสแกนหยิบสินค้าจาก DSO ที่มีสถานะ **ALLOCATED** ผ่าน Handheld โดยสแกนตาม Scan Profile ที่กำหนด

## วงจรสถานะขณะหยิบสินค้า

| สถานะ             | ความหมาย                                                         |
| ----------------- | ---------------------------------------------------------------- |
| **ALLOCATED**     | จองสินค้าแล้ว — พร้อมเข้าหยิบ                                    |
| **PICKING**       | กำลังสแกนหยิบอยู่ (สแกน Sequence แรกสำเร็จแล้ว)                  |
| **PICKED**        | หยิบสำเร็จครบทุกรายการ                                           |
| **PAR ALLOCATED** | หลัง Re-Allocate แล้วของไม่พอ — บางส่วนหยิบได้ บางส่วนหยิบไม่ได้ |

## **Scan Profile ที่ใช้บ่อย**

| Profile              | ลำดับการสแกน                   | ใช้เมื่อ                      |
| -------------------- | ------------------------------ | ----------------------------- |
| Location > SKU > QTY | สแกน Location → SKU → ใส่จำนวน | หยิบแบบ Partial Pallet        |
| Location > Pallet ID | สแกน Location → Pallet ID      | หยิบแบบ Full Pallet ทั้งพาเลท |

---

## 1.1 การรับ Notification และเข้างานหยิบ

เมื่อมีการจองสินค้า (Allocate) สำเร็จ ระบบจะส่ง Notification แจ้งงานหยิบไปที่ Handheld ทันที

### วิธีที่ 1 — กดจาก Pop-up ที่เด้งขึ้นมา

1. เมื่อ Notification เด้งขึ้นที่หน้าจอ HH

2. กดที่ **Notification** นั้นโดยตรง

3. ระบบพาไปที่ใบงานหยิบสินค้าของ DSO ที่แจ้งเตือนทันที

### วิธีที่ 2 — เข้าจาก Tab Notification

1. Handheld → Tab **Notification**

2. กดที่รายการแจ้งเตือนที่ต้องการ

3. ระบบพาไปที่ใบงานหยิบสินค้า

> 📌 **หมายเหตุ:** ทั้ง 2 วิธีพาไปยังใบงานเดียวกัน — ข้อมูลงานหยิบตรงกับใบจอง สแกนต่อได้ทันที

### วิธีที่ 3 — เข้า Scan Pick โดยตรง (ไม่ผ่าน Notification)

1. Handheld → Tab **Operate** → เมนู **Scan Pick**

2. เลือกใบงานที่ต้องการจากรายการ

---

## 1.2 การสแกนหยิบสินค้า (กรณีปกติ)

> **เงื่อนไข:** DSO ต้องมีสถานะ **ALLOCATED**

### ขั้นตอนที่ 1 — เข้าใบงาน

1. Handheld → Tab **Operate** → เมนู **Scan Pick**

2. เลือกใบงานที่ต้องการ

3. ตรวจสอบ Profile ที่แสดงอยู่:

   * รายการ **Full Pallet** → แสดงสัญลักษณ์ **FULL** และใช้ Profile Full Pallet

   * รายการ **Partial Pallet** → ใช้ Profile Partial Pallet

### ขั้นตอนที่ 2 — สแกนหยิบ

1. สแกนตาม **Scan Profile** ที่กำหนด จนครบทุกรายการ

   * *(เมื่อสแกน Sequence แรกสำเร็จ → DSO เปลี่ยนเป็น **PICKING**, Inventory: Allocated Qty → Picking Qty)*

   * *(เมื่อสแกนครบ → Tag เปลี่ยนจาก **PENDING** → **MATCH**)*

2. คลิก **Confirm Pick**

### ผลลัพธ์ที่ถูกต้อง

* ขึ้นข้อความ **"Make List Success"**

* DSO เปลี่ยนสถานะเป็น **PICKED**

* Inventory: Picking Qty → **Picked Qty**

> ⚠️ **ข้อควรรู้:** ปุ่ม Confirm Pick จะเป็น **Disable** หากสแกนยังไม่ครบทุกรายการ — ต้องสแกนให้ครบก่อน

---

### กรณีพิเศษ: SKU มีหลาย Pack Code

เมื่อสแกน SKU Code ที่มีมากกว่า 1 Pack Code → ระบบ **Pop-up ให้เลือก Pack Code**

* รายการ Pack Code และ Barcode ตรงกับ Master SKU

* เลือก Pack Code แล้วสแกนต่อได้ทันที

> 📌 **ถ้าตั้ง Default Pack Code ไว้ที่ Master SKU** → ระบบข้ามการ Pop-up ให้เลือกอัตโนมัติ

### กรณีพิเศษ: SKU Barcode มีหลาย SKU Code

เมื่อสแกน Barcode เดียวกันแต่มีหลาย SKU Code → ระบบ **Pop-up ให้เลือก SKU Code**

* เลือก SKU Code ที่ถูกต้องก่อนสแกนต่อ

### กรณีพิเศษ: SKU Barcode เป็น Unique

เมื่อสแกน SKU Barcode ที่ Unique ในระบบ (มีเพียง SKU เดียว) → ระบบใส่ SKU ให้อัตโนมัติ ไม่มี Pop-up

### กรณีพิเศษ: ข้ามลำดับรายการที่ระบบแนะนำ

สามารถเริ่มสแกนจาก SKU ใดก็ได้ โดยไม่จำเป็นต้องทำตามลำดับที่ระบบแนะนำ

* **ข้ามภายใน Full หรือ Partial เดียวกัน:** แตะที่ช่อง SKU ในรายการที่ต้องการ → สแกนต่อได้

* **ข้ามจาก Full Pallet ไป Partial Pallet:**

  1. แตะที่ SKU ตัวที่เป็น Partial Pallet → Profile เปลี่ยนเป็น Partial อัตโนมัติ

  2. สแกนตาม Partial Profile จนครบ

  3. เมื่อถึง Full Pallet → Profile เปลี่ยนกลับเป็น Full อัตโนมัติ

---

## ข้อผิดพลาดที่พบขณะสแกน

| Error Message                                           | สาเหตุ                                               |
| ------------------------------------------------------- | ---------------------------------------------------- |
| `Location not found`                                    | สแกน Location ที่ไม่ตรงกับที่จองไว้                  |
| `Invalid SKU Barcode`                                   | สแกน SKU ไม่ตรงกับที่จอง หรือเลือก SKU/Pack Code ผิด |
| `SKU not found or Barcode type does not match`          | สแกน SKU ที่ไม่มีอยู่ในระบบเลย                       |
| `Picking quantity must not more than selected quantity` | สแกน Qty เกินจำนวนที่จอง                             |

> 📌 **หมายเหตุ:** Error ของ SKU จะปรากฏหลังสแกนจบ Sequence นั้น ไม่ใช่ทันทีที่สแกน

---

## 1.3 การสแกนหยิบแบบแบ่ง Picker Zone

ใช้เมื่อสินค้าใน DSO ถูกจองจากหลาย Zone และต้องการแบ่งให้ Picker แต่ละคนหยิบเฉพาะ Zone ตนเอง

> **เงื่อนไข:** ต้องผูก Location กับ Zone ไว้ก่อน และตั้งค่า Zone ใน HH ให้ตรงกับ Zone ที่รับผิดชอบ

### 1.3.1  การหยิบแบบ 1 Zone ครอบคลุมทั้งใบงาน

ทำตามขั้นตอน 1.2 ปกติ — เมื่อ Confirm Pick สำเร็จ DSO เปลี่ยนเป็น **PICKED** ทันที

### 1.3.2 การหยิบแบบหลาย Zone ในใบงานเดียว

### (1) Picker Zone แรก:

1. เข้าใบงาน → สแกนเฉพาะรายการใน Zone ตนเอง

2. กด **Confirm Pick**

3. ผลลัพธ์: Picker Status ของ Zone นี้ = **Done** — DSO ยังเป็น **PICKING** (รอ Zone อื่น)

### (2) Picker Zone ถัดไป:

1. เข้าใบงานด้วย User ของ Zone ถัดไป — เห็นเฉพาะรายการใน Zone ตนเอง

2. สแกนรายการใน Zone ตนเองจนครบ

3. กด **Confirm Pick**

4. ผลลัพธ์: เมื่อทุก Zone Confirm Pick ครบ → DSO เปลี่ยนเป็น **PICKED**

### **กรณีพิเศษ: Picker หลายคนใน Zone เดียวกัน**

* Picker 2 คนตั้งค่า Zone เดียวกัน → เห็นใบงานและสถานะเหมือนกันทุกอย่าง

* สแกนแล้ว Confirm Pick ได้ตามปกติ

> ⚠️ **กฎสำคัญ:** ห้ามสแกน Location ที่อยู่ใน Zone อื่นที่ไม่ได้เลือกไว้ → ระบบแสดง Error ทันทีและไม่บันทึก

### Picker Zone Status

| สถานะ           | ความหมาย                         |
| --------------- | -------------------------------- |
| **Pending**     | ยังไม่ได้เริ่มสแกนในงานนี้       |
| **In-progress** | สแกนไปแล้วบางส่วน ยังไม่ Confirm |
| **Done**        | Confirm Pick สำเร็จแล้ว          |

---

## 1.4 การแจ้งสินค้าสูญหาย (Lost) ระหว่างหยิบ

ใช้เมื่อไปถึง Location แล้วไม่พบสินค้าหรือสินค้าไม่ครบ

### กรณีที่ 1 — Lost บางส่วน (Partial Lost)

1. สแกนตาม Profile ที่กำหนดสำหรับสินค้าที่มี (เช่น 1 ชิ้น)

2. **สไลด์การ์ด** รายการที่ต้องการแจ้ง Lost จากขวาไปซ้าย

3. เลือก **Lost/Damage**

4. ระบบแสดง Pop-up "Item not found or damage"

5. เลือก Document Type สำหรับ **Hold**

6. เลือก Location ที่ตั้งค่าไว้สำหรับทำ Lost

7. กด **Confirm**

> ผลลัพธ์: ระบบบันทึกการแจ้ง Lost — สแกนต่อได้ในส่วนที่เหลือ

### กรณีที่ 2 — Lost ทั้ง Location (Full Location Lost)

1. **สไลด์การ์ด** รายการที่ต้องการแจ้ง Lost โดยไม่สแกนสินค้าก่อน

2. เลือก **Lost/Damage**

3. ระบบแสดง Pop-up "Item not found or damage"

4. เลือก Document Type สำหรับ **Hold**

5. เลือก **Location Lost** ที่ตั้งค่าไว้

6. กด **Move and Reallocate**

### **ผลลัพธ์เมื่อมี Inventory สำรอง:**

* ระบบ Re-Allocate Inventory ตัวอื่นให้อัตโนมัติ → แสดงรายการใหม่ในงาน

* ย้ายสินค้าทั้งหมดใน Location ที่แจ้ง Lost → Location Lost

* Inventory ที่ย้ายไปถูก **Hold** อัตโนมัติ

* ระบบสร้างใบงาน **MOVE** และ **HOLD** อัตโนมัติ

### **ผลลัพธ์เมื่อ Inventory ไม่พอ Re-Allocate:**

* ระบบแสดง **"Stock not found"**

* เลือก **Close** → รายการที่หาสต็อกไม่ได้ถูกแยกออก, DSO = **PAR ALLOCATED** (ยังสแกนส่วนที่มีต่อไม่ได้)

* เลือก **Next Picking** → รายการที่หาสต็อกไม่ได้ถูกแยกออก, DSO = **PAR ALLOCATED** (สแกนส่วนที่มีต่อได้ และกด Confirm Partial Pick ได้)

---

## 1.5 การแจ้งสินค้าเสียหาย (Damage) ระหว่างหยิบ

ขั้นตอนเหมือน **Lost** แต่เลือก Damage แทน — ผลลัพธ์ต่างกันที่ Document Type และสถานะ Inventory

### กรณีที่ 1 — Damage บางส่วน (Partial Damage)

1. สแกนตาม Profile ที่กำหนดสำหรับสินค้าที่ดี

2. **สไลด์การ์ด** รายการที่เสียหาย

3. เลือก **Lost/Damage** → เลือก **Stock Damage**

4. ระบบแสดง Pop-up "Item not found or damage"

5. เลือก Document Type สำหรับ **Adjust**

6. เลือก Location ที่ตั้งค่าไว้สำหรับทำ Damage

7. กด **Confirm**

### กรณีที่ 2 — Damage ทั้ง Location (Full Location Damage)

1. **สไลด์การ์ด** รายการที่เสียหาย โดยไม่สแกนก่อน

2. เลือก **Lost/Damage** → เลือก **Stock Damage**

3. เลือก Document Type สำหรับ **Adjust**

4. เลือก **Location Damage** ที่ตั้งค่าไว้

5. กด **Move and Reallocate**

### **ผลลัพธ์ต่างจาก Lost:**

* Inventory ที่ย้ายไปถูก **Adjust เป็น Damage** (ไม่ใช่ Hold)

* ระบบสร้างใบงาน **MOVE** และ **Adjust** (ไม่ใช่ HOLD)

* Logic Re-Allocate / Stock not found / PAR ALLOCATED เหมือนกัน

---

## 1.6 การยกเลิกงานหยิบ (Unpick)

> **เงื่อนไข:** ยกเลิกได้เฉพาะขณะ DSO มีสถานะ **PICKING** เท่านั้น หาก DSO ยัง **ALLOCATED** → ไม่มีปุ่ม Unpick

### ยกเลิกแบบไม่แบ่ง Zone (Normal Pick)

1. Handheld → Tab **Operate** → **Scan Pick** → เข้าใบงาน

2. กด **⋯ (3 จุด)** มุมขวาบน

3. เลือก **Unpick** → กด **OK** ที่ Pop-up

### **ผลลัพธ์:**

* DSO ถอยกลับเป็น **ALLOCATED**

* Picking Qty ตีคืนกลับเป็น Allocated Qty ทั้งหมด

### ยกเลิกแบบแบ่ง Zone — กรณีทุก Zone ยังไม่เสร็จ

1. เข้าใบงานด้วย User ของ Zone ที่ต้องการยกเลิก (Status = In-progress)

2. กด **⋯** → เลือก **Unpick** → กด **OK**

### **ผลลัพธ์:**

* DSO ถอยกลับเป็น **ALLOCATED**

* Picking Qty **ทั้งใบงาน** ตีคืนกลับ (ทุก Zone รวมกัน)

* Picker Status ของ Zone นี้ = **Pending**

### ยกเลิกแบบแบ่ง Zone — กรณี Zone อื่น Done แล้ว

1. เข้าใบงานด้วย User ของ Zone ที่ต้องการยกเลิก (Status = In-progress)

2. กด **⋯** → เลือก **Unpick** → กด **OK**

### **ผลลัพธ์:**

* ยกเลิกเฉพาะ Zone ตนเอง — Zone ที่ Done แล้วไม่ได้รับผลกระทบ

* Picking Qty ตีคืนเฉพาะสินค้าใน Zone ที่ยกเลิก

* DSO ยังคงสถานะ **PICKING**

* Picker Status ของ Zone ที่ยกเลิก = **Pending**


