# Hold ที่เกิดจากการแจ้งสินค้าสูญหาย (Lost) ระหว่างหยิบสแกน

> เมื่อเจ้าหน้าที่หยิบสินค้าแล้วพบว่าสูญหายหรือไม่พบที่ Location ระบบรองรับการแจ้ง Lost ผ่าน Handheld ใน **4 Module** ที่มีรูปแบบการทำงานเหมือนกัน
>
> เมื่อแจ้ง **Lost ทั้ง Location (Full Location Lost)** และกด **Move and Reallocate**:
>
> 1. ระบบย้ายสินค้าทั้งหมดใน Location ที่แจ้ง Lost ไปยัง **Location Lost** ที่ตั้งค่าไว้
>
> 2. Inventory ที่ย้ายไปถูก **Hold ทันที**
>
> 3. ระบบสร้างใบงาน **MOVE + HOLD** คู่กันให้อัตโนมัติ
>
> 4. ระบบ **Re-Allocate** Inventory ตัวอื่นมาแทนให้อัตโนมัติ (ถ้ามีของเพียงพอ)
>
> 5. ถ้า Re-Allocate ไม่ได้ (ของหมด) →
>
>    * กด **Close** → แยก Batch รายการที่หาสต็อกไม่ได้ออก, สถานะ = **PAR ALLOCATED**, ไม่ให้สแกนต่อ
>
>    * กด **Next Picking** → แยก Batch รายการที่หาสต็อกไม่ได้ออก, สถานะ = **PAR ALLOCATED**, สแกนส่วนที่มีต่อได้
>
>    * ถ้ามี SKU เพียงตัวเดียวในใบงาน → สถานะ = **OUT OF STOCK** ทันที

## 1.1 Scan Pick Single

**เส้นทางเมนู:** Tab Operate → Scan Pick

### แจ้ง Lost บางส่วน (Partial Lost)

1. เข้าใบงาน Scan Pick ที่เตรียมไว้ (DSO Status = ALLOCATED)

2. สแกนตาม Profile ที่กำหนด ตามจำนวนที่มี (เช่น 1 Qty)

3. กดสไลด์การ์ดจากขวามาซ้าย

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

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

ระบบแสดง Pop-up "Item not found or damage" — มี Document Type สำหรับ Hold พร้อมให้เลือก Location ที่ตั้งค่าไว้สำหรับ Lost

### แจ้ง Lost ทั้ง Location (Full Location Lost)

1. เข้าใบงาน Scan Pick ที่เตรียมไว้

2. กดสไลด์การ์ดจากขวามาซ้าย → เลือก **Lost/Damage**

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

4. กด **Move and Reallocate**

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

ตาม Business Logic ร่วมด้านบน

> 📌 **กรณีอยู่ใน Load Planning:** หากใบงาน Scan Pick อยู่ภายใต้ Load Planning ที่ Status = WIP — แจ้ง Lost แล้ว Load Planning **ยังคงสถานะ WIP** ไม่เปลี่ยนแปลง

---

## 1.2 Scan Pick Wave

เส้นทางเมนู: Tab Operate → Scan Pick → เลือกงาน Wave

### แจ้ง Lost บางส่วน (Partial Lost)

1. เข้าเมนู **Scan Pick** → เลือกงาน **Wave** ที่ต้องการหยิบ

2. สแกนตาม Scan Profile ตามจำนวนที่มี (เช่น 1 Qty)

3. กดสไลด์การ์ดจากขวามาซ้าย → เลือก **Lost/Damage**

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

ระบบแสดง Pop-up "Item not found or damage" — มี Document Type สำหรับ Hold

### แจ้ง Lost ทั้งใบงาน DSO (เมื่อ DSO มีสินค้าเพียง 1 Location)

1. เข้าเมนู **Scan Pick** → เลือกงาน **Wave**

2. กดสไลด์การ์ดจากขวามาซ้าย → เลือก **Lost/Damage**

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

4. กด **Move and Reallocate**

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

* ตาม Business Logic ร่วม (ย้าย + Hold + สร้าง MOVE/HOLD)

* **DSO ที่เกี่ยวข้องถูกนำออกจาก Wave อัตโนมัติ**

* **DSO ที่เกี่ยวข้องถูกนำออกจาก Load Planning อัตโนมัติ** (ถ้าอยู่ใน Load Planning)

