Генерация штрихкодов с помощью БСП для программистов

09.01.21

Разработка - БСП (Библиотека стандартных подсистем)

В данной публикации рассмотрим базовый функционал библиотеки стандартных подсистем (БСП) формирования штрихкодов для вывода на печать.

 

Введение

Привет всем! В данной статье предлагаю небольшой обзор возможностей актуальной библиотеки стандартных подсистем (БСП) на предмет формирования большинства существующих штрихкодов. На момент написания статьи точка актуальности - это БСП версии 3.1.4.104.

Для чего это нужно и чем может быть полезная эта статья? Поскольку, у нас в России сейчас активно наращивает обороты маркировка продукции (сигареты, обуви, текстиля и т.п), функционал формирования штрихкодов был включен в основу всех типовых конфигураций - БСП. Думаю, что изучение данных типовых методов стандартных подсистем, значительно сократит время разработки ваших программ и не заставит вас ничего придумывать самостоятельно.

 

Основные возможности БСП инструментов разработчика "Генерация штрихкодов"

Базовой "входящей" серверной функцией-структурой для вывода штрих-кода является функция ПараметрыГенерацииШтрихкода() Экспорт

Выглядит она вот так:

 
 ПараметрыГенерацииШтрихКода() Экспорт

 

Функция ПараметрыГенерацииШтрихкода() Экспорт
	
	ПараметрыШтрихкода = Новый Структура;
	ПараметрыШтрихкода.Вставить("Ширина"            , 100); // Число
	ПараметрыШтрихкода.Вставить("Высота"            , 100); // Число
	ПараметрыШтрихкода.Вставить("ТипКода"           , 99);  // Число
	ПараметрыШтрихкода.Вставить("ОтображатьТекст"   , Истина); //Булево
	ПараметрыШтрихкода.Вставить("РазмерШрифта"      , 10); // Число
	ПараметрыШтрихкода.Вставить("УголПоворота"      , 0); // Число
	ПараметрыШтрихкода.Вставить("Штрихкод"          , ""); // Строка
        ПараметрыШтрихкода.Вставить("ПрозрачныйФон"     , Истина); // Булево
	ПараметрыШтрихкода.Вставить("УровеньКоррекцииQR", 1); // Число (0 - L, 1 - M, 2 - Q, 3 - H)
	ПараметрыШтрихкода.Вставить("Масштабировать"  , Ложь); // Булево
	ПараметрыШтрихкода.Вставить("СохранятьПропорции"  , Ложь); // Булево
	ПараметрыШтрихкода.Вставить("ВертикальноеВыравнивание" , 1); // Число (1 - верх, 2 - центр, 3 - низ)
	ПараметрыШтрихкода.Вставить("GS1DatabarКоличествоСтрок", 2); // Число
	ПараметрыШтрихкода.Вставить("ТипВходныхДанных", 0); // Число (0 - Строка, 1 - Base64)
	ПараметрыШтрихкода.Вставить("УбратьЛишнийФон" , Ложь);  // Булево
	ПараметрыШтрихкода.Вставить("ЛоготипКартинка"); // Строка (base64 png)
   	ПараметрыШтрихкода.Вставить("ЛоготипРазмерПроцентОтШК"); // Число
	
	Возврат ПараметрыШтрихкода;
	
КонецФункции

 

Здесь, я хочу обратить ваше внимание на параметр структуры "ТипКода". Поддерживаются следующие типы кодов:

 
 Возможные значения параметра "ТипКода"
// 99 -  Авто выбор
// 0 - EAN8
// 1 - EAN13
// 2 - EAN128
// 3 - Code39
// 4 - Code128
// 5 - Code16k
// 6 - PDF417
// 7 - Standart (Industrial) 2 of 5
// 8 - Interleaved 2 of 5
// 9 - Code39 Расширение
// 10 - Code93
// 11 - ITF14
// 12 - RSS14
// 14 - EAN13AddOn2
// 15 - EAN13AddOn5
// 16 - QR
// 17 - GS1DataBarExpandedStacked
// 18 - Datamatrix ASCII
// 19 - Datamatrix BASE256
// 20 - Datamatrix TEXT
// 21 - Datamatrix C40
// 22 - Datamatrix X12
// 23 - Datamatrix EDIFACT
// 24 - Datamatrix GS1ASCII:

 

