Khóa Công Nợ & Kiểm Tra Tồn Kho App Bán Hàng (Phần 4)

quan ly ban hang quan ly nhap xuat ton

Ở Phần 3 App Quản Lý Bán Hàng, mình đã khóa được phiếu nhập và phiếu xuất để bảo vệ dữ liệu. Phần 4 App Bán Hàng này hoàn thiện nốt phần còn thiếu: khóa/mở khóa cho cả công nợ, kiểm tra và chặn xuất kho khi vượt tồn, và tinh chỉnh lại toàn bộ tên cột sang tiếng Việt cho app dễ dùng hơn.

Khóa và mở khóa công nợ khách hàng, nhà cung cấp

Ở các phần trước, phiếu nhập/xuất đã có cơ chế khóa, nhưng bảng Công nợ khách hàng và Công nợ nhà cung cấp thì chưa. Giờ mình làm cũng tương tự vậy thôi:

Video: Tự tạo phần mềm quản lý bán hàng nhập xuất tồn kho, quản lý công nợ và khách hàng bằng appsheet

Action “Khóa”

Ở bảng Công nợ khách hàng, tạo Action kiểu Data: set the value of some column → gán cột Tình trạng = "Đã khóa". Cấu hình hiển thị:

  • Position: inline, gắn (attach) vào cột Tên khách hàng (cột này vốn đã ẩn, chỉ chạy ngầm để tự động điền tên).
  • Icon: chọn hình ổ khóa (lock) cho đồng bộ với các action khác trong app.
  • Behavior: chỉ hiện khi [Tình trạng] = "Đang mở".
  • Đặt Display name ngắn gọn là “Khóa” thay vì để tên đầy đủ “Khóa công nợ khách hàng” – tên dài sẽ chiếm chỗ trên giao diện.
  • Tick thêm tùy chọn “Need confirmation”: khi bấm khóa, app sẽ hỏi lại một câu xác nhận trước khi thực hiện, tránh trường hợp bấm nhầm ngoài ý muốn.

Đồng thời, thêm điều kiện [Tình trạng] = "Đang mở" vào Behavior của hai Action mặc định Edit và Delete, để chỉ khi đang mở mới sửa/xóa được.

Action “Mở khóa”

Tạo thêm một Action ngược lại: gán Tình trạng = "Đang mở", cũng gắn inline vào cột Tên khách hàng, chọn icon unlock (ổ khóa mở), và Behavior chỉ hiện khi [Tình trạng] = "Đã khóa". Đặt Display name là “Mở khóa”.

Làm y hệt hai action Khóa/Mở khóa này cho bảng Công nợ nhà cung cấp, và cho cả Phiếu nhập, Phiếu xuất (bổ sung thêm nút Mở khóa mà ở Phần 3 mới chỉ có nút Khóa).

Gợi ý mở rộng: về sau có thể giới hạn ai được thấy nút “Mở khóa” bằng cách thêm điều kiện vào Behavior, ví dụ chỉ hiện khi người dùng đăng nhập có vai trò Admin (AND([Tình trạng]="Đã khóa", USEREMAIL()=...)). Việc này giúp nhân viên bình thường chỉ được khóa phiếu khi hoàn tất, còn việc mở lại để sửa sai thì chỉ quản lý mới làm được.

Chặn xuất kho vượt quá số lượng tồn

Vấn đề: hiện tại phiếu xuất không kiểm tra tồn kho, nên nhập số lượng xuất bao nhiêu cũng được – dẫn đến tồn kho bị âm. Cần chặn ngay từ lúc nhập liệu để tránh sai số liệu về sau.

Hiện tồn kho ngay khi chọn sản phẩm

Ở bảng Phiếu xuất chi tiết, tạo một cột ảo (virtual column) tên “Tồn kho”, kiểu hiển thị Show, dạng Text, với công thức:

CONCATENATE(
  "Số lượng tồn kho của sản phẩm: ",
  SUM(SELECT(Phiếu nhập chi tiết[Số lượng], [Mã sản phẩm] = [_THISROW].[Mã sản phẩm]))
  -
  SUM(SELECT(Phiếu xuất chi tiết[Số lượng], [Mã sản phẩm] = [_THISROW].[Mã sản phẩm]))
)

Công thức lấy tổng đã nhập trừ tổng đã xuất của đúng mã sản phẩm đang chọn, rồi ghép thành câu thông báo dễ đọc như “Số lượng tồn kho của sản phẩm: 3“.

Kéo cột này lên đầu form (chỉnh Column order → manual, đưa lên ngay sau ô chọn sản phẩm) để khi người dùng vừa chọn sản phẩm là thấy ngay tồn kho hiện tại, biết được nên xuất tối đa bao nhiêu.

Ràng buộc không cho lưu nếu xuất vượt tồn

Vào cột Số lượng của Phiếu xuất chi tiết, đặt công thức Valid If:

AND(
  [Số lượng] > 0,
  [Số lượng] <=
    SUM(SELECT(Phiếu nhập chi tiết[Số lượng], [Mã sản phẩm] = [_THISROW].[Mã sản phẩm]))
    -
    SUM(SELECT(Phiếu xuất chi tiết[Số lượng], [Mã sản phẩm] = [_THISROW].[Mã sản phẩm]))
)

