Đến nội dung chính
ERP Thực Chiến
Thư viện
Menu

Import tồn đầu kỳ có lot vào Business Central: sáu bẫy Item Journal

Import tồn đầu kỳ có lot vào Business Central bằng Item Journal: sáu bẫy làm mất số lô, sai hạn dùng, lệch số lượng mà BC không báo, và thứ tự làm để tránh.

Import tồn đầu kỳ có lot vào Business Central bằng Item Journal phải đi đúng thứ tự: gán Item Tracking Code cho mặt hàng trước mọi giao dịch, bật Item Tracking on Lines trên batch trước khi chèn dòng, đưa hạn dùng vào cột Expiration Date, rồi mới post. Sai một bước thì BC thường vẫn post xong, số lô hoặc hạn dùng mất mà không báo gì.

Năm trong sáu bẫy dưới đây tôi gặp thật trong ba ngày 11 đến 13/09/2026, khi đổ sáu tháng lịch sử kho vào một company demo chạy BC 28: 24.759 dòng Item Journal gồm nhập mua, chuyển kho, bán và hủy. Bẫy số 4 thì tôi đọc ra trong source lúc rà file. Cơ chế của cả sáu bẫy lấy từ source Base Application 28.4. Nếu file tồn đầu kỳ của bạn chỉ có dòng Positive Adjmt. thì bẫy số 6 không chạm tới, năm bẫy còn lại vẫn nguyên.

Thứ tự import tồn đầu kỳ có lot bằng Item Journal#

  1. Gán Item Tracking Code cho mặt hàng trước khi mặt hàng có bất kỳ giao dịch nào. Muốn có Lot No. Information thì bật Create Lot No. Info. on posting trên Item Tracking Code.
  2. Tạo batch riêng trên trang Item Journal Batches, bật Item Tracking on Lines trước khi import dòng.
  3. Hạn dùng đưa vào cột Expiration Date (field 44), không đưa vào Item Expiration Date (field 6506).
  4. Mặt hàng không quản lý lô thì để trống cột Lot No..
  5. File luôn có cột Unit of Measure Code.
  6. File có cả dòng xuất thì post từng Document No. theo thứ tự thời gian.
  7. Lô cần khóa thì tick Blocked sau cùng, khi đã post xong.

Với Configuration Package, thứ tự apply tôi đã chạy là bảng 6502 Item Tracking Code, rồi 27 Item, rồi 5700 Stockkeeping Unit, rồi 83 Item Journal Line. Muốn đổ package bằng lệnh thay vì bấm tay thì xem phần RapidStart trong bài Automation API của Business Central.

Hướng dẫn gốc của Microsoft cho tồn đầu kỳ mặt hàng có tracking nằm ở mục Specify opening balances for the items you track. Tài liệu đó nói bật toggle trên batch, nhưng không nói chuyện gì xảy ra khi quên bật.

Bẫy 1: Lot No. bị xóa khi batch chưa bật Item Tracking on Lines#

Field Lot No. (6501) của Item Journal Line kiểm cờ Item Tracking on Lines của batch mỗi lần nhận giá trị. Cờ tắt thì code xóa Serial No., Lot No. và các ngày tracking rồi thoát, không báo gì. Import xong không có lỗi nào, dòng journal nằm đó với cột Lot No. trống.

Bẫy kép nằm ở Item Expiration Date (6506). Lệnh xóa ngày chỉ xóa Expiration Date (44) và Warranty Date, không đụng 6506. Nếu file đã map hạn dùng vào 6506 thì sau khi post, Item Ledger Entry có Expiration Date đầy đủ mà Lot No. rỗng. Nhìn lướt thì tưởng dữ liệu đúng.

Lần đó tôi mất số lô của 11.615 dòng. Vì là company demo, tôi xóa hết Item Ledger Entry, Value Entry rồi import lại từ đầu thay vì vá từng dòng.

Bẫy 2: hạn dùng của lô vào Expiration Date hay Item Expiration Date#

Sheet bảng 83 trong Configuration Package có hai cột tên gần giống nhau. Cột đúng là Expiration Date (44), dù tooltip của nó nói về ngày cuối cùng một recurring journal được post. Khi batch bật cờ, lúc post BC tạo item tracking từ field 44, ghi Reservation Entry, rồi mới đặt Item Expiration Date (6506) từ đó. Field 6506 có Editable = false, tức BC tự điền lúc post. Ghi thẳng vào 6506 thì không có Reservation Entry, và không có Lot No. Information.

Đây cũng là chỗ AI tôi dùng lúc đó khuyên sai. Nó chọn cột "Item Expiration Date" vì tên nghe đúng nghĩa hạn dùng. Tôi chỉ ra field 44, nó mở lại source và xác nhận mình sai.

Bẫy 3: Item Tracking Code gán sau khi đã có giao dịch#

Item Tracking Code trên Item chỉ gán được khi mặt hàng chưa có dòng Item Ledger Entry nào, kể cả dòng đã đóng. Gán qua Configuration Package thì package không áp cột đó và cũng không báo lỗi. Gỡ hay đổi mã còn bị chặn khi mặt hàng có dòng Purchase Order, kể cả dòng đã nhận mà chưa xuất hóa đơn, hoặc có chứng từ đang mở đã gán tracking. Vì vậy bảng Item phải apply xong trước khi có dòng journal nào được post.

