суббота, 6 июня 2015 г.

Штрих-код

В модулях АС-Библиотека-3 периодически встречаются "намёки" на поддержку штрих-кода. Например, при выводе читательского билета, в модуле "Читатель", одно из полей должно представлять штрих-код.


Но, вместо штрих-кода - обычные символы. В чём же дело? Если в Ворде активировать меню "Разработчик" и открыть свойства поля, то увидим следующую картину.


Имя элемента F_010a является производным от Марк36 поля "010а", обозначающего штрих-код. А шрифт имеет весьма замысловатое название и явно не системный. Откроем папку "C:\Windows\Fonts" - такого шрифта здесь нет. Очевидно, система предложила замену. Но на самом деле он есть! Если прочитать тот же каталог в консоли, то увидим файл (в консоли отображаются имена файлов шрифтов, а не имена самих шрифтов).


Здесь команда dir дополнена строкой *39*, которая ограничивает вывод файлами, содержащими в имени 39. Получили список из одного файла, который нам и нужен. Здесь же набираем его имя и жмём ENTER. Открывается окно просмотра шрифта.


Нажимаем кнопку "Установить". Теперь повторно выводим читательский билет.


Всё в порядке. Штрих-код на месте. Очевидно, установочная программа копирует файл шрифта в нужный каталог, а установку пропускает. Но, как видишь, это легко исправить вручную. Если дизайн билета тебе покажется "разлапистым", то вот такой вариант можно "наширять" за пару часов.


Что же это за загадочное число 39? Это просто часть обозначения стандарта кодирования "Code 39". Если наберёшь его в Википедии - получишь всю информацию. Я лишь отмечу свойство, позволяющее реализовать его в виде шрифта. Что это нам даёт? Ну, например вот:


Или вот



Как я это сделал? Просто выбрал нужный шрифт (который мы только что установили:). А как тебе вот это?


Здесь немного сложнее. Нужно соорудить небольшой скрипт, например такой:

DIM i
SetCardSize(60, 120)
SetBlock( 1, 0, 0)
FOR i = 1 TO FieldsGetCount(899)
Print(GetFieldEx( 899, i, "p", 1 ), 0, 0 )
NEXT
NextPage()

Этот скрипт выводит на карточку символы штрих-кодов экземпляров. Его необходимо сохранить в файл с любым именем (например "Штрихкод") и расширением ".crd", и поместить его в папку "ECatalog". После чего задать для карточки нужный шрифт. Заметь, что звёздочки здесь хранятся в базе. При большом размере шрифта, досадным образом, проявляется начальный перенос строки. Он присутствует на всех карточках. Его можно "убить" с клавиатуры и это, пока, единственный известный мне способ.
Возможно печать единичного штрих-кода в "Каталогизаторе" имеет спортивный или вспомогательный интерес. Вообще, есть два подхода - сначала печатаем, потом присваиваем или сначала присваиваем, потом печатаем. Возможна и комбинация этих методов. Здесь важно соблюсти уникальность, там, где это необходимо. Поле штрих-кода, как и инвентарный номер, в АС-3 с настройками по умолчанию, на уникальность не проверяется.
Вообще, для применения штрих-кода, в АС-3 можно найти немало мест. Это и есть то, что называется громким словом АВТОМАТИЗАЦИЯ.
И ещё несколько моментов относительно Code 39. Звёздочки в начале и в конце последовательности обязательны, но, в зависимости от настроек, сканер может выдавать их, а может пропускать. Кроме того, последний символ последовательности может быть контрольным и также выдаваться или пропускаться. Это так же зависит от настроек. Контрольный символ повышает надёжность считывания, но добавляет изрядных хлопот. Настройка сканера, как правило, заключается в считывании последовательности специальных настроечных штрих кодов, которые предварительно распечатываются из руководства и сложности не представляет. Однако менять настройки по ходу работы, очевидно, не получится. В базе, также можно хранить штрих-коды со звёздочками и контрольным символом, а можно без них. И генерировать скриптом при печати. Поэтому всю схему лучше продумать заранее.
В АРХИВЕ найдёшь файл под названием "FUNCTION_BarCode39.txt". Он содержит функцию, написанную на внутреннем скриптовом языке АС-3. Эта функция проверяет входную строку на допустимость в Code 39 и "заворачивает" строку звездочками. Если второй параметр = 1, то вычисляет контрольную сумму и добавляет в конец строки, согласно спецификации Code 39. Можешь использовать и модифицировать по своему усмотрению. Для применения нужно добавить её в конец (например) рабочего скрипта и вызвать в нужном месте. Если возникнут какие либо проблемы - сообщи.
Несколько слов о сканерах. Мне пришлось эксплуатировать сканеры, подключаемые в разрыв клавиатуры PS/2. В таком случае ни компьютер, ни ПО не различает, откуда пришли символы с клавиатуры или со сканера. В таком режиме эксплуатации каких-то настроек в АС-3 вообще не требуется. Сейчас USB сканеры, также могут эмулировать клавиатуру. На данный момент встречаются модели от 2 до 5 т.р. и, как правило, читают Code 39.
Чем и на чём печатать? Вопрос не тривиальный. Начиная от дорогих, специализированных, термопереносных принтеров штрих кода, до того, что есть под рукой. Для экспериментов достаточно последнего. Важны следующие параметры цена, стойкость и чёткость отпечатка, "размер уверенного считывания", удобство. "Самоклейка" здесь не помешает.
С другой стороны, почти половина продукции идёт с уже готовым штрих-кодом. Диски, журналы... Это, как правило, разновидности "EAN 13" (также ищи в Википедии). ISBN и ISSN являются его особыми случаями. Ничто не мешает использовать их вперемежку с другими типами кодирования. Единственное что хотелось бы отметить - не все сканеры читают (или настроены на чтение) дополнительных полей ISSN, идентифицирующих журнал с точностью до номера (EAN 2 и EAN 5). Это важный момент.
И, в конце, несколько слов о таком прогрессивном конкуренте, как RFID. Конечно, сказочная технология. Но, увы, пока только для "демонстративно дорогих" проектов. Без хорошего интегратора, с "ходовыми" испытаниями не менее полугода, здесь не обойтись. При этом нужно тщательно "следить за руками", иначе какая-то "мелочь" уронит все прелести. Я с подобными "мелочами" уже сталкивался. По крайней мере, пока расходники (метки) не станут торговаться с "открытыми" ценниками (нужно обращаться к менеджеру) - об этой технологии лучше забыть.
Пиши комментарии (регистрация не требуется) или на почту acbib3@yandex.ru