Далее, все достаточно просто - мы отправляем структуру параметров в серверную функцию ПодготовитьИзображениеШтрихкода(ВнешняяКомпонента, ПараметрыШтрихкода) через экспортную функцию ИзображениеШтрихкода(ПараметрыШтрихкода) Экспорт

 
 ИзображениеШтрихкода(ПараметрыШтрихкода)
Функция ИзображениеШтрихкода(ПараметрыШтрихкода) Экспорт
	
	СистемнаяИнформация = Новый СистемнаяИнформация;
	ТипПлатформыКомпоненты = Строка(СистемнаяИнформация.ТипПлатформы);
	
	ВнешняяКомпонента = ГенерацияШтрихкодаСерверПовтИсп.ПодключитьКомпонентуГенерацииИзображенияШтрихкода(ТипПлатформыКомпоненты);
	
	Если ВнешняяКомпонента = Неопределено Тогда
		ТекстСообщения = НСтр("ru = 'Ошибка подключения внешней компоненты печати штрихкода.'");
		ЗаписьЖурналаРегистрации(НСтр("ru = 'Ошибка генерации штрихкода'", 
			ОбщегоНазначения.КодОсновногоЯзыка()),
			УровеньЖурналаРегистрации.Ошибка,,, 
			ТекстСообщения);
		ВызватьИсключение ТекстСообщения;
	КонецЕсли;
	
	Возврат ПодготовитьИзображениеШтрихкода(ВнешняяКомпонента, ПараметрыШтрихкода); 
	 
КонецФункции

 

выглядит это так:

 
 ПодготовитьИзображениеШтрихкода(ВнешняяКомонента, ПараметрыШтрихкода)
