Курс Молодого Самурая: Печать штрих-кода в отчетах Microsoft Dynamics NAV

Вступительное слово:

Данная статья родилась после продолжительных размышлений и сбора информации на необъятных просторах интернета о проблеме печати штрих-кода (или по-другому их называют бар-коды) в отчетах Microsoft Dynamics NAV. Одним из вариантов печати штрих-кода является использование ActiveX но, как правило, его нужно купить, или написать самому. В этой статье я постараюсь описать вариант использования специальных штрих-кодовских шрифтов. Надеюсь, читатель найдет здесь полезную для себя информацию.

Что получилось:

Преднамеренно нарушу структуру статьи, и сразу же перейду к тому, что у меня получилось.

Печать штрих-кода в отчетах Microsoft Dynamics NAV

На этом Рисунке видно, что сформирован отчет со следующими штрих-кодами Code128B Code39, CodeEan13, CodeEan8.

Как это сделать:

Не забываем, что штрих-код по своей сути все же является шрифтом, который установлен в системе. Значит, нам нужно установить и зарегистрировать следующие шрифты. Code128b.ttf, Code39.ttf, CodeEan.ttf. Из названия шрифтов понятно, какой шрифт предназначен для того или другого штрих-кода.

Печать штрих-кода из Dynamics NAV - установка шрифтов 

Через Панель управления -> Шрифты, Добавляем шрифты штрих-кодов. И потом их регистрируем !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.

Печать штрих-кода из Dynamics NAV - обработка некорректных штрих-кодов

Если Вы снимете комментарий с MESSAGE то при каждом некорректном штрих-коде получите сообщение, что Штрих-код не соответствует спецификации. По умолчанию я это сообщение закомментировал, и если все же в базе попадается не соответствующий спецификации штрих-код, то вывожу в отчет пустое значение. Но IMHO (In My Humble Opinion) в базе данных должны храниться уже выверенные штрих-коды.

Теперь формируем отчет. Тестовый отчет, в архиве, он представлен объектом Report 50000 Test BarCode Report

Печать штрих-кода из Dynamics NAV - тестовый отчет

В Globals объявляем Codeunit Barcode Code под переменной BarcodeGenerator и в Section Desigen Report устанавливаем в свойствах TextBox

Печать штрих-кода из Dynamics NAV - настройка свойств 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

Метки:



Комментариев: 9

  1. apanko пишет:

    Совет от Sancho.

    ————————————————————-
    если все сделано правильно, а сканер штрихкодов не хочет сканировать красиво распечатанный штрихкод, то выведите его на печать вот так:
    ‘*’ + barcode + ‘*’
    шансов на прочтение станет на порядок больше!
    ————————————————————-
    http://forum.mazzy.ru/index.php?showtopic=12785&view=findpost&p=44479

  2. apanko пишет:

    В продолжение совет от 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

  3. apanko пишет:

    Еще материалы по штрихкодам в 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

  4. apanko пишет:

    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

  5. apanko пишет:

    6. QR Codes for Microsoft Dynamics NAV
    http://blogs.msdn.com/b/nav/archive/2012/01/19/qr-codes-for-microsoft-dynamics-nav.aspx

  6. apanko пишет:

    7. Mod to CU for EAN 8/13 Code 39/128 Barcode Creator v1.5

    Description: This upload contains a modified codeunit to address the speed issue with printing multiple barcodes.
    Thanks to Stijn Bossuyt and Igor Pchelnikov for their contributions.

    http://www.mibuso.com/dlinfo.asp?FileID=1456

  7. apanko пишет:

    http://www.archerpoint.com/blog/Posts/printing-barcodes-rtc-report

  8. apanko пишет:

    см также
    http://www.nav4u.ru/archives/119-pechat-shtrix-koda-v-otchetax-microsoft-dynamics-nav-s-ispolzovaniem-activex/

  9. Дмитрий пишет:

    Олегу Леонтьеву - спасибо и поклон!

Оставьте свой отзыв!