Работа с камерой реализована с применением технологии DirectX и требует установленного в системе DirectX, а также поддержку web-камерой этой технологии (практически все современные камеры, в том числе бюджетные, поддерживают DirectX).
Комплектация ПО:
- ActiveX-компонент для печати штрих-кодов
- Внешняя компонента захвата видео с камеры и распознавания штрих-кодов
- Инструкция по эксплуатации (с подробным описанием каждого поддерживаемого типа штрих-кодов)
- Пример внешней обработки для 1С 8.2
Программа предоставляется в виде программы-установщика, весь процесс установки происходит в мастере установки автоматически, с запросом параметров установки у пользователя. Установка может быть осуществлена как для одного пользователя, так и для всей системы.
В разработке использованы следующие свободно распространяемые библиотеки:
Zint – библиотека отображения штрих-кодов http://sourceforge.net/projects/zint/
Zbar – библиотека распознавания штрих-кодов http://zbar.sourceforge.net/
Fork библиотеки функций Zint для Delphi http://theunknownones.net
Использование ActiveX-компонента barcontrol.ocx
Программа отображения и печати штрих-кодов является элементом управления ActiveX со всеми вытекающими из этого последствиями. Это означает, что Вы можете использовать данный компонент для встраивания в любое приложение, поддерживающее интеграцию ActiveX компонентов, например, Microsoft Word, Microsoft Excel, другие продукты из состава Microsoft Office. Можно встраивать компонент в документ, а также располагать его на формах приложений VBA. Но всё же основное назначение компонента – встраивание в шаблоны печатных форм системы 1С-предприятие версий 7.* и 8.*.
Встраивание в шаблон 1С 7.7
1С 7.7 не поддерживает встраивание элементов управления напрямую из меню конфигуратора. Для того, чтобы встроить элемент управления в макет печатной формы 1С 7.7, вставьте его сначала в Microsoft Word или любое другое приложение, поддерживающее встраивание ActiveX-элементов. Затем выделите элемент кнопкой мыши и скопируйте его в буфер обмена (Ctrl+C). После этого перейдите на форму редактирования макета в конфигураторе 1С и вставьте элемент из буфера в выбранное место (Ctrl+V).
Встраивание в шаблон 1С 8.2
Для встраивания элемента в макет табличного документа 1С 8.2 последовательно выберите пункты меню «Таблица/Рисунки/Вставить объект» из главного меню конфигуратора. Щелкните в нужном месте макета указателем мыши, и выделите область, в которой будет располагаться элемент. После того, как Вы закончили выделение, на экране появится стандартное окно вставки объектов системы Windows. Выберите из списка «CBarGenerator control». После нажатия кнопки «Ok» элемент появится в обозначенной области.
Настройка свойств объекта из конфигуратора
Выделите указателем мыши элемент «CBarGenerator» в шаблоне печатной формы в конфигураторе, и щелкните правой кнопкой. В появившемся меню выберите пункт «CBarGenerator Control/Properties». В появившемся окне Вы можете изменять тип штрих-кода, данные, цвет, шрифт текста, отступы и т.д. (значения доступных для изменения свойств описаны в разделе «Программный интерфейс приложения»).
При изменении какого-либо из пунктов настроек становится доступной кнопка «Применить», с помощью которых Вы можете просмотреть результирующие изменения, не закрывая окна настроек. При нажатии кнопки «Ok» все сделанные изменения применяются к объекту, а окно настроек закрывается.
Программное управление свойствами объекта из 1С 7.7
Выделите указателем мыши элемент «CBarGenerator» в шаблоне печатной формы в конфигураторе «1С-Предприятие» 7.7, и щелкните правой кнопкой. В появившемся меню выберите пункт «Свойства».
В поле «Расшифровка» поместите имя функции, которая будет вызываться для события получения расшифровки. При вызове данной функции свойство шаблона «ТекущийОбъект» будет указывать на наш элемент управления, поэтому здесь можно изменять любые свойства, описанные в разделе «Программный интерфейс приложения». Пример программного кода:
Процедура ПечатьДокумента()
Таб = СоздатьОбъект("Таблица");
ПечКод = "012345678934";
ПечТип = 34;
Таб.ВывестиСекцию("СекцияШтрихКода");
...
Таб.Показать("Штрих-коды");
КонецПроцедуры
Функция ПолучитьРасшифровку()
Таб.ТекущийОбъект.BarType = ПечТип;
Таб.ТекущийОбъект.BarData = ПечКод;
КонецФункции
Программное управление свойствами объекта из 1С 8.2
Выделите указателем мыши элемент «CBarGenerator» в макете табличного документа в конфигураторе, перейдите во вкладку «Свойства рисунка» и задайте ему имя.
Теперь Вы можете обращаться к объекту из программного кода по указанному имени. Предварительно необходимо вывести макет в результирующий табличный документ. Пример программного кода:
Процедура ПечатьДокумента()
ТабДокумент = ЭлементыФормы.ПолеТабличногоДокумента;
ТабДокумент.Очистить();
ТабДокумент.ИмяПараметровПечати = "Параметры_Штрихкодирования";
Макет = ПолучитьМакет("Макет");
ОбластьШапки = Макет.ПолучитьОбласть("Шапка");
ТабДокумент.Вывести(ОбластьШапки);
ТабДокумент.Рисунки.DBarCode.Объект.BarType = ТипКода;
ТабДокумент.Рисунки.DBarCode.Объект.BarData = СтрокаДанные;
КонецПроцедуры
Программный интерфейс приложения
Свойства объекта
BackColor
Чтение и запись. Тип – числовой. Установка и получение цвета фона штрих-кода. Устанавливается 24-битным целым числом, в котором каждый из трёх байтов отвечает за свою цветовую составляющую (RGB). Например, $FF0000 (десятичное 16711680) соответствует красному цвету,
BarColor
Чтение и запись. Тип – числовой. Установка и получение цвета штрихов штрих-кода. Установка аналогична параметру BackColor.
BarData
Чтение и запись. Тип – строковой. Установка и чтение строки данных для преобразования в штрих-код (подробнее в разделе «Формат штрих-кодов»).
BarType
Чтение и запись. Тип – числовой (в VBA использовать перечисление Symbology). Установка и чтение типа штрих-кода. Соответствие типов штрих-кодов числовым кодам приведено в таблице:
Наименование типа |
Числовое значение |
CODE11 |
0 |
C25MATRIX |
1 |
C25INTER |
2 |
C25IATA |
3 |
C25LOGIC |
4 |
C25IND |
5 |
CODE39 |
6 |
EXCODE39 |
7 |
EANX |
8 |
EAN128 |
9 |
CODABAR |
10 |
CODE128 |
11 |
DPLEIT |
12 |
DPIDENT |
13 |
CODE16K |
14 |
CODE49 |
15 |
CODE93 |
16 |
FLAT |
17 |
RSS14 |
18 |
RSS_LTD |
19 |
RSS_EXP |
20 |
TELEPEN |
21 |
UPCA |
22 |
UPCE |
23 |
POSTNET |
24 |
MSI_PLESSEY |
25 |
FIM |
26 |
LOGMARS |
27 |
PHARMA |
28 |
PZN |
29 |
PHARMA_TWO |
30 |
PDF417 |
31 |
PDF417TRUNC |
32 |
MAXICODE |
33 |
QRCODE |
34 |
CODE128B |
35 |
AUSPOST |
36 |
AUSREPLY |
37 |
AUSROUTE |
38 |
AUSREDIRECT |
39 |
ISBNX |
40 |
RM4SCC |
41 |
DATAMATRIX |
42 |
EAN14 |
43 |
CODABLOCKF |
44 |
NVE18 |
45 |
JAPANPOST |
46 |
KOREAPOST |
47 |
RSS14STACK |
48 |
RSS14STACK_OMNI |
49 |
RSS_EXPSTACK |
50 |
PLANET |
51 |
MICROPDF417 |
52 |
ONECODE |
53 |
PLESSEY |
54 |
TELEPEN_NUM |
55 |
ITF14 |
56 |
KIX |
57 |
AZTEC |
58 |
DAFT |
59 |
MICROQR |
60 |
HIBC_128 |
61 |
HIBC_39 |
62 |
HIBC_DM |
63 |
HIBC_QR |
64 |
HIBC_PDF |
65 |
HIBC_MICPDF |
66 |
HIBC_BLOCKF |
67 |
HIBC_AZTEC |
68 |
AZRUNE |
69 |
CODE32 |
70 |
EANX_CC |
71 |
EAN128_CC |
72 |
RSS14_CC |
73 |
RSS_LTD_CC |
74 |
RSS_EXP_CC |
75 |
UPCA_CC |
76 |
UPCE_CC |
77 |
RSS14STACK_CC |
78 |
RSS14_OMNI_CC |
79 |
RSS_EXPSTACK_CC |
80 |
CHANNEL |
81 |
CODEONE |
82 |
GRIDMATRIX |
83 |
Для уточнения типа штрих-кода в некоторых случаях требуется установка дополнительных параметров Option1, Option2, Option3. Для составных кодов может потребоваться установка свойства Primary.
BorderWidth
Чтение и запись. Тип – числовой. Установка и чтение толщины рамки вокруг штрих-кода (0 – рамка не используется).
Font
Чтение и запись. Тип – OleFont. В системах «1С-Предприятие» любых версий установка данного параметра невозможна. Установка и получение шрифта человекочитаемой текстовой метки, выводимой вместе с штрих-кодом.
MarginLeft, MarginTop, MarginRight, MarginBottom, PaddingLeft, PaddingRight, PaddingBottom,
SpacingLeft, SpacingTop, SpacingRight, SpacingBottom
Чтение и запись. Тип – числовой. Отвечает за размеры отступов. Соответствие параметров показано на рисунке.
Option1, Option2, Option3
Чтение и запись. Тип – числовой. Дополнительные опции, требующиеся для некоторых типов штрих-кодов.
Primary
Чтение и запись. Тип – строковой. Дополнительные данные для составных штрих-кодов. Подробнее в разделе «Формат штрих-кодов».
ShowText
Чтение и запись. Тип – булево (в 1С 7.7 – целое число ). Флаг отображения человекочитаемой метки, выводимой вместе с некоторыми типами штрих-кодов. Значение True (1) – выводить текст, False (0) – скрыть текст.
TextColor
Чтение и запись. Тип – числовой. Установка и получение цвета шрифта человекочитаемой текстовой метки, выводимой вместе с штрих-кодом. Установка аналогична параметру BackColor.
Работа с компонентом распознавания
Компонент распознавания штрих-кодов реализован с использованием DirectX для захвата видеопотока с камеры. Поток разбивается на отдельные кадры, которые затем анализируются на предмет наличия одного или нескольких изображений символов штрих-кодов. При обнаружении символов, они выделяются в окне сканирования яркой линией, а информация о распознанных символах, такая, как расшифрованные данные, тип штрих-кодирования, угол, при повороте на который было произведено успешное распознавание, передается при помощи внешнего события в систему "1С-Предприятие".
Использование в программах 1С 7.7, 8.2
Компонент распознавания оформлен в виде внешней компоненты для систем 1С, и может быть встроен в программу стандартным для 1С способом:
В глобальном модуле:
Перем СканерОбъект Экспорт;
Процедура ПриНачалеРаботыСистемы()
СканерОбъект = Null;
Попытка
ПодключитьВнешнююКомпоненту("AddIn.OBRScannerVK");
СканерОбъект = Новый("AddIn.OBRScannerVK");
Исключение
Сообщить("Не удалось загрузить компоненту!", СтатусСообщения.Важное);
Сообщить("1. Проверьте, все ли файлы компоненты скопированы в каталог " + КаталогПрограммы(), СтатусСообщения.Внимание);
Сообщить("2. Проверьте, не установлен ли на компьютере Firewall, блокирующий загрузку компоненты!", СтатусСообщения.Внимание);
Сообщить(ОписаниеОшибки(), СтатусСообщения.Внимание);
КонецПопытки;
КонецПроцедуры
Для вызова окна сканирования и запуска процедуры сканирования служит функция "ПоказатьОкноСканирования()":
Процедура КнопкаВыполнитьНажатие(Кнопка)
Если СканерОбъект <> Null Тогда
СканерОбъект.ПоказатьОкноСканирования();
КонецЕсли;
КонецПроцедуры
После того, как программа распознала штрих-код, она отправляет в 1С строку, в которой зашифрованы распознанные данные, тип штрих-кода, доп. опции, угол поворота, при котором произошло распознавание. Строка данных закодирована алгоритмом Base64. Для раскодирования воспользуйтесь функцией компоненты"ДекодироватьBase64" (англ. "DecodeBase64").
Процедура ВнешнееСобытие(Источник, Событие, Данные)
СтрокаДанные = "";
Токены = СтрЗаменить(Данные,";", Символы.ПС);
ТипКода = 1;
Угол = 0;
Для Сч=1 По СтрЧислоСтрок(Токены) Цикл
СтрТокен = СтрПолучитьСтроку(Токены, Сч);
Индекс = Найти(СтрТокен,":");
Если Индекс > 1 Тогда
ИмяТокена = Лев(СтрТокен, Индекс-1);
ЗначТокена = Сред(СтрТокен, Индекс+1);
Если ИмяТокена = "data" Тогда
СтрокаДанные = СканерОбъект.ДекодироватьBase64(ЗначТокена);
ИначеЕсли ИмяТокена = "angle" Тогда
Угол = Число(ЗначТокена);
ИначеЕсли ИмяТокена = "symbol" Тогда
СтрТипБарКод = НРег(ЗначТокена);
Если СтрТипБарКод = "ean-13" Тогда
ТипКода = 21;
ИначеЕсли СтрТипБарКод = "ean-8" Тогда
ТипКода = 21;
ИначеЕсли СтрТипБарКод = "upc-e" Тогда
ТипКода = 23;
ИначеЕсли СтрТипБарКод = "upc-a" Тогда
ТипКода = 22;
ИначеЕсли СтрТипБарКод = "isbn-13" Тогда
ТипКода = 40;
ИначеЕсли СтрТипБарКод = "i2/5" Тогда
ТипКода = 2;
ИначеЕсли СтрТипБарКод = "code-39" Тогда
ТипКода = 7;
ИначеЕсли СтрТипБарКод = "code-128" Тогда
ТипКода = 11;
ИначеЕсли СтрТипБарКод = "pdf417" Тогда
ТипКода = 31;
ИначеЕсли СтрТипБарКод = "qr-code" Тогда
ТипКода = 34;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Настройка параметров распознавания в системе 1С
После загрузки компоненты в системе 1С в панели настроек появляется новая вкладка, на которой Вы можете настроить следующие параметры:
- Устройство захвата видео - позволяет выбрать используемое для считывания видеоустройство, если их в системе несколько.
- Вращать изображение - позволяет добиться более точного качества распознавания на достаточно мощных компьютерах, вращая изображение по 15% до 90% до тех пор, пока символ штрих-кода не найден на снимке.
- Типы бар-кодов - выбор типов бар-кодов, наличие которых на снимке будет пытаться определить программа. Программа может распознавать следующие типы бар-кодов: EAN-8, EAN-13, UPC-A, UPC-E, ISBN-10, ISBN-13, Code-39, PDF-417, Qr-Code, Code 128, Interleaved 2 of 5.
- Разрешение камеры - настройка точности распознавания;
- Проверять корректность данных - проверять соответствие стандарту распознанных данных для определённого типа кода;
- Останавливать сканирование после распознавания - после распознавания символа остановить процесс сканирования;
- Закрывать окно после распознавания - закрыть окно сканирования после распознавания символа.
Программный интерфейс компоненты распознавания
Свойства:
Картинка (Picture) - чтение, запись. Установка картинки для распознавания. Возможно два варианта установки данного свойства:
1: В качестве значения свойства устанавливается имя файла изображения. При этом компонента пытается загрузить файл изображения с диска по указанному пути, и определить тип его содержимого. Доступные типы графических файлов – JPEG, PNG, GIF, BMP.
2. В качестве значения свойства устанавливается строка, содержащая закодированные алгоритмом Base64 двоичные данные, полученные из картинки 1С:
СканерОбъект.Картинка = Base64Строка(Картинка.ПолучитьДвоичныеДанные());
При считывании значения из данного свойства, компонент всегда возвращает двоичные данные текущей картинки, загруженной с диска или захваченной с камеры, закодированные алгоритмом Base64. Получить готовую картинку 1С можно следующим образом:
Картинка1С = Новый Картинка(Base64Значение(Сканер.Картинка));
ТипыСимволов (SymbolTypes) – чтение, запись. Установка/считывание доступных для использования типов штрих-кодов. В качестве значения передаётся строка, содержащая символьные наименования типов штрих-кодов, разделённые запятой. Возможные значения следующие: "ean-13", "ean-8", "upc-e", "upc-a", "isbn-10", "isbn-13", "i2/5", "code-39", "code-128", "pdf417", "qr-code".
ПоворачиватьКартинку (RotateBitmap) – чтение, запись. Содержит логическое значение – истина или ложь. В случае установки значения Истина, для наиболее качественного распознавания изображение будет поворачиваться с приращением 15 градусов, до 90 градусов.
ГоризонтальноеРазрешение (DensityX) – чтение, запись. Позволяет задать горизонтальное разрешение камеры, устанавливается число от 1 до 10. Самое мелкое разрешение – 1.
ВертикальноеРазрешение (DensityY) – чтение, запись. Позволяет задать вертикальное разрешение камеры, устанавливается число от 1 до 10. Самое мелкое разрешение – 1.
Методы:
ПоказатьОкноСканирования (ShowScanWindow) – Показать окно сканирования, включить получение данных с видеокамеры и начать процесс распознавания символов штрих-кодов.
ДекодироватьBase64 (DecodeBase64) – Декодирование зашифрованной алгоритмом Base64 строки данных, переданной из внешней компоненты в обработчик внешнего события.
КодироватьBase64(EncodeBase64) – Кодирование строки данных 1С алгоритмом Base64. Для использования в следующих версиях компоненты.
СканироватьРисунок (ScanPicture) – Сканирование рисунка, переданного компоненте в свойстве «Картинка», на предмет наличия штрих-кодов. Декодированные данные возвращаются в программу в виде строки. Расшифровка строки возможна при помощи следующего кода 1С:
Функция ПолучитьДанныеИзСтроки(СтрКоды)
МассивДанных = Новый Массив;
Для Ит = 1 По СтрЧислоСтрок(СтрКоды) Цикл
ТипКода = 0;
СтрокаДанные = "";
УголПоворота = 0;
СтрТипБарКод = "";
Данные = СтрПолучитьСтроку(СтрКоды, Ит);
Токены = СтрЗаменить(Данные, ";", Символы.ПС);
Для Сч = 1 По СтрЧислоСтрок(Токены) Цикл
СтрТокен = СтрПолучитьСтроку(Токены, Сч);
Индекс = Найти(СтрТокен,":");
Если Индекс > 1 Тогда
ИмяТокена = Лев(СтрТокен, Индекс-1);
ЗначТокена = Сред(СтрТокен, Индекс+1);
Если ИмяТокена = "data" Тогда
СтрокаДанные = СканерОбъект.ДекодироватьBase64(ЗначТокена);
ИначеЕсли ИмяТокена = "angle" Тогда
УголПоворота = Число(ЗначТокена);
ИначеЕсли ИмяТокена = "symbol" Тогда
СтрТипБарКод = НРег(ЗначТокена);
КонецЕсли;
КонецЕсли;
КонецЦикла;
СтрРезультат = Новый Структура("ТипКодаСтр,Угол,Данные", СтрТипБарКод, УголПоворота, СтрокаДанные);
МассивДанных.Добавить(СтрРезультат);
КонецЦикла;
Возврат МассивДанных;
КонецФункции
ПолучитьФрагмент (GetFragment) – возвращает фрагмент исходного рисунка, содержащий обнаруженный символ штрих-кода. Рисунок возвращается в виде строки, закодированной алгоритмом Base64 (метод расшифровки дан в описании свойства «Картинка»). В качестве параметра в функцию передается порядковый номер обнаруженного символа, первый фрагмент обозначается единицей.

Требования к системе
Для использования комплекта ПО требуется, чтобы на компьютере пользователя была установлена операционная система Windows версии Windows XP и выше. Для работы компоненты распознавания на компьютере обязательно должен быть установлен DirectX версии не ниже 7.0, и видеокамера, поддерживающая интерфейс DirectX.
Условия распространения
Программное обеспечение распространяется в виде двоичных файлов, упакованных в программу - установщик. Код программы в комплект поставки не входит, но может быть предоставлен для собственного использования, но не для коммерческих целей.
Техническая поддержка
Возможно приобретение платной технической поддержки.
Достоинства
Преимущества данного комплекта программ - их универсальность. Компоненты поддерживают огромное количество типов штрих-кодов, и могут быть встроены в любые программы, использующие стандартные интерфейсы программирования. Возможно использование данных компонентов как при разработке систем документооборота, так и для целей розничной торговли, формирования регламентированной бухгалтерской отчетности и т.д.