Функция ПодготовитьИзображениеШтрихкода(ВнешняяКомпонента, ПараметрыШтрихкода)
	
	// Результат 
	РезультатОперации = Новый Структура();
	РезультатОперации.Вставить("Результат", Ложь);
	РезультатОперации.Вставить("ДвоичныеДанные");
	РезультатОперации.Вставить("Картинка");
	
	// Зададим размер формируемой картинки.
	ШиринаШтрихкода = Окр(ПараметрыШтрихкода.Ширина);
	ВысотаШтрихкода = Окр(ПараметрыШтрихкода.Высота);
	Если ШиринаШтрихкода <= 0 Тогда
		ШиринаШтрихкода = 1
	КонецЕсли;
	Если ВысотаШтрихкода <= 0 Тогда
		ВысотаШтрихкода = 1
	КонецЕсли;
	ВнешняяКомпонента.Ширина = ШиринаШтрихкода;
	ВнешняяКомпонента.Высота = ВысотаШтрихкода;
	ВнешняяКомпонента.АвтоТип = Ложь;
	
	ШтрихкодВрем = Строка(ПараметрыШтрихкода.Штрихкод); // Преобразуем явно в строку.
	
	Если ПараметрыШтрихкода.ТипКода = 99 Тогда
		ВнешняяКомпонента.АвтоТип = Истина;
	Иначе
		ВнешняяКомпонента.АвтоТип = Ложь;
		ВнешняяКомпонента.ТипКода = ПараметрыШтрихкода.ТипКода;
	КонецЕсли;
	
	Если ПараметрыШтрихкода.Свойство("ПрозрачныйФон") Тогда
		ВнешняяКомпонента.ПрозрачныйФон = ПараметрыШтрихкода.ПрозрачныйФон;
	КонецЕсли;
	
	Если ПараметрыШтрихкода.Свойство("ТипВходныхДанных") Тогда
		ВнешняяКомпонента.ТипВходныхДанных = ПараметрыШтрихкода.ТипВходныхДанных;
	КонецЕсли;
	
	Если ПараметрыШтрихкода.Свойство("GS1DatabarКоличествоСтрок") Тогда
		ВнешняяКомпонента.GS1DatabarКоличествоСтрок = ПараметрыШтрихкода.GS1DatabarКоличествоСтрок;
	КонецЕсли;
	
	Если ПараметрыШтрихкода.Свойство("УбратьЛишнийФон") Тогда
		ВнешняяКомпонента.УбратьЛишнийФон = ПараметрыШтрихкода.УбратьЛишнийФон;
	КонецЕсли;
	
	ВнешняяКомпонента.ОтображатьТекст = ПараметрыШтрихкода.ОтображатьТекст;
	// Формируем картинку штрихкода.
	ВнешняяКомпонента.ЗначениеКода = ШтрихкодВрем;
	// Угол поворота штрихкода.
	ВнешняяКомпонента.УголПоворота = ?(ПараметрыШтрихкода.Свойство("УголПоворота"), ПараметрыШтрихкода.УголПоворота, 0);
	// Уровень коррекции QR кода (L=0, M=1, Q=2, H=3).
	ВнешняяКомпонента.УровеньКоррекцииQR = ?(ПараметрыШтрихкода.Свойство("УровеньКоррекцииQR"), ПараметрыШтрихкода.УровеньКоррекцииQR, 1);
	
	// Для обеспечения совместимости с предыдущими версиями БПО.
	Если Не ПараметрыШтрихкода.Свойство("Масштабировать")
		Или (ПараметрыШтрихкода.Свойство("Масштабировать") И ПараметрыШтрихкода.Масштабировать) Тогда
		
		Если Не ПараметрыШтрихкода.Свойство("СохранятьПропорции")
				Или (ПараметрыШтрихкода.Свойство("СохранятьПропорции") И Не ПараметрыШтрихкода.СохранятьПропорции) Тогда
			// Если установленная нами ширина меньше минимально допустимой для этого штрихкода.
			Если ВнешняяКомпонента.Ширина < ВнешняяКомпонента.МинимальнаяШиринаКода Тогда
				ВнешняяКомпонента.Ширина = ВнешняяКомпонента.МинимальнаяШиринаКода;
			КонецЕсли;
			// Если установленная нами высота меньше минимально допустимой для этого штрихкода.
			Если ВнешняяКомпонента.Высота < ВнешняяКомпонента.МинимальнаяВысотаКода Тогда
				ВнешняяКомпонента.Высота = ВнешняяКомпонента.МинимальнаяВысотаКода;
			КонецЕсли;
		ИначеЕсли ПараметрыШтрихкода.Свойство("СохранятьПропорции") И ПараметрыШтрихкода.СохранятьПропорции Тогда
			Пока ВнешняяКомпонента.Ширина < ВнешняяКомпонента.МинимальнаяШиринаКода 
				Или ВнешняяКомпонента.Высота < ВнешняяКомпонента.МинимальнаяВысотаКода Цикл
				// Если установленная нами ширина меньше минимально допустимой для этого штрихкода.
				Если ВнешняяКомпонента.Ширина < ВнешняяКомпонента.МинимальнаяШиринаКода Тогда
					ВнешняяКомпонента.Ширина = ВнешняяКомпонента.МинимальнаяШиринаКода;
					ВнешняяКомпонента.Высота = (ВнешняяКомпонента.МинимальнаяШиринаКода / Окр(ПараметрыШтрихкода.Ширина)) * Окр(ПараметрыШтрихкода.Высота);
				КонецЕсли;
				// Если установленная нами высота меньше минимально допустимой для этого штрихкода.
				Если ВнешняяКомпонента.Высота < ВнешняяКомпонента.МинимальнаяВысотаКода Тогда
					ВнешняяКомпонента.Высота = ВнешняяКомпонента.МинимальнаяВысотаКода;
					ВнешняяКомпонента.Ширина = (ВнешняяКомпонента.МинимальнаяВысотаКода / Окр(ПараметрыШтрихкода.Высота)) * Окр(ПараметрыШтрихкода.Ширина);
				КонецЕсли;
			КонецЦикла;
		КонецЕсли;
	КонецЕсли;
	
	// ВертикальноеВыравниваниеКода: 1 - по верхнему краю, 2 - по центру, 3 - по нижнему краю.
	Если ПараметрыШтрихкода.Свойство("ВертикальноеВыравнивание") И (ПараметрыШтрихкода.ВертикальноеВыравнивание > 0) Тогда
		ВнешняяКомпонента.ВертикальноеВыравниваниеКода = ПараметрыШтрихкода.ВертикальноеВыравнивание;
	КонецЕсли;
	
	Если ПараметрыШтрихкода.Свойство("РазмерШрифта") И (ПараметрыШтрихкода.РазмерШрифта > 0) 
		И (ПараметрыШтрихкода.ОтображатьТекст) И (ВнешняяКомпонента.РазмерШрифта <> ПараметрыШтрихкода.РазмерШрифта) Тогда
			ВнешняяКомпонента.РазмерШрифта = ПараметрыШтрихкода.РазмерШрифта;
	КонецЕсли;
	
	Если ПараметрыШтрихкода.Свойство("РазмерШрифта") И ПараметрыШтрихкода.РазмерШрифта > 0
		И ПараметрыШтрихкода.Свойство("МонохромныйШрифт") Тогда
		Если ПараметрыШтрихкода.МонохромныйШрифт Тогда
			ВнешняяКомпонента.МаксимальныйРазмерШрифтаДляПринтеровНизкогоРазрешения = ПараметрыШтрихкода.РазмерШрифта + 1;
		Иначе
			ВнешняяКомпонента.МаксимальныйРазмерШрифтаДляПринтеровНизкогоРазрешения = -1;
		КонецЕсли;
	КонецЕсли;
	
	Если ПараметрыШтрихкода.ТипКода = 16 Тогда // QR
		Если ПараметрыШтрихкода.Свойство("ЛоготипКартинка") И Не ПустаяСтрока(ПараметрыШтрихкода.ЛоготипКартинка) Тогда 
			ВнешняяКомпонента.ЛоготипКартинка = ПараметрыШтрихкода.ЛоготипКартинка;
		КонецЕсли;
		Если ПараметрыШтрихкода.Свойство("ЛоготипРазмерПроцентОтШК") И Не ПустаяСтрока(ПараметрыШтрихкода.ЛоготипРазмерПроцентОтШК) Тогда 
			ВнешняяКомпонента.ЛоготипРазмерПроцентОтШК = ПараметрыШтрихкода.ЛоготипРазмерПроцентОтШК;
		КонецЕсли;
	КонецЕсли;
		
	// Сформируем картинку
	ДвоичныеДанныеКартинки = ВнешняяКомпонента.ПолучитьШтрихкод();
	РезультатОперации.Результат = ВнешняяКомпонента.Результат = 0;
	// Если картинка сформировалась.
	Если ДвоичныеДанныеКартинки <> Неопределено Тогда
		РезультатОперации.ДвоичныеДанные = ДвоичныеДанныеКартинки;
		РезультатОперации.Картинка = Новый Картинка(ДвоичныеДанныеКартинки); // Формируем из двоичных данных.
	КонецЕсли;
	
	Возврат РезультатОперации;
	
