Курс Молодого Самурая: Печать штрих-кода в отчетах Microsoft Dynamics NAV
Вступительное слово:
Данная статья родилась после продолжительных размышлений и сбора информации на необъятных просторах интернета о проблеме печати штрих-кода (или по-другому их называют бар-коды) в отчетах Microsoft Dynamics NAV. Одним из вариантов печати штрих-кода является использование ActiveX но, как правило, его нужно купить, или написать самому. В этой статье я постараюсь описать вариант использования специальных штрих-кодовских шрифтов. Надеюсь, читатель найдет здесь полезную для себя информацию.
Что получилось:
Преднамеренно нарушу структуру статьи, и сразу же перейду к тому, что у меня получилось.
На этом Рисунке видно, что сформирован отчет со следующими штрих-кодами Code128B Code39, CodeEan13, CodeEan8.
Как это сделать:
Не забываем, что штрих-код по своей сути все же является шрифтом, который установлен в системе. Значит, нам нужно установить и зарегистрировать следующие шрифты. Code128b.ttf, Code39.ttf, CodeEan.ttf. Из названия шрифтов понятно, какой шрифт предназначен для того или другого штрих-кода.
Через Панель управления -> Шрифты, Добавляем шрифты штрих-кодов. И потом их регистрируем !FontBarCode.reg
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes]
“CodeEan,0″=”CodeEan,204″
“CodeEan,204″=”CodeEan,0″
“Code39,0 “=”Code39,204″
“Code39,204″=”Code39,0″
“Code128b,0 “=”Code128b,204″
“Code128b,204″=”Code128b,0″[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts]
“Code39 (TrueType)”=”Code39.Ttf”
“Code128b (TrueType)”=”Code128b.ttf”
“CodeEan (TrueType)”=”CodeEan.Ttf”
Ну конечно для таких действий нужны права администратора на рабочую станцию.
И после установки и регистрации, для пущей важности нужно перегрузить рабочую станцию.
И еще, для любителей поковырять все изнутри, в архиве есть файлы Code128b.vfb, Code39.vfb, CodeEan.vfb это проекты шрифтов для такой замечательной программы редактирования шрифтов FontLab Studio 5. Ну, вот и все что касается шрифтов.
Всю математику по формированию штрих-кода я вынес в Codeunit 50000 Barcode Code. Я его хорошо документировал и при желании Вы его можете просмотреть. Единственное, что хочется это описать функции. И так начнем.
BarCode128 - Функция генерации Штрих-кода Code128b
BarCode39 - Функция генерации Штрих-кода Code39
BarCodeEAN13 - Функция генерации Штрих-кода CodeEAN13
BarCodeEAN8 - Функция генерации Штрих-кода CodeEAN8
Parity_B_Char - Софункция штрих-кода паритет В CodeEAN (См.спецификацию EAN13&8.doc).
Parity_C_Char - Софункция штрих-кода паритет C CodeEAN (См.спецификацию EAN13&8.doc).
IsCode128Char - Проверка набора кодируемых знаков штрих-кода Code128b
IsCodeEAN13Char - Проверка набора кодируемых знаков штрих-кода CodeEAN13
IsCodeEAN8Char - Проверка набора кодируемых знаков штрих-кода CodeEAN8
IsCode39Char - Проверка набора кодируемых знаков штрих-кода Code39
EAN13CheckSum - Функция вычисления контрольного числа штрих-кода CodeEAN13
EAN8CheckSum - Функция вычисления контрольного числа штрих-кода CodeEAN8
Code128CheckSum - Функция вычисления контрольного числа штрих-кода Code128b
Хочется обратить внимание, уважаемого читателя вот на такие блоки в функциях BarCode128, BarCode39, BarCodeEAN13, BarCodeEAN8.
Если Вы снимете комментарий с MESSAGE то при каждом некорректном штрих-коде получите сообщение, что Штрих-код не соответствует спецификации. По умолчанию я это сообщение закомментировал, и если все же в базе попадается не соответствующий спецификации штрих-код, то вывожу в отчет пустое значение. Но IMHO (In My Humble Opinion) в базе данных должны храниться уже выверенные штрих-коды.
Теперь формируем отчет. Тестовый отчет, в архиве, он представлен объектом Report 50000 Test BarCode Report
В Globals объявляем Codeunit Barcode Code под переменной BarcodeGenerator и в Section Desigen Report устанавливаем в свойствах TextBox
FontName = Code128b
SourceExpr = BarcodeGenerator.BarCode128(”Test BarCode Table”.CodeBar ) размерность шрифта в тестом отчете FontSize = 20
В этом TextBox мы получим штрих-код Code128b. Следовательно, что бы получить CodeEAN13 нужно в свойствах TextBox установить
FontName = CodeEAN
SourceExpr = BarcodeGenerator.BarCodeEAN13(”Test BarCode Table”.CodeBar ).
Ну вот в принципе и все, наш отчет Microsoft Dynamics_NAV теперь может печатать штрих-код, там где нам это нужно.
Описание архива:
Содержимое FrontsCodeBar.zip
- !FontBarCode.reg - Windows Registry Editor Version 5.00
- Code128b.ttf - Шрифт Штрих-кода Code128b
- Code39.ttf - Шрифт Штрих-кода Code39
- CodeEan.ttf - Шрифт Штрих-кода CodeEan13&8
- CodeEan.vfb - Проект шрифтов CodeEan13&8 для FontLab Studio 5
- Code128b.vfb - Проект шрифтов Code128b для FontLab Studio 5
- Code39.vfb - Проект шрифтов CodeEan39 для FontLab Studio 5
- DataBarCodeTxt.txt – Тестовый набор данных для Test BarCode Table
- _TestBarCodeTxt370.txt – Объекты в тексте Microsoft Dynamics_NAV: Test BarCode Table, Test BarCode Form List, Test BarCode Report, Test BarCode DataPort, Barcode Code.
- Codeunit_Barcode_Code.txt – OBJECT Codeunit 50000 Barcode Code.
- Specification - Code 128 Specification.doc, EAN13&8.doc
- Тест BarCode.JPG
Благодарности:
Моей жене, за то, что до сих пор меня любит.
Об авторе:
Олег Леонтьев.
AKA LOGic_BBS
Со мной всегда можно связаться по адресу oleg_leontev@mail.ru или посетите мой сайт http://www.logic-pfr.narod.ru
Метки: Олег Леонтьев





