Курс Молодого Самурая: Печать штрих-кода в отчетах 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. Дмитрий пишет:

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

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