КонецФункции

 

Данная функция возвращает структуру РезультатОперации следующего содержания

РезультатОперации = Новый Структура();
РезультатОперации.Вставить("Результат", Ложь); // сработало или нет
РезультатОперации.Вставить("ДвоичныеДанные");  // двоичные данные изображения штрихкода
РезультатОперации.Вставить("Картинка");        // картинка

Так же, обратите внимание, что Внешняя компонента - основной объект для формирования "картинки" штрихкода, встроенный в ОбщийМакет.КомпонентаПечатиШтрихкодов конфигурации БСП. Получить его можно вот так:

СистемнаяИнформация = Новый СистемнаяИнформация;
ТипПлатформыКомпоненты = Строка(СистемнаяИнформация.ТипПлатформы);
ВнешняяКомпонента = ГенерацияШтрихкодаСерверПовтИсп.ПодключитьКомпонентуГенерацииИзображенияШтрихкода(ТипПлатформыКомпоненты);

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

 

Рабочий пример использования функционала БСП для формирования штрихкода

Здесь я привожу набор процедур и функций для формирования штрихкода:

 
 Рабочий пример

 

&НаКлиенте
Процедура Команда1(Команда)
	
	СформироватьНаСервере();

КонецПроцедуры

&НаСервере
Процедура СформироватьНаСервере()
	
	Результат.Очистить();
	
	ВремОбъект = РеквизитФормыВЗначение("Объект");
	Макет = ВремОбъект.ПолучитьМакет("Макет");
	
	Область = Макет.ПолучитьОбласть("Строка|Колонка");
	Рисунок = Область.Рисунки.ШтрихКод;
	
	Эталон = ВремОбъект.ПолучитьМакет("МакетДляОпределенияКоэффициентовЕдиницИзмерения");
	
	КоличествоМиллиметровВПикселеВысота = Эталон.Рисунки.Квадрат100Пикселей.Высота / 100;
	КоличествоМиллиметровВПикселеШирина = Эталон.Рисунки.Квадрат100Пикселей.Ширина / 100;
	ШиринаШтрихкода = Окр(Рисунок.Ширина / КоличествоМиллиметровВПикселеШирина);
	ВысотаШтрихкода = Окр(Рисунок.Высота / КоличествоМиллиметровВПикселеВысота);
	
	ВходныеДанные = "(01)04600822901507(11)161109(30)2434";
	
	Картинка = ПолучитьШтрихкод(ШиринаШтрихкода, ВысотаШтрихкода, ВходныеДанные, 24);  // 24 - Datamatrix GS1ASCII
	
	Рисунок.Картинка = Картинка;
	Результат.Вывести(Область);
	
КонецПроцедуры

&НаСервере
Функция ПолучитьШтрихкод(ШиринаШтрихкода, ВысотаШтрихкода, ЗначШтрихкод, ЗначТипШтрихкода)
	
	ПараметрыШтрихкода = ГенерацияШтрихкода.ПараметрыГенерацииШтрихкода();
	ПараметрыШтрихкода.Ширина = ШиринаШтрихкода;
	ПараметрыШтрихкода.Высота = ВысотаШтрихкода;
	ПараметрыШтрихкода.ТипКода = ЗначТипШтрихкода;
	ПараметрыШтрихкода.Штрихкод = ЗначШтрихкод;
	ПараметрыШтрихкода.ПрозрачныйФон = Истина;
	ПараметрыШтрихкода.УровеньКоррекцииQR = 2;
	ПараметрыШтрихкода.ОтображатьТекст = Ложь;
	ПараметрыШтрихкода.Масштабировать = Истина;
	ПараметрыШтрихкода.СохранятьПропорции = Истина;
	ПараметрыШтрихкода.ВертикальноеВыравнивание  = 0; 
	ПараметрыШтрихкода.GS1DatabarКоличествоСтрок = 1;
	ПараметрыШтрихкода.ТипВходныхДанных = 0;
	
	РезультатШтрихкод = ГенерацияШтрихкода.ИзображениеШтрихкода(ПараметрыШтрихкода);

	Возврат РезультатШтрихкод.Картинка;
	
КонецФункции

 

Этого достаточно, чтобы получить сгенерированную картинку на основе входящей строки штрихкода.

 

Заключение и выводы

В данной статье мы рассмотрели основную выжимку настройки и применения методов генерации штрихкодов с системе БСП. Данные методы вы можете использовать в любой стандартной конфигурации 1с, основой которой является библиотека стандартных подсистем.

Данный материал не претендует на какие-то "сверхсложные знания"  - скорее всего, в текущих реалиях жизни - это методичка "в тренде" специально для вас - готовый инструмент для работы со штрихкодами. Как говориться - взял и применил сразу.

Для написания этой статьи я использовал Платформу 1с - 8.3.18.1208 и конфигурацию БСП 3.1.4.104.

Спасибо, что прочитали данную статью.

 

Другие мои материалы по БСП

Так же прошу ознакомиться с другими моими статьями по функционалу библиотеки стандартных подсистем и типовым конфигурациям:

Работаем с контактной информацией в конфигурациях на БСП

Полезные встроенные функции для работы с печатными формами и не только на УТ 11.4 и БП 3.0 (сравнение)

Типовые методы конфигурации "Зарплата и управление персоналом", которые пригодятся каждому ЗУП программисту и не только