* Load Planning ยังคงสถานะ **WIP** ถ้ายังมี DSO ใบอื่นอยู่ใน Truck เดียวกัน

> 📌 **กรณีไม่อยู่ใน Load Planning:** Business Logic การ Hold/Re-Allocate เหมือนกันทุกอย่าง เพียงไม่มีผลกระทบกับ Load Planning

---

# Hold ที่เกิดขึ้นในกระบวนการรับคืนสินค้า

## 2.1 Return (GRR) — Immediate Hold when Receive

**เมนู:** Return

ใช้เมื่อต้องการพักสินค้าทันทีขณะยืนยันรับคืน (Confirm Return) โดยไม่ต้องสร้างเอกสาร Hold แยกทีหลัง

### 2.1.1 Hold สินค้าทั้งแถว (1 SKU)

1. ไปที่เมนู **Return** → เข้าไปในใบงาน RETURN ที่เตรียมไว้ (Status = RETURNING, Return Type = Claim)

2. กด **Next**

3. ใส่ **Return Reason** ให้ครบ

4. ติ๊ก Checkbox **"Immediate hold when receive"**

5. กรอก **Hold Reason**

6. กด **Confirm Return**

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

* ขึ้น Pop-up **Create Shipment Order** แสดงเลข DSO ที่สร้าง — กด OK เพื่อเด้งไปยังใบงาน DSO

* ใบงาน GRR เปลี่ยน Status = **RETURN**

* ข้อมูลถูกเพิ่มใน Inventory Enquiry เป็น **Row สีเทา** พร้อม **Good Status = Good และ Hold**

### 2.1.2 รับคืนแบบผสม (Damage & Hold คนละแถว)

ใช้เมื่อมี SKU มากกว่า 1 ตัวในใบงาน และต้องการ Hold บางแถว / Damage บางแถว

1. ไปที่เมนู **Return** → เข้าใบงาน → กด **Next**

2. ใส่ **Return Reason** ให้ครบ

3. ติ๊ก Checkbox "Immediate hold when receive" **เฉพาะแถวที่ต้องการ Hold**

4. กรอก **Hold Reason** ตามแถวที่ติ๊ก

5. เปลี่ยน **Received Condition** ของแถวอื่นเป็น **Damage** ตามต้องการ

6. กด **Confirm Return**

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

* ขึ้น Pop-up Create Shipment Order เหมือนเดิม

* ใบงาน GRR เปลี่ยน Status = RETURN

* Inventory Enquiry แสดง Good Status ตรงตามแถวที่ตั้งค่าไว้ — ช่อง Hold และ Damage ขึ้นแยกกันตามแถว

> ⚠️ **ข้อจำกัดสำคัญ:** **ไม่สามารถ Hold และ Damage ในบรรทัดเดียวกันได้** — หากติ๊ก Immediate Hold พร้อมเปลี่ยน Received Condition เป็น Damage ในแถวเดียวกัน ระบบจะไม่อนุญาตให้ Save

## 2.2 Scan Return — SKU Suspend / Unhold

เส้นทางเมนู: Tab Operate → Scan Return

### 2.2.1 สแกนรับสินค้าและระบุ Hold

1. เข้าใช้งาน Handheld → Tab **Operate** → เมนู **Scan Return**

2. กรอก **Return Key** ของใบงานที่เตรียมไว้ → เลือก **Return Reason** → กด **Confirm**

3. สแกนตาม Profile ที่กำหนดให้ครบทุกตัว

4. **สไลด์** SKU ที่สแกนไป จากซ้ายมาขวา

5. กด **SKU Suspend**

6. เลือก **Reason**

7. กด **OK**

8. กด **Close Job** → **Confirm Close Job**

9. กด **Confirm Return** → เซ็นลายเซ็น → **Confirm Return**

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

* รับสำเร็จ ขึ้น **"Record Success"**

* ใบงานเปลี่ยน Status เป็น **RETURN** (ตรงกันทั้ง HH และเว็บ)

* ข้อมูลเพิ่มใน Inventory Enquiry เป็น Row สีเทา

* จัดเก็บเป็น **Goods Status = Hold** พร้อม Hold Reason ตามที่ระบุ

> 📌 **การแยกรับสินค้าดีและสินค้า Hold ในใบงานเดียวกัน:** ทำได้ในกรณีที่ใบงานมี SKU มากกว่า 1 ตัว — สไลด์เฉพาะ SKU ที่ต้องการ Hold เท่านั้น SKU อื่นจะยังคงเป็น Goods Status = Good ตามปกติ

