Использование штрихкодов в самописной конфе

1. ong1990 3 14.09.15 12:07 Сейчас в теме
Здравствуйте друзья. Есть необходимость использования штрихкодов в самописной конфе, нужно ли ставить какие-либо компоненты для этого??
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. sommid 14.09.15 12:26 Сейчас в теме
Смотря что вы имеете ввиду. Главное получить данные со сканера - для этого нужна компонента (смотрите пример работы с торговым оборудованием в любой типовой). Остальное сугубо 1С-ное программирование.
Хотя если устроит отдельное окно для ввода ш/к, то можно и без компонент. Сканер настроить так, чтобы просто выдавал в место курсора (без разницы это ворд, эксель или спец поле ввода в 1С), и отдельное поле + кнопка для поиска по ш/к.

У нас все сканеры подключены так, чтобы в 1С срабатывало событие - так можно только при использовании внешних компонент, "преобразующих" входной поток со сканера во внешнее событие в 1С
4. ong1990 3 14.09.15 12:28 Сейчас в теме
(2) sommid, да уж я неверно выразился(((... мне нужно сформировать сам штрихкод для этикетки и вывести на печать, что для этого нужно??
5. Boneman 298 14.09.15 12:30 Сейчас в теме
(4) ong1990, публикаций навалом
наример
http://infostart.ru/public/164035/
6. ong1990 3 14.09.15 12:33 Сейчас в теме
8. spacecraft 14.09.15 12:45 Сейчас в теме
(6) ong1990, БПО внедрить. Там и примеры есть. И все компоненты.
10. ong1990 3 14.09.15 12:58 Сейчас в теме
(8) spacecraft, Сейчас посмотрю
7. sommid 14.09.15 12:37 Сейчас в теме
(4) :) понятно
сформировать - это вы сами пишите процедурку
напечатать - в обычных формах чаще всего это использование 1С-овской компоненты для печати штрихкодов. Устанавливаете ее и в табличный документ можно будет вставить новый объект для печати штрихкода
- в управляемых формах другая компонента (например, она встроена в типовую УТ 11)
9. ong1990 3 14.09.15 12:51 Сейчас в теме
(7) sommid, а что за компонента??
11. sommid 14.09.15 13:00 Сейчас в теме
(9) для обычных форм вроде бы 1CBarcode называется. поиском воспользуйтесь
12. ong1990 3 14.09.15 13:05 Сейчас в теме
(11) sommid, у меня Управляемые Приложение
13. sommid 14.09.15 13:16 Сейчас в теме
(12) в УТ 11 эта компонента лежит как двоичные данные в общем макете с названием "КомпонентаПечатиШтрихкодов" и комментарием "Компонента использует библиотеку ImageMagick, разработанную ImageMagick Studio LLC. Лицензия http://www.imagemagick.org/script/license.php"
14. ong1990 3 14.09.15 14:14 Сейчас в теме
(13) sommid, выводится теперь рисунок ШК, цифры там совсем не те что мне нужно(не правильно кодируется)
3. PetroP 14.09.15 12:27 Сейчас в теме
Все зависит от определения "использование штрихкодов".
15. sommid 14.09.15 14:30 Сейчас в теме
а вы туда значение-то передали? в УТ 11 есть спец функция, которая по переданным данным возвращает картинку, которую уже и используем. если есть УТ-шка под рукой - гляньте как подставляется картинка ш/к в обработке Печать этикеток и ценников
16. ong1990 3 14.09.15 14:31 Сейчас в теме
(15) sommid, (15) sommid, есть УТ 10.3 пойдет?
17. ong1990 3 14.09.15 14:36 Сейчас в теме
(15) sommid, об этой функции идет речь??
Функция ПолучитьКартинкуШтрихкода(ВнешняяКомпонента, Ширина, Высота, Штрихкод, ТипКода = 0)
	
	// Зададим размер картинки
	ВнешняяКомпонента.Ширина = Окр(Ширина);
	ВнешняяКомпонента.Высота = Окр(Высота);
	
	// Разрешим компоненте самой определять тип кода
	ВнешняяКомпонента.АвтоТип = Ложь;
	ВнешняяКомпонента.ТипКода = ТипКода;
	
	// Или установим код EAN-13
	// ВнешняяКомпонента.ТипКода = 1;
	//
	// Тип смотрим в документации на внешнуюю компоненту
	
	// Если код содержит контрольный символ, обязательно указываем
	ВнешняяКомпонента.СодержитКС = СтрДлина(Штрихкод) = 13;
	
	// Если отображать контрольный символ не нужно
	// ВнешняяКомпонента.ВидимостьКС = Ложь;
	
	// Формируем картинку штрихкода
	ВнешняяКомпонента.ЗначениеКода = Штрихкод;
	
	// Если установленная нами ширина меньше минимально допустимой для этого штрихкода
	Если ВнешняяКомпонента.Ширина < ВнешняяКомпонента.МинимальнаяШиринаКода Тогда
		// Скорректируем ширину
		ВнешняяКомпонента.Ширина = ВнешняяКомпонента.МинимальнаяШиринаКода + 10;
	КонецЕсли;
	
	// Сформируем картинку
	ДвоичныеДанныеКартинки = ВнешняяКомпонента.ПолучитьШтрихкод();
	
	// Если картинка сформировалась
	Если ДвоичныеДанныеКартинки <> Неопределено Тогда
		// Формируем из двоичных данных
		Возврат Новый Картинка(ДвоичныеДанныеКартинки);
	КонецЕсли;
	
	Возврат Неопределено;
	
КонецФункции
Показать
18. spacecraft 14.09.15 14:55 Сейчас в теме
(17) ong1990, зачем выдирать из УТ11, если проще внедрить БПО. УТ11 тоже использует БПО.
19. ong1990 3 14.09.15 15:01 Сейчас в теме
(18) spacecraft, я пока что интересуюсь... даже если внедрю БПО оно просто так не заработает)))) так это оно?
20. spacecraft 14.09.15 15:02 Сейчас в теме
(19) ong1990, там есть демо документ. Там наглядно все.
21. spacecraft 14.09.15 15:07 Сейчас в теме
(19) ong1990,
&НаСервере
Процедура СформироватьНаСервере()
	
	Результат.Очистить();
	
	ВремОбъект = РеквизитФормыВЗначение("Объект");
	Макет = ВремОбъект.ПолучитьМакет("Макет");
	
	Область = Макет.ПолучитьОбласть("Строка|Колонка");
	Рисунок = Область.Рисунки.ШтрихКод;
	
	Эталон = Обработки.ПечатьШтрихкода.ПолучитьМакет("Эталон");
	КоличествоМиллиметровВПикселе = Эталон.Рисунки.Квадрат100Пикселей.Высота / 100;
	
	ПараметрыШтрихкода = Новый Структура;
	ПараметрыШтрихкода.Вставить("Ширина"          , Окр(Рисунок.Ширина / КоличествоМиллиметровВПикселе));
	ПараметрыШтрихкода.Вставить("Высота"          , Окр(Рисунок.Высота / КоличествоМиллиметровВПикселе));
	ПараметрыШтрихкода.Вставить("ТипКода"         , ТипШтрихкода);
	ПараметрыШтрихкода.Вставить("ОтображатьТекст" , Истина);
	ПараметрыШтрихкода.Вставить("РазмерШрифта"    , 12);
	ПараметрыШтрихкода.Вставить("УголПоворота"    , Число(УголПоворота));
	ПараметрыШтрихкода.Вставить("Штрихкод"        , Штрихкод);
	ПараметрыШтрихкода.Вставить("ПрозрачныйФон"   , ПрозрачныйФон);
	
	Картинка = МенеджерОборудованияВызовСервера.ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода);
	
	Рисунок.Картинка = Картинка;
	Результат.Вывести(Область);
	