Базовые вещи БСП, которые облегчат жизнь программисту 1С

Возможности работы со строками при помощи БСП, которые должен знать каждый программист

БСП генерация штрихкода типовые методы

См. также

Создать на основании - своя кнопка (БСП). Проблема двух подменю Создать на основании

БСП (Библиотека стандартных подсистем) Адаптация типовых решений Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

Понадобилось в подменю "Создать на основании" добавить свою команду, которая открывает обработку. В процессе доработок появилась проблема двух подменю "Создать на основании". В статье о том, как решились проблемы.

01.03.2024    1282    dimanich70    6    

13

Заполнение поля адреса в своей обработке [БСП]

Механизмы платформы 1С БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Небольшая шпаргалка по функциям БСП касательно адреса. Так скажем, еще один способ помимо https://infostart.ru/1c/articles/1060970/

12.02.2024    687    FilippovRI    0    

15

Расширяем возможности дополнительных обработок и настраиваем их отладку

БСП (Библиотека стандартных подсистем) Механизмы типовых конфигураций Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Уже не одна веб-страница исписана знаниями о дополнительных обработках, как создать, как подключить. Есть масса вариантов, как их можно отладить. Я разобрался в кишках работы библиотеки и покажу, как можно расширить возможности дополнительных отчетов, а также покажу удобный способ отладки.

07.02.2024    2351    YA_418728146    11    

40

1С:БСП Дополнительные реквизиты и сведения

БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Бесплатно (free)

В этой статье расскажем об архитектуре, использовании и особенностях реализации подсистемы «Свойства» из инструментария разработчика «1С:Библиотека стандартных подсистем» (1С: БСП).

19.01.2024    5163    PROSTO-1C    5    

45

Бесплатный митап 9 февраля «Библиотеки и фреймворки на 1С и всё, что с этим связано»

БСП (Библиотека стандартных подсистем) Мероприятия Бесплатно (free)

Митап посвящен вопросам создания, использования и поддержке переиспользуемого кода при разработке решений на платформе 1С:Предприятие 8.

15.01.2024    3798    0    Infostart    0    

20

Шаблоны новых объектов 1С для 1С:Бухгалтерии предприятия

Инструментарий разработчика БСП (Библиотека стандартных подсистем) Механизмы типовых конфигураций Платформа 1С v8.3 1С:Бухгалтерия 3.0 Бесплатно (free)

Используются для создания новых объектов в конфигурации, чтобы не забыть, что нужно сделать. Сделано на примере 1С:Бухгалтерия предприятия, в других конфигурациях могут быть другие, а могут быть и похожие объекты.

28.12.2023    4832    mrXoxot    11    

99
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Tiger77 69 09.01.21 15:16 Сейчас в теме
Почему нельзя все привести в одну функцию ?
Если нужно дописать - передаем в ДопПараметрах, если нужна оптимизация - оптимизируем создание внешней компоненты и передаем в доп.параметрах...