Nghĩa là số lượng nhập vào phải lớn hơn 0 và không được vượt quá tồn kho hiện có. Kèm thêm nội dung ở mục Invalid value error message (ví dụ: “Số lượng vượt quá tồn kho, không thể xuất”) để người dùng biết lý do khi bị chặn lưu.

Lưu ý: ràng buộc này chỉ áp dụng cho Phiếu xuất chi tiết. Bên Phiếu nhập chi tiết thì không cần giới hạn gì cả vì nhập hàng vào kho thì muốn nhập bao nhiêu cũng được.

Test thử: chọn một sản phẩm đang tồn 3 cái, nhập số lượng xuất là 3 → lưu được bình thường. Nhập số lượng xuất là 4 (vượt tồn) → hệ thống báo lỗi, không cho lưu, bất kể đơn giá là bao nhiêu.

Dọn lại tên cột sang tiếng Việt và ẩn những cột xữ lý kỹ thuật cho chạy ngầm

Trước giờ các cột vẫn hiển thị đúng tên gốc trong Google Sheet (nhiều chỗ viết tắt hoặc còn sai chính tả). Giờ rà lại từng bảng, sửa Display name cho từng cột – lưu ý: đây chỉ là tên hiển thị trên app, không đổi tên cột thật trong Google Sheet, nên không sợ ảnh hưởng tới các công thức đã viết.

Một số việc làm xuyên suốt các bảng:

  • Đổi tên hiển thị ngắn gọn, dễ hiểu: “Mã khách hàng” → Khách hàng, “Loại giao dịch” → Giao dịch, sửa lại các chỗ gõ sai như “địa” → Địa chỉ.
  • Với các cột chỉ chạy ngầm để tự động điền tên (Tên khách hàng, Tên nhà cung cấp, Tên sản phẩm ở các bảng liên kết) – vẫn giữ hiển thị tên đầy đủ trong cấu hình, nhưng ẩn (bỏ tick Show) khỏi giao diện chính, vì các cột Mã đã hiển thị đúng tên nhờ thuộc tính Label.
  • Ẩn cột Tình trạng và Cập nhật khỏi form nhập liệu chính ở tất cả các bảng (Công nợ khách hàng/nhà cung cấp, Phiếu nhập, Phiếu xuất, Phiếu nhập/xuất chi tiết) – hai cột này chỉ phục vụ vận hành ngầm, hiển thị ra sẽ làm rối giao diện.

Đặt các trường bắt buộc nhập (Required)

Rà lại từng bảng, tick Require cho những cột thực sự cần người dùng nhập tay, để tránh lưu thiếu dữ liệu quan trọng:

  • Công nợ khách hàng/nhà cung cấp: Ngày, Mã khách hàng (hoặc nhà cung cấp), Loại giao dịch, Số tiền – bắt buộc. Ghi chú thì không cần.
  • Khách hàng, Nhà cung cấp: Tên, Địa chỉ, Số điện thoại – bắt buộc.
  • Phiếu nhập, Phiếu xuất: Ngày, Mã nhà cung cấp (hoặc khách hàng) – bắt buộc. Tổng số lượng, Tổng giá trị thì để trống vì chạy theo công thức.
  • Phiếu nhập chi tiết, Phiếu xuất chi tiết: Mã sản phẩm, Số lượng, Đơn giá – bắt buộc.

Sau khi đặt xong, thử tạo dữ liệu mới mà bỏ trống một trường bắt buộc – app sẽ báo lỗi (dấu chấm than đỏ) và không cho lưu cho tới khi điền đủ.

Khóa view Thống kê khỏi thao tác chỉnh sửa

View Thống kê ở Phần 3 chỉ dùng để lọc/xem, không phải để nhập liệu, nên ẩn luôn hai Action Edit và Delete mặc định của bảng này – tránh người dùng vô tình bấm sửa/xóa dòng cấu hình bộ lọc.

Kết luận

Đến đây, app đã hoàn thiện khoảng 80-90% về mặt chức năng:

  • Công nợ khách hàng, nhà cung cấp, phiếu nhập, phiếu xuất đều có cơ chế khóa/mở khóa đầy đủ, kèm xác nhận trước khi khóa.
  • Phiếu xuất không thể vượt quá tồn kho – hệ thống tự kiểm tra và hiện luôn số tồn ngay khi chọn sản phẩm.
  • Toàn bộ tên cột đã chuyển sang tiếng Việt, các cột kỹ thuật được ẩn bớt, các trường quan trọng được đặt bắt buộc nhập – giao diện đỡ rối và khó nhập sai hơn nhiều so với ban đầu.

Ở phần tiếp theo (có thể là phần cuối của series), sẽ tập trung xây dựng menu Home để gom các chức năng lại thành một màn hình điều hướng gọn gàng, và tô màu cho các trạng thái (ví dụ: đã khóa hiện đỏ, đang mở hiện xanh) để nhìn vào là biết ngay tình trạng dữ liệu.

Hoặc xem trực tiếp trên Youtube: P4.Tự tạo phần mềm quản lý bán hàng nhập xuất tồn kho, quản lý công nợ và khách hàng bằng appsheet

Hẹn gặp lại các bạn ở phần sau!

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *