# Hướng dẫn xuất kho Packing List

# Hướng dẫn sử dụng — Chức năng Xuất Kho Packing List

---

## Mục lục

1. [Mục đích](#1-mục-đích)
2. [URL truy cập](#2-url-truy-cập)
3. [Truy cập chức năng](#3-truy-cập-chức-năng)
4. [Tìm kiếm và xem lịch sử xuất kho theo Packing List](#4-tìm-kiếm-và-xem-lịch-sử-xuất-kho-theo-packing-list)
5. [Tạo phiếu xuất kho mới](#5-tạo-phiếu-xuất-kho-mới)
6. [Điều kiện quét hợp lệ và không hợp lệ](#6-điều-kiện-quét-hợp-lệ-và-không-hợp-lệ)
7. [Quy tắc nhập số lượng và xác nhận lưu](#7-quy-tắc-nhập-số-lượng-và-xác-nhận-lưu)
8. [Kết quả sau khi lưu](#8-kết-quả-sau-khi-lưu)
9. [Các thông báo lỗi thường gặp](#9-các-thông-báo-lỗi-thường-gặp)
10. [Các trường và hành vi bị khóa hoặc giới hạn thao tác](#10-các-trường-và-hành-vi-bị-khóa-hoặc-giới-hạn-thao-tác)

---

## 1. Mục đích

Chức năng **Xuất kho Packing List** cho phép nhân viên kho ghi nhận việc xuất hàng thực tế ra khỏi kho theo từng Packing List (PKL). Sau khi xác nhận, hệ thống tự động:

- Tạo phiếu xuất kho có mã định danh riêng.
- Trừ số lượng hàng đã xuất khỏi tồn kho.
- Ghi lịch sử xuất để tra cứu về sau.

---

## 2. URL truy cập

| Ngôn ngữ | Đường dẫn |
|---|---|
| Tiếng Việt | `/vi/warehouse-export` |
| Tiếng Anh | `/en/warehouse-export` |

---

## 3. Truy cập chức năng

### Yêu cầu quyền

Tài khoản đăng nhập phải được cấp **quyền `View`** đối với trang `/warehouse-export`. Nếu không có quyền, hệ thống hiển thị trang **"Từ chối truy cập"** và không cho phép vào.

Để thực hiện tạo phiếu xuất, tài khoản cần thêm **quyền `Edit`**. Nếu chỉ có quyền `View`, nút **"Xuất kho mới"** sẽ bị vô hiệu hóa (màu xám, không bấm được).

### Cách truy cập

1. Đăng nhập vào hệ thống.
2. Trên thanh điều hướng bên trái, chọn **"Xuất kho"**.
3. Trang hiển thị giao diện chia hai cột:
   - **Cột trái:** Danh sách Packing List đã và đang được xuất kho.
   - **Cột phải:** Chi tiết lịch sử xuất của Packing List đang chọn.

---

## 4. Tìm kiếm và xem lịch sử xuất kho theo Packing List

### Tìm kiếm Packing List

- Ô tìm kiếm nằm ở đầu cột trái.
- Nhập **mã Packing List** hoặc **tên người nhận** để lọc danh sách.
- Danh sách cập nhật theo thời gian thực khi nhập.

### Xem lịch sử xuất của một Packing List

1. Nhấp vào một dòng Packing List trong danh sách bên trái.
2. Cột phải hiển thị toàn bộ các lượt xuất của PKL đó, bao gồm:

| Thông tin | Mô tả |
|---|---|
| Mã phiếu xuất | Mã định danh của từng lần xuất |
| Người thực hiện | Họ tên người tạo phiếu |
| Thời gian tạo | Ngày giờ tạo phiếu |
| Số thùng (carton) | Số lượng thùng đã xuất trong lần đó |
| Chi tiết thùng | Mã đơn hàng, SKU, số lượng cần / thực xuất, ghi chú |

### Trạng thái Packing List

| Trạng thái | Ý nghĩa |
|---|---|
| *(Chưa có lượt xuất)* | PKL chưa được xuất lần nào |
| Đã xuất một phần | Đã xuất nhưng chưa đủ toàn bộ số lượng yêu cầu |
| Đã xuất hoàn tất | Tổng số lượng thực xuất đã đủ hoặc bằng số lượng cần |

---

## 5. Tạo phiếu xuất kho mới

### Bước 1 — Mở cửa sổ tạo phiếu

- Nhấn nút **"Xuất kho mới"** (màu xanh lá, góc trên phải cột trái).
- Cửa sổ **"Xuất kho Packing List"** hiện ra.

> Nút bị vô hiệu hóa nếu tài khoản không có quyền `Edit`. Xem mục [10](#10-các-trường-và-hành-vi-bị-khóa-hoặc-giới-hạn-thao-tác).

---

### Bước 2 — Quét mã hoặc nhập mã Packing List

Trong cửa sổ xuất kho, có ô nhập ở đầu với nhãn **"Quét QR Code hoặc nhập mã Packing List"**.

**Cách nhập:**
- Dùng máy quét QR để quét trực tiếp → mã tự điền vào ô.
- Hoặc gõ tay mã PKL (ví dụ: `#PL-2025-0047`) rồi nhấn **Enter**.

**Sau khi quét thành công:**
- Thông tin Packing List hiện ra bên dưới: mã invoice, người nhận, số thùng, danh sách chi tiết đơn hàng trong từng thùng.
- Có thể **quét thêm nhiều Packing List khác** vào cùng một phiếu xuất bằng cách lặp lại thao tác quét.

---

### Bước 3 — Xem chi tiết và điều chỉnh số lượng thực xuất

Sau khi quét, mỗi Packing List hiển thị danh sách thùng hàng. Mỗi thùng chứa các dòng đơn hàng với các cột:

| Cột | Mô tả |
|---|---|
| Mã đơn hàng / SKU | Định danh sản phẩm trong thùng |
| Số lượng cần (Cần:) | Số lượng theo kế hoạch cần xuất |
| SL thực xuất | Số lượng thực tế nhân viên nhập vào — **có thể chỉnh sửa** |
| Ghi chú | Ghi chú tự do theo từng dòng đơn hàng — **tùy chọn** |

**Cách điều chỉnh:**
- Nhấp vào ô **"SL thực xuất"** và nhập số lượng mong muốn.
- Hệ thống tự tính lại tổng PCS xuất ở thanh tiêu đề (`X / Y PCS`).
- Nhập **Ghi chú** nếu cần (không bắt buộc).

---

### Bước 4 — Xác nhận xuất kho

1. Nhấn nút **"Xác nhận xuất kho (N PL)"** ở cuối cửa sổ.
2. Hộp thoại xác nhận hiện ra với tóm tắt:
   - Tổng số Packing List đang xuất.
   - Tổng số thành phẩm.
3. Nhấn **"Xác nhận"** để lưu, hoặc **"Hủy"** để quay lại chỉnh sửa.

---

## 6. Điều kiện quét hợp lệ và không hợp lệ

### ✅ Quét hợp lệ — Packing List được thêm vào danh sách khi

| Điều kiện | Chi tiết |
|---|---|
| Mã tồn tại trong hệ thống | QR code hoặc mã PKL được tìm thấy |
| Còn tồn kho để xuất | Ít nhất một dòng đơn hàng trong PKL còn số lượng tồn kho > 0 |
| Chưa quét trong phiếu hiện tại | PKL đó chưa có trong danh sách đang quét |
| Chưa hoàn tất xuất kho | Trạng thái PKL chưa phải "Đã xuất hoàn tất" |

### ❌ Quét không hợp lệ — Hệ thống báo lỗi và bỏ qua khi

| Trường hợp | Thông báo hiển thị |
|---|---|
| Ô nhập trống, nhấn Enter | *"Vui lòng không để trống"* |
| Mã không tồn tại hoặc không tìm thấy | *"Không tìm thấy Packing List"* |
| PKL không còn tồn kho (tất cả dòng = 0) | *"Không tìm thấy Packing List"* |
| PKL đã được quét trước đó trong cùng phiếu | *"Packing List đã được quét"* |
| PKL đã xuất kho hoàn tất trước đây | *"Packing List đã được xuất kho"* |

---

## 7. Quy tắc nhập số lượng và xác nhận lưu

### Quy tắc nhập SL thực xuất

| Quy tắc | Chi tiết |
|---|---|
| Phải lớn hơn 0 | Không được để 0 hoặc để trống |
| Không được vượt quá "Số lượng cần" | SL thực xuất ≤ SL cần xuất theo kế hoạch |
| Phân loại hàng phải khớp | Số lượng đơn hàng trong PKL phải bằng số lượng đã được nhập kho trước đó |

> **Giải thích quy tắc thứ 3:** Trước khi xuất kho, hàng phải được **phân loại thành phẩm** (classification). Nếu số lượng phân loại không khớp với số lượng nhập kho, hệ thống coi dữ liệu chưa hợp lệ và không cho lưu.

### Điều kiện để nút "Xác nhận xuất kho" cho phép lưu

Tất cả các điều kiện sau phải đồng thời thỏa mãn:

- [x] Đã quét ít nhất **1 Packing List**.
- [x] Tất cả dòng đơn hàng có **SL thực xuất > 0**.
- [x] Không có dòng nào có **SL thực xuất > SL cần**.
- [x] Không có thùng hàng hoặc đơn hàng bị **xóa một phần** (xóa thùng con nhưng còn thùng cha).
- [x] Số lượng phân loại của tất cả đơn hàng **khớp với số lượng nhập kho**.

---

## 8. Kết quả sau khi lưu

Sau khi nhấn **"Xác nhận"** trong hộp thoại xác nhận:

1. **Phiếu xuất kho được tạo** — hệ thống sinh mã phiếu xuất duy nhất.
2. **Tồn kho được trừ** — số lượng thực xuất bị trừ khỏi kho tự động (xử lý ngầm, không chặn giao diện).
3. **Lịch sử được ghi** — phiếu xuất xuất hiện trong cột phải khi chọn PKL tương ứng.
4. **Danh sách tự làm mới** — cột trái cập nhật lại danh sách, Packing List vừa xuất hiển thị đúng trạng thái mới.
5. **Cửa sổ tự đóng** — cửa sổ "Xuất kho Packing List" đóng lại.

### Trạng thái Packing List sau khi lưu

| Trường hợp | Trạng thái mới |
|---|---|
| Tổng SL thực xuất = SL cần (tất cả dòng) | **Đã xuất hoàn tất** |
| Tổng SL thực xuất < SL cần (có dòng còn thiếu) | **Đã xuất một phần** |

---

## 9. Các thông báo lỗi thường gặp

### Lỗi khi quét mã

| Thông báo | Nguyên nhân | Cách xử lý |
|---|---|---|
| *"Vui lòng không để trống"* | Nhấn Enter khi ô nhập đang trống | Nhập mã trước khi nhấn Enter |
| *"Không tìm thấy Packing List"* | Mã không tồn tại, hoặc PKL không còn tồn kho | Kiểm tra lại mã PKL, hoặc xác nhận hàng đã được nhập kho chưa |
| *"Packing List đã được quét"* | PKL đó đã có trong danh sách hiện tại | Không cần quét lại, kiểm tra danh sách bên dưới |
| *"Packing List đã được xuất kho"* | PKL đã được xuất hoàn tất trong quá khứ | PKL này không thể xuất thêm |

### Lỗi khi nhập số lượng

| Thông báo | Nguyên nhân | Cách xử lý |
|---|---|---|
| *"Vui lòng nhập số lượng lớn hơn 0"* | Ô SL thực xuất bằng 0 hoặc bỏ trống | Nhập số lượng ≥ 1 |
| *"Vui lòng không xuất vượt quá số lượng cần"* | SL thực xuất > SL cần theo kế hoạch | Giảm số lượng về ≤ SL cần |

### Lỗi khi xác nhận lưu

| Thông báo | Nguyên nhân | Cách xử lý |
|---|---|---|
| *"Chưa có packing list nào được quét"* | Nhấn xác nhận khi chưa quét PKL nào | Quét ít nhất một PKL trước |
| *"Số lượng đơn hàng trong Packing List không bằng với số lượng đơn hàng được nhập kho. Vui lòng phân loại lại Packing List!"* | PKL chưa được phân loại thành phẩm hoặc phân loại chưa đủ | Vào chức năng **Phân loại thành phẩm**, hoàn thành phân loại cho PKL đó rồi quay lại xuất kho |

---

## 10. Các trường và hành vi bị khóa hoặc giới hạn thao tác

### Nút bị vô hiệu hóa theo quyền

| Nút / Thao tác | Điều kiện bị khóa |
|---|---|
| Nút **"Xuất kho mới"** | Tài khoản không có quyền `Edit` |
| Toàn bộ cửa sổ tạo phiếu | Tài khoản không có quyền `Edit` |

### Giới hạn trong cửa sổ tạo phiếu xuất

| Hành vi | Giải thích |
|---|---|
| Không thể đóng cửa sổ bằng phím Esc | Hệ thống chặn để tránh mất dữ liệu đang nhập |
| Không thể đóng cửa sổ bằng cách nhấp ra ngoài | Tương tự — phải bấm nút **Đóng / Hủy** hoặc **Xác nhận** |
| Dòng đơn hàng có SL cần = 0 tự động ẩn | Những dòng không còn gì để xuất không hiện lên để tránh nhầm lẫn |
| Thùng hàng bị ẩn nếu toàn bộ dòng bên trong có SL = 0 | Thùng trống không hiện trong danh sách |
| Packing List đã xuất hoàn tất không quét lại được | Hệ thống từ chối với thông báo *"Packing List đã được xuất kho"* |

---

[![](https://book.app.tms-s.vn/uploads/images/gallery/2026-03/scaled-1680-/image-1774258477343-drawio.png)](https://book.app.tms-s.vn/uploads/images/gallery/2026-03/image-1774258477343-drawio.png)