Функция ПолучитьШтрихкод(ШиринаШтрихкода, ВысотаШтрихкода, ЗначШтрихкод, ЗначТипШтрихкода, ДопПараметры)
	СистемнаяИнформация = Новый СистемнаяИнформация;
	ВнешняяКомпонента = ГенерацияШтрихкодаСерверПовтИсп.ПодключитьКомпонентуГенерацииИзображенияШтрихкода(Строка(СистемнаяИнформация.ТипПлатформы));
	
	Если ВнешняяКомпонента = Неопределено Тогда
		ТекстСообщения = НСтр("ru = 'Ошибка подключения внешней компоненты печати штрихкода.'");
		ЗаписьЖурналаРегистрации(ТекстСообщения, 
			ОбщегоНазначения.КодОсновногоЯзыка()),
			УровеньЖурналаРегистрации.Ошибка,,, 
			ТекстСообщения);
		ВызватьИсключение ТекстСообщения;
	КонецЕсли;

	ВнешняяКомпонента.Ширина = ШиринаШтрихкода;
	ВнешняяКомпонента.Высота = ВысотаШтрихкода;
	ВнешняяКомпонента.АвтоТип = Ложь;
	ВнешняяКомпонента.ТипКода = ЗначТипШтрихкода;
	ВнешняяКомпонента.ПрозрачныйФон = Истина;
	ВнешняяКомпонента.ТипВходныхДанных = 0;
	ВнешняяКомпонента.GS1DatabarКоличествоСтрок = 1;
	ВнешняяКомпонента.УровеньКоррекцииQR = 2;
	
	ВнешняяКомпонента.ОтображатьТекст = Ложь;
	ВнешняяКомпонента.ЗначениеКода = ЗначШтрихкод;
	
	// Если установленная нами ширина меньше минимально допустимой для этого штрихкода.
	Если ВнешняяКомпонента.Ширина < ВнешняяКомпонента.МинимальнаяШиринаКода Тогда
		ВнешняяКомпонента.Ширина = ВнешняяКомпонента.МинимальнаяШиринаКода;
	КонецЕсли;
	// Если установленная нами высота меньше минимально допустимой для этого штрихкода.
	Если ВнешняяКомпонента.Высота < ВнешняяКомпонента.МинимальнаяВысотаКода Тогда
		ВнешняяКомпонента.Высота = ВнешняяКомпонента.МинимальнаяВысотаКода;
	КонецЕсли;
	
	ДвоичныеДанныеКартинки = ВнешняяКомпонента.ПолучитьШтрихкод();
	Если ДвоичныеДанныеКартинки = Неопределено Тогда
		ТекстСообщения = НСтр("ru = 'Не удалось получить картинку штрихкода.'");
		ВызватьИсключение ТекстСообщения;
	КонецЕсли
	
	Возврат  Новый Картинка(ДвоичныеДанныеКартинки);
КонецФункции

Показать
2. quazare 3586 09.01.21 15:48 Сейчас в теме
(1) ну что я могу сказать - создание картинки штрихкода в рамках БСП идет по принципу моего примера, через неэкспортную функцию ПодготовитьИзображениеШтрихкода(ВнешняяКомпонента, ПараметрыШтрихкода)
3. RustIG 1351 09.01.21 20:48 Сейчас в теме
(0) 1) при получении кода допустим через цсв, как узнать тип кода?
2) при сканировании марки как определяется тип кода по марке?
столкнулся с тем, что тип кода 18 и 24 у марок визуально похожи ... сканер не различает марки этих типов
5. tsugancov 09.01.21 21:09 Сейчас в теме
(3) Например через специальные программы. А вообще есть верификатор, штука дорогая, но показывает все ошибки при формировании и печати штрихкодов. Да и многие программы из одной и тойже строки формируют разный датаматрикс ГС1. Странно все это.
4. tsugancov 09.01.21 21:07 Сейчас в теме
Зачем ПараметрыШтрихкода.УровеньКоррекцииQR = 2; что это означает? и Чем отличается от 1 или 3 ? Это точно актуально для типа 24???
6. anosin 29 09.01.21 22:51 Сейчас в теме
17 тип правильно генерирует? Почему не похож по рисунку со стандартным gs1?
7. naf2000 10.01.21 10:43 Сейчас в теме
(6) GS1DatabarКоличествоСтрок выставлено верно?
8. pavel06 2 10.01.21 18:02 Сейчас в теме
Что за входные данные у Вас написаны
ВходныеДанные = "(01)04600822901507(11)161109(30)2434"; ?

Код Честного знака обычно бывает другой.
22. RocKeR_13 1317 21.01.22 13:21 Сейчас в теме
(8) Это человекочитаемый вариант формата GS1. Код маркировки для ЧЗ - это частный случай. Здесь используются 3 идентификатора применения:
01 - GTIN
11 - Дата производства
30 - Количество грузовых мест

Подробнее, например, на Wiki
9. quazare 3586 10.01.21 18:53 Сейчас в теме
предлагаю всем у кого вопросы - скопировать рабочий пример статьи и поиграться с настройками и входными данными
10. RustIG 1351 11.01.21 12:39 Сейчас в теме
(9) на какой конфигурации тестировали?
БСП в разных конфигурациях отличается.
11. quazare 3586 11.01.21 12:47 Сейчас в теме
(10) на "голой" БСП версии 3.1.4.104
12. RustIG 1351 11.01.21 12:49 Сейчас в теме
13. Serg O. 224 13.01.21 08:09 Сейчас в теме
подключение внешней компоненты .... каждый раз ... на каждом штрихКоде?!
как тут написано

