+7 (495) 926-37-81ООО «Центр КТ» (495) 926-37-81
МОСКВА
Офис в Москве



1С 8 - Печать штрихкода

Пример печати штрихкодов в табличном документе 1С:Предприятие предназначен для самостоятельной модификации и для последующего применения в режиме управляемого приложения. Ниже приведены примеры для EAN-13, GS1-128, QR-кода и других распространенныхформатов штрихкодов.

Пожалуйста, обратите внимание - пример рассчитан на работу с ПО StrokeScribe версии 4.0.4 или старше.

Подготовка макета для вывода штрихкода

1. Создайте новый отчет в конструкторе 1С:Предприятия 8.2 и дайте ему имя ОтчетШтрихкод(это имя будет использовано в модуле ниже).

2. Для отчета ОтчетШтрихкод создайте макет табличного документа под именем МакетШтрихкод.

3. В макете создайте область произвольного размера с именем ОбластьШтрихкод.

4. Поместите в область картинку (меню Таблица->Рисунки->Картинка) с размерами будущего штрихкода. В свойствах картинки укажите имя - РисунокШтрихкод.

В результате всех действий должен получиться макет отчета, похожий на показанный на рисунке:


Модуль отчета


Добавьте приведенный ниже код в модуль отчета. Самостоятельно смодифицируйте пользовательский интерфейс отчета для вызова обработчика команды. Данная реализация модуля создает единичный QR-код и легко модифицируется под создание нескольких штрихкодов разных форматов внутри одной области.




&НаСервере
Функция ДокНаСервере()
	ТабДок = Новый ТабличныйДокумент;
	Макет = Отчеты.ОтчетШтрихкод.ПолучитьМакет("МакетШтрихкод");
	Область = Макет.ПолучитьОбласть("ОбластьШтрихкод");
	//Обратите внимание на совпадение имен отчета, макета и области 
        в модуле и в дизайне
	
	barcode = ПолучитьCOMОбъект("","STROKESCRIBE.StrokeScribeClass.1");
	//Вы не забыли установить StrokeScribe?
	
	ИмяФайла=ПолучитьИмяВременногоФайла("wmf");
	//Временный файл во временном каталоге с расширением .wmf
	
	barcode.Alphabet>=25;//QR CODE
	barcode.Text="123ABCD";//Данные для штрихкода
	
	код=barcode.SavePicture(ИмяФайла, 7, //7=WMF
	          100, //Ширина картинки штрихкода
	          100); //Высота штрихкода
	          
	Если код<>0 Тогда //Проверка результата генерации штрихкода
		Сообщить(строка(код) + " - " + barcode.ErrorDescription);
		Возврат Ложь;
	КонецЕсли;
	
	//Убедитесь в совпадении имени объекта рисунка здесь и в дизайне
	рис=Область.Рисунки.РисунокШтрихкод;
	
	рис.РазмерКартинки=РазмерКартинки.Пропорционально;
	рис.Линия = Новый Линия(ТипЛинииРисункаТабличногоДокумента.НетЛинии);
	//Вокруг штрихкода не должно быть рамки
	
	рис.Картинка = Новый Картинка(ИмяФайла);//Загрузка картинки со штрихкодом
	//Указывается то же имя файла, что и в SavePicture
	
	ТабДок.Вывести(Область);
	УдалитьФайлы(ИмяФайла);//Стереть временный файл с картинкой
	
	Возврат ТабДок;
КонецФункции

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
	ТабДок1=ДокНаСервере();
	Если ТабДок1<>Ложь Тогда
		ТабДок1.Показать();
	КонецЕсли;
КонецПроцедуры



Результат работы данного модуля - таблица с внедренной картинкой QR Code. Для выбора формата штрихкода, укажите другую константу в свойстве Alphabet. Для наиболее распространенных форматов штрихкодов ниже приведены специализированные примеры.


Замечания по модулю отчета:

Для успешного выполнения вызова ПолучитьCOMОбъект() не забудьте установить ПО StrokeScribe. При работе в режиме клиент-сервер, ПО StrokeScribe должно быть установлено на сервере. На клиентских ПК установка StrokeScribe не требуется.

Вызов ПолучитьИмяВременногоФайла() требуется для получения произвольного имени промежуточного файла, в котором будет сохранено изображение штрихкода перед передачей его в табличный документ. Файл должен существовать до вызова ТабДок.Вывести(Область). После этого временный файл может быть удален. Если планируется создание нескольких штрихкодов в одной области, то для каждого штрихкода должен быть создан свой временный файл. Так как SavePictureсохраняет штрихкод в формате WMF, то создаваемому файлу присваивается соответствующее расширение.

При желании, может быть использовано и фиксированное имя файла, например: ИмяФайла="c:\temp\barcode.wmf". Разумеется, что папка "c:\temp" должна существовать и быть доступной для создания файлов.

Присваивание barcode.Alphabet= задает формат штрихкода. Константы типов штрихкодов доступны в документации. Примеры создания наиболее распространенных штрихкодов приведены ниже.

Данные, присваиваемые barcode.Text, зависят от формата штрихкода. Например, EAN-13 не может отображать буквы и имеет фиксированную длину, а CODE 128 не работает с кириллицей. Если StrokeScribe не может обработать строку, то в свойство Error будет записано ненулевое значение. В модуле используется упрощенная проверка ошибок - результат всех операций вместе помещается в переменную код: код=barcode.SavePicture().

Вызов SavePicture() сохраняет изображение штрихкода во временном файле. Указание 7 во втором параметре вызова SavePicture() создаст векторное масштабируемое изображение в формате WMF. В коммерческой версии StrokeScribe доступны также форматы JPG, PNG, GIF, BMP24 и EMF. Создание растровых изображений штрихкода не рекомендуется из-за большого объема данных и плохой приспособленности к масштабированию, но может применяться в случае, если тонкий клиент не поддерживает WMF.

В конструкции Если код<>0 проверяется результат сохранения картинки штрихкода в файле. Код будет ненулевым и в том случае, если указан несуществующий тип штрихкода или в свойство Textпосланы данные, не отображаемые штрихкодом выбранного типа. Текстовое пояснение к коду ошибки доступно в свойстве ErrorDescription. Результат каждой операции с объектом штрихкода можно дополнительно контролировать проверкой значения свойства Error.

Для вывода множества штрихкодов достаточно организовать циклическое присваивание Text=, Alphabet= (опционально) и обращение к методу SavePicture. Каждое обращение к SavePicture должно происходить с отдельным именем файла для каждого штрихкода внутри одной области до вызова ТабДок.Вывести(). После вывода области файлы могут быть удалены.


Примеры создания штрихкодов в отчете 1С 8.2

Ниже даны примеры создания некоторых распространенных форматов штрихкодов. Так как некоторые из форматов имеют дополнительные настройки, рекомендуем обратиться к страницам, ориентированным на определенный формат штрихкода (см. меню сайта слева) и к документации по свойствам StrokeScribe.

Пожалуйста, обратите внимание - версия 1С:Предприятия 8.2.12.96, на которой производилось тестирование, некорректно центрирует изображения WMF, сдвигая их вправо. Поэтому не рекомендуется уменьшать чистые зоны штрихкодов (свойства HBorderSize и QuietZone2D) во избежание потери части линий штрихкода.


EAN-13


Для вывода EAN-13, установите свойство Alphabet=3. В свойство Text запишите цифровой 12-значный код товара (или 13-значный, если известна контрольная сумма). Вычисление и проверка контрольной суммы выполняется автоматически. При передаче 13-значного кода с неверной контрольной суммой, соответствующий код ошибки будет выставлен в свойстве Error.


Смодифицируйте исходный текст модуля, как показано ниже:



	barcode.Alphabet=3; //EAN13
	barcode.Text="123456789012";

	код=barcode.SavePicture(ИмяФайла, 7, 100, 60);
	

CODE 128


Штрихкод CODE 128 формируется при установке свойства Alphabet=5. В свойство Text можно записать любые символы ASCII, в том числе и управляющие коды. Обратите внимание - CODE 128 не поддерживает кириллицу. При записи недопустимых символов в свойство Text, в свойстве Error будет выставлен соответствующий код ошибки.


Смодифицируйте исходный текст модуля, как показано ниже:



barcode.Alphabet=5; //CODE128
barcode.Text="123ABC" + Символ(9) + "def";

код=barcode.SavePicture(ИмяФайла, 7, 100, 60);


Символ(9) - функция языка 1C - кодирует символ табуляции (ASCII TAB). Все нечитаемые символы отображаются, как * в подписи под штрихкодом. CODE 128 позволяет задать произвольный текст подписи, который будет выведен под штрихкодом вместо стандартного отображения закодированных данных:




	barcode.Alphabet=5;
	barcode.Text="123ABC" + Символ(9) + "def";
	barcode.TextBelow="моя подпись";
	

ITF-14


Формат штрихкода ITF-14 задается установкой свойства Alphabet=7. В свойство Text запишите цифровой 13-значный цифровой код (или 14-значный, если известна контрольная сумма). Вычисление и проверка контрольной суммы выполняется автоматически. При передаче 14-значного кода с неверной контрольной суммой, соответствующий код ошибки будет выставлен в свойстве Error.

Смодифицируйте исходный текст модуля, как показано ниже:



barcode.Alphabet=7; //ITF14
barcode.Text="1234567890123";
barcode.ITF14BearerBox=1;
	
код=barcode.SavePicture(ИмяФайла, 7, 100, 30);


Свойство ITF14BearerBox выводит ITF-14 с прямоугольной рамкой, обычно присутствующей на штампах для гофрированной тары. Для вывода штрихкода только с горизонтальными защитными линиями, укажите ITF14BearerBox = 0.


GS1-128 (ранее EAN-128)


Для печати штрихкода GS1-128, установите свойство Alphabet=17. В свойство Text запишите последовательность данных и идентификаторов AI. Пример: идентификатор партии = 1234; масса брутто = 12345.6Кг; годность до 17/05/2001. Результирующая строка: "10" + "1234" + GS + "3301" + "123456" + "17" + "010517". Для ограничения параметров переменной длины используется ASCII GS (десятичный код 29).

Смодифицируйте исходный текст модуля, как показано ниже:



barcode.Alphabet=17; //EAN128
GS = Символ(29);
barcode.Text="10" + "1234" + GS + "3301" + "123456" + "17" + "010517";
barcode.ITF14BearerBox=1;
	
код=barcode.SavePicture(ИмяФайла, 7, 100, 30);

Большие объемы данных в формате GS1 можно хранить в двумерных штрихкодах GS1 DATAMATRIX.


Data Matrix


Формат штрихкода Data Matrix задается установкой свойства Alphabet=8. Data Matrix позволяет кодировать любые данные, включая двоичные. Передача кириллицы в кодовой странице CP1251 не разрешается стандартом, но фактически используется в штрихкодах Почты России и некоторых банков. Создание Data Matrix, содержащих ECI=22 допустимо, если достоверно известно, что сканирующее оборудование и считывающее ПО поддерживают ECI. Для распознавания Data Matrix с кириллицей на мобильных телефонах, требуется кодирование в UTF-8.

Смодифицируйте исходный текст модуля, как показано ниже:


barcode.Alphabet=8; //DATAMATRIX
barcode.Text="123abcDEF";
	
код=barcode.SavePicture(ИмяФайла, 7, 100, 100);

Aztec


Штрихкод Aztec задается установкой свойства Alphabet=33. Aztec позволяет кодировать любые данные, включая двоичные. Кириллица в кодовой странице CP1251, по установившейся практике, передается в режиме кодирования двоичных данных. Стандарт требует указания идентификатора ECI=22 перед использованием кириллицы, но тем не менее, не все современное оборудование и ПО поддерживают ECI. Распознавание Aztec не поддерживается почти всеми мобильными телефонами, за исключением специализированных моделей для складского применения.

Для печати кода Aztec, смодифицируйте исходный текст модуля, как показано ниже:



barcode.Alphabet=33; //AZTEC
barcode.Text="123ABcd";
	
код=barcode.SavePicture(ИмяФайла, 7, 100, 100);

QR Code


QR Code генерируется при установке свойства Alphabet=25. Данный формат позволяет кодировать текстовые и двоичные данные. Кодирование кириллицы для распознавания на мобильных телефонах должно осуществляться в кодировке UTF-8. Применение идентификаторов ECI должно осуществляться только при уверенности, что считывающее оборудование и ПО поддерживают индикацию ECI. Для изменения уровня коррекции ошибок используйте свойство QrECL.

Приведенный здесь пример предназначен для создания QR-кода для мобильных приложений. Большинство складских и офисных применений в России (при распознавании специализированными сканерами) требуют прямой передачи текста в кодовой странице CP1251. Для этого установите UTF8=0. Установка QrECL приведена здесь в качестве примера и не является обязательной.



barcode.Alphabet=25; //QRCODE
barcode.Text="кириллица";
barcode.UTF8=1;
barcode.QrECL=2;
	
код=barcode.SavePicture(ИмяФайла, 7, 100, 100);
Нашли ошибку на сайте? Напишите о ней нам!
Наверх Обратный звонок