Начать, наверное, надо со ссылок:
- Разработчики компоненты: ImageMagick Studio LLC
- Документация по компоненте на сайте ИТС: Внешний компонент “1C:Печать штрихкодов” (Native) для платформы "1С: Предприятие 8.3"
- Типы штрихкодов, описанные на ИТС: Штрихкодирование
Для начала подключим компоненту. В БСП есть методы правильного подключения компоненты со всеми проверками, но для примера можно сделать просто:
РезультатПодключения = ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПечатиШтрихкодов", "BarcodeSymbolicName", , ТипПодключенияВнешнейКомпоненты.Изолированно);
Генератор = Новый("AddIn.BarcodeSymbolicName.Barcode");
Теперь можно приступать к работе. Есть основные настройки компоненты и индивидуальные для некоторых типов ШК.
Основные:
Генератор.ТипКода = 0; // значение от 0 до 24
Генератор.АвтоТип = Ложь; // если Истина, то ТипКода можно не указывать
Генератор.ЗначениеКода = ""; // Строка или Base64Строка
Генератор.ОтображатьТекст = Истина;
Генератор.Шрифт = Генератор.ШрифтПоИндексу(3);
Генератор.РазмерШрифта = 12;
Генератор.ПоложениеТекста = 0; // 0 - снизу, 1 - сверху
Генератор.ПрозрачныйФон = Истина;
Генератор.УголПоворота = 0; // Значение в градусах: 0, 90, 180, 270
Генератор.ВертикальноеВыравниваниеКода = 3; // 1 - верх, 2 - центр, 3 - низ
Генератор.ТипВходныхДанных = 0; // 0 - строка, 1 - base64Строка
Генератор.УбратьЛишнийФон = Ложь;
Генератор.Ширина = 250;
Генератор.Высота = 100;
За основу возьмем эти настройки, ниже я буду показывать какие настройки я буду менять или добавлять для различных типов ШК
Так же у компоненты есть поля, доступные только для чтения:
КоличествоШрифтов = Генератор.КоличествоШрифтов; // Число, показывает какое количество установленных шрифтов может использовать компонента
Результат = Генератор.Результат; // Число, результат генерации, где 0 - успешно, 1 - ошибка
ТекстКода = Генератор.ТекстКода; // Возвращает ЗначениеКода с типом Строка
А так же есть 3 функции:
Штрихкод = Генератор.ПолучитьШтрихкод(); // Результат генерации штрихкода с типом ДвоичныеДанные
ШрифтПоИндексу = Генератор.ШрифтПоИндексу(3); // Получение установленного шрифта по индексу, в данном случае Arial
ЕстьТакойШрифт = Генератор.НайтиШрифт("Arial"); // Булево, указывает найден ли шрифт по имени
Ну, с вводными закончили, можно приступать к формированию.
И начнем мы с формата EAN8.
Согласно формата, мы можем передать для обработки 7 символов (цифры от 0 до 9). Последний восьмой символ - это контрольный символ, рассчитывается компонентой автоматически:
Генератор.ТипКода = 0;
Генератор.ЗначениеКода = "0123456";
Генератор.Ширина = 200;
Генератор.Высота = 65;
Штрихкод = Генератор.ПолучитьШтрихкод();
Картинка = Новый Картинка(Штрихкод);
ПоказатьЗначение(, Картинка);
Результат:
Обрабатывать можно 12 символов (цифры от 0 до 9). 13 символ так же контрольный и рассчитывается автоматически:
Генератор.ТипКода = 1;
Генератор.ЗначениеКода = "012345678901";
Генератор.Ширина = 300;
Генератор.Высота = 100;
Штрихкод = Генератор.ПолучитьШтрихкод();
Картинка = Новый Картинка(Штрихкод);
ПоказатьЗначение(, Картинка);
Результат:
В штрихкод можно зашифровать множество данных, таких как: год производства, партия, номер товара и т.д. Подробное описание передаваемых полей есть в википедии:
РасшифровкаEAN128 = Новый Массив;
РасшифровкаEAN128.Добавить("(01)" + "01234567890123"); // Глобальный номер предмета торговли GTIN (14 символов, числа от 0 до 9)
РасшифровкаEAN128.Добавить("(11)" + "202301"); // Дата производства (6 символов, числа от 0 до 9)
РасшифровкаEAN128.Добавить("(15)" + "202312"); // Срок реализации (6 символов, числа от 0 до 9)
РасшифровкаEAN128.Добавить("(17)" + "202412"); // Срок годности (6 символов, числа от 0 до 9)
РасшифровкаEAN128.Добавить("(3102)" + "102563"); // Масса нетто (кг) (6 символов, числа от 0 до 9), расшифровка ключа 310Х, где Х показывает положение десятичной дроби
EAN128 = СтрСоединить(РасшифровкаEAN128);
Генератор.ТипКода = 2;
Генератор.ЗначениеКода = EAN128;
Генератор.Ширина = 700;
Генератор.Высота = 200;
Штрихкод = Генератор.ПолучитьШтрихкод();
Картинка = Новый Картинка(Штрихкод);
ПоказатьЗначение(, Картинка);
Результат:
Согласно статье в википедии, в данный формат мы можем передавать латинские буквы, цифры и некоторые символы
Генератор.ТипКода = 3;
Генератор.ЗначениеКода = "*INFOSTART FORUM*";
Генератор.Ширина = 400;
Генератор.Высота = 130;
Штрихкод = Генератор.ПолучитьШтрихкод();
Картинка = Новый Картинка(Штрихкод);
ПоказатьЗначение(, Картинка);
Результат:
Из википедии можно узнать, что отличий от CODE39 не так много, но разница есть. По крайней мере, мы можем зашифровать все буквы латинского алфавита, цифры и спец символы (первые 128 символов таблицы ASCII):
Генератор.ТипКода = 4;
Генератор.ЗначениеКода = "{*INFOSTART FORUM*}";
Генератор.Ширина = 400;
Генератор.Высота = 130;
Штрихкод = Генератор.ПолучитьШтрихкод();
Картинка = Новый Картинка(Штрихкод);
ПоказатьЗначение(, Картинка);
Результат:
Достаточно специфический код, использующийся для маркировки печатных плат и мед оборудования. Хорошего описания я не нашел, поэтому просто скажу, что по правилам заполнения он схож с CODE128, а вот на выводе выглядит, как многомерный штрихкод
Генератор.ТипКода = 5;
Генератор.ЗначениеКода = "{*INFOSTART FORUM*}";
Генератор.Ширина = 400;
Генератор.Высота = 130;
Штрихкод = Генератор.ПолучитьШтрихкод();
Картинка = Новый Картинка(Штрихкод);
ПоказатьЗначение(, Картинка);
Результат:
Описание стандарта в википедии. В компоненте есть нюанс, для PDF417 выделены специальные поля:
Генератор.КоличествоСтолбцов // Число
Генератор.КоличествоСтрок // Число
Генератор.Пропорции // Строка
Но какие бы значения я не ставил сюда, вывод никак не меняется. Еще в документации есть свойство:
Генератор.УровеньКоррекции // Строка
Но при попытке обратиться к этому свойству, вы получите исключение
Рабочий код:
Генератор.ТипКода = 6;
Генератор.ЗначениеКода = "This is a barcode that is used to read reports by special scanners and transfer data to the accounting system";
Генератор.Ширина = 400;
Генератор.Высота = 130;
Штрихкод = Генератор.ПолучитьШтрихкод();
Картинка = Новый Картинка(Штрихкод);
ПоказатьЗначение(, Картинка);
Результат:
Информации об этом штрихкоде немного, но есть сноска в ИТС. Имеет неограниченную длину, но умеет кодировать только цифры:
Генератор.ТипКода = 7;
Генератор.ЗначениеКода = "1234567890987654321";
Генератор.Ширина = 400;
Генератор.Высота = 130;
Штрихкод = Генератор.ПолучитьШтрихкод();
Картинка = Новый Картинка(Штрихкод);
ПоказатьЗначение(, Картинка);
Результат:
ФОРМАТ INTERLEAVED 2 OF 5
Похож на предыдущий формат, но имеет меньший размер, и должен состоять из четного количества символов. Например такой код:
Генератор.ТипКода = 8;
Генератор.ЗначениеКода = "1234567890";
Генератор.Ширина = 200;
Генератор.Высота = 65;
Штрихкод = Генератор.ПолучитьШтрихкод();
Картинка = Новый Картинка(Штрихкод);
ПоказатьЗначение(, Картинка);
Выдаст результат:
А такой код:
Генератор.ТипКода = 8;
Генератор.ЗначениеКода = "123456789";
Генератор.Ширина = 200;
Генератор.Высота = 65;
Штрихкод = Генератор.ПолучитьШтрихкод();
Картинка = Новый Картинка(Штрихкод);
ПоказатьЗначение(, Картинка);
Добавит еще одно значение в конец:
ФОРМАТ CODE-39 FULL ASCII
Тот же формат Code-39, но поддерживает больше символов (всю таблицу ASCII), например:
Генератор.ТипКода = 9;
Генератор.ЗначениеКода = "{*INFOSTART FORUM*}";;
Генератор.Ширина = 500;
Генератор.Высота = 160;
Штрихкод = Генератор.ПолучитьШтрихкод();
Картинка = Новый Картинка(Штрихкод);
ПоказатьЗначение(, Картинка);
Результат:
Тот же CODE-39, но заметно меньше:
Генератор.ТипКода = 10;
Генератор.ЗначениеКода = "{*INFOSTART FORUM*}";;
Генератор.Ширина = 300;
Генератор.Высота = 100;
Штрихкод = Генератор.ПолучитьШтрихкод();
Картинка = Новый Картинка(Штрихкод);
ПоказатьЗначение(, Картинка);
Результат:
Тот же INTERLEAVED 2 OF 5, но шифрует всегда только 14 символов (последний символ можно не указывать, тогда компонента рассчитает его сама). Обрамлен толстой черной рамкой:
Генератор.ТипКода = 11;
Генератор.ЗначениеКода = "12345678901123";
Генератор.Ширина = 300;
Генератор.Высота = 100;
Штрихкод = Генератор.ПолучитьШтрихкод();
Картинка = Новый Картинка(Штрихкод);
ПоказатьЗначение(, Картинка);
Результат:
Как и предыдущий формат, шифрует 14 символов:
Генератор.ТипКода = 12;
Генератор.ЗначениеКода = "12345678901123";
Генератор.Ширина = 200;
Генератор.Высота = 65;
Штрихкод = Генератор.ПолучитьШтрихкод();
Картинка = Новый Картинка(Штрихкод);
ПоказатьЗначение(, Картинка);
Результат:
Исходя из информации в интернете, используется в организации FedEx. Может шифровать числа и спец символы "–$:/.+", а таже один символ начала кода и один символ конца кода. Символы для начала и конца кода можно выбрать из: "A, B, C и D":
Генератор.ТипКода = 13;
Генератор.ЗначениеКода = "A123$456B";;
Генератор.Ширина = 200;
Генератор.Высота = 65;
Штрихкод = Генератор.ПолучитьШтрихкод();
Картинка = Новый Картинка(Штрихкод);
ПоказатьЗначение(, Картинка);
Результат:
Формат схож с EAN-13, но имеет дополнительный штрихкод на 2 символа. Но есть нюанс. Если в формат EAN-13 мы отправляем 12 символов, а контрольный символ (13-ое число) компонента рассчитывает самостоятельно, то тут нам надо рассчитать контрольное число самим и передать его в компоненту:
ДопСимволы = "12";
Строка = "123456789012";
СуммаЧетных = 0;
СуммаНечетных = 0;
Для Счет = 1 По 6 Цикл
СуммаЧетных = СуммаЧетных + Сред(Строка, 2 * Счет, 1);
СуммаНечетных = СуммаНечетных + Сред(Строка, 2 * Счет - 1, 1);
КонецЦикла;
РасчетКС = 10 - (СуммаЧетных * 3 + СуммаНечетных) % 10;
Строка = Строка + РасчетКС + ДопСимволы;
Генератор.ТипКода = 14;
Генератор.ЗначениеКода = Строка;
Генератор.Ширина = 300;
Генератор.Высота = 100;
Штрихкод = Генератор.ПолучитьШтрихкод();
Картинка = Новый Картинка(Штрихкод);
ПоказатьЗначение(, Картинка);
Результат:
То же самое, что EAN-13 ADDON 2, только добавить можно 5 символов:
ДопСимволы = "12345";
Строка = "123456789012";
СуммаЧетных = 0;
СуммаНечетных = 0;
Для Счет = 1 По 6 Цикл
СуммаЧетных = СуммаЧетных + Сред(Строка, 2 * Счет, 1);
СуммаНечетных = СуммаНечетных + Сред(Строка, 2 * Счет - 1, 1);
КонецЦикла;
РасчетКС = 10 - (СуммаЧетных * 3 + СуммаНечетных) % 10;
Строка = Строка + РасчетКС + ДопСимволы;
Генератор.ТипКода = 15;
Генератор.ЗначениеКода = Строка;
Генератор.Ширина = 300;
Генератор.Высота = 100;
Штрихкод = Генератор.ПолучитьШтрихкод();
Картинка = Новый Картинка(Штрихкод);
ПоказатьЗначение(, Картинка);
Результат:
Этот формат не нуждается в представлении, так или иначе все с ним сталкиваются в повседневной жизни. К сожалению, эта компонента не умеет зашифровывать картинки в QR, только текст. Но умеет вставлять логотип в центр. Для формирования QR есть дополнительные поля: УровеньКоррекцииQR, ЛоготипРазмерПроцентОтШК и ЛоготипКартинка:
Генератор.ТипКода = 16;
Генератор.ЗначениеКода = "//infostart.ru/1c/articles/1928785/";
Генератор.Ширина = 200;
Генератор.Высота = 200;
Генератор.УровеньКоррекцииQR = 3; // Возможные значения: 0, 1, 2, 3
Генератор.ЛоготипРазмерПроцентОтШК = 30; // размер логотипа в % от размера QR
АдресЛоготипа = Новый Картинка("C:\logo.png", Истина);
ДДЛоготипа = АдресЛоготипа.ПолучитьДвоичныеДанные();
ЛоготипДляQR = ПолучитьBase64СтрокуИзДвоичныхДанных(ДДЛоготипа);
Генератор.ЛоготипКартинка = ЛоготипДляQR; // Логотип - это base64 строка из png картинки
Штрихкод = Генератор.ПолучитьШтрихкод();
Картинка = Новый Картинка(Штрихкод);
ПоказатьЗначение(, Картинка);
Результат:
ФОРМАТ GS1 DATABAR EXTENDED STACKED
Многострочный формат штрихкода. Есть дополнительное поле GS1DatabarКоличествоСтрок:
Генератор.ТипКода = 17;
Генератор.ЗначениеКода = "*INFOSTART FORUM*";
Генератор.Ширина = 300;
Генератор.Высота = 100;
Генератор.GS1DatabarКоличествоСтрок = 2; // От значения будет меняться количество строк в штрихкоде
Штрихкод = Генератор.ПолучитьШтрихкод();
Картинка = Новый Картинка(Штрихкод);
ПоказатьЗначение(, Картинка);
Результат:
Еще один формат матричного кода. Компонента умеет шифровать в DataMatrix 6 видов и GS1 DataMatrix. Разные виды DataMatrix предназначены для шифрования разных наборов символов, более подробное описание есть в этой документации:
Генератор.ТипКода = 18; // Значения от 18 до 24
Генератор.ЗначениеКода = "*INFOSTART FORUM*";
Генератор.Ширина = 200;
Генератор.Высота = 200;
Штрихкод = Генератор.ПолучитьШтрихкод();
Картинка = Новый Картинка(Штрихкод);
ПоказатьЗначение(, Картинка);
Результат:
Будьте внимательны, если вы хотите повернуть штрихкод на 90 градусов, вам нужно будет поменять местами значения высоты и ширины:
Генератор.ТипКода = 3;
Генератор.ЗначениеКода = "*INFOSTART FORUM*";
Генератор.Ширина = 130;
Генератор.Высота = 400;
Генератор.УголПоворота = 90;
Штрихкод = Генератор.ПолучитьШтрихкод();
Картинка = Новый Картинка(Штрихкод);
ПоказатьЗначение(, Картинка);
Результат:
Статья не претендует на разбор всех видов штрихкодов, скорее на примеры формирования доступных видов штрихкодов с помощью компоненты, поставляемой с БСП.
Если статья понравилась, ставьте плюс, а также читайте другие мои статьи:
- Валидация JSON через XDTO (включая массивы)
- Отправка документа без сохранения в файл (ПотокВПамяти)