15 Январь 2009 в 13:26
Совет от Sancho.
————————————————————-
если все сделано правильно, а сканер штрихкодов не хочет сканировать красиво распечатанный штрихкод, то выведите его на печать вот так:
‘*’ + barcode + ‘*’
шансов на прочтение станет на порядок больше!
————————————————————-
http://forum.mazzy.ru/index.php?showtopic=12785&view=findpost&p=44479
15 Январь 2009 в 15:51
В продолжение совет от Alterant.
————————————————————-
Это характерно только для стандарта Code 39. * - это обязательный начальный и конечный символ, который позволяет определить направление штрихкода и служит чем-то вроде контрольной суммы (Code 39 не имеет контрольной суммы).
При использовании стандарта EAN, например, добавлять какие либо дополнительные знаки нельзя.
Подробнее здесь:
http://en.wikipedia.org/wiki/Code_39
————————————————————-
http://forum.mazzy.ru/index.php?showtopic=12785&view=findpost&p=44485
18 Март 2009 в 18:20
Еще материалы по штрихкодам в NAV с сайта mibuso.com:
1. Barcode 3 of 9 (code39) generation codeunit
This upload contains a codeunit that will generate a code 3 of 9 barcode without using any external resources; no fonts, no DLLs, nothing.
How it works
The codeunit generates a BMP ‘file’ on the fly using C/AL. The image is stored in a BLOB field on some record. The record is never written to the database so it doesn’t matter what table is used. This code uses the ‘Object’ table.
Advantages
Unlike a font (eg: http://www.squaregear.net/fonts/free3of9.shtml ) this can be displayed at any size in both the X and Y dimensions. In addition the font doesn’t have to be installed on the client machine.
The example report
Also included in this upload is a simple report that prints a barcode for each item in the database using the “Vendor item No.”
http://www.mibuso.com/dlinfo.asp?FileID=1043
———————————
2. Open Source Codeunit with a simple yet effective codebar generator. For now just the EAN13 standard is supported. A wider range of codebar types and features will be added in future versions.
http://www.mibuso.com/dlinfo.asp?FileID=804
———————————
3. This tool creates a bmp-file containing a barcode you can import into Navision. You can create barcode like ISBN,EAN13,EAN8,EAN5,EAN2,EAN128,Codebar,Code25, … At least 24 different barcode-types. The check-digit can calculated by the program.
New version:
** a lot of emails reached me from people all over the world who use my program. Some of them have hints to make a good program better. Here is a new Version with most wish:
- now you are able to suspress the barcodetext
- newer barcode.ocx
http://www.mibuso.com/dlinfo.asp?FileID=106
———————————
4. With this font and encode function you can create a barcode in Navision.
The CODE 128 barcode is an alphanumeric barcode with a checksum. It is widely used an can be read by most scanners. The TTF is freeware.
http://www.mibuso.com/dlinfo.asp?FileID=405
17 Июль 2010 в 13:17
5. Name: EAN 8/13 Code 39/128 Barcode Creator
Description: Encoding: EAN8, EAN13, Code 39 & Code 128
This creates a barcode in pure C/AL, the barcode is created as a BMP that is contained in a BLOB field.
This requires no external components or additional fonts.
Uses the TempBlob Table
Based on: http://www.mibuso.com/dlinfo.asp?FileID=1185
http://mibuso.com/dlinfo.asp?FileID=1192
21 Январь 2012 в 14:16
6. QR Codes for Microsoft Dynamics NAV
http://blogs.msdn.com/b/nav/archive/2012/01/19/qr-codes-for-microsoft-dynamics-nav.aspx