Способ кодирования каждого символа штрихкода по алгоритму EAN зависит не только от его значения, но и от положения. Таким образом, для вывода штрихкода шрифтом EanGnivc, недостаточно указать шрифт — штрихкод должен быть преобразован из текстового представления «2880000004097» в строку вида «%!88AA0A-aaeajh!». Что и делает представленная функция.
upd
Добавил поддержку формирования EAN-8
Функция СформироватьСтрокуEanGnivc(ШтрихкодСтрокойСимволов) Экспорт
Попытка
Тест = Число(ШтрихкодСтрокойСимволов);
Исключение
ВызватьИсключение «Штрихкод может содержать только цифры»;
КонецПопытки;
СимволыСпособовКодирования = «#$%&'()*+,»;
ЛевыйЗащитныйШаблон = «!»;
СреднийЗащитныйШаблон = «-«;
ПравыйЗащитныйШаблон = «!»;
СимволыШрифтаПоТипамКодов = Новый Соответствие;
СимволыШрифтаПоТипамКодов.Вставить(«L», «0123456789»);
СимволыШрифтаПоТипамКодов.Вставить(«G», «ABCDEFGHIJ»);
СимволыШрифтаПоТипамКодов.Вставить(«R», «abcdefghij»);
СпособыКодированияЛевойЧасти = Новый Массив;
СпособыКодированияЛевойЧасти.Добавить(«LLLLLL»);
СпособыКодированияЛевойЧасти.Добавить(«LLGLGG»);
СпособыКодированияЛевойЧасти.Добавить(«LLGGLG»);
СпособыКодированияЛевойЧасти.Добавить(«LLGGGL»);
СпособыКодированияЛевойЧасти.Добавить(«LGLLGG»);
СпособыКодированияЛевойЧасти.Добавить(«LGGLLG»);
СпособыКодированияЛевойЧасти.Добавить(«LGGGLL»);
СпособыКодированияЛевойЧасти.Добавить(«LGLGLG»);
СпособыКодированияЛевойЧасти.Добавить(«LGLGGL»);
СпособыКодированияЛевойЧасти.Добавить(«LGGLGL»);
СпособКодированияПравойЧасти = «RRRRRR»;
Если СтрДлина(ШтрихкодСтрокойСимволов) = 13 Тогда
КоличествоСимволовВГруппе = 6;
ИначеЕсли СтрДлина(ШтрихкодСтрокойСимволов) = 8 Тогда
КоличествоСимволовВГруппе = 4;
СимволыСпособовКодирования = «»;
ШтрихкодСтрокойСимволов = «0»+ШтрихкодСтрокойСимволов;
Иначе
ВызватьИсключение «Поддерживаются только штрихкоды длиной 13 и 8 символов»;
КонецЕсли;
ИндексСпособаКодирования = Число(Лев(ШтрихкодСтрокойСимволов,1));
ЛеваяЧастьКода = «»;
ПраваяЧастьКода = «»;
Для ИндексСимвола = 1 По КоличествоСимволовВГруппе Цикл
ЛеваяЧастьКода = ЛеваяЧастьКода
+ Сред(СимволыШрифтаПоТипамКодов[Сред(СпособыКодированияЛевойЧасти[ИндексСпособаКодирования],ИндексСимвола,1)]
,Число(Сред(ШтрихкодСтрокойСимволов,(ИндексСимвола+1),1))+1
,1);
ПраваяЧастьКода = ПраваяЧастьКода
+ Сред(СимволыШрифтаПоТипамКодов[Сред(СпособКодированияПравойЧасти,ИндексСимвола,1)]
,Число(Сред(ШтрихкодСтрокойСимволов,(ИндексСимвола+КоличествоСимволовВГруппе+1),1))+1
,1);
КонецЦикла;
Результат = «» + Сред(СимволыСпособовКодирования,ИндексСпособаКодирования+1,1)
+ ЛевыйЗащитныйШаблон
+ ЛеваяЧастьКода
+ СреднийЗащитныйШаблон
+ ПраваяЧастьКода
+ ПравыйЗащитныйШаблон;
Возврат Результат;
КонецФункции




Добавь для Ean8
Показать
(1) Спасибо, добавил. В принципе, предполагал что он примерно так и формируется, но проверять было лениво.
Спасибо, как раз искал это.
Что-то у меня не распознает сформированный штрихкод.
(5)Какой штрихкод пытаетесь сформировать? Проверю.
Переделал под 7.7. Все работает.
(7) swimdog,
Привет, поделись, пожалуйста, версией для 7ки 🙂
спасибо!
(7) проехали, уже не актуально 🙂
(7) swimdog, Привет. Есть возможность поделиться вариантом для 7,7?
Во второй строке должно быть LLGLGG
(12)Действительно. Сейчас поправлю, спасибо.
Спасибо, для 8.2 отлично пригодилось ))
Мой поклон!
Долго искал и долго мучал, а подскажи как генерировать код типа «2880000004097», есть ли у тебя генератор на основе guid например ?
В типовых, умеющих работать со штрихкодированием функции генерации штрихкодов есть встроенные. По сути, штрихкод EAN-13 это двенадцать любых цифр и в конце контрольный символ, который можно рассчитать, например в УТ10.3 методом КонтрольныйСимволEAN из общего модуля РаботаСТорговымОборудованием. Или посмотреть алгоритм в википедии и реализовать самому, благо он простой как топор.
Написал небольшой отчет, который выводит выбранную номенклатуру с всеми штрихкодами и их версий в EanGnivc (УТ 11.1).
Вдруг кому-то пригодится