Bẫy 4: mặt hàng không quản lý lô mà dòng journal có Lot No.#

Mặt hàng không có Item Tracking Code thì lúc post, BC bỏ qua bước tạo item tracking. Nhưng Lot No. trên dòng journal vẫn được chép sang Item Ledger Entry. Kết quả là Item Ledger Entry có lô trong khi Item Card không quản lý lô, và BC không báo gì lúc post. Khi sinh file, ô Lot No. của các mã không tracking phải để trống thật sự, kể cả khi file nguồn có ghi lô cho mã đó.

Bẫy 5: số lượng bán bị quy đổi khi thiếu cột Unit of Measure Code#

Dòng Entry Type là Sale mà không có Unit of Measure Code thì lấy Sales Unit of Measure của Item. Một mặt hàng bánh trong bộ demo có Sales Unit of Measure là SLICE, quy đổi 0,1. File ghi bán 5 cái thì Item Ledger Entry ghi 0,5. Số dòng đúng, ngày đúng, chỉ số lượng cơ sở lệch, nên không ai thấy. Tôi phát hiện khi LS Replenishment báo tồn 547,9 và bán bình quân 0,29 cái/ngày cho mặt hàng đó. Không bù bằng dòng lùi ngày được vì lô đã hết tồn.

Cách tránh: file luôn có cột Unit of Measure Code, hoặc kiểm Sales Unit of Measure và Purch. Unit of Measure của từng mã bằng Base Unit of Measure trước khi sinh file.

Bẫy 6: post batch báo "cannot be fully applied" dù file đúng thứ tự#

Câu lỗi có dạng:

text
Item Tracking Serial No.  Lot No. L-0001 for Item No. 1000 Variant  cannot be fully applied.

File đã được kiểm: chạy lại đúng thứ tự dòng thì không lô nào âm tồn ở bất kỳ thời điểm nào. Vậy mà post batch vẫn lỗi.

Nguyên nhân nằm ở Item Jnl.-Post Batch của BC 28. Khi tính năng Enable multiple users to post item ledger entries and value entries at the same time trên trang Feature Management đang bật, BC không post theo Line No. mà theo khóa Journal Template Name, Journal Batch Name, Document No., Item No., Location Code, Bin Code, Line No.. Một batch có nhiều chứng từ trong cùng ngày sẽ post theo thứ tự chữ cái của số chứng từ. Chứng từ bán SL0801 chạy trước chứng từ chuyển hàng về cửa hàng TR0801, lô chưa về đã phải xuất. Tính năng tắt thì code đi nhánh cũ, post theo Line No.

Microsoft mô tả tính năng này ở mục Allow workers to post transactions at the same time. Tài liệu nói về khóa bảng và số entry, không nhắc tới thứ tự post trong batch. Tôi chưa thử tắt tính năng để so.

Cách đã chạy: post từng cặp Posting Date và Document No. theo thứ tự xuất hiện trong file. Làm tay thì lọc từng Document No. theo thứ tự nhập mua, chuyển kho, bán, hủy trong từng ngày. Gọn nhất là đặt số chứng từ ngay từ đầu sao cho thứ tự chữ cái trùng thứ tự thời gian.

Cùng họ với bẫy này: đừng sắp lại dòng trong file theo ngày rồi Entry Type. Bản file đầu tiên được sắp như vậy, và dòng Negative Adjmt. bị đẩy lên trước dòng nhập mua trong cùng ngày, tồn âm ngay dòng đầu.

Lot No. Information và lô bị khóa#

Bảng Lot No. Information (6505) không cần import. BC tự tạo khi post nếu Item Tracking Code bật Create Lot No. Info. on posting. Bảng này không có field hạn dùng, hạn dùng chỉ nằm trên Item Ledger Entry. Lô nào cần khóa thì chỉ tick Blocked sau khi post xong, vì BC chặn post vào lô đã có Lot No. Information đang Blocked.

Kiểm gì sau khi post#

  • Đếm Item Ledger Entry có lô và không lô theo từng mã. Mã có Item Tracking Code thì mọi dòng phải có lô, mã không có thì không dòng nào có lô.
  • Dòng nhập có lô thì phải có Expiration Date, nếu Item Tracking Code dùng hạn dùng.
  • So tồn cuối theo mặt hàng, địa điểm, lô với file.
  • Mặt hàng có Sales Unit of Measure khác đơn vị cơ sở: xem Quantity trên dòng Sale có ra số lẻ bất thường không.

Lần chạy lại sau khi sửa, 24.759 dòng không làm âm tổ hợp mặt hàng, địa điểm, lô nào ở bất kỳ thời điểm nào. Cuối kỳ còn 166 tổ hợp, 7.288 đơn vị, khớp số kỳ vọng của bộ dữ liệu. 9 mã có lô thì mọi dòng đều có số lô, 12 mã còn lại không dòng nào có lô.

Đọc tiếp