КонецПроцедуры

Функция ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода) Экспорт
	
	ВнешняяКомпонента = МенеджерОборудованияСерверПовтИсп.ПодключитьВнешнююКомпонентуПечатиШтрихкода();
	
	Если ВнешняяКомпонента = Неопределено Тогда
		ВызватьИсключение НСтр("ru = 'Ошибка подключения внешней компоненты печати штрихкода!'");
	КонецЕсли;
	
	// Зададим размер картинки
	ВнешняяКомпонента.Ширина = Окр(ПараметрыШтрихкода.Ширина);
	ВнешняяКомпонента.Высота = Окр(ПараметрыШтрихкода.Высота);
	
	ВнешняяКомпонента.АвтоТип = Ложь;
	
	Если ПараметрыШтрихкода.ТипКода = 99 Тогда
		ТипШтрихкодаВрем = ОпределитьТипШтрихкода(ПараметрыШтрихкода.Штрихкод);
		Если ТипШтрихкодаВрем = "EAN8" Тогда
			ВнешняяКомпонента.ТипКода = 0;
		ИначеЕсли ТипШтрихкодаВрем = "EAN13" Тогда
			ВнешняяКомпонента.ТипКода = 1;
			// Если код содержит контрольный символ, обязательно указываем
			ВнешняяКомпонента.СодержитКС = СтрДлина(ПараметрыШтрихкода.Штрихкод) = 13;
		ИначеЕсли ТипШтрихкодаВрем = "EAN128" Тогда
			ВнешняяКомпонента.ТипКода = 2;
		ИначеЕсли ТипШтрихкодаВрем = "CODE39" Тогда
			ВнешняяКомпонента.ТипКода = 3;
		ИначеЕсли ТипШтрихкодаВрем = "CODE128" Тогда
			ВнешняяКомпонента.ТипКода = 4;
		ИначеЕсли ТипШтрихкодаВрем = "ITF14" Тогда
			ВнешняяКомпонента.ТипКода = 11;
		Иначе
			ВнешняяКомпонента.АвтоТип = Истина;
		КонецЕсли;
	Иначе
		ВнешняяКомпонента.АвтоТип = Ложь;
		ВнешняяКомпонента.ТипКода = ПараметрыШтрихкода.ТипКода;
	КонецЕсли;
	
	Если ПараметрыШтрихкода.Свойство("ПрозрачныйФон") Тогда
		ВнешняяКомпонента.ПрозрачныйФон = ПараметрыШтрихкода.ПрозрачныйФон;
	КонецЕсли;

	ВнешняяКомпонента.ОтображатьТекст = ПараметрыШтрихкода.ОтображатьТекст;
	
	// Формируем картинку штрихкода
	ВнешняяКомпонента.ЗначениеКода = ПараметрыШтрихкода.Штрихкод;
	
	Если ПараметрыШтрихкода.Свойство("УголПоворота") Тогда
		ВнешняяКомпонента.УголПоворота = ПараметрыШтрихкода.УголПоворота;
	Иначе
		ВнешняяКомпонента.УголПоворота = 0;
	КонецЕсли;
	
	// Если установленная нами ширина меньше минимально допустимой для этого штрихкода
	Если ВнешняяКомпонента.Ширина < ВнешняяКомпонента.МинимальнаяШиринаКода Тогда
		ВнешняяКомпонента.Ширина = ВнешняяКомпонента.МинимальнаяШиринаКода;
	КонецЕсли;
	
	// Если установленная нами высота меньше минимально допустимой для этого штрихкода
	Если ВнешняяКомпонента.Высота < ВнешняяКомпонента.МинимальнаяВысотаКода Тогда
		ВнешняяКомпонента.Высота = ВнешняяКомпонента.МинимальнаяВысотаКода;
	КонецЕсли;

	Если ПараметрыШтрихкода.Свойство("РазмерШрифта") И (ПараметрыШтрихкода.РазмерШрифта > 0) 
		И (ПараметрыШтрихкода.ОтображатьТекст) И (ВнешняяКомпонента.РазмерШрифта <> ПараметрыШтрихкода.РазмерШрифта) Тогда
		ВнешняяКомпонента.РазмерШрифта = ПараметрыШтрихкода.РазмерШрифта;
	КонецЕсли;
	
	// Сформируем картинку
	ДвоичныеДанныеКартинки = ВнешняяКомпонента.ПолучитьШтрихкод();
	
	// Если картинка сформировалась
	Если ДвоичныеДанныеКартинки <> Неопределено Тогда
		// Формируем из двоичных данных
		Возврат Новый Картинка(ДвоичныеДанныеКартинки);
	КонецЕсли;
	
	Возврат Неопределено;
	