### 2.2.2 แก้ไขสถานะจาก Hold เป็น Unhold บน Handheld

ใช้เมื่อสไลด์ Hold ไปแล้ว แต่ต้องการยกเลิกก่อน Close Job

1. หลังกด SKU Suspend และเลือก Reason ไปแล้ว

2. **สไลด์ SKU เดิมอีกครั้ง** จากซ้ายมาขวา

3. กด **SKU Suspend** อีกครั้ง

4. กด **OK** (โดย**ไม่เลือก** Reason ใหม่)

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

สินค้าแถวนั้นจัดเก็บเป็น **Goods Status = Good** ตามปกติ (ไม่ใช่ Hold)

### 2.2.3 รับเข้าด้วย Profile Scan ที่มี Location (ปิดงานทันที)

ใช้เมื่อต้องการรับคืนพร้อมระบุ Location ในขั้นตอนเดียว (ใบงาน GRR Status = RETURN, Profile = `Location > SKU > QTY`)

1. เข้าเมนู **Scan Return** → กรอก Return Key → เลือก Return Reason → กด **Confirm**

2. สแกนตาม Profile ที่กำหนดให้ครบทุกตัว

3. กด **Close Job** → **Confirm Close Job**

4. กด **Confirm Return** → เซ็นลายเซ็น → **Confirm Return**

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

* ใบงาน GRR เปลี่ยน Status = **CLOSED** ทันที

* ข้อมูลถูกเพิ่มใน Inventory Enquiry พร้อม **Hold Reason ตรงกับที่กรอกไป** (ถ้ามีการ Hold ระหว่างสแกน)

---

# Hold ที่เกี่ยวข้องกับ Module อื่น

## 3.1 จองสินค้าที่ Hold/Damage - Allocation by Single Order

> ปกติสินค้าที่ติด Hold จะ Allocate ไม่ได้ แต่สำหรับงานที่ใช้ **Pick Strategy** ที่อนุญาตให้หยิบสินค้า Hold หรือ Damage ได้ ระบบจะอนุญาตให้ Allocate ได้ตามปกติ

### จองสินค้าที่มี Status Damage

1. ไปที่เมนู **Inventory Operate / Transfer**

2. กด **+** หน้าใบงาน Transfer

3. เข้าไปในใบงานที่เตรียมไว้ (Status = OPENED, Pick Strategy รองรับการหยิบ Damage)

4. ไปที่ Tab **Allocation**

5. กด **Confirm**

**ผลลัพธ์:** Allocate สำเร็จ — Status ใบงาน = **ALLOCATED**, ข้อมูล Update กลับไปที่ Inventory ถูกต้อง

### จองสินค้าที่มี Status Hold

ขั้นตอนเดียวกัน แต่ Pick Strategy ต้องรองรับการหยิบ **Hold** — ผลลัพธ์เหมือนกัน (Allocate สำเร็จ, Status = ALLOCATED)

### จองสินค้าที่มีทั้ง Damage และ Hold (คนละ SKU)

ขั้นตอนเดียวกัน โดย Pick Strategy ต้องรองรับการหยิบทั้ง Hold และ Damage แยกคนละตัวกัน — ผลลัพธ์ Allocate สำเร็จเหมือนกัน

### จองสินค้าที่มีทั้ง Damage, Hold และ Good ปนกัน

ขั้นตอนเดียวกัน โดย Pick Strategy ต้องรองรับการหยิบทั้ง 3 สถานะแยกคนละตัวกัน — ผลลัพธ์ Allocate สำเร็จครบทุกสถานะ

> 📌 **สรุป:** เงื่อนไขเดียวที่ทำให้ Allocate สินค้า Hold/Damage ได้คือ **Pick Strategy ของใบงานนั้นต้องตั้งค่าให้หยิบสถานะนั้นได้** มิฉะนั้นจะ Allocate ไม่ได้ตาม Default

## 3.2 นับสต็อกที่ติด Hold - Cycle Count / Scan Cycle Count

ใบงานนับสต็อก (Cycle Count) รองรับการนับและปรับยอด **Hold (After)** เป็นส่วนหนึ่งของผลการนับ ทั้งผ่านหน้าเว็บและ Handheld

### นับสต็อกที่ติด Hold ผ่านหน้าเว็บ (Cycle Count)

1. ไปที่เมนู **Cycle Count** → เข้าไปในใบงานที่เตรียมไว้ (Status = WIP)

2. กด **3 จุด** ขวาบน → Hover ที่ **"Go to round"** → เลือก **Round** ที่ต้องการ

3. ดับเบิลคลิก และแก้ไข **Available (After), Damaged (After), Hold (After)** ให้ครบทุกตัว

4. กด **3 จุด** ขวาบน → กด **"Counted Successfully"**

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

* สถานะเอกสารเปลี่ยนเป็น **COMPLETED**

* สามารถดำเนินการนับสต็อกและยืนยันรอบจนจบกระบวนการได้สำเร็จ

* สามารถทำต่อรอบที่ 2 และ 3 ได้ด้วยขั้นตอนเดียวกัน (เลือก Round 2 / Round 3 ตามลำดับ)

### นับสต็อกที่ติด Hold ผ่าน Handheld (Scan Cycle Count)

1. เข้าใช้งาน Handheld → Tab **Operate** → เมนู **Scan Cycle Count**

2. สแกนบาร์โค้ดใบงานจากรายงานเพื่อเข้าสู่ใบงาน (ใบงานมี Inventory ที่เป็น Hold)

3. สแกนยืนยัน **Location** ที่ต้องการนับ

4. สแกนยืนยัน **SKU** ที่พบในตำแหน่งนั้น

5. ระบุ **Quantity** ที่นับได้จริง

6. กด **Confirm Round** → เซ็นลายเซ็น → **Confirm Cycle Count**

7. เซ็นลายเซ็น **Audit** → **Confirm Cycle Count**

8. เซ็นลายเซ็น **Verify Customer** → **Confirm Cycle Count**

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

* ระบบบันทึกจำนวนสินค้าที่นับได้จริงเข้าสู่รอบการนับปัจจุบัน

* Status ของ SKU ถูกต้อง (รวม Hold)

* หน้าจอ Handheld รีเซ็ตพร้อมสแกน Location/SKU ถัดไป

* สถานะเอกสารบนเว็บเปลี่ยนเป็น **COMPLETED**

---

# สรุปผลลัพธ์ตาม Doc Type

| Doc Type   | ผลกับ Inventory Enquiry                                  |
| ---------- | -------------------------------------------------------- |
| **Hold**   | สถานะสินค้า → Hold, แสดง Hold ID, Hold Qty, Hold Reason  |
| **Unhold** | สถานะสินค้า → Available, Hold ID/Qty/Reason หายไป        |
| **Change** | Hold Reason เปลี่ยนเป็นค่าใหม่ — Hold Qty ไม่เปลี่ยนแปลง |

# วงจรสถานะเอกสาร Hold

| สถานะ         | เกิดขึ้นเมื่อ                                         |
| ------------- | ----------------------------------------------------- |
| **OPENED**    | สร้างเสร็จ (Save หรือ Import) — รอ Process            |
| **COMPLETED** | กด Process สำเร็จ                                     |
| **CANCELED**  | ยกเลิกผ่านเว็บสำเร็จ (เฉพาะ OPENED, ผ่านเว็บเท่านั้น) |

---

# เปรียบเทียบ 4 ช่องทางการเกิด Hold

| ช่องทาง                           | ใครเป็นคนสั่ง                           | สร้างเอกสารแยกไหม                                |
| --------------------------------- | --------------------------------------- | ------------------------------------------------ |
| Manual (Inventory Operate > Hold) | User                                    | ✅ สร้างเอกสาร Hold โดยตรง                        |
| Import                            | User (ผ่านไฟล์)                         | ✅ สร้างเอกสาร Hold โดยตรง                        |
| Auto Hold (กฎอัตโนมัติ)           | System (ตามกฎที่ตั้งไว้)                | ✅ สร้างเอกสาร Hold ให้อัตโนมัติ                  |
| Lost ระหว่างหยิบ-สแกน             | System (จากการแจ้ง Lost)                | ✅ สร้างใบงาน MOVE + HOLD คู่กันอัตโนมัติ         |
| Immediate Hold ตอนรับคืน          | User (ติ๊ก Checkbox ตอน Confirm Return) | ❌ ฝังอยู่ในกระบวนการ Return ไม่มีเอกสาร Hold แยก |



