(23-11-15, 11:05 AM)Minh Tiên Đã viết: Hiện Tiên đang dùng máy In Canon 2900 để In mã vạch từ PM "BarTender.Enterprise.Automation.9.4.2760" rất OK. Việc Máy đọc mã vạch đọc tốt hay ko là phụ thuộc vào chất lượng giấy và Máy để In Mã vạch.
Tiên cũng đã thử nhiều cách những khi In từ Access máy quét ko sao đọc được. Tiên nhờ bác sỹ G đc biết có Plug-In mới thực hiện đc. Nhưng phải mua nên chưa thử đc.
Thân./.
Mình đã ứng dụng thành công về in mã vạch trong access nên có chia sẻ như sau:
- thay vì mua Plug-In thì mình sưu tập đoạn code sau, bạn chép về, lưu vào và làm như cách mình là được, máy in thường vẫn in quét dược, không đến nỗi nào.
Code:
Function TriniCode128(RawBarcode as String)
'Cette fonction est régie par la Licence Générale Publique Amoindrie GNU (GNU LGPL)
'This function is governed by the GNU Lesser General Public License (GNU LGPL)
'V 2.0.0
'Paramètres : une chaine
'Parameters : a string
'Retour : * une chaine qui, affichée avec la police CODE128.TTF, donne le code barre
' * une chaine vide si paramètre fourni incorrect
'Return : * a string which give the bar code when it is dispayed with CODE128.TTF font
' * an empty string if the supplied parameter is no good
Dim i, checksum, mini, dummy, tableB As Boolean
TriniCode128 = ""
If Len(RawBarcode) > 0 Then
'Vérifier si caractères valides
'Check for valid characters
For i = 1 To Len(RawBarcode)
Select Case Asc(Mid(RawBarcode, i, 1))
Case 32 To 126, 203
Case Else
i = 0
Exit For
End Select
Next
'Calculer la chaine de code en optimisant l'usage des tables B et C
'Calculation of the code string with optimized use of tables B and C
TriniCode128 = ""
tableB = True
If i > 0 Then
i = 1 'i devient l'index sur la chaine / i become the string index
Do While i <= Len(RawBarcode)
If tableB Then
'Voir si intéressant de passer en table C / See if interesting to switch to table C
'Oui pour 4 chiffres au début ou à la fin, sinon pour 6 chiffres / yes for 4 digits at start or end, else if 6 digits
mini = IIf(i = 1 Or i + 3 = Len(RawBarcode), 4, 6)
'si les mini caractères à partir de i sont numériques, alors mini=0
'if the mini characters from i are numeric, then mini=0
mini = mini - 1
If i + mini <= Len(RawBarcode) Then
Do While mini >= 0
If Asc(Mid(RawBarcode, i + mini, 1)) < 48 Or Asc(Mid(RawBarcode, i + mini, 1)) > 57 Then Exit Do
mini = mini - 1
Loop
End If
If mini < 0 Then 'Choix table C / Choice of table C
If i = 1 Then 'Débuter sur table C / Starting with table C
TriniCode128 = Chr(210)
Else 'Commuter sur table C / Switch to table C
TriniCode128 = TriniCode128 & Chr(204)
End If
tableB = False
Else
If i = 1 Then TriniCode128 = Chr(209) 'Débuter sur table B / Starting with table B
End If
End If
If Not tableB Then
'On est sur la table C, essayer de traiter 2 chiffres / We are on table C, try to process 2 digits
mini = 2
'si les mini caractères à partir de i sont numériques, alors mini=0
'if the mini characters from i are numeric, then mini=0
mini = mini - 1
If i + mini <= Len(RawBarcode) Then
Do While mini >= 0
If Asc(Mid(RawBarcode, i + mini, 1)) < 48 Or Asc(Mid(RawBarcode, i + mini, 1)) > 57 Then Exit Do
mini = mini - 1
Loop
End If
If mini < 0 Then 'OK pour 2 chiffres, les traiter / OK for 2 digits, process it
dummy = Val(Mid(RawBarcode, i, 2))
dummy = IIf(dummy < 95, dummy + 32, dummy + 105)
TriniCode128 = TriniCode128 & Chr(dummy)
i = i + 2
Else 'On n'a pas 2 chiffres, repasser en table B / We haven't 2 digits, switch to table B
TriniCode128 = TriniCode128 & Chr(205)
tableB = True
End If
End If
If tableB Then
'Traiter 1 caractère en table B / Process 1 digit with table B
TriniCode128 = TriniCode128 & Mid(RawBarcode, i, 1)
i = i + 1
End If
Loop
'Calcul de la clé de contrôle / Calculation of the checksum
For i = 1 To Len(TriniCode128)
dummy = Asc(Mid(TriniCode128, i, 1))
dummy = IIf(dummy < 127, dummy - 32, dummy - 105)
If i = 1 Then checksum = dummy
checksum = (checksum + (i - 1) * dummy) Mod 103
Next
'Calcul du code ASCII de la clé / Calculation of the checksum ASCII code
checksum = IIf(checksum < 95, checksum + 32, checksum + 105)
'Ajout de la clé et du STOP / Add the checksum and the STOP
TriniCode128 = TriniCode128 & Chr(checksum) & Chr(211)
End If
End If
End Function
Trong report, 1 textbox bạn để mã cần in nhưng font Arial(VD là txtA), 1 textbox kia font Code128, data=TriniCode128(txtA) sẽ là mã vạch cần in.
Theo mình biết, máy quét mã vạch đọc được gồm font mã vạch, code để hiển thị ấn định ký tự bắt đầu, ký tự kết thúc và checksum của chuỗi. Và Function trên làm việc đó.
Chúc bạn thành công.