КонецФункции

Показать

Проще некуда :)
22. ong1990 3 14.09.15 16:03 Сейчас в теме
(21) spacecraft, ну все равно цифры штрихкода не те что нужно выходят...
25. spacecraft 14.09.15 16:59 Сейчас в теме
(22) ong1990, что значит не те? Какой тип штрихкода и сами цифры?
26. ong1990 3 14.09.15 17:09 Сейчас в теме
(25) spacecraft, тип: EAN13 для формирования штрихкода используются цифры(13 шт) из РС.Штрихкоды
27. spacecraft 14.09.15 17:21 Сейчас в теме
(26) ong1990, сами коды приведите. Последний проверочный символ указываете? Попробуйте не указывать.
Если уж указываете, то и обязательно
ВнешняяКомпонента.СодержитКС = Истина;
23. sommid 14.09.15 16:16 Сейчас в теме
он меняется для разных ш/к, но всегда не соответствует переданному или выводится всегда одинаковый? пару примеров можете привести.. вроде хитростей особо нету, все нормально работает, у нас несколько типов ш/к используется и все ок
24. ong1990 3 14.09.15 16:31 Сейчас в теме
(23) sommid, выводятся те цифры, которые на картинке в макете
28. sommid 15.09.15 09:10 Сейчас в теме
(24) значит не заменяете картинку штрихкода. Код покажите как макет заполняете. И если есть получение рисунка по имени "Штрихкод", то точно ли в шаблоне этикетки рисунок со штрихкодом имеет имя "Штрихкод"?
29. ong1990 3 16.09.15 15:45 Сейчас в теме
(28) sommid,
ТАбличныйДокумент=Новый  ТабличныйДокумент;
	
	ПодключениеВыполнено = ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПечатиШтрихкодов", "КартинкаШтрихкода", ТипВнешнейКомпоненты.Native);
	
	// Создадим объект внешней компоненты.
	Если ПодключениеВыполнено Тогда
		ВнешняяКомпонента = Новый("AddIn.КартинкаШтрихкода.Barcode");
	Иначе
		Возврат Неопределено;
	КонецЕсли;
	
	Для каждого элемент из МассивОбъектов цикл
		
		Для каждого ном из элемент.Товары цикл	  	
			ТАбличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();  
			Макет=ПолучитьМакет("ПФ_MXL_ЭтикеткаТовара");
			
			
			
			ОбластьКонтрагент=МАкет.ПолучитьОбласть("Контрагент");
			ОбластьШапка=МАкет.ПолучитьОбласть("Шапка");
			ОбластьНоменклатура=Макет.ПолучитьОбласть("номенклатура");
			ОбластьАртикул=Макет.ПолучитьОбласть("Артикул");
			ОбластьПроизводитель=Макет.ПолучитьОбласть("Производитель");
			ОбластьКоличество=Макет.ПолучитьОбласть("Количество");
			ОбластьШтрихкод=Макет.ПолучитьОбласть("Штрихкод");
			
			
			
			ОбластьКонтрагент.Параметры.Контрагент=элемент.Контрагент;
			ОбластьНоменклатура.Параметры.номенклатура=ном.Номенклатура;
			ОбластьАртикул.Параметры.Артикул=ном.Номенклатура.Артикул;
			ОбластьПроизводитель.Параметры.Производитель=ном.Номенклатура.Марка;
			ОбластьКоличество.Параметры.Количество=Ном.Количество;
			
			Если ВнешняяКомпонента = Неопределено Тогда
				ВызватьИсключение НСтр("ru = 'Ошибка подключения внешней компоненты печати штрихкода!'");
			КонецЕсли;
			
			Номенклатура=ном.Номенклатура;
			Штрихкод =Число( ШтрихкодНоменклатуры(Номенклатура));
			
			Рисунок=ОбластьШтрихкод.Рисунки.штрихкодРисунок;
			
			ТипШтрихкода=1;			
			Эталон = Обработки.ПечатьШтрихкода.ПолучитьМакет("Эталон");
			КоличествоМиллиметровВПикселе = Эталон.Рисунки.Квадрат100Пикселей.Высота / 100;
			
			ПараметрыШтрихкода = Новый Структура;
			ПараметрыШтрихкода.Вставить("Ширина"          , Окр(Рисунок.Ширина / КоличествоМиллиметровВПикселе));
			ПараметрыШтрихкода.Вставить("Высота"          , Окр(Рисунок.Высота / КоличествоМиллиметровВПикселе));
			ПараметрыШтрихкода.Вставить("ТипКода"         , ТипШтрихкода);
			ПараметрыШтрихкода.Вставить("ОтображатьТекст" , Истина);
			ПараметрыШтрихкода.Вставить("РазмерШрифта"    , 12);
			ПараметрыШтрихкода.Вставить("Штрихкод"        , Штрихкод);
			
			Картинка = МенеджерОборудованияВызовСервера.ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода);
			
			Рисунок.Картинка = Картинка;
			
			
			
			
			ТАбличныйДокумент.Вывести(ОбластьШапка);
			ТАбличныйДокумент.Вывести(ОбластьКонтрагент);
			ТАбличныйДокумент.Вывести(ОбластьНоменклатура);
			ТАбличныйДокумент.Вывести(ОбластьАртикул);
			ТАбличныйДокумент.Вывести(ОбластьПроизводитель);
			ТАбличныйДокумент.Вывести(ОбластьКоличество);
			ТАбличныйДокумент.Вывести(ОбластьШтрихкод);
			
			
		КонецЦикла;
	КонецЦикла;
	Возврат ТАбличныйДокумент;
