-
Function tạo barcode 128 cho excel lẫn accsee (form và report))
tranthanhan1962 > 19-09-24, 12:16 AM
Từ khi đụng đến việc tạo mã vạch trên access tôi thực sự cảm thấy khó khăn và bối rối với đọ phức tạp của nó. Tôi viết phần mềm cho khách chủ yếu dùng để bán hàng. May mắn khách hàng có những máy đọc mã vạch chuyên dụng thường là của Mỹ gởi về thì rất dễ. Vì với máy này vừa mới, vừa nhạy khi tạo mã vạch cứ lấy trực tiếp code ra chuyển font rồi in là nó cứ đọc không cần xử lý gì thêm. Ví dụ Code = ABCD cứ chuyển thành ABCD theo font 39 hay 128 khi Khi đọc bật nút máy đọc mã vạch qua 39 hay 128 tùy theo font in rồi đưa máy vào là quét. Điều dễ dàng là nếu đọc không được 39 chắc chắn là 128. Sau này mấy máy Trung Quốc thì không thể lơi kiểu chuyển font trực tiếp nữa vì máy sẽ không hiểu. Cho đén lúc này ngay cả máy đọc mã vạch của Mỹ kiểu này cũng không còn sản xuất nữa vì đâu chỉ có mã vạch code 39 và code 128 mà nó có hàng đống chuẩn. Lúc bắt đầu với mấy cái máy đọc mã vạch của Hồ Cẩm Đào Tôi phải tiếp cận với phần mềm BarTender. Đói với mình thì dễ nhưng đối với khách hàng thì việc tạo mã vạch bằng phần mềm này là cơn ác mộng đối với họ. Các bạn sẽ thấy khi viết xong một phần mềm xử lý hoàn tất mọi vấn đề mà cứ phải nghe điện thoại kêu réo suốt tại vì họ không tự tạo được mã vạch để in, riết rồi mình giống như nhân viên tạo mã vạch không công cho họ. Sau này nhờ code tạo mã vạch Function Barcode_128(Ctrl As Control, rpt As Report) của ongke0711 đã hỗ trợ mình rất nhiều, nó giả quyết được việc tự động đỗi code thành font mã vạch 128. Thực sự tôi rất nể đoạn người viết đoạn code này (không biết có phải đ/c ongke0711 viết không!) vì đây là đoạn code không dùng bất kỳ font chữ nào mà dùng cú pháp Line của access để vẽ thành những sọc vuông tạo thành mã vạch 128. quá dữ, Một điều là hạn chế là code này chỉ thể hiện được trên report chứ không thể hiện được trên form. Lý do đơn giản là trên form không có event print hay format để xử lý cú pháp Line (hoặc là có cách nào đó để thực hiện cú pháp này mà tôi không biết). Thực ra việc thể hiện mã vạch trên form không nhiều nhưng cũng có đôi lúc cần cho công việc. Mò mẫ mãi tôi gặp được trang web https://graphicore.github.io/librebarcode/ thông qua nó tôi biết được tất cả các barcode đều sử dụng 1 công thức:
[Ký tự đầu] & Code & [Ký tự cuối]:
Còn 1 số chuẩn mà tôi không kể hết ra đây vả lại các chuẩn này sẽ còn tăng lên tùy theo các quôc gia và vùng lãnh thổ. Thực ra theo tôi đối với công việc cá nhân hoặc quản lý các doanh nghiệp thì Barcode 128 là ưu việc hơn cả. 1 là trong cùng 1 code thì tạo Barcode 128 sẽ ngắn hơn Barcode 39. 2 là barcode 39 và 128 không khống chế số ký tự tạo code, bao nhiêu cũng được chỉ cần đầu đọc đủ gần để nhận rõ ký tự và đủ xa để bao quát toàn bộ ký tự là Ok và barcode 128 sẽ có chiều rộng ngắn barcode 39. Vì vậy chỉ cần xử lý 1 function barcode 128 là sử dụng được cho tất cả. Tôi đã tạo 1 function xử lý trực tiếp code ra barcode 128 dưới đây và đã text OK.Mã PHP:Code 39=*code* (Đầu: *, cuối: *)
Code 128 = ÌCodeWÎ (Đầu: Ì, cuối: WÎ)
Code EAN-13 = 00Code? (code 10 ký tự; đầu: 00, cuối: ? => tổng 13 ký tự)
Code EAN-8 = Code? (code 7 ký tự, cuối: ? => tổng 8 ký tự)
Code UPC-A = 0 Code? (code 10 ký tự, đầu:0, cuối: ? => tổng 12 ký tự)
Code UPC-E short input = xCode? (code 6 ký tự, đầu:0, cuối ? => tổng 8 ký tự)
Mã này áp dụng được trong module excel lẫn access cả form lẫn report. Các barcode khác cũng chỉ cần thay đổi function xử lý lại ký tự đầu và cuối. Nếu barcode nào có xác định số lượng ký tự thì kiểm tra len(code) trướcMã:Function Code128(Data As String) As String
Dim i As Integer
Dim checksum As Integer
Dim result As String
Dim charValue As Integer
' Ký tự bắt đầu cho Code 128
result = Chr(204)
checksum = 104 ' Giá trị bắt đầu cho Code 128
' Mã hóa dữ liệu
For i = 1 To Len(Data)
charValue = Asc(Mid(Data, i, 1))
result = result & Mid(Data, i, 1)
checksum = checksum + (charValue - 32) * i
Next i
' Tính toán ký tự kiểm tra
checksum = checksum Mod 103
result = result & Chr(checksum + 32)
' Ký tự kết thúc cho Code 128
result = result & Chr(206)
Code128 = result
End Function -
RE: Function tạo barcode 128 cho excel lẫn accsee (form và report))
ongke0711 > 29-09-24, 05:49 PM
* Tổng hợp 4 loại barcode (phổ biến) dùng font barcode *
Code 128, Code 39, EAN 8, EAN 13
----------------------------------------------------------------------------------
Từ bài chia sẽ hàm dùng font barcode của anh @tranthanhan1962 ở trên, tôi tổng hợp lại và đưa vào file mẫu Access để các bạn có thể tham khảo nhanh cách làm.
Bổ sung hàm EAN13() tự tự tạo số Checksum cho barcode này. (Tương tự cho EAN 8)
Ví dụ: chỉ cần nhập mã hàng 12 ký tự, hàm sẽ tự tạo ký tự thứ 13
893851778372 (mã hàng) + 2 (checksum) ==> 8938517783722 (Barcode EAN13)
Tôi đã in test thử trên máy in nhiệt XPrinter 350BM, với kích thước 10 x 25mm, máy quét cầm tay (170k) đọc cực nhanh nhé.
Lưu ý:
+ Phải cài bộ font barcode đi kèm trên các máy nào sử dụng. (Nhấp đôi vào từng font (.ttf) để cài đặt). Font barocde cùng loại nhưng khác nhau (ví dụ: Font 128 của IDAutomation...) có thể sẽ cho ra kết quả không đúng với code trong bài này do kỹ thuật mã hóa chuỗi của họ dùng bảng mã ASCII khác bảng chuẩn 126 ký tự.
+ Bộ code để tạo chuỗi mã hóa EAN 13 (8) dùng với font barcode lấy từ tác giả Grandzebu.
+ Các mã hàng qua code xử lý ra chuỗi tương thích với các font barcode tương ứng thì máy quét mới đọc được.
(Code 39 xử lý đơn giản nhất, như anh @tranthanhan1962 đã đề cập ở trên)
Cách sử dụng: dùng hàm trực tiếp trong Textbox (vd: txtBarocde)
Mã PHP:Control Source: = EAN13([MaHang])
Mã PHP:Control Source: = Code128([MaHang])
Link file (có kèm font): https://www.mediafire.com/file/zjg5x3e56...o.zip/file
(PS: @tranthanhan1962: hàm Code128() của anh Ân vài trường hợp nó tổng hợp ra số checknum không nằm trong bảng dò ASCII nên ra chuỗi barcode không đọc được. Vô tình em phát hiện khi thử nghiệm. Ví dụ: mã "885874730071"; "(10) 89385177837-+%") -
RE: Function tạo barcode 128 cho excel lẫn accsee (form và report))
tranthanhan1962 > 30-10-24, 09:21 AM
(29-09-24, 05:49 PM)ongke0711 Đã viết: * Tổng hợp 4 loại barcode (phổ biến) dùng font barcode *
Code 128, Code 39, EAN 8, EAN 13
----------------------------------------------------------------------------------
Từ bài chia sẽ hàm dùng font barcode của anh @tranthanhan1962 ở trên, tôi tổng hợp lại và đưa vào file mẫu Access để các bạn có thể tham khảo nhanh cách làm.
Bổ sung hàm EAN13() tự tự tạo số Checksum cho barcode này. (Tương tự cho EAN 8)
Ví dụ: chỉ cần nhập mã hàng 12 ký tự, hàm sẽ tự tạo ký tự thứ 13
893851778372 (mã hàng) + 2 (checksum) ==> 8938517783722 (Barcode EAN13)
Tôi đã in test thử trên máy in nhiệt XPrinter 350BM, với kích thước 10 x 25mm, máy quét cầm tay (170k) đọc cực nhanh nhé.
Lưu ý:
+ Phải cài bộ font barcode đi kèm trên các máy nào sử dụng. (Nhấp đôi vào từng font (.ttf) để cài đặt). Font barocde cùng loại nhưng khác nhau (ví dụ: Font 128 của IDAutomation...) có thể sẽ cho ra kết quả không đúng với code trong bài này do kỹ thuật mã hóa chuỗi của họ dùng bảng mã ASCII khác bảng chuẩn 126 ký tự.
+ Bộ code để tạo chuỗi mã hóa EAN 13 (8) dùng với font barcode lấy từ tác giả Grandzebu.
+ Các mã hàng qua code xử lý ra chuỗi tương thích với các font barcode tương ứng thì máy quét mới đọc được.
(Code 39 xử lý đơn giản nhất, như anh @tranthanhan1962 đã đề cập ở trên)
Cách sử dụng: dùng hàm trực tiếp trong Textbox (vd: txtBarocde)
Mã PHP:Control Source: = EAN13([MaHang])
Mã PHP:Control Source: = Code128([MaHang])
Link file (có kèm font): https://www.mediafire.com/file/zjg5x3e56...o.zip/file
(PS: @tranthanhan1962: hàm Code128() của anh Ân vài trường hợp nó tổng hợp ra số checknum không nằm trong bảng dò ASCII nên ra chuỗi barcode không đọc được. Vô tình em phát hiện khi thử nghiệm. Ví dụ: mã "885874730071"; "(10) 89385177837-+%")
Mình chưa có thời gian để test hết ứng dụng của ongke0711 nhưng khi test EAN-13 với mã : 893532401499 khi quét sẽ ra 8935324014995, 893851778372 khi quét sẽ ra 8938517783722 có nghĩa nó sẽ thừa 1 ký tự -
RE: Function tạo barcode 128 cho excel lẫn accsee (form và report))
ongke0711 > 30-10-24, 09:27 PM
(30-10-24, 09:21 AM)tranthanhan1962 Đã viết: Mình chưa có thời gian để test hết ứng dụng của ongke0711 nhưng khi test EAN-13 với mã : 893532401499 khi quét sẽ ra 8935324014995, 893851778372 khi quét sẽ ra 8938517783722 có nghĩa nó sẽ thừa 1 ký tự
Barcode Ean 13 nó có 13 ký tự là đúng đó anh. Số cuối là số checksum mà tool sẽ tự tạo. Barcode gốc chỉ có 12 ký tự. Khi anh tạo barcode bằng phần mềm Barcode Baảtender, nó cũng sẽ tự tạo số checksum cho người dùng.
Cái tool này tạo luôn số checksum, anh khỏi phải dùng phần mềm bên ngoài để tạo. Sau khi tạo xong, anh chỉ việc lưu số barcode 13 ký tự này cho mã hàng hoá để dùngluoon thôi.