Функция ИзображениеШтрихкода(ПараметрыШтрихкода) Экспорт

СистемнаяИнформация = Новый СистемнаяИнформация;
ТипПлатформыКомпоненты = Строка(СистемнаяИнформация.ТипПлатформы);

ВнешняяКомпонента = ГенерацияШтрихкодаСерверПовтИсп.ПодключитьКомпонентуГенерацииИзображенияШтрихкода(ТипПлатформыКомпоненты);

.... это оооочень не оптимально.... замеры производительности не делали?

--------------------------------------------------------------------------------------------------------------------
например надо 1 000 ШК сделать... какой % отнимает это ещеШтрихКодное подключение?

лучше 1 раз подключить компоненту где нибудь ПриНачалеРаботыСистемы... или ещё где-то, так наверное лучше будет
user591389_aska_rabota; aspiid; fomix; +3 1 Ответить
16. Petrosyanc 7 08.06.21 16:16 Сейчас в теме
(13) Да там ужас как зашкаливает, даже если компоненту сразу подключишь.
У меня 2000 этикеток формировалось где-то час. Перешел на шрифт, формирует меньше 2 минут.
user1910167; +1 Ответить
17. serejkin 02.09.21 11:58 Сейчас в теме
(16) Коллега, а какой шрифт использовали?
18. Petrosyanc 7 23.09.21 13:04 Сейчас в теме
(17) Шрифт Code128
Но там надо писать еще функцию кодирования ШК. Все не просто так(
14. aspiid 8 25.01.21 10:17 Сейчас в теме
Пытался разобраться, как заставить компоненту сформировать эталонный ШК SSCC, точно такой же как в методичке. Мне не удалось.
Подскажите, может есть способ заставить компоненту выдавала такой ШК, как прописано в спецификациях GS1?
15. websamson 306 18.02.21 12:39 Сейчас в теме
Спасибо! Очень помогла статья!
19. ИНТЕГРА 25 04.10.21 11:15 Сейчас в теме
Статья дельная. Код рабочий и лаконичный.
С позволения автора прикладываю обработку, созданную по коду в статье.
Прикрепленные файлы:
интеграПечатьQR.epf
user1804494; edyardg; user591389_aska_rabota; criptid; freeek; quazare; +6 Ответить
20. vat-74 166 13.10.21 11:23 Сейчас в теме
Как можно картинку форматировать? Смысл в том, что штрих получается узким и сканер его не распознает. Если вручную ее расширить, то распознает. Не смог найти параметров, где можно растянуть картинку по ширине печатного поля.
21. igor-gtc 18.11.21 09:15 Сейчас в теме
Вдруг кому-то еще будет полезно: функция генерации картинки ШК в УТ 11.2 называется
МенеджерОборудованияВызовСервера.ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода).
Просто чтобы время не тратить на ее поиск.
user1804494; user591389_aska_rabota; freeek; quazare; +4 Ответить
26. nano1c 171 24.05.23 16:58 Сейчас в теме
(21)
ПолучитьКартинкуШтрихкода

В УТ10.5 он тоже есть, например.
23. DiegoLidabo 11 24.01.22 01:24 Сейчас в теме
Жаль поздно нашел эту статью... При написании своей обработки пользовался этим.
и этим .
В макете в поле комментарий есть ссылка: "Компонента использует библиотеку ImageMagick, разработанную ImageMagick Studio LLC. Лицензия http://www.imagemagick.org/script/license.php"
24. rudsergo 15.03.22 19:30 Сейчас в теме
Доброго дня всем. Кто нибудь ITF14 делал типовым способом? с EAN13 нет проблем, а ITF14 формирует но не сканируется.
25. user1882613 16.12.22 15:07 Сейчас в теме
Спасибо огромное. Очень доходчиво. Помогло!
Оставьте свое сообщение