Показать
30. sommid 16.09.15 15:54 Сейчас в теме
(29) мне кажется ошибка в том, что вы преобразуете ш/к к числу. Обычно это строка, и в регистре ш/к тип - строка. Не факт, что в компоненте идет корректное преобразование к строке и 1С-очные триады могут попортить внешний вид
31. ong1990 3 16.09.15 16:04 Сейчас в теме
(30) sommid, нужно чтобы все было строкой?
33. sommid 16.09.15 16:08 Сейчас в теме
(31) я думаю да. в типовой достается ш/к из регистра и в том же виде и передается дальше в функцию ПолучитьКартинкуШтрихкода()
theelectric; +1 Ответить
32. ong1990 3 16.09.15 16:07 Сейчас в теме
(30) sommid, Если не привожу штрихкод к числу, то в этикетке пишет : INVALID BARCODE
34. ong1990 3 16.09.15 16:09 Сейчас в теме
(32) ong1990, Получилось))) контрольный символ убрал из штрихкода и все сработало!!!! действительно цифры штрихкода должны быть "строкой"!!!!
theelectric; +1 Ответить
36. sommid 16.09.15 16:15 Сейчас в теме
(34) ну вот и чудненько :)
у меня такой маневр не прокатит, т.к. используются разные типы ш/к
37. ong1990 3 16.09.15 16:20 Сейчас в теме
(36) sommid, т.е. если я собираюсь использовать разные штрихкоды, то лучше не передавать тип кода??
35. sommid 16.09.15 16:13 Сейчас в теме
значит надо разбираться со ш/к и передаваемыми настройками.

я у себя немножко правил эту функцию. В частности управление параметром СодержитКС.
я тип ш/к явно не передаю, т.е. использую автоопределение ш/к:

Функция ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода) Экспорт
...
Если Число(ПараметрыШтрихкода.ТипКода) = 99 Тогда	
		ТипШтрихкодаВрем = ОпределитьТипШтрихкода(ПараметрыШтрихкода.Штрихкод);
		Если ТипШтрихкодаВрем = "EAN8" Тогда
			ВнешняяКомпонента.ТипКода = 0;
		ИначеЕсли ТипШтрихкодаВрем = "EAN13" Тогда
			ВнешняяКомпонента.ТипКода = 1;
			// Если код содержит контрольный символ, обязательно указываем
			ВнешняяКомпонента.СодержитКС = СтрДлина(ПараметрыШтрихкода.Штрихкод) = 13;
                        ...
Показать
38. sommid 16.09.15 16:25 Сейчас в теме
для автоопределения ш/к используется ТипКода = 99
непомню было ли это изначально в шаблонах этикеток в УТ 11 или сам добавлял.. но что-то точно доделывал по печати этикеток и по печати ш/к в частности
39. ong1990 3 16.09.15 16:27 Сейчас в теме
(38) sommid, и в этом случае можно будет сформировать штрихкод хоть из артикула?(цифры с латинскими буквами используются)
40. sommid 16.09.15 16:32 Сейчас в теме
(39) ну да, для этого есть практически "безразличный" к значению тип ш/к Code128
41. ong1990 3 16.09.15 16:35 Сейчас в теме
(40) sommid, Да проверил